W3C home > Mailing lists > Public > semantic-web@w3.org > March 2011

Re: Criteria for a good JSON RDF serialisation

From: Keith Alexander <k.j.w.alexander@gmail.com>
Date: Thu, 10 Mar 2011 16:05:04 +0000
Message-ID: <AANLkTi=6K94Rw-Up-pmKFP25JONp4BbqBE8PrEMd2_0z@mail.gmail.com>
To: Joshua Shinavier <josh@fortytwo.net>
Cc: Toby Inkster <tai@g5n.co.uk>, public-rdf-wg@w3.org, semantic-web@w3.org
On Thu, Mar 10, 2011 at 8:29 AM, Joshua Shinavier <josh@fortytwo.net> wrote:
> Hi Toby,
>
>
> On Thu, Mar 10, 2011 at 7:17 AM, Toby Inkster <tai@g5n.co.uk> wrote:
>> Here's a simple criterion...
>> [...]
>
>
> I like what you're trying to do, although I think the criterion as it
> stands is a bit *too* simple.  For one thing, it's not hard trade off
> compactness of the client code with that of the serialization format.

Would "merging multiple graphs" make sense as a good task to judge a
data structure for RDF by?

> E.g. these 14 lines of code should do what you asked:
>
> function get_name_new(d, homepage)
> {
>    var foaf = function(term)
>      { return 'http://xmlns.com/foaf/0.1/' + term; }
>    var s = d['ops'][homepage][foaf('homepage')];
>    for (var i in s) {
>        var o = d['spo'][s[i]][foaf('name')];
>        for (var j in o) {
>            if (o[j]['type'] == 'literal') {
>                return o[j]['value'];
>            }
>        }
>    }
> }
>
> ...provided that you're willing to put up with weird, verbose JSON like this:
>
> {
>    'spo' : {
>        'http://example.org/ns#toby' : {
>            'http://xmlns.com/foaf/0.1/homepage' : [{
>                'value' : 'http://tobyinkster.co.uk/',
>                'type' : 'uri'
>            }],
>            'http://xmlns.com/foaf/0.1/name' : [{
>                'value' : 'toby',
>                'type' : 'literal'
>            }]
>        }
>    },
>    'ops' : {
>        'http://tobyinkster.co.uk/' : {
>            'http://xmlns.com/foaf/0.1/homepage' : [
>                'http://example.org/ns#toby'
>            ]
>        },
>        'literal toby' : {
>            'http://xmlns.com/foaf/0.1/name' : [
>                'http://example.org/ns#toby'
>            ]
>        }
>    }
> };
>
>
> Best regards,
>
> Joshua
>
>
> --
> Joshua Shinavier
> Tetherless World Constellation PhD student
> http://tw.rpi.edu/wiki/Joshua_Shinavier
> http://fortytwo.net
>
>
>
>
>>
>> Let's assume we have a serialisation 's' and an object 'd' that has
>> been parsed using a standard JSON parser with no special RDF knowledge,
>> so it's just a structure of arrays and objects.
>>
>> Now, write a function get_name(o, homepage) which, given 'd' as its
>> input data and a foaf:homepage URI, returns the foaf:name for the owner
>> of the homepage. (The function is not required to perform any RDFS/OWL
>> inference.)
>>
>> i.e. it is asked to perform the equivalent of:
>>
>>        PREFIX foaf: <http://xmlns.com/foaf/0.1/>
>>        SELECT ?name
>>        WHERE {
>>                GRAPH ?d {
>>                        ?person foaf:homepage ?homepage
>>                                foaf:name ?name .
>>                }
>>                FILTER(is_iri(?homepage) && is_literal(?name))
>>        }
>>        LIMIT 1
>>
>> Use Javascript, pseudo-code or whatever.
>>
>> Here's my example for Talis' RDF/JSON:
>>
>>        function get_name (d, homepage)
>>        {
>>          var foaf = function (term)
>>            { return 'http://xmlns.com/foaf/0.1/' + term; }
>>          for (var s in d) {
>>            var matches_homepage = false;
>>            if (d[s][foaf('homepage')]) {
>>              for (var i in d[s][foaf('homepage')]) {
>>                o = d[s][foaf('homepage')][i];
>>                if (o['value']==homepage && o['type']=='uri') {
>>                  matches_homepage = true;
>>                }
>>              }
>>            }
>>            if (matches_homepage && d[s][foaf('name')]) {
>>              for (var i in d[s][foaf('name')]) {
>>                o = d[s][foaf('name')][i];
>>                if (o['type']=='literal') {
>>                  return o['value'];
>>                }
>>              }
>>            }
>>          }
>>        }
>>
>> 24 lines. I think that line count is a good measure of the quality of
>> the serialisation. (Low line counts being good.)
>>
>> The challenge for people proposing supposedly friendly JSON
>> serialisations with features like CURIEs, arbitrarily nested objects,
>> heuristics, etc is to beat that line count.
>>
>> --
>> Toby A Inkster
>> <mailto:mail@tobyinkster.co.uk>
>> <http://tobyinkster.co.uk>
>>
>>
>>
>
>
Received on Thursday, 10 March 2011 16:07:29 UTC

This archive was generated by hypermail 2.3.1 : Tuesday, 1 March 2016 07:42:26 UTC