- From: Peter F. Patel-Schneider <pfpschneider@gmail.com>
- Date: Wed, 21 Sep 2016 10:09:47 -0700
- To: Andy Seaborne <andy@apache.org>, public-sparql-exists@w3.org
On 09/21/2016 08:07 AM, Andy Seaborne wrote:
> Hi Peter,
[...]
>> Another way of proceeding, which I have advocated before, is to replace the
>> substitution definition for EXISTS with one based on setting up initial
>> solution sequences, i.e., the algebra equivalent of putting a generalized
>> VALUES at the front of the EXISTS argument, So
>> VALUES ?book { :book1 :book2 }
>> FILTER EXISTS {
>> VALUES ?book { :book2 } }
>> would evaluate the analogue of
>> VALUES ?book { :book1 :book2 }
>> VALUES ?book { :book2 }
>> for the EXISTS. Scoping would be augmented so that the variables would be
>> in-scope at the beginning of the
>> EXISTS argument.
>>
>> This does what I consider to be the right thing in all cases that a right
>> thing can be determined. It also doesn't need any special cases nor does it
>> need the extended definition for BOUND. It also doesn't directly depend on
>> scoping.
>
> I'm not clear what the proposal is - is it to put a VALUES block next to every
> BGP? That is quite similar to FILTER(sameTerm) at the each point of BGP
> evaluation.
My proposal is that EXISTS is defined as setting up an initial set of
bindings for its argument instead of substituting these bindings into its
argument. When evaluating a FILTER expression with bindings { (?v1,v1),
... (?vn,vn) } and an EXISTS P is encountered, the evaluation proceeds by
using these bindings as initial bindings for pattern P, roughly as if a
generalized VALUES construct (one allowing blank nodes) was at the beginning
of P, as in
VALUES ( ?v1 ... ?vn ) { ( v1 ... vn ) }
P
This all has to happen in the algebra, of course.
As far as I can see, this fixes all the known problems with EXISTS. It
changes the behaviour of EXISTS in a number of places where the current
definition does not produce an error of some sort but only in cases where
the current behaviour is problematic.
See
https://github.com/w3c/sparql-exists/wiki/Solution:-Solution-mapping-injection
for more information.
peter
Received on Wednesday, 21 September 2016 17:10:24 UTC