RE: Attemt to tackle in-scope BIND issue (ACTION-618 - part 1)

Thanks Andy,

Both options would have addressed my UNION use case and even if we'd go for Option 1, one could always 
add additional grouping to achieve the same, but I am totally fine to go with Option 2, and/or 
referring in item 12 to some respective text being added in Section 18.2.1. as you suggested.

If we go for that, I'd suggest the following syntax-use cases reflecting my understanding of Option 2:

Positive:
=========

BINDscope1
--------------------------------------
 PREFIX : <http://www.example.org>
 SELECT *
 WHERE {
    :s :p ?o .
    BIND((1+?o) AS ?o1)
    :s :q ?o1
 }
--------------------------------------

BINDscope2
--------------------------------------
 PREFIX : <http://www.example.org>
 SELECT *
 WHERE {
    :s :p ?o .
    :s :q ?o1
    { BIND((1+?o) AS ?o1) }
 }
--------------------------------------

BINDscope3
--------------------------------------
 PREFIX : <http://www.example.org>
 SELECT *
 WHERE {
    { 
    :s :p ?o .
    :s :q ?o1
    }
    { BIND((1+?o) AS ?o1) }
 }
--------------------------------------

BINDscope4
--------------------------------------
PREFIX : <http://www.example.org>
SELECT *
   {
    { BIND (1 AS ?Y) }
     UNION
    { :s :p ?Y }
  }
--------------------------------------

BINDscope5
--------------------------------------
PREFIX : <http://www.example.org>
SELECT *
   {
    { :s :p ?Y }
     UNION
    { BIND (1 AS ?Y) } 
   }
--------------------------------------

Negative:
=========

BINDscope6
--------------------------------------
 PREFIX : <http://www.example.org>
 SELECT *
 WHERE {
    :s :p ?o .
    :s :q ?o1 .
    BIND((1+?o) AS ?o1)
 }  
--------------------------------------

BINDscope7
--------------------------------------
 PREFIX : <http://www.example.org>
 SELECT *
 WHERE {
    {
    :s :p ?o .
    :s :q ?o1 .
    }
    BIND((1+?o) AS ?o1)
 }  
--------------------------------------

BINDscope8
--------------------------------------
PREFIX : <http://www.example.org>
SELECT *
   {
    {
    { :s :p ?Y }
     UNION
    { :s :p ?Z }
    }
    BIND (1 AS ?Y) 
   }
--------------------------------------

Haven't tested them yet with any implementation, but will do and add them on CSV as soon as I find time.

Cheers,
Axel



 
-- 
Dr. Axel Polleres 
Siemens AG Österreich 
Corporate Technology Central Eastern Europe Research & Technologies 
CT T CEE 
 
Tel.: +43 (0) 51707-36983 
Mobile: +43 (0) 664 88550859
Fax: +43 (0) 51707-56682 mailto:axel.polleres@siemens.com 
 

> -----Original Message-----
> From: Andy Seaborne [mailto:andy.seaborne@epimorphics.com] 
> Sent: Wednesday, 23 May 2012 11:13 AM
> To: public-rdf-dawg@w3.org
> Subject: Re: Attemt to tackle in-scope BIND issue (ACTION-618 
> - part 1)
> 
> 
> 
> 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.ht
> > ml
> >
> >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-s
> cope</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:41:24 UTC