- From: Jeremy Carroll <jeremy@topquadrant.com>
- Date: Tue, 03 Nov 2009 14:51:40 -0800
- To: public-rdf-dawg-comments@w3.org
- CC: Holger Knublauch <holger@topquadrant.com>, Jeremy Carroll <jcarroll@topquadrant.com>
off list Steve and Lee encouraged me to be clearer about what I thought
LET as a keyword means.
Here is my attempt at specifying it (based on the WG Wiki page).
Please note that I am not responsible for TopQuadrant's SPARQL work;
Holger is our expert, and we tend to be dependent on Andy's implementation.
So, I am happy with any corrections from Andy.
It is not important how the word LET is spelt (i.e. as far as I know,
TopQuadrant has no particular attachment to 'LET' rather than 'BIND' for
example).
================================
In the FPWD of Query 1.1 we modify rule 43 for GroupGraphPattern as follows:
[43*] GroupGraphPattern ::= '{' GroupGraphPatternLetSub '}'
[A] GroupGraphPatternLetSub ::= ( GroupGraphPatternLetSub Let '.'? )?
GroupGraphPatternSub
[B] Let ::= 'LET' '(' Var ':=' Expression ( ',' Var ':=' Expression
)* ')'
Rules [43*] [A] and [B] are interpreted by rewriting queries involving
LET into queries
not involving LET.
We will use phi(x) to be the written query of x.
If x matches rule B, then:
phi(x) = 'SELECT' '(' * '(' Expression 'AS' Var ')' ( '(' Expression
'AS' Var ')' )* ')'
(with the variables matching respectively).
If x matches rule A then
phi(x) =
phi(Let)
'WHERE' '{'
phi(GroupGraphPatternLetSub)
'}'
GroupGraphPatternSub
The rest of the specification then applies.
==================
(Note this is a fine recipe for implementing as well).
Specifically, this prohibits forward references.
Being a macro expansion into a declarative form, this is declarative.
Jeremy
Received on Tuesday, 3 November 2009 22:52:13 UTC