- From: Sandro Hawke <sandro@w3.org>
- Date: Tue, 03 Jan 2012 21:36:16 -0500
- To: Andy Seaborne <andy.seaborne@epimorphics.com>
- Cc: public-rdf-wg@w3.org
On Wed, 2011-12-21 at 18:57 +0000, Andy Seaborne wrote:
>
> On 21/12/11 18:01, Gavin Carothers wrote:
>
> Good issue.
>
> > On Wed, Dec 21, 2011 at 9:53 AM, RDF Working Group Issue Tracker
> > <sysbot+tracker@w3.org> wrote:
> >>
> >> RDF-ISSUE-82 (TriG repeated graph iris): How should repeated graph iri labels be handled in TriG [RDF Turtle]
> >>
> >> http://www.w3.org/2011/rdf-wg/track/issues/82
> >>
> >> Raised by: Gavin Carothers
> >> On product: RDF Turtle
> >>
> >> There are a number of ways of handling the case of multiple instances of a graph iri labelling a number graph statements.
> >>
> >> Sample TriG Document:
> >>
> >> @base<http://example.com/>
> >> <graph> {<s> <p> <o> . }
> >> <graph> {<s2> <p> <o2> . }
> >>
> >> 1) Disallowed (TriG input document behaviour)
> >>
> >> "In a TriG document a graph IRI must not be used to label more then one graph."
> >>
> >> Result: Parse Error
> >
> > This is my personal preference, and what the original TriG input
> > document said. A merge based syntax would be N-Quads which -has- to be
> > merge based. But this is not a strongly held opinion.
>
> 0 - Tolerable.
>
> >
> >>
> >> 2) Merge
> >>
> >> "In a TriG document graph statements with the same graph IRI should be merged to form a single RDF Graph."
> >>
> >> Result:
> >> @base<http://example.com/>
> >> <graph> {<s> <p> <o> .
> >> <s2> <p> <o2> . }
> >>
> >> Note: BlankNode labels in each graph statement would either result in shared blank nodes or independent blank nodes (??)
> >
> > Some implementations do this already.
>
> +1
>
> Yes :-) The Jena RIOT TriG parser does. But it will change to whatever
> the WG decides.
>
> This does not affect the fact that one IRI labels on graph - each {}
> block is a part of a graph.
>
> The graph slot is setting the graph-label-slot in any quads generated.
>
> This is my preferred design because:
>
> 1/ Tracking state over a parser run limits scalability
> A parser that did generate errors needs to track previous use of
> label IRIs. (e.g. the error checking ids in RDF/XML).
>
> 2/ Sometimes the data you want to write does not come in
> graph-sorted-clumps and converting to a graph-grouped form leads to an
> additional pass over the data before writing starts.
>
> 3/ (extreme of 2)
>
> <graph> { <s1> <p1> <o1> }
> <graph> { <s2> <p2> <o2> }
> <graph> { <s3> <p3> <o3> }
>
> is a cheap syntax that is both TriG and single line.
>
> 4/ It can be made to look neater: so if the default graph is the
> manifest, producing like this:
>
> <graph1> { <s1> <p1> <o1> }
> {
> <event1> :seenAs "2012-12-06" ;
> :observed <graph1> ;;
> .... .
> }
>
> <graph2> { <s2> <p2> <o2> }
> {
> <event2> :seenAs "2012-12-25" ;
> :observed <graph2> ;
> .... .
> }
>
> is convenient for placing the info near other stuff.
>
>
>
> >> Note: BlankNode labels in each graph statement would either result
> in shared blank nodes or independent blank nodes (??)
That's pretty compelling, but I'm still waiting to see how the use cases
can even be addressed by something like TriG, before I get into details
like this.
(The use case we heard about last time -- shared crawling -- works fine
with TriG. But what about others, like metadata about particular RDF
Graphs (not Graph Containers)?)
> My preference is blank node labels are scoped to the file because than
> one graph can be a subgraph of another.
Yes. I think we've got some clear use cases for this, including
explanations of reasoning, and dumping SPARQL datasets, which are
allowed to have bnodes shared between graphs... I think. (I'm told
they do that. I'm having trouble figuring out where in the spec it
would say.)
-- Sandro
>
> >
> >>
> >> 3) Replace
> >>
> >> "Upon encountering a graph statement with the same graph IRI of another graph statement, the most recently parsed RDF Graph should replace the earlier one in the RDF Dataset."
> >>
> >> Result:
> >> @base<http://example.com/>
> >> <graph> {<s2> <p> <o2> . }
> >
> > I am unaware of any implementations that do replacement this way with TriG.
>
> -1
>
> Seems "unhelpful" and "confusing" at best. File order matters.
>
> >>
> >> 4) Ignore
> >>
> >> "Graph statements with a repeated graph IRI are ignored. Only the first graph statement is added to the RDF Dataset."
> >>
> >> Result:
> >> @base<http://example.com/>
> >> <graph> {<s> <p> <o> . }
> >
> > While some implementations have done this from time to time, I'm
> > reasonably sure this was a BUG.
>
> -1
>
> Seems "unhelpful" at best.
>
>
> >
> >>
> >> 5) Document Decides
> >>
> >> Apply one of 1-4 on the basis of a directive "@policy". Default to Disallowed.
> >
> > Not really thrilled with the idea. But would allow Disallow and Merge
> > to co-exist. Default could go either way.
>
> -1
>
> Add complexity and cost (impl, testing; validation of data) insufficient
> utility.
>
> Andy
>
>
Received on Wednesday, 4 January 2012 02:36:28 UTC