|
[XQuery Talk Mailing List Archive Home] [By Date] [By Thread] [By Subject] [By Author] [Recent Entries] [Reply To This Message] Re: about "module" in XQuery speche harrison harrison076 at gmail.comWed 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
|
Purchase Stylus Studio Online Today!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|






