W3C home > Mailing lists > Public > public-linked-json@w3.org > July 2014

Re: Converting RDF to JSON-LD : shared lists between graphs

From: David Booth <david@dbooth.org>
Date: Tue, 22 Jul 2014 12:30:46 -0400
Message-ID: <53CE91B6.3040500@dbooth.org>
To: public-linked-json@w3.org, public-rdf-comments <public-rdf-comments@w3.org>
This does not directly address your question, but . . .

Don't do that!  ;)   Seriously, I'm sure you have your reasons for 
wanting to do that, but it violates what I would call "Well Behaved RDF":
http://dbooth.org/2013/well-behaved-rdf/Booth-well-behaved-rdf.pdf

I would strongly advocate that if you want to create that kind of 
structure in RDF, you should use different predicates for it -- not the 
rdf:first and rdf:last predicates.  Then the problem goes away.

David

On 07/22/2014 05:21 AM, Andy Seaborne wrote:
> We are encountering an issue when converting RDF Datasets to JSON-LD.
>
> The problem is with blank nodes that are shared between graphs and lists.
>
> In TriG (yes, this is a synthetic reduced test case that captures a
> smaller example that might appear for real):
>
> ---------------------
> # Bnode references across graph and lists
> PREFIX :        <http://www.example.com/>
> PREFIX rdf:     <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
>
> :G {
>    # Written in short form it would be:
>    # :z :q ("cell-A" "cell-B")
>    # but we want to share the tail ("cell-B")
>
>    :z :q _:z0 .
>
>    _:z0   rdf:first "cell-A" .
>    _:z0   rdf:rest  _:z1 .
>
>    _:z1   rdf:first "cell-B" .
>    _:z1   rdf:rest rdf:nil .
> }
>
> :G1 {
>     # This references the tail  ("cell-B")
>     :x :p _:z1 .
> }
> ---------------------
>
> The triple in :G1 references into the list in :G.
>
> But as we understand the conversion algorithm, section 4 only considers
> each graph in turn and so does not see the cross graph sharing.
>
> Is this a correct reading of the spec text?
>
> Part 4 of the conversion algorithm has
> "For each name and graph object in graph map: "
>
> so 4.3.3.* walks back up the list in one graph only.
>
> (Conversion generated by jsonld-java : it does not matter if compaction
> is applied or not):
> ---------------
> {
>    "@graph" : [ {
>      "@graph" : [ {
>        "@id" : ":z",
>        ":q" : {
>          "@list" : [ "cell-A", "cell-B" ]
>        }
>      } ],
>      "@id" : ":G"
>    }, {
>      "@graph" : [ {
>        "@id" : ":x",
>        ":p" : {
>          "@id" : "_:b1"
>        }
>      } ],
>      "@id" : ":G1"
>    } ],
>    "@context" : {
>      "@base" : "http://www.example.com/",
>      "" : "http://www.example.com/",
>      "rdf" : "http://www.w3.org/1999/02/22-rdf-syntax-ns#"
>    }
> }
> ---------------
>
> There is no _:b1 in :G to refer to because the algorith generated @list
> and its implicit bNodes don't have labels.
> This is a different dataset with no shared bNode.
>
> If it is all the same graph (s/:G1/:G/), the RDF dataset structure is
> correctly serialized.
>
>          Andy
>
>
>
>
Received on Tuesday, 22 July 2014 16:31:22 UTC

This archive was generated by hypermail 2.4.0 : Friday, 17 January 2020 16:18:42 UTC