- From: Andy Seaborne <andy.seaborne@epimorphics.com>
- Date: Wed, 23 May 2012 10:12:33 +0100
- To: public-rdf-dawg@w3.org
On 23/05/12 08:04, Polleres, Axel wrote: > Dear all, > > > I'd like to first tackle the issue around BIND, I'll write some more > suggestions on the definition of "in-scope" in a separate mail > > As per > http://lists.w3.org/Archives/Public/public-rdf-dawg/2012AprJun/0120.html > >I think that there was some problem about the definition of in-scope > with BIND. > > item 12. in > http://www.w3.org/2009/sparql/docs/query-1.1/rq25.xml#sparqlGrammar > currently says: > > " * The variable assigned in a BIND clause must not be already<a > href="http://www.w3.org/TR/sparql11-query/#variableScope">in-scope</a>. > > " > > which I think was a bit unclear, since the meaning of "already" in > scope wasn't clear. I have two alternative suggestions to go forward > here: > > -------------------------------------------------------------------- > > Option 1: --------- > > Disallow variable being in-scope for the whole group where the BIND > clause appears in: > > 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> > in the same group the BIND clause appears in if the BIND clause was > dropped. 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> > > in { P1 P2 } . > > -------------------------------------------------------------------- -1 One of the use cases is this example of doing a calculation and reusing it in a group: SELECT * WHERE { :s :p ?o . BIND((1+?o) AS ?o1) :s :q ?o1 } > > 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". > It seems actually, that both versions resolve the issue and it seems > that Option 1 and 2 are somewhat equivalent, since we also write that > "BIND ends the basic graph pattern", right? Not by your wording in option 1 because the definition is based on syntax: forbidding { P1 BIND (Exp as V) P2 } is across the whole group, not the BGP ended at BIND, which is option 2, right? I think we need to make the point in 18.2.1, and leave point 12 as mainly a link to the full text. Suggestion: add text to say that for: { P1 BIND (expr AS v) P2 } v must not be in-scope in P1. > (Although I couldn't > really find where that was actually reflected in the semantics > definition, or is this implicit in the algorithm in Section "18.2.2.6 > Translate Graph Patterns"?) > > Best, Axel Andy
Received on Wednesday, 23 May 2012 09:13:27 UTC