W3C home > Mailing lists > Public > public-rdf-dawg@w3.org > January to March 2011

Re: BIND tests

From: Lee Feigenbaum <lee@thefigtrees.net>
Date: Mon, 24 Jan 2011 11:19:12 -0500
Message-ID: <4D3DA680.10001@thefigtrees.net>
To: Andy Seaborne <andy.seaborne@epimorphics.com>
CC: SPARQL Working Group <public-rdf-dawg@w3.org>
On 1/24/2011 11:05 AM, Andy Seaborne wrote:
>
>
> On 24/01/11 15:20, Lee Feigenbaum wrote:
>> On 1/24/2011 4:33 AM, Andy Seaborne wrote:
>>>
>>>
>>> On 24/01/11 03:22, Lee Feigenbaum wrote:
>>>> Hi everyone,
>>>>
>>>> This mail discharged my ACTION-371
>>>> (http://www.w3.org/2009/sparql/track/actions/371), to look at the bind
>>>> tests.
>>>>
>>>> I looked over the 7 tests in
>>>> http://www.w3.org/2009/sparql/docs/tests/data-sparql11/bind/ and
>>>> believed them to be accurate and reasonable coverage of the BIND
>>>> keyword.
>>>>
>>>> I added one new test, bind08, which I believe tests correctly the fact
>>>> that BIND occurs _after_ a group is ended, and hence a FILTER appearing
>>>> before BIND cannot act on the BINDed variables. This is the test:
>>>>
>>>> == query ==
>>>>
>>>> PREFIX : <http://example.org/>
>>>>
>>>> SELECT ?s ?p ?o ?z
>>>> {
>>>> ?s ?p ?o .
>>>> FILTER(?z = 3 )
>>>> BIND(?o+1 AS ?z)
>>>> }
>>>>
>>>> == results ==
>>>>
>>>> (no solutions)
>>>>
>>>> Can someone please check the truth of this test? I don't have a BIND
>>>> implementation to test this with at the moment. Also, if you feel that
>>>> this should not be the semantics of BIND as the WG agreed on a
>>>> couple of
>>>> months ago, please let us know.
>>>>
>>>> Once this test has been looked at, I'd like to propose that we approve
>>>> these 8 bind tests either this Tuesday or (more likely) one week from
>>>> Tuesday.
>>>>
>>>> Lee
>>>
>>> Unfortunately, we missed that the WG agreement is at odds with SPARQL
>>> 1.0 [1]
>>>
>>> In SPARQL 1.0, a filter applies to the whole group, where "group" means
>>> syntax units between the {}.
>>>
>>> Andy
>>>
>>> [1] http://www.w3.org/TR/rdf-sparql-query/#scopeFilters
>>>
>>> [[
>>> A constraint, expressed by the keyword FILTER, is a restriction on
>>> solutions over the whole group in which the filter appears.
>>> ]]
>>
>> Well, I think that it's less that it changes that part of SPARQL 1.0 and
>> more that it provides a new way to mark the end of the group. (BIND is
>> effectively the equivalent of "} {".) Still, it clearly makes for some
>> weirdness, which is what bind08 is showing.
>>
>> We discussed exactly bind08 at
>> http://www.w3.org/2009/sparql/meeting/2010-11-02#BIND_and_FILTER_order_execution,
>>
>> and there was consensus that this is the behavior that we want, so while
>> it is a strange new way to mark the end of the group (and start of a new
>> group), I don't think it's a decision we ought to revisit now...
>
> (meta: I'm not advocating a change because I think it's better - I'm
> bring this out because in working through the detailed design I came
> across this interaction with SPARQL 1.0.)

(understood - my meta is that i'm not advocating staying the same 
because i think it's better - i'm trying to understand what's different 
from the conversation in october/november)

> Group here is not a basic graph pattern. It is (from SPARQL 1.0), the
> elements between {}. [2] We did discuss whether it inside or outside a
> BGP, but I found another design constraint from SPARQL 1.0.
>
> The discussion I recall was all about BGPs, and the record seems to
> agree and show we were a bit mixed between BGP and syntax groups. We
> missed the further implication from SPARQL 1.0.

Right, looking back at the minutes and the mailing list, the discussion 
was pretty muddled.

> BIND can end a BGP, and that makes entailment work when it's just
> "outside the BGP". It can't end a group.

Why can't it? Again, I'm not saying I prefer that it does (I advocated 
the other semantics originally), but I don't understand why this isn't a 
plausible design choice. SPARQL 1.0 has one way to end a (logical) group 
- a right-curly brace. SPARQL 1.1 could have two ways (right-curly brace 
and BIND). Again, i'm not saying I prefer this, but I don't see why it's 
not an option.

> Test 5 and test 8 must give the same results - as must:
>
> SELECT ?s ?p ?o ?z
> {
> FILTER(?z = 3 )
> ?s ?p ?o .
> BIND(?o+1 AS ?z)
> }

If we did make this change, I'm trying to figure out what other examples 
/ use cases that people preferred change/break, but I can't seem to 
figure that out from the minutes and mailing list :(

Lee

>
> Andy
>
> [2] http://www.w3.org/TR/rdf-sparql-query/#GroupPatterns
>
>
>>
>> Lee
>>
>>
>
Received on Monday, 24 January 2011 16:19:49 GMT

This archive was generated by hypermail 2.3.1 : Tuesday, 26 March 2013 16:15:45 GMT