XQuery 1.0
本部分包含的内容如下:
•编码
•命名空间
•库模块
•外部函数
•排序规则
符合项
XMLSpy的XQuery 1.0引擎符合万维网联盟(W3C)2010年12月14日的XQuery 1.0建议。XQuery标准给出了有关如何实现许多功能的信息。下方给出了一个列表,其中解释了XQuery 1.0引擎是如何实现这些功能的。
Schema感知力
XQuery 1.0引擎是Schema感知的。
编码
支持UTF-8和UTF-16字符编码。
命名空间
以下命名空间URI及其关联的绑定是预定义的。
命名空间名称 | 前缀 | 命名空间URI |
XML Schema types | xs: | http://www.w3.org/2001/XMLSchema |
Schema instance | xsi: | http://www.w3.org/2001/XMLSchema-instance |
Built-in functions | fn: | http://www.w3.org/2005/xpath-functions |
Local functions | local: | http://www.w3.org/2005/xquery-local-functions |
请注意以下几点:
•XQuery 1.0引擎将上方列出的前缀识别为与相应的命名空间绑定的。
•由于上方列出的内置函数命名空间(参见fn:)是XQuery中的默认函数命名空间,因此在调用内置函数时,不需要使用fn:前缀(例如,string("Hello")将调用fn:string函数)。然而,fn:可用于调用内置函数,而无需在查询prolog中声明命名空间(例如:fn:string("Hello"))。
•您可以通过在查询prolog中声明default function namespace表达式来更改默认函数命名空间。
•在使用XML Schema命名空间中的类型时,可以使用xs:前缀,而无需在查询prolog中明确声明命名空间并将这些前缀绑定到它们。(示例:xs:date和xs:yearMonthDuration。)如果您希望为XML Schema命名空间使用其他前缀,则必须在查询prolog中明确声明它。(示例:declare namespace alt = "http://www.w3.org/2001/XMLSchema"; alt:date("2004-10-04")。)
•请注意,untypedAtomic、dayTimeDuration和yearMonthDuration数据类型,连同2007年1月23日的CR,已从XPath Datatypes命名空间移至XML Schema命名空间,因此:xs:yearMonthDuration。
如果函数、类型构造器、节点测试等的命名空间被错误分配,则会报告错误。请注意,某些函数与Schema数据类型具有相同的名称,例如fn:string和fn:boolean。(xs:string和xs:boolean都有被定义。)命名空间前缀决定了是使用函数,还是类型构造函数。
XML源文档和验证
用于使用XQuery 1.0引擎执行XQuery文档的XML文档必须是格式正确的。但是,它们不需要根据XML Schema有效。如果文件无效,则加载无效文件,不含Schema信息。如果XML文件与外部Schema相关联,并根据它是有效的,则会为XML数据生成Schema后验证信息,并用于查询评估。
静态和动态类型检查
静态分析阶段会检查查询的各个方面,例如语法、是否存在外部引用(例如,模块)、是否定义了调用的函数和变量等。如果在静态分析阶段检测到错误,则会报告错误,并停止执行。
动态类型检查是在运行时执行的,在实际执行查询时。如果类型与操作的要求不符,则会报告错误。例如,xs:string("1") + 1表达式会返回一个错误,因为无法在xs:string类型的操作数上进行加法运算。
库模块
库模块存储函数和变量,因此它们可以被复用。XQuery 1.0引擎支持存储在单个外部XQuery文件中的模块。这类模块文件必须在其prolog中包含一个module声明,它与目标命名空间相关联。以下是一个示例模块:
module namespace libns="urn:module-library";
declare variable \$libns:company := "Altova";
declare function libns:webaddress() { "https://www.altova.com" };
所有在模块中声明的函数和变量都属于与该模块相关联的命名空间。该模块通过在查询prolog中使用import module语句将其导入XQuery文件来使用。import module语句仅导入在库模块文件中直接声明的函数和变量。如下所示:
import module namespace modlib = "urn:module-library" at "modulefilename.xq";
if | (\$modlib:company = "Altova") |
then | modlib:webaddress() |
else | error("No match found.") |
外部函数
不支持外部函数,即在那些使用external关键词的表达式中,如下所示:
declare function hoo(\$param as xs:integer) as xs:string external;
排序规则
默认排序规则是Unicode代码点排序规则,字符串会基于其Unicode代码点进行比较。其他支持的排序规则是此处列出的ICU排序规则。要使用特定的排序规则,请提供其支持的排序规则列表中给出的URI。任何字符串比较,包括fn:max和fn:min函数,都将根据特定的排序规则进行。如果未指定排序规则,则使用默认的Unicode代码点排序规则。
数值类型的精度
•xs:integer数据类型是任意精度的,即它可以代表任意数量的位数。
•xs:decimal数据类型在小数点之后有20位的限制。
•xs:float和xs:double数据类型有15位的精度限制。
XQuery指令支持
不支持Pragma指令。如果遇到这种情况,它将被忽略,并对回退表达式进行计算。
特定于实现的行为
下方给出了XQuery和XQuery Update 1.0引擎如何处理某些函数的具体实现方面的说明。
unparsed-text
href参数接受(i) base-uri文件夹中文件的相对路径,以及(ii) 带或不带file://协议的绝对路径。额外支持的编码是(Altova特定的):x-binarytobase16和x-binarytobase64。示例:xs:base64Binary(unparsed-text('chart.png', 'x-binarytobase64')).
unparsed-text-available
href参数接受(i) base-uri文件夹中文件的相对路径,以及(ii) 带或不带file://协议的绝对路径。额外支持的编码是(Altova特定的):x-binarytobase16和x-binarytobase64。
提示: | 以下编码值是在RaptorXML的前身产品AltovaXML的早期版本中实现的,现已被弃用:base16tobinary、base64tobinary、binarytobase16和binarytobase64。 |