Re: Blank node identifiers in FILTER clauses

Bijan Parsia wrote:
> On Jun 28, 2006, at 1:32 PM, Kendall Clark wrote:
> 
>> On Jun 28, 2006, at 5:15 AM, Jeen Broekstra wrote:
>>
>>> I can live with either of these and have a slight preference for the
>>> second. To be honest I could live without the blank nodes in queries
>>> altogether. They are confusing and annoying (this discussion is a case
>>> in point), and I find the supposed 'cut&paste' benefit unconvincing. But
>>> that station is passed I guess.
>>
>> I couldn't agree more. I wasn't convinced by it as a reason, offered 
>> by TimBL, for turtleizing our syntax, and I'm even less
>> convinced by it now. It's the biggest single wart on SPARQL and I wish 
>> we could chop it off w/out mercy.
>>
>> But I'm also not convinced that it's too late. If the WG decides to do 
>> it, and will put in the work to make it happen,
>> then it's "merely" a matter of doing the work.
> 
> I would like to separate the syntax issue from the capability issue. At 
> the moment, as I understand it, BNodes in the query represent 
> *undistinguished* variables, that is, variables that do not need a 
> binding to a constant and *cannot* report their bindings (thus don't 
> need to establish one).

I'm not sure I understand this (though I *think* I agree with it ;)). I 
have always understood that it currently works like this: blank node 
identifiers in graph patterns act exactly the same as variable names (in 
that the same bnode id in the same graph pattern is unified), only the 
scoping is different and we can not report the binding in the 
projection. It does need to establish a binding though, otherwise the 
graph pattern match fails.

Using "unidentified" blank nodes (the square brackets syntax) however is 
more akin to what you say: each blank node in the graph pattern is 
unique and unaddressable, we can't unify it with a blank node anywhere 
else in the graph, we just express that there should be _some_ value 
(but don't care what that value is).

Perhaps I'm missing a bit of background here: can you clarify what you 
mean with a 'distinguished' vs. a 'undistinguished' variable, exactly?

> This is an important capability (distinct from 
> projection) which currently there is no other way to (exactly) express 
> in SPARQL.

Yes, being able to use square bracket syntax as 'anonymous' variables is 
useful I think:

SELECT ?x ?y
WHERE
  { ?x foaf:name [] ;
       foaf:knows ?y .
  }

or:

SELECT ?person ?friendname
WHERE { ?person foaf:knows [
			    foaf:name ?friendname
			   ] .
       }

But the blank node identifiers (_:a) used as variable names (...but with 
different scoping) is just a pain IMHO. If you care about unifying the 
binding somewhere else in the pattern (or getting the result in the 
projection), give it a variable name. If you don't, use an anonymous 
variable (square brackets).

Cheers,

Jeen
-- 
Jeen Broekstra <jeen.broekstra@aduna-software.com>
Senior Software Developer
Aduna (http://www.aduna-software.com/)
Prinses Julianaplein 14-b, 3817 CS Amersfoort, The Netherlands
tel. +31-(0)33-4659987

Received on Thursday, 29 June 2006 09:55:05 UTC