- From: Andy Seaborne <andy.seaborne@epimorphics.com>
- Date: Mon, 24 Jan 2011 16:05:20 +0000
- To: Lee Feigenbaum <lee@thefigtrees.net>
- CC: SPARQL Working Group <public-rdf-dawg@w3.org>
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.) 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. BIND can end a BGP, and that makes entailment work when it's just "outside the BGP". It can't end a group. 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) } Andy [2] http://www.w3.org/TR/rdf-sparql-query/#GroupPatterns > > Lee > >
Received on Monday, 24 January 2011 16:06:07 UTC