how to fix pre-binding (via fixing EXISTS)

EXISTS in SPARQL can be fixed as follows:

1/ Add a new construct, Initial, to the SPARQL syntax and algebra.
Initial will be used to set up the initial multiset of solution mappings
inside an EXISTS.

2/ When collecting FILTER elements replace EXISTS{P} in the filter
expression with exists(Initial(t),translate( { Initial(t) P' } )) where t is
a fresh token and similarly for NOT EXISTS{P}.  If P is a SubSelect then P'
is { P } otherwise P' is just P.

3/ Translate Initial(t) as itself.

4/ Change the definition of the exists function to:

   Let u be the current solution mapping for a filter, t a token, and P a
   graph pattern: The value exists(Initial(t),P) given D(G) is true iff
   eval(D(G),P') is a non-empty sequence, where P' is P with Initial(t)
   replaced by { u }.


Pre-binding can be specified in a very similar fashion.  Pre-binding just adds
Initial(0) to the query's WHERE clause just as EXISTS does to its argument and
evaluates the query by replacing the Initial(0) by a solution
mapping mapping the pre-bound variables to the desired values.  Pre-binding
can even be generalized to use a multiset of solution mapppings.

Peter F. Patel-Schneider

Received on Thursday, 23 June 2016 20:34:51 UTC