如何在xquery中导入通用模块名称空间

如何在xquery中导入通用模块名称空间,xquery,marklogic,Xquery,Marklogic,我有几个在多个文件中使用的模块名称空间xquery文件。我希望将名称空间放在一个公共xquery文件中,并将该文件导入到我想要使用的任何地方 比如说, 我有process lib.xqy,util lib.xqy和query lib.xqy。 我曾经在多个文件中导入这些文件,如下所示 import module namespace util = "util" at "util-lib.xqy"; import module namespace process = "process" at "pr

我有几个在多个文件中使用的模块名称空间xquery文件。我希望将名称空间放在一个公共xquery文件中,并将该文件导入到我想要使用的任何地方

比如说,

我有
process lib.xqy
util lib.xqy
query lib.xqy
。 我曾经在多个文件中导入这些文件,如下所示

import module namespace util = "util" at "util-lib.xqy";
import module namespace process = "process" at "process-lib.xqy";
import module namespace query = "query" at "query-lib.xqy";
现在我尝试在一个名为
common import.xqy
的公共文件中使用它们,并将该文件导入多个文件中

当我尝试这种方法时

import module namespace common-import= "common-import" at "common-import.xqy";
它抛出异常,因为
前缀util没有命名空间绑定


如何做到这一点?

这是不可能的,至少不是以你想要的方式,而且是理所当然的。不允许这样做:

Module imports are not transitive—that is, importing a module provides access only to function and variable declarations contained directly in the imported module. For example, if module A imports module B, and module B imports module C, module A does not have access to the functions and variables declared in module C.
这是一个深思熟虑的设计决策。如果您希望以这种方式访问,您可以为要访问的每个函数编写一个包装函数,例如,在
common import.xqy
文件中,您可以拥有:

declare function common-import:test() { 
  util:test() 
};

当然,这需要大量的包装函数。我建议您只插入所有必需的库。我认为这样做没有任何好处。

我想您是说common-import.xqy导入util、process和query,然后在其他一些XQuery模块中,您只导入common-import并尝试调用util名称空间函数。是吗?是的,戴夫。你是对的。我们能做到吗???看德克的答案,这就是我要写的。