[xquery-talk] How do different XQuery products implement modules?

Makoto YUI yuin405 at gmail.com
Thu Oct 16 17:36:54 PDT 2008

Hi Michael,

Some comments regarding the work-in-progress module implementation
in XBird.

> 1. Is the module URI just an arbitrary character string, or does it have any
> semantics?

A module URI represents generic URI reference defined by RFC 2396 [1].

[1] http://www.ietf.org/rfc/rfc2396.txt

>    1a. In particular, is it the location of a resource on the web?


> 2. Do you allow several different modules in the same query to have the same
> module URI?

Not allowed. It causes a static error "err:XQST0047".


>    2a. if so, can different "import module" declarations import different
> subsets of these?


> 3. Can users import a module without specifying a location URI? If so, how
> is the module located?

At least one URIs are required due to [2].

[2] http://www.w3.org/TR/xquery/#doc-xquery-ModuleImport

> 4. If import module specifies a location URI, is it used, and if so how?

(1) Connected to the remote object that the URI locates.
(2) Read and parse the object.

> 5. If import module specifies more than one location URI, how are they used?

Currently, only the first one is used.

It would be better to use the first 'live' remote resource.

>    5b. If multiple location URIs are allowed, what happens if
>    import module specifies the same location URI more than once?


> 6. What happens when two modules A and B both import module URI M
>    6a. specifying the same location URI

[6a-1] When same target namespaces (module URIs) are specified.

See 2.

[6a-2] When distinct target namespaces (module URIs) are specified.

The resource that a location URI specifies might be a dynamic content.
Thus, child modules are individually parsed and imported to the parent

As a consequence, it often follows an error (err:XQST0049 or
err:XQST0034) for *static* contents.


Skip loading a module on same location may be preferred.

>    6b. specifying different location URIs

6b turns into the same result to 6a.

>    6c. without specifying a location URI

As written in 3 and 1.

> 7. Is it possible (by means of multiple imports) to create two different
> "instances" of the same module in a query, with distinct values of global
> variables, or do all imports get the same instance with a common set of
> variables?

Possible if the target namespaces differ.
But it is practically impossible because a library module must have
a namespace URI that is the same as the target namespace [3,4].

[3] http://www.w3.org/TR/xquery/#doc-xquery-ModuleDecl
[4] http://www.w3.org/TR/xquery/#ERRXQST0048

What a wired behavior that does not actually allow loading a module
multiple times :-{

I think simply allowing users to override a module URI
with a target namespace makes it (both behavior conceptually) possible.
#Of course, topic 7 closely related to topic 2 and 6a-2.

Hope this helps,
Makoto YUI

XBird - Light-weight XQuery processor and XML database system
written in Java. http://code.google.com/p/xbird/

More information about the talk mailing list