W3C home > Mailing lists > Public > public-rdf-dawg@w3.org > October to December 2006

RE: a rant on blank nodes

From: Seaborne, Andy <andy.seaborne@hp.com>
Date: Tue, 14 Nov 2006 14:28:52 -0000
Message-ID: <86FE9B2B91ADD04095335314BE6906E897F263@sdcexc04.emea.cpqcorp.net>
To: "Fred Zemke" <fred.zemke@oracle.com>, <public-rdf-dawg@w3.org>

Fred Zemke wrote:
> I think that our presentation of SPARQL will be simplified
> if we recognize that a blank node identifier such as _:x in
> a SPARQL query is not a blank node, it is token of a query language.

Exactly.  _:x is merely the serialization.  Whenever it is parsed the
parse has to generate a fresh blank node for all occurences of _:x in a
BGP unless it knows it is the same as another blank node.  And there is
no way of knowing that at parsing time.

> For example, in most high level languages, I can write 12
> and it represents the number twelve.  However, I never believe that
> characters
> 12 are twelve.  So why then should I believe that the characters _:x
> are a blank node?  Such tokens may represent blank nodes, but
> they are not blank nodes.

12 has a universal nature. Writing variable "x" does not have global

int x = 5 ;

if ( true )
 { int x = 3 ; }

Are they the same "x"? No, they aren't.

> If then _:x in a query merely represents a blank node, then
> which blank node shall it represent?  As language designers,
> this is our option to specify.  I think we should say that it
> represents a blank node that is distinct from all blank nodes
> in the dataset.
> With this convention, I think we avoid all the circumlocutions
> about renaming blank nodes.  For example, let B be the mapping
> of blank node tokens to blank nodes and let S be a mapping
> of variables to terms.  Then the current definition of pattern
> using entailment simplifies to
> S is a solution of BGP in graph G
> iff
> G entails (G union S(B(BGP)))
> and there is no worry about colliding blank nodes because by
> B does not map to any blank node in G.

True - it's only when the parser "picks" a blank node might it clash.
If we assumed the parser mints a fresh one each time, it could never be
the same any blank node in the graph.

The language we have is a nod to "told blank nodes" where the blank node
in the query is exactly the same as one in the graph.

Several systems are using <_:abc> for such told blank nodes.

Which looks remarkable like a condition on the skolemization procedure
in option 3.  Or a condition on the bnode map b() in option 2.

> Fred

Received on Tuesday, 14 November 2006 14:54:52 UTC

This archive was generated by hypermail 2.3.1 : Wednesday, 7 January 2015 15:00:52 UTC