- From: Peter F. Patel-Schneider <pfpschneider@gmail.com>
- Date: Fri, 23 Sep 2016 12:59:47 -0700
- To: Andy Seaborne <andy@apache.org>, public-sparql-exists@w3.org
Here is the complete proposal for the initial top-level-only binding injection definition of EXISTS, taken from a paper by David Martin and myself to be presented at ISWC in October. 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. It will work much like VALUES except that it will transfer solution mappings through the EXISTS instead of setting up a constant solution mapping. Initial is a new option for GraphPatternNotTriples in the SPARQL syntax but cannot show up in actual SPARQL code, just during the SPARQL translation process. Initial takes a single argument that is a token (which can just be an integer). 2. When collecting FILTER elements replace EXISTS{pattern} in the filter expression with exists(t,translate( {Initial(t) pattern'})) where t is a fresh token, and similarly for NOT EXISTS{pattern}. Note that the argument to translate, {Initial(t) pattern'} is SPARQL syntax. If pattern is a SubSelect then pattern' is {pattern} otherwise pattern' is just pattern. 3. Translate Initial(t) as itself. 4. Change the definition of the exists function to: Let mu be the current solution mapping for a filter, t a token, and P a graph pattern: The value exists(t,P) given D(G) is true iff eval(D(G),P') is a non-empty multiset of solution bindings, where P' is P with (its sole occurence of) Initial(t) replaced by mu. Pre-binding can be defined as performing this injection on the GroupGraphPattern of the top-level WhereClause of a query (or equivalent for certain query forms). peter
Received on Friday, 23 September 2016 20:00:18 UTC