以下内容有什么区别:

import module namespace fs = "http://expath.org/ns/file";
declare namespace an = "http://zorba.io/annotations";


“导入模块名称空间”与“声明名称空间”相比如何?

而且,命名空间声明之间的区别是

declare namespace an =  "http://zorba.io/annotations";




module namespace an =  "http://zorba.io/annotations";

最佳答案

模块名称空间将允许您使用来自各种模块的xquery函数。这就像使用其他语言的库一样。例如functx库:

import module namespace functx="http://www.functx.com"

functx:substring-before-match('abc-def-ghi', '[dg]')


如果要创建自己的模块“ mymodule.xq”,则应使用模块声明开始文件:

module namespace mymodule = "http://example.org/mymodule";

declare function mymodule:myfunc()....


声明名称空间可让您使用不同的名称空间创建和查询xml元素。

例如:

declare namespace x="http://some.random.namespace";
//x:someelement[. = 'hello world']


将查询具有“ x”名称空间的xml元素。

现在就您的zorba注释而言。声明名称空间实际上只是对xquery处理器说的:此前缀(an)绑定到该名称空间(http://zorba.io/annotations)。我不太确定如何进一步解释它,这只是它在xquery规范中定义的方式。只是告诉xquery处理器是否键入:

declare %an:nondeterministic function random:random() as xs:integer external;


“ an”绑定到“ http://zorba.io/annotations”,这是佐尔巴会理解的。

您也可以将“ an”更改为“ foo”:

declare namespace foo =  "http://zorba.io/annotations";
declare %foo:nondeterministic function random:random() as xs:integer external;


而zorba仍然可以理解它。

关于xquery - 在XQuery中导入和声明模块 namespace 之间的区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30073055/

10-12 16:45