我有几个模块命名空间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";
它抛出异常为prefix util has no namespace binding
。
如何实现这一目标?
答案 0 :(得分:2)
这是不可能的,至少不是你想要的方式,这是正确的。 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()
};
但当然这可能需要大量的包装函数。我建议你坚持插入所有必需的库。我认为没有其他好处。