- From: Michael Kay <mhk@mhk.me.uk>
- Date: Thu, 24 Jun 2004 04:18:20 +0100
- To: "'Per Bothner'" <per@bothner.com>
- Cc: "'Liam Quin'" <liam@w3.org>, <public-qt-comments@w3.org>
> > Michael Kay wrote: > > >>declare variable $x { $y }; > >>declare variable $y { 10 }; > >>$x + $y > >> > > So the question remains: is the example portable, > implementation-defined, or neither? I had lost track slightly of WG decisions in this area, but the current internal draft, which I believe correctly reflects decisions made by the WG, makes this an error. It states: [Definition: If a variable declaration includes an expression, the expression is called an initializing expression.] Initializing expressions are evaluated at the beginning of the dynamic evaluation phase. The static context for an initializing expression includes all functions that are declared or imported anywhere in the Prolog, but it includes only those variables and namespaces that are declared or imported earlier in the Prolog than the variable that is being initialized. If an initializing expression cannot be evaluated because of a circularity (for example, it depends on a function that in turn depends on the value of the variable that is being initialized), a dynamic error is raised.[err:XQ0054] In XSLT the corresponding construct is legal: XSLT allows forwards references to global variables. Another difference is that XSLT gives the implementation the choice of reporting circularities as static or dynamic errors. I'm going to have to update Saxon's XQuery implementation so that this example stops working... Michael Kay
Received on Wednesday, 23 June 2004 23:19:09 UTC