- From: Markus Lanthaler <markus.lanthaler@gmx.net>
- Date: Fri, 15 Jun 2012 01:42:48 +0200
- To: "'Ivan Herman'" <ivan@w3.org>
- Cc: "'Linked JSON'" <public-linked-json@w3.org>, "'RDF Comments'" <public-rdf-comments@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
Received on Thursday, 14 June 2012 23:43:17 UTC