- From: Markus Lanthaler <markus.lanthaler@gmx.net>
- Date: Fri, 2 Sep 2011 00:52:16 +0200
- To: "'Linked JSON'" <public-linked-json@w3.org>
In JSON-LD you could serialize this as: [ { "@subject": "http://hyperdata.org/seki/Hello", "http://purl.org/dc/elements/1.1/date": "2011-08-30T19:00Z" }, { "@subject": "http://hyperdata.org/seki/Hello", "http://xmlns.com/foaf/0.1/maker": { "@iri": "http://dannyayers.com/me#" } } ] > -----Original Message----- > From: public-linked-json-request@w3.org [mailto:public-linked-json- > request@w3.org] On Behalf Of Danny Ayers > Sent: Friday, September 02, 2011 12:22 AM > To: public-linked-json@w3.org > Cc: Ivan Herman > Subject: Practical J-Triples from SPARQL JSON results > > Ivan was talking earlier about the potential for a "J-Triples" syntax, > a JSON version of NTriples. > > There's a W3C Working Group Note on Serializing SPARQL Query Results > in JSON [1]. The serialization is a fairly direct translation of the > XML results format into JSON. It's very easy to derive a practical > J-Triples format from it. > > If we run the query: > > SELECT ?s ?p ?o WHERE { ?s ?p ?o } > > over an arbitrary graph, we get something like: > > { > "head": { > "vars": [ "s" , "p" , "o" ] > } , > "results": { > > "bindings": [ > { > "s": { "type": "uri" , "value": > "http://hyperdata.org/seki/Hello" } , > "p": { "type": "uri" , "value": > "http://purl.org/dc/elements/1.1/date" } , > "o": { "type": "literal" , "value": "2011-08-30T19:00Z" } > } , > { > "s": { "type": "uri" , "value": > "http://hyperdata.org/seki/Hello" } , > "p": { "type": "uri" , "value": > "http://xmlns.com/foaf/0.1/maker" } , > "o": { "type": "uri" , "value": "http://dannyayers.com/me#" } > } , > ... > > If we stick such a result set into a JSON/Javascript object - > > var sr = // results // > > it's possible to access the values through paths like - > > sr.results.bindings[0].o.value > > which in the above is "2011-08-30T19:00Z" > > but there's stuff here that's redundant, so let: > > var jt = sr.results.bindings; > > effectively making jt an array of triples, so now, e.g.: > > jt[0].o.value == "2011-08-30T19:00Z" > jt[0].o.type == "literal" > > There's still a bit of redundancy because : > > s.type can only be "uri" | "bnode" > p.type can only be "uri" > though o.type can be "uri" | "bnode" | "literal" > > but if you wanted to serialize without using SPARQL, you could just > leave the redundant pairs out. > > There's also xml:lang and xsd typed literals to consider, but again > those are effectively already spec'd out in SPARQL results, e.g. : > > "o": { "type": "literal" , "value": "2011-08-30T19:00Z", > "datatype": "http://www.w3.org/2001/XMLSchema#integer"} > > "o": { "type": "literal" , "value": "hello", "xml:lang":"en" } > > The only question for which there wasn't already an answer was whether > to use "s" or "subject" for the node labels. I've chosen the shorter > form here on the basis that it's fewer bits and anyone using a format > like this will recognize the s, p, o pattern. > > Thoughts? > > Cheers, > Danny. > > [1] http://www.w3.org/TR/rdf-sparql-json-res/ > > > -- > http://dannyayers.com -- Markus Lanthaler @markuslanthaler
Received on Thursday, 1 September 2011 22:52:58 UTC