- From: Keith Alexander <k.j.w.alexander@gmail.com>
- Date: Thu, 10 Mar 2011 16:05:04 +0000
- 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