Re: Criteria for a good JSON RDF serialisation

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.
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 08:29:37 UTC