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

我有几个模块名称空间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没有命名空间绑定.

怎么做到这一点?

最佳答案 这是不可能的,至少不是你想要的方式,这是正确的.
XQuery spec不允许这样:

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() 
};

但是,当然这可能需要大量的包装函数.我建议你坚持插入所有必需的库.否则我认为没有任何好处.

点赞