[xquery-talk] Re: about "module" in XQuery spec

he harrison harrison076 at gmail.com
Wed Jan 9 16:06:07 PST 2008


Here is definition of module:
"A query can be assembled from one or more fragments called *modules*. [
Definition: A *module* is a fragment of XQuery code that conforms to the
Module <http://www.w3.org/TR/xquery/#doc-xquery-Module> grammar and can
independently undergo the static analysis
phase<http://www.w3.org/TR/xquery/#dt-static-analysis>described in
*2.2.3 Expression
Processing*<http://www.w3.org/TR/xquery/#id-expression-processing>.
Each module is either a main
module<http://www.w3.org/TR/xquery/#dt-main-module>or a library
module <http://www.w3.org/TR/xquery/#dt-library-module>.]"

Since modules could independetly undergo the static analysis phase, then
I understand wherever it's imported, it's in-scope schema type definition
should not be
redefined by importing module.

Hi,
> I come up with a problem when reading XQuery1.0 spec., following is my
> case:
>
> a.xq:
>
> module namespace ma=" http://www.w3.org/TestModules/moduleA";
> import schema namespace simple=" http://www.w3.org/XQueryTest/simple " at
> "schema_a.xsd";
> declare function ma:funcA()
> {
>    "40" cast as simple:myType
> };
>
> b.xq:
>
> declare namespace mb=" http://www.w3.org/TestModules/moduleB ";
> import module namespace ma="http://www.w3.org/TestModules/moduleA" at "
> a.xq";
> import schema namespace simple=" http://www.w3.org/XQueryTest/simple" at
> "schema_b.xsd";
>
> declare function mB:funcB()
> {
>   ma:funcA() instance of simple:myType
> };
>
> <result>{mb:funcB()}</result>
>
> schema_a.xsd:
>
> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
>            xmlns:simple=" http://www.w3.org/XQueryTest/simple "
>            targetNamespace="http://www.w3.org/XQueryTest/simple"
>            elementFormDefault="qualified" attributeFormDefault="qualified"
>
> >
>   <xs:simpleType name = "myType">
>      <xs:restriction base = "xs:int">
>       <xs:minInclusive value = "1"/>
>       <xs:maxInclusive value = "50"/>
>     </xs:restriction>
>    </xs:simpleType>
> </xs:schema>
>
> schema_b.xsd:
>
> <xs:schema xmlns:xs=" http://www.w3.org/2001/XMLSchema "
>            xmlns:simple="http://www.w3.org/XQueryTest/simple"
>            targetNamespace=" http://www.w3.org/XQueryTest/simple "
>            elementFormDefault="qualified" attributeFormDefault="qualified"
> >
>   <redefine
>     schemaLocation="schema_a.xsd">
>     <extension base="simple:myType">
>         <xs:minInclusive value = "51"/>
>         <xs:maxInclusive value = "100"/>
>     </extension>
>   </redefine>
> </xs:schema>
>
> What would be the result of this case?
> true? false? runtime error? or implementation define?
> Or in another word, would the type in module a.xq should
> be redefined by module c.xq's imported schema definition?
>
> This case is related with how to understand the XQuery's "module".
>
> Let me give my understanding:
> XSLT's module, in my understanding, should be "included" in
> another module to compile, could not be compiled independently,
> in other words, it's a "white box", its semantic
> depends on where it's included or imported(because its schema type could
> be
> differently redefined in different including or importing module).
>
> While I think XQuery's module is different with XSLT's module, I think
> XQuery spec.
> allow its module be compiled independently, no matter where the module is
> imported,
> module's semantic should not be changed, in other words, XQuery's module
> is a "black box", wherever module is imported, module's schema type
> definition should not be
> affected by type redefine mechanism.
>
> The reason why I make such conclusion is from following XQuery spec
> statement:
> 1 "A module import <http://www.w3.org/TR/xquery/#dt-module-import> imports
> only functions and variable declarations; it does not import other objects
> from the imported modules, such as in-scope schema definitions<http://www.w3.org/TR/xquery/#dt-issd>or statically
> known namespaces <http://www.w3.org/TR/xquery/#dt-static-namespaces>. Module
> imports are not transitive¡ªthat is, importing a module provides access
> only to function and variable declarations contained directly in the
> imported module."
>
> Here XQuery's statement is clearly different with XSLT's statement about
> module import.
> In XSLT spec, module imports are transitive while XQuery clearly stated
> that they
> are not, so XQuery's module import must be something different with XSLT's
> module import.
> My thought is, XQuery's module is a "black box" while XSLT's module is a
> "white box"
>
> 2 "It is a static error <http://www.w3.org/TR/xquery/#dt-static-error> [
> err:XQST0036 <http://www.w3.org/TR/xquery/#ERRXQST0036>] to import a
> module if the importing module's in-scope schema types<http://www.w3.org/TR/xquery/#dt-is-types>do not include definitions for the schema type names that appear in the
> declarations of variables and functions (whether in an argument type or
> return type) that are present in the imported module and are referenced in
> the importing module."
>
> Here spec. force user to import interface needed schema types, if we
> consider XQuery's
> module as "white box", then all imported types in "white box" has already
> imported, then
> this statement seems lead to redundancy, however if we consider XQuery's
> module
> as a "black box", then this statement is quite nature to understand.
>
> Could someone offer me some comment?
> Many thanks!
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://x-query.com/pipermail/talk/attachments/20080109/b216251a/attachment.htm


More information about the talk mailing list