- From: Gregg Kellogg <gregg@greggkellogg.net>
- Date: Fri, 5 Jul 2013 10:49:58 -0600
- To: Markus Lanthaler <markus.lanthaler@gmx.net>
- Cc: <public-rdf-wg@w3.org>, <public-linked-json@w3.org>, "'Andy Seaborne'" <andy@apache.org>
Gregg Kellogg gregg@greggkellogg.net On Jul 5, 2013, at 4:02 AM, Markus Lanthaler <markus.lanthaler@gmx.net> wrote: > CC'ing public-linked-json as this discussion might result in a change to the > algorithms and may help the OpenAnnotation people. > > > On Thursday, July 04, 2013 10:21 PM, Andy Seaborne wrote: >> The set of all heads of well-formed lists can be found quite easily. >> >> All lists have a common tail (rdf:nil). Just walk back up the list >> checking nodes have exactly one rdf:first and one rdf:next triple. >> This generates the list head. > > You are of course right and the necessary changes to the algorithm should be > quite small. > > Currently a @list can never be the value of a rdf:first/rdf:rest. This kind > of ensures that only "complete" lists are transformed to @list and that we > don't produce lists of lists in JSON-LD. > > An example might clarify what I mean. Currently we would never produce > something like > > { > "@id": "http://example.com/", > "rdf:first": "A", > "rdf:rest": { "@list": [ "B", "C", "D" ] } > } > > all the list bnodes would be preserved: > > [ > { > "@id": "http://example.com/", > "rdf:first": "A", > "rdf:rest": { "@list": [ "B", "C", "D" ] } > }, > { > "@id": "_:b0", > "rdf:first": "B" > "rdf:rest": { "@id": "_:b1" } > }, > ... > ] > > > Arguably changing that would result in a nicer result. This might also be a > quite elegant solution for the OpenAnnotation people. I think we could > threat this change as an algorithmic bug fix (meaning, no need for another > LC). > > I've created ISSUE-277 for this: > https://github.com/json-ld/json-ld.org/issues/277 > > > Thoughts? (From my comment on the issue:) The @id of the first object can't be "http://example.com/", surely? To be a list, the subject must be a BNode. It also makes sense that @list can be the value of rdf:rest (and perhaps rdf:first, as well). The algorithm would find the list head at the first node having rdf:first/rest with only single well-formed values, as it does now; this should include those for which the subject is a non-well-formed value of an rdf:rest. An example @afs and I were working on offline is more like the following: Turtle: @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . @prefix : <http://example/> . :x :list _:a . _:a rdf:first 1 . _:a :additional "foo" . _:a rdf:rest _:b . _:b rdf:first 2 . _:b rdf:rest _:c . _:c rdf:first 3 . _:c rdf:rest rdf:nil . JSON-LD: { "@context": {...}, "@id": "_:x", "list": { "additional": "foo", "rdf:first": 1, "rdf:rest: {"@list": [2, 3]} } } Gregg > -- > Markus Lanthaler > @markuslanthaler > >
Received on Friday, 5 July 2013 16:50:34 UTC