W3C home > Mailing lists > Public > public-rdf-wg@w3.org > October 2011

Re: Scope of blank nodes in TriG?

From: Steve Harris <steve.harris@garlik.com>
Date: Fri, 14 Oct 2011 12:09:15 +0100
Cc: William Waites <wwaites@tardis.ed.ac.uk>, public-rdf-wg@w3.org
Message-Id: <5FD898A2-D7A4-4842-9765-56F9046B601C@garlik.com>
To: Ian Davis <ian.davis@talis.com>
On 2011-10-14, at 11:57, Ian Davis wrote:

> On Fri, Oct 14, 2011 at 11:45 AM, William Waites <wwaites@tardis.ed.ac.uk> wrote:
> On Fri, 14 Oct 2011 10:45:34 +0100, Ian Davis <ian.davis@talis.com> said:
> 
>    iand> Example Document 3 in the TriG spec[1] shows the same blank
>    iand> node label being used in different graphs. My interpretation
>    iand> of the example is that those blank nodes are distinct,
>    iand> i.e. the scope of blank node labels is the graph not the
>    iand> TriG document. How do the main graph stores behave? Is it
>    iand> possible to put the same blank node into two different
>    iand> graphs? If so, this information would not be serializable in
>    iand> TriG if my interpretation is correct.
> 
> I agree with your interpretation. However 4store appears to have
> different behaviour here:
> 
>    @prefix ex: <http://example.org/>.
> 
>    ex:g1 {
>      _:s a ex:T
>    }
> 
>    ex:g2 {
>      _:s a ex:T
>    }
> 
> And this query:
> 
>    SELECT * WHERE {
>        { GRAPH <http://example.org/g1> { ?s ?p ?o } } UNION
>        { GRAPH <http://example.org/g2> { ?s ?p ?o } }
>    }
> 
> Shows the bnodes as having been merged when you run it here:
> 
>    http://gallows.inf.ed.ac.uk/data/test/
> 
> (note, I converted the TriG document to N-Quads to import it but I
> don't think that should matter)
> 
> 
> I think  it does matter. What was the N-Quads document that was thew result of the conversion.

Agreed, but also the Trig support in 4store is pretty recent, so probably didn't have the philosophical aspects deeply though out.

> For comparison I loaded the following quads into Jena/TDB
> 
> _:bnode <http://example.com/p> "foo" <http://example.com/g1> .
> _:bnode <http://example.com/p> "bar" <http://example.com/g2> .
> 
> And get merged results from the query "describe ?s where { graph ?g {?s ?p ?o}}"
> 
> [] <http://example.com/p> "foo" ; <http://example.com/p> "bar" .

I would agree with that behaviour for nquads, as there's no obvious syntactic scope, or other rationale for scoping bNodes in nquads.

I have no strong feelings on what Trig should do, but if bNodes are allowed to span graphs, but scoped to {  } in Trig, then stores would have to skolemise on export to preserve the relationship. That's not the end of the world.

- Steve

-- 
Steve Harris, CTO, Garlik Limited
1-3 Halford Road, Richmond, TW10 6AW, UK
+44 20 8439 8203  http://www.garlik.com/
Registered in England and Wales 535 7233 VAT # 849 0517 11
Registered office: Thames House, Portsmouth Road, Esher, Surrey, KT10 9AD
Received on Friday, 14 October 2011 11:09:45 GMT

This archive was generated by hypermail 2.3.1 : Tuesday, 26 March 2013 16:25:45 GMT