[Bug 2331] FLWORExpr and QuantifiedExpr symmetry.

http://www.w3.org/Bugs/Public/show_bug.cgi?id=2331

           Summary: FLWORExpr and QuantifiedExpr symmetry.
           Product: XPath / XQuery / XSLT
           Version: Last Call drafts
          Platform: PC
        OS/Version: Windows XP
            Status: NEW
          Severity: normal
          Priority: P2
         Component: XQuery
        AssignedTo: chamberl@almaden.ibm.com
        ReportedBy: dholmes@tibco.com
         QAContact: public-qt-comments@w3.org


In studying FLWOR and Quantified expressions together, I noted some 
differences that struck me as rather odd and indicated that the Quantified 
expression might be incomplete.
1. FLOWRExpr supports assignment of a full sequence to a variable whereas 
QuantifiedExpr does not. More precisely, FLWORExpr supports both "in" and ":=" 
clauses whereas QuantifiedExpr only supports "in".
2. FLOWRExpr supports positional variables for its "in" clause whereas 
QuantifiedExpr does not.

In addition, I had also wondered whether the use of both "for" and "in" 
together, and "let and "::=" together was somewhat redundant. The grammar 
requires me to prefix a "for" or a "let" token when the "=" or "::=" token 
already defines my intention (There may be some practical parser consideration 
I'm missing here).

It seems to me that there might be a more uniform syntax that solves all of 
these problems and also emphasizes the functional nature of the language.

ReturnExpr ::= "given" BindingSpecification WhereClause? 
OrderByClause? "return" ExprSingle

QuantifiedExpr ::= "given" BindingSpecification ("some"|"every") ExprSingle

BindingSpecification ::= (InClause | AssignClause)+

InClause ::= "$" VarName TypeDeclaration? "in" ExprSingle PositionalVar?
AssignClause ::= "$" VarName TypeDeclaration? ":=" ExprSingle

I've suggested moving the PositionalVar to the end to simplify parsing.

Examples:

given $x in (1,2,3), $y := (2,3,4) return $x + $y

if (given $x in (1,2,3), $y := (2,3,4) some $x + $y = 4) then ...

Received on Friday, 7 October 2005 16:50:33 UTC