W3C home > Mailing lists > Public > public-rdf-dawg-comments@w3.org > November 2009

Re: Concerning LET or AS

From: Jeremy Carroll <jeremy@topquadrant.com>
Date: Tue, 03 Nov 2009 22:43:48 -0800
Message-ID: <4AF122A4.4080905@topquadrant.com>
To: public-rdf-dawg-comments@w3.org
CC: Holger Knublauch <holger@topquadrant.com>, Jeremy Carroll <jcarroll@topquadrant.com>
I made a couple of mistakes in my previous text.

Please allow me to withdraw that text and try again.

The errors were:
1) I missed the { } around the subselect
2) my modification to rule 43 lost the SubSelect expansion
3) Removed too many '(' ')' in rewrite rule

I made some modifications for clarity too.

Also as a very minor comment, rule [43] etc combined with the gramar 
rules from SPARQL 1.0 do not seem to expand to the example query 
immediately above.

I take the intent of rule 43 to be:

GroupGraphPattern  ::=  '{' ( SubSelect | GroupGraphPatternSub )+ '}'

(Without the +, the rule matches either a single subselect or a SPARQL 
1.0 body,
but not a combination of both.)

Here is modified text:

===============================

'LET' is specified as a macro-expansion, in terms of subselect queries.
In the FPWD of Query 1.1 we modify rule 43 for GroupGraphPattern as follows:

[43*] GroupGraphPattern ::= '{' GroupGraphPatternLetSub '}'

[A] GroupGraphPatternLetSub ::= ( GroupGraphPatternLetSub LetExpr '.'? 
)? GroupGraphPatternNoLetSub

[B] LetExpr ::= 'LET' '('  Var ':=' Expression  ( ','  Var ':=' 
Expression )* ')'

[C] GroupGraphPatternNoLetSub ::= ( SubSelect | GroupGraphPatternSub )+

Rules [A] and [B] are interpreted by rewriting queries involving LET
into queries not involving LET.
We will use phi(x) to be the rewritten query of x.
For clarity of exposition we will expand the two alternative readings of 
[A] as
[A.1] GroupGraphPatternLetSub ::= GroupGraphPatternNoLetSub
[A.2] GroupGraphPatternLetSub ::=  GroupGraphPatternLetSub LetExpr '.'? 
GroupGraphPatternNoLetSub
Expressions matching rule [A.1] are not rewritten.

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.2  with y matching GroupGraphPatternLetSub on the 
R.H.S.,
z matching LetExpr, and w matching  GroupGraphPatternNoLetSub then

phi(x) =
'{' phi(z)
   'WHERE' '{'
       phi(y)
   '}'
'}'
w

After this rewrite is applied to all instances matching rules [A] and 
[B], the rewritten query does not involve 'LET' and its meaning is as 
given in
the rest of the specification.
======================
Received on Wednesday, 4 November 2009 06:44:19 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Wednesday, 4 November 2009 06:44:20 GMT