- From: Ivan Herman <ivan@w3.org>
- Date: Fri, 15 Jun 2012 10:48:12 +0200
- To: W3C RDF WG <public-rdf-wg@w3.org>
Just for archival in the RDF WG Ivan Begin forwarded message: > Resent-From: public-linked-json@w3.org > From: "Markus Lanthaler" <markus.lanthaler@gmx.net> > Subject: RE: comments/questions on JSON-LD spec (but _not_ for the CG->WG transition!) > Date: June 15, 2012 01:42:48 GMT+02:00 > To: "'Ivan Herman'" <ivan@w3.org> > Cc: "'Linked JSON'" <public-linked-json@w3.org>, "'RDF Comments'" <public-rdf-comments@w3.org> > Archived-At: <http://www.w3.org/mid/001301cd4a87$68ae5bb0$3a0b1310$@lanthaler@gmx.net> > List-Id: <public-linked-json.w3.org> > > Hi Ivan, > > let me try to explain it in different words (the copy goes to RDF comments > as I still don't have access to public-rdf, so please forward it so that the > full thread is there as well). > > >>> and it should definitely be considered to be at risk. Given that the >> document will be an RDF WG spec, this can only be included if it is >> compliance with the rest of RDF Concepts and Semantics. >> >> Yep. I think that minor entry should then be removed before going to >> FPWD. > > I agree, it's really confusing. I just removed it. > > >> Well, to be honest, I am actually lost (and that shows either that I am >> stupid, or that the section seems to be half baked, or both...) and I >> am not 100% sure how the @graph syntax works. Just to make it very >> clear, how would you encode a simple TriG thing: >> >> { >> <a> <b> <c> . >> } >> <URI> { >> <p> <q> <r> . >> } >> >> I see where I did make some mistake, but I also do not fully grasp, out >> of the description, what the 'value' of the "@graph" really is, and on >> what does "@id" applies in that case. > > The idea of the @graph keyword is, that the object containing it, describes > the graph. The other thing you need to know is that if an object doesn't > contain an explicit identifier, i.e., an @id property, JSON-LD will > automatically create a blank node for it when converting to RDF for example. > > So, your example above would be encoded as > > { > "@context": { > "b": { "@id": "b", "@type": "@id" }, > "q": { "@id": "q", "@type": "@id" } > }, > "@graph": [ > { > "@id": "a", > "b": "c" > } > { > "@id": "URI", > "@graph": > { > "@id": "p", > "q": "r" > } > } > ] > } > > The first @graph defines the default graph. You could eliminate it if it > would contain just one object, but in this example we need two. The second > object defines a named graph. @id is the name of the graph and the value of > @graph is the "content" of that graph; @graph does not name the graph! > > This doesn't mean though that graphs are nested. The current processing > model is to re-start processing with the new, disjoint graph. So, e.g. > > { > "@id": "graph1", > "creator": "Markus" > "@graph": { > "@id": "example" > "title": "This is an example" > "contains": > { > "@id": "graph2", > "@graph": > { > "@id": "something-else", > "title": "Something else" > } > } > } > } > > Would create two named graphs, graph1 and graph2. graph1 would contain the > triples > > <example> <title> "This is an example" > <example> <contains> <graph2> > > and graph2 would contain > > <something-else> <title> "Something else" > > Furthermore there would be the triple about graph1: > > <graph1> <creator> "Markus" > > >> Note that TriG, as it stands, does not allow nested graphs, ie, >> >> <URI> { >> <a> <b> <c> . >> <URI1> { >> <p> <q> <r> . >> } >> } >> >> is not accepted. > > Neither does JSON-LD at the moment. > > >>> Yes, if there are other properties, the object is treated as an >> entity with a blank node subject. >> >> And my questions above (and also my comments below) show the confusion. >> All the other '@' properties have a fairly similar analogy to property- >> value pairs, but this one does not... At least I have not grasped it >> yet. > > I think the thing here is that the value of graph is implicitly typed to @id > and that's why that string is there. I think it's clearer if you look at it > as > > @graph: { "@id": "http://www.markus-lanthaler.com/" } > > .. but you are right.. It's confusing and no triples would be generated in > this case. > >> Its bare bone JSON-LD format would be something like >> >> [ >> { >> "@id": <a>, >> "<x>" : {"@id":"<c>", "@type":"@id" }, >> } > > To be exact, it would be (without @type) > > "<x>" : { "@id":"<c>" }, > > >> My current bias is: >> >> - we solve the immediate and necessary use case of the top level >> @context by a dedicated and simple keyword, and we consider ourselves >> happy >> - we mark the generic @graph thingy as at risk; if TriG is well defined >> then we do something along the same line for JSON-LD. I am not sure it >> is worth creating two syntaxes that are wildly different in this >> respect. (I know. I am RDF biased:-) > > Hope my explanations above helped. I agree that the spec definitely has to > be improved in that regard, but do you still believe that @graph in its > current form should be dropped and replaced by a separate keyword for the > top-level @context issue!? I think a sentence like "If multiple objects are > the top-level explicitly defining the linked data graph allows to avoid the > need to repeat the context in each object" would be clear enough to explain > the use of @graph for that issue, isn't it? > > >> But _again_: those can be done either before or even after the FPWD, >> this is not a reason to stop the transition to the RDF WG! > > Good :-) > > > Thanks, > Markus > > > -- > Markus Lanthaler > @markuslanthaler > > ---- Ivan Herman, W3C Semantic Web Activity Lead Home: http://www.w3.org/People/Ivan/ mobile: +31-641044153 FOAF: http://www.ivan-herman.net/foaf.rdf
Received on Friday, 15 June 2012 08:48:39 UTC