- From: Andy Seaborne <andy.seaborne@epimorphics.com>
- Date: Thu, 30 Sep 2010 10:15:53 +0100
- To: Lee Feigenbaum <lee@thefigtrees.net>
- CC: SPARQL Working Group <public-rdf-dawg@w3.org>
On 29/09/10 03:45, Lee Feigenbaum wrote: > When last we talked, we decided we wanted to look at the semantics of a > proposed LET/BIND/Assignment clause before choosing the keyword and > proceeding with a decision. > > Here are a few test cases; I use KW (keyword) below where LET or BIND or > whatever might go. > > Data: > > :s :one 1 . > :s :two 2 . > > > 1. Simple > > SELECT ?sum ?one ?two { > ?s :one ?one ; :two ?two . > KW (?sum := ?one + ?two) > } > > Result: > > ?sum ?one ?two > ----------------------- > 3 1 2 > > > 2. Calculated value matches existing binding > > SELECT ?one { > ?s :one ?one . > KW (?one := 1) > } > > I believe there are two options here from what I've heard > > Option 1 ("join semantics") result: Maybe this is more "FILTER semantics" because of the similarity between: SELECT ?one { ?s :one ?one . KW (?one := 1) } SELECT ?one { ?s :one ?one . FILTER (?one = 1) } and the discussion of placement and eliminating rows as below. The handling of errors in expressions is more FILTER like as is the expressions form KW (?two := ?one+1) because ?one is in scope. > > ?one > ----- > 1 > > Option 2 ("simple semantics") result: > > Error, can't assign to / bind a variable that's elsewhere bindable in > the same scope > > > 3. Calculated value does not match existing binding > > SELECT ?one { > ?s :one ?one . > KW (?one := 5) > } > > I believe there are three options here from what I've heard > > Option 1 ("join semantics") result: > > ?one > ----- > > Option 2 ("simple semantics") result: > > Error, can't assign to / bind a variable that's elsewhere bindable in > the same scope > > Option 3 ("assignment semantics") result: > > ?one > ----- > 5The only way to tell is > > NOTE: I don't believe _anyone_ is advocating or implements assignment > semantics like this, but I wanted to include it for completeness. > > > 4. Logical order of assignment/binding > > SELECT ?sum { > KW (?sum := ?one + 1) . > :s :one ?one . > } > > Option 1 ("in place") result: > > ?sum > ---- > > (no result as ?one has no binding and so the expression is an error) > > Option 2 ("end of group") result: > > ?sum > ---- > 2 > > (assignments/binds are treated as with FILTERs, they occur logically > after a group's solution set has been evaluated) > > > I believe from the thread at > http://lists.w3.org/Archives/Public/public-rdf-dawg/2010JulSep/0116.html > that Mulgara implements what I'm calling "simple semantics". Anzo > (Glitter) implements "join semantics". ARQ implements "simple semantics" > as well. ARQ implements filter/join semantics, but "in place" not "end of group" Because of SELECT ?one { KW (?one := 1 ) :s :one ?one . } SELECT ?one { :s :one ?one . KW (?one := 1 ) } have the same results because of the assign-same-value rule. So the only way to tell the difference is: SELECT ?sum { KW (?two := ?one+1) :s :one ?one . } which causes an error evaluating (?two := ?one+1) for unbound-at-the-time ?one. I'm happy with changing to end-of-group semantics. It's much the same as processing filter (algebra) and placement is very similar to filter placement (optimization). http://lists.w3.org/Archives/Public/public-rdf-dawg/2010JulSep/0019.html > Here was the last time we discussed this at a TC: > > http://www.w3.org/2009/sparql/meeting/2010-07-06#LET__2f_Assignment > > Please discuss if you'd like, and next week I'd like to decide on > inclusion or not (strong lean towards include last time) and, if we > choose to include the feature, the semantics based on these options or > any other options people suggest and the keyword. > > Lee >
Received on Thursday, 30 September 2010 09:16:31 UTC