- From: <bugzilla@wiggum.w3.org>
- Date: Thu, 02 Nov 2006 17:27:36 +0000
- To: public-qt-comments@w3.org
- CC:
http://www.w3.org/Bugs/Public/show_bug.cgi?id=1705
------- Comment #29 from simeon@us.ibm.com 2006-11-02 17:27 -------
Here is (yet) another proposal trying to break the Gordian knot on bug
1705. This is a (preliminary) proposal currently being considered by
the XML Query working group at its face to face meeting. Any early
feedback on it would be greatly appreciated.
- Jerome
Overview
--------
The proposal defines circularity between modules based on whether
variables depend on variables or functions in another module.
This notion outlaws the specific example that was posted in comment #1
for that bug. It allows to order modules based on how variables in one
module depend on variables in another module.
Details follows.
Changes to XQuery 1.0 book
--------------------------
(1) Make 'depends on a variable or function' a definition in XQuery
1.0.
(2) Define formally a notion of module dependency as follows.
<<
A module M1 depends on a module M2 if a variable or function in M1
depends on a variable or function in a module M2, where M1 and M2 are
distinct modules.
>>
NOTE: Based on that definition M1 never depends on M1.
(3) Add a restriction to module import:
<<
If a module depends on itself by any combination of transitive
dependencies, a static error is raised.
>>
Changes to XQuery FS book
-------------------------
Note this proposal also takes bug #1743 into account. What follows are
only the main rules, not all specific changes yet.
*** Add the new judgments:
Module1 ... Modulen reordered as Module1' ... Modulen'
Which takes a set of Modules, and reorders them based on the absence
of circularity. The order is such that variables in a module Modulei
only depends on variables defined in Module1...Modulei-1.
statEnv1 |- PrologDecls gather function signatures statEnv2
Which extends the static environment with a set of function signatures.
*** In Section 5.2 Module Declaration, replace the existing SCP rule by:
AnyURI is target namespace of modules Module1 ... Modulen
Module1 ... Modulen reordered to Module1' ... Modulen' (***)
Module1' = module namespace NCName1 = URILiteral; PrologDeclList1
...
Modulen' = module namespace NCName1 = URILiteral; PrologDeclListn
statEnvDefault |- PrologDecls gather function signatures statEnv0
statEnv0 ; AnyURI |- declare namespace NCName = URILiteral;
PrologDeclList1 =>stat statEnv1 with PrologDeclList1'
...
statEnvn-1 ; AnyURI |- declare namespace NCName = URILiteral;
PrologDeclList1 =>stat statEnvn with PrologDeclList1'
------------------------------------------------------------------
AnyURI =>module_statEnv statEnvn0
(***) Always exists because there isn't circularity
The main idea is that we can alway order the modules so they do not
depend on eeach other, getting rid of circularity and making sure the
simpler version of SCP which goes through modules in order can
terminate.
NOTE: There should be some changes to the judgment:
statEnv0 ; AnyURI |- declare namespace NCName = URILiteral;
PrologDeclList1 =>stat statEnvn with PrologDeclList1' so that it
passes only the relevant part of the static environment between
modules.
Changes to Section 5.11 Module Import
-------------------------------------
*** In SCP, replace the rule:
AnyURI1 =>module_statEnv statEnv1
...
AnyURI1 =>module_statEnv statEnvn
statEnv extended with static environment statEnv1
yields statEnv1' for uri AnyURI
...
statEnvn-1 extended with static environment statEnvn
yields statEnvn' for uri AnyURI
----------------------------------------------------------------
statEnv |- import module AnyURI1 LocationHints? =>stat statEnvn
By:
AnyURI =>module_statEnv statEnv
statEnv extended with static environment statEnv1
yields statEnv1' for uri AnyURI
...
statEnvn-1 extended with static environment statEnvn
yields statEnvn' for uri AnyURI
----------------------------------------------------------------
statEnv |- import module AnyURI LocationHints? =>stat statEnvn
Changes to Section 5.14 Variable Declaration
--------------------------------------------
No changes.
Changes to Section 5.15 Function Declaration
--------------------------------------------
No changes
Received on Thursday, 2 November 2006 17:27:53 UTC