- From: Michael Rys <mrys@microsoft.com>
- Date: Thu, 22 Jan 2004 13:14:28 -0800
- To: <public-qt-comments@w3.org>
- Message-ID: <EB0A327048144442AFB15FCE18DC96C701CEC7E2@RED-MSG-31.redmond.corp.microsoft.com>
I posted a comment to the XQuery WG last year that was moved to become a last call. The mail is located at http://lists.w3.org/Archives/Member/w3c-xml-query-wg/2003Oct/0046.html I was asked to forward it to the public list, so here is the content of the mail for public archiving and replies: This mail proposes an improvement to the query prolog syntax to address the ordering issues that several of my implementers have raised and that I have reported previously. Currently the grammar allows a function declaration before the default collation declaration, and a schema import can syntactically occur after a function declaration that refers to the type name imported. Since this arbitrary ordering complicates the prolog processing and the specification of such, we would like to propose a certain order in the prolog. We first have the version, then a group of context setters, then a group of namespace declarations and imports and then the variable and function declarations. I propose two syntactic varieties that distinguish for variable and function declarations and present the choice between two semantic varieties for the variable reference case. Note that I assume that we continue to allow a function declaration to refer to a function that is syntactically declared later at the same module level. Syntax A: ========= Prolog ::= (Version Separator)? (Setter Separator)* (Decl Separator)* (VarDecl Separator)* (FunctionDecl Separator)* Setter ::= XMLSpaceDecl ; each setter occurs at most once | DefaultCollationDecl | BaseURIDecl | ValidationDecl Decl ::= NamespaceDecl ; each decl appears any number of times | DefaultNamespaceDecl | SchemaImport | ModuleImport Syntax B: ========= Prolog ::= (Version Separator)? (Setter Separator)* (Decl Separator)* (VFDecl Separator)* Setter ::= XMLSpaceDecl ; each setter occurs at most once | DefaultCollationDecl | BaseURIDecl | ValidationDecl Decl ::= NamespaceDecl ; each decl appears any number of times | DefaultNamespaceDecl | SchemaImport | ModuleImport VFDecl ::= VarDecl | FunctionDecl Semantic Interpretation I: -------------------------- Example 1: declare variable $a as xs:integer { $b + 42 } declare variable $b as xs:integer { 0 } Example 2 (only for Syntax B): declare function foo($x as xs:integer) as xs:integer { $x + $const } declare variable $const as xs:integer Both examples work without error. Semantic Interpretation II: --------------------------- Neither of the two examples works. The declaration of $a in Example 1 would raise an error about not having $b declared yet, and the function body in example 2 would raise an error that the $const has not been declared yet. Which would you prefer? A.I., A.II., B.I., or B.II? We have a slight preference of A over B and interpretation II over I, but can live with the others. Best regards Michael
Received on Thursday, 22 January 2004 16:19:20 UTC