- From: Andy Seaborne <andy.seaborne@epimorphics.com>
- Date: Tue, 10 Jul 2012 14:06:06 +0100
- To: public-rdf-dawg@w3.org
On 10/07/12 12:48, Polleres, Axel wrote: > Hi Andy, all > > (this is in completion of ACTION-641) > > I'm finally - sorry sorry for the delay again - looking into the discussion we had around BIND-Scope, and have the following comments/questions: > > -------------------------------------------------------------------- > > 1) This one is minor/editorial: > http://lists.w3.org/Archives/Public/public-rdf-dawg/2012AprJun/0160.html > doesn't seem to have a reply yet. (I had a minor final editorial comment to the table in 18.2.1 > There suggesting to leave out the "Group" keyword (as it's really not a keyword), or, if you want to leave "Group" at least shorten the describing text in accordance with the other rows > I think the {} needs explaining. I have made the word group not in code font. Elsewhere the text says "in-scope in P" so I think the current wording is best. > -------------------------------------------------------------------- > > 2) This one is a question for clarification only: > http://lists.w3.org/Archives/Public/public-rdf-dawg/2012AprJun/0159.html > You seemed to agree on Option 2 here, but your text now reads slightly different > than my suggested text. BIND applies to the TriplesBlock, not the whole of the preceding group I did not find anything else that made sense. More below. > > ---------------------------------- >> >> Option 2: --------- >> >> Disallow variable being in-scope in the semegroup, but only before >> the BIND clause appears: That could be addressed by changing item 12 >> as follows: >> >> * The variable assigned in a BIND clause must not be already<a >> href="http://www.w3.org/TR/sparql11-query/#variableScope">in-scope</a> >> >> > within the pattern in the same group before the BIND clause. That is, if > BIND (Exp as V) appears in a pattern >> { P1 BIND (Exp as V) P2 }, then v must not be<a >> href="http://www.w3.org/TR/sparql11-query/#variableScope">in-scope</a<http://www.w3.org/TR/sparql11-query/#variableScope">in-scope</a> >>> P1. >> >> >> -------------------------------------------------------------------- >> >> +1 to this option. This is the intention because of the use case above >> and the wording about "ends a BGP". but, on detailed work, it didn't work out. 1/ It's unnecessarily restrictive 2/ It's at odds with scoped bottom up evaluation (see next) 3/ join is not (syntactically) commutative ... >> >> ---------------------------------- > > You now write: > " > The variable assigned in a BIND clause must not be already > in-use within the immediately preceeding TriplesBlock within a > GroupGraphPattern. " > > I suppose the small difference between my wording suggestion and yours is the sema reason > as the one why you disagreed with test-cases bind-scope 7 and 8... If that is the reason (pls confirm), .. the tests involve subpattern (sub-group) nesting. The design makes scoping proper otherwise nested and flat queries behave differently (one is illegal) for no good reason whatsoever. > then I also better understand why you disagreed with those test cases --> fine by me! > > -------------------------------------------------------------------- > > 3) This one is IMO important: I have one last question about the current item 12 > > " > Expressions used in SELECT clauses must only use > in-scope variables. This only applies to expressions used on the left-hand side of AS. > " > > I am both unsure whether this is clearly defined, nnor whether we actually need to limit this? Wouldn't variables not in-scope within expressions just be unbound? E.g., what speaks against: > > SELECT (bound(?X) AS ?B) > WHERE {} > > Particularly, since it seems we could equally write > > SELECT ?X (bound(?X) AS ?B) > WHERE {} > > Where, according to the in-scope definition, ?X is in-scope. The text is merely pointing out that it SELECT expressions (not FILTER or BIND ones). Actually, it's unnecesary - removed and replaced by ... > > So, I have an alternative suggestion: > Didn't we rather want to limit the variables on the *right-hand-side* of 'AS' to be *not* already in-scope? That is, wouldn't we rather want to limit the usage of variables in SELECT clauses as follows: > Separate issue - worth pointing out though. Change made. > " > Within SELECT clauses of the form > SELECT ... (Expr AS v ) ... { P } > the variable v must neither be in-scope within the SELECT clause before '(Expr AS v )' > nor within P > " > > ? If you agree, I suggest to change item 12 accordingly. > [[ Variables introduced by <code>AS</code> in a <code>SELECT</code> clause must not already be <a href="#variableScope">in-scope</a>. ]] > -------------------------------------------------------------------- > > > That is, in summary, I understood > we want to prohibit > > SELECT ?X (Expr AS ?X) { ?P } > > or, respectively, > > SELECT ?Y (Expr AS ?X) { ?Y :p ?X } > > but we don't want to prohibit > > SELECT (Expr AS ?X) (?X AS ?Y) { P } > > Yes? Yes. Have you tried the validator? Andy > > Sorry again for the late feedback. > > Axel
Received on Tuesday, 10 July 2012 13:06:44 UTC