Re: Issue-3 - Blank nodes substituted into BGPs act as variables

On 07/14/2016 06:19 AM, Andy Seaborne wrote:
> For issue 3, what the spec says and what users expect are different.
> [...]
> I'm not sure of the way to address this.
[...]
> 
> Any other ideas?
> 
>     Andy

Both expectations and behaviour here are consistent with joining a
single-element multiset of solution bindings to the unmodified BGP.  Given
this, my view is that EXISTS should be defined in this way.

That is, the pattern that is evaluated for this EXISTS should be

Join( { { (?s, _:s1) } }, BGP(?s :p 1) )

instead of

BGP(_:s1 :p 1)

I believe that this approach is suitable not just here but as the complete
definition of EXISTS.  The details of the approach involve injecting a special
syntactic token into the argument of EXISTS that is then replaced by the
multiset during Filter evaluation.  Variations of this approach are possible,
matching much of the behaviour of different SPARQL implementations of EXISTS.

This is decidedly not a trivial change to EXISTS, but I think that it is best
way to go.

peter

Received on Thursday, 14 July 2016 16:58:10 UTC