- From: Lee Feigenbaum <lee@thefigtrees.net>
- Date: Mon, 24 Jan 2011 11:19:12 -0500
- 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 UTC