4 模块与序言Modules and Prologs
|
[1] |
Module |
::= |
VersionDecl? (MainModule | LibraryModule) |
|
[3] |
MainModule |
::= |
Prolog QueryBody |
|
[4] |
LibraryModule |
::= |
ModuleDecl Prolog |
|
[6] |
Prolog |
::= |
(Setter Separator)* ((Import | NamespaceDecl | VarDecl | FunctionDecl) Separator)* |
|
[7] |
Setter |
::= |
XMLSpaceDecl | DefaultCollationDecl | BaseURIDecl | ConstructionDecl | DefaultNamespaceDecl | DefaultOrderingDecl |
|
[8] |
Import |
::= |
SchemaImport | ModuleImport |
|
[9] |
Separator |
::= |
";" |
|
[25] |
QueryBody |
::= |
Expr |
[定义:一个查询可以由一个或多个称为模块(modules)的片断装配而成。每个模块是一个主模块(main module)或者库模块(library module)。]每个模块依次由一个或多个称为模块资源(module resources)的部分组成。[定义:每个模块资源(module resource)是一段XQuery代码,符合模块(Module)语法并且能独立地经过2.2.3 Expression Processing中说明的静态分析阶段(static analysis phase)。]
[定义:一个主模块(main module)由包含一个序言(Prolog)及其后的一个查询体(Query Body)的单个模块资源构成。] 一个查询有一个确定的主模块。在一个主模块中,查询体(Query Body)能被计算,其值是查询的结果。
[定义:不包含查询体(Query Body)的模块称为库模块(library module)。] 一个库模块可能由多个模块资源(module resources)组成,每个模块资源包含一个模块声明(module declaration)及其后的序言(Prolog)。多个模块资源如果在其模块声明中命名同样的目标名字空间(target namespace),则被被视为同一库模块的部分。一个库模块不能直接被计算;相反的,它提供可以被导入到其他模块的函数和变量声明。
没有模块资源(module resource)能既包含模块声明(module declaration)又包含查询体(Query Body)。
[定义:序言(Prolog)是一连串的声明和导入,为包含序言的模块资源(module resource)定义处理环境] 每个声明或者导入跟着一个分号。[定义:序言中的某些声明称为给定器(setters),因为他们设置某些影响查询处理的性质的值,例如构造模式、排序模式、或者缺省校对。] 这些给定器如果存在,必须出现在序言的开始,以任何次序。一个序言也可以包含模式和模块导入,和名字空间前缀、变量和函数的声明。 [定义:每个导入模式或模块由其目标命名空间(target namespace)识别, 就是由模式或模块定义的对象(如元素或函数)的命名空间。]
[定义:查询体(Query Body)如果存在,由一个规定查询结果的表达式组成。] 表达式的计算在中3 Expressions说明。一个模块只有当它有查询体时才被计算。
4.1 版本声明Version Declaration
|
[2] |
VersionDecl |
::= |
"xquery" "version" StringLiteral Separator |
[定义:任意模块资源(module resource)可以包含一个版本声明(version declaration)。如果存在,版本声明出现在模块资源(






