- From: Andy Seaborne <andy@apache.org>
- Date: Thu, 29 Sep 2016 00:44:44 +0100
- To: public-sparql-exists@w3.org
** Intuition/Outline Ensure that the variables from the row being filtered are available, not just their values as in the spec with substitution. This is done by restricting the variable to the value of the row at the point where the variable is being bound. This is in a BGP. Use of AS ?x for ?x in the current row is not allowed : ?x is considered to be already set. ** Proposal Rewrite the pattern of the EXISTS filter; do this in a deep fashion, while respecting scoping rules. Let V = in-scope variables at the point of the FILTER EXISTS. For each BGP in the pattern: Build a VALUES with variables of V still in-scope at this BGP. This includes empty BGPs Scoping applies. ** Relationship to Issues * Problem 2: Substitution happens where definitions are only for variables Variables are retained so e.g. BOUND(?var) remains unchanged. The row being tested has already defined ?VAR so by the rule of no reassignment, using VALUE ?VAR at the BGP makes these illegal if a BGP used ?VAR : this is true at present. We can leave things as they are. ?VAR gets bound and presumably joined at some point (or it's out of scope). Separately, a rule to forbid these forms might be clearer to users and in the spirit of ?VAR being fixed. Then we can rewrite BGPs to include all vars. * Problem 3: Blank nodes substituted into BGPs act as variables No blank nodes are introduced into BGPs by substitution. Binding for ?o = _:b { ?s ?p ?o } => { ?s ?p ?o . VALUES ?o {_:b} } (in the algebra where _:b is not going to be remapped by surface syntax parsing) * Problem 4: Substitution can flip MINUS to its disjoint-domain case The domain of MINUS retains the same variables.
Received on Wednesday, 28 September 2016 23:45:13 UTC