** 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 ** )。如果存在,版本声明出现在模块资源( _ module resource _ )的开始,且为模块资源( _ module resource _ )识别可用的 XQuery 语法和语义。 ] 版本号“ 1.0 ”表明模块资源( _ module resource _ )必须由一个 XQuery 版本 1.0 处理器来处理的需求。如果版本声明不存在,则版本被假设为“ 1.0 ”。当一个 XQuery 实现处理一个用其不支持的版本标志的模块资源( _ module resource _ )时,必须返回一个静态错误( _ static error _ )。 [ _ err:XQ0031 _ ] XQuery 工作组这样做的意图是给出这个规范数字不同于“ 1.0 ”的随后的版本,但是这个意图不表明承诺提出任何 XQuery 的未来版本,如果提出来也不一定使用任一特定的数字模式。
下面是一个版本声明的例子:
xquery version "1.0";
** 4.2 ** ** 模块声明 ** ** Module Declaration ** ** **
[5]
|
_ ModuleDecl _
|
::=
|
"module" "namespace" _ NCName _ "=" _ StringLiteral _ Separator
---|---|---|---
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt;