- From: Andy Seaborne <andy@apache.org>
- Date: Tue, 22 Jul 2014 10:21:25 +0100
- To: public-linked-json@w3.org, public-rdf-comments@w3.org
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 09:21:58 UTC