- From: Steve Harris <steve.harris@garlik.com>
- Date: Tue, 4 Sep 2012 17:19:52 +0100
- To: Lee Feigenbaum <lee@thefigtrees.net>
- Cc: Andy Seaborne <andy.seaborne@epimorphics.com>, SPARQL Working Group <public-rdf-dawg@w3.org>
I remember some discussion about an unfortunate side effect of the definition, but it could be a false memory! It might have related to FILTER. - Steve On 2012-08-24, at 14:58, Lee Feigenbaum wrote: > I believe Andy has said that it was changed only because it was unclear what LC2 actually meant (the descriptive text and the formal definition did not clearly lineup). > > Lee > > On 8/24/2012 9:00 AM, Steve Harris wrote: >> OK, but what was the strange behaviour of the LC1-2 design which caused us to change it in the first place? >> >> Sorry if I missed some discussion, but I imagine it wasn't done on a whim… >> >> - Steve >> >> On 24 Aug 2012, at 11:47, Andy Seaborne wrote: >> >>> This completes ACTION-673. >>> >>> The design has been reverted to that of 1LC and 2LC >>> >>> 1/ Informative text changed. >>> 2/ Variable Scope section has a paragraph specifically on BIND >>> 3/ Algebra translation translation reverts to previous text (and special on BIND removed) >>> >>> No execution tests are invalidated. >>> >>> Reverting the scope rules affects syntax tests: >>> syntax-BINDscope7.rq >>> syntax-BINDscope8.rq >>> which are now bad syntax. >>> >>> >>> A few notes about the BIND fix: >>> >>> This is illegal under both designs: >>> >>> SELECT * >>> { >>> ?s ?p ?o >>> BIND("foo" AS ?o) >>> } >>> >>> This is illegal on the reverted design: >>> >>> SELECT * { >>> ?s ?p ?o >>> OPTIONAL{?s ?p2 ?o2} >>> BIND(5 AS ?o2) >>> } >>> >>> >>> And note adding {} (which are not a subquery with project) does not make any difference: >>> >>> SELECT * >>> { >>> { ?s ?p ?o } >>> BIND("foo" AS ?o) # Bad >>> } >>> >>> because it is still a previous element of a group so the accumulated scope of that element shows up in the group BIND is in - i.e. it includes all of { ?s ?p ?o } >>> >>> which makes sense because we want BIND to apply a previous element like: >>> >>> SELECT * { >>> { ?s ?p ?o } UNION {?s ?p2 ?o2} >>> BIND(5 AS ?o) # Bad >>> } >>> >>> >>> Legal: masked >>> >>> SELECT * >>> { >>> { SELECT ?s { ?s ?p ?o } } >>> BIND("foo" AS ?o) # GOOD >>> } >>> >>> Legal: scope rules do not extend outwards of {} in which BIND is used. >>> >>> SELECT * >>> { >>> { ?s ?p ?o } >>> UNION >>> { BIND("foo" AS ?o) } # GOOD >>> } >>> > > -- Steve Harris, CTO Garlik, a part of Experian +44 7854 417 874 http://www.garlik.com/ Registered in England and Wales 653331 VAT # 887 1335 93 Registered office: Landmark House, Experian Way, Nottingham, Notts, NG80 1ZZ
Received on Tuesday, 4 September 2012 16:20:27 UTC