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

On 22 July 2014 17:30, David Booth <david@dbooth.org> wrote:
> 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

Your PDF says "It is worth pointing out that these difficulties were
foreseen (at least in principle) by the authors of the W3C
Architecture of the World Wide Web (AWWW),[12] as the use of blank
nodes clearly violates the web architectural good practice that
anything of importance should be given a URI. As the AWWW states: “A
resource should have an associated URI if another party might
reasonably want to . . . make or refute assertions about it . . . .” "

I suggest this is a mistaken reading of the holy text.

Even if we (by some vast and mystically-tinged effort) give URIs to
all entities known to humanity, ...  that's not the same thing as
always having-to, wanting-to or being-able-to provide a well-known URI
whenever those entities are mentioned in an RDF description.

It is entirely reasonable to want to represent fragments of partial
information, even if the lack of shared URIs is inconvenient.
Reference-by-description is as old as human communication, is
intrinsic to it, and isn't going away anytime soon. Andy's use case
seems entirely sensible to me.

Dan

> 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 17:34:39 UTC