令我惊讶的是,我正在与一个非常基本的XQuery问题搏斗,即在主XQuery模块和导入的库模块之间共享全局变量的正确方法是什么。简而言之,我想定义一个可以在任何地方重用的全局变量(即在所有(导入的)XQuery模块中),并且正在努力寻找宣布这样一个变量的最佳位置。XQuery:跨(导入)模块共享全局变量
假设我有以下几个主要的XQuery(test.xq):
import module namespace global="global" at "global.xq";
import module namespace test2="test2" at "test2.xq";
declare variable $test := 'test!';
test2:echo()
该模块导入以下库模块:
global.xq:
module namespace global="global"; declare variable $global:test := 'global!';
TEST2 .x: module namespace test2 =“test2”;
import module namespace global="global" at "global.xq"; declare function test2:echo() { $global:test };
这工作,但给我留下了一些问题:
这是做到这一点的方式:
- 定义全局变量(如$全球:测试)在一个单独的库模块中(例如global.xq)
- 将模块导入需要提供的任何模块访问其变量
?
- 有没有办法访问导入的库模块(例如test2.xq)中的主XQuery模块(例如$ test)中声明的变量?
任何人都可以阐明这一点吗?我想我发现自己在这个概念上挣扎的主要原因是因为我习惯于eXist的行为,这可能比它应该放松。在存在,test2.xq模块可以直接参考$全局:测试变量,而不用导入global.xq模块:
module namespace test2="test2";
declare namespace global="global";
declare function test2:echo() {
$global:test
};
由于这部作品中不存在,但不是在撒克逊人,我就开始琢磨什么在(导入的)XQuery模块中定义和使用全局变量的正确方法。
亲切的问候,
罗恩
谢谢你的想法。我非常清楚,我可能会遇到基于非标准行为的假设。然而,我在网上找不到关于这种设计模式的许多有用提示。我不喜欢针对这种基本需求的特定于供应商的扩展。你会推荐我的原始问题中的工作方法(即在专用库模块中定义全局变量并根据需要导入)作为使所有(导入)XQuery模块都可访问全局变量的标准方法吗?或者你看到其他(符合)的可能性? – rvdb 2012-03-06 15:01:07
@rvdb我建议通过参数传递这样的值给每个调用。将大量的上下文信息收集到一个小的XML片段中非常容易,并且可以通过它。它是迄今为止最可扩展和最干净的。 像你这样导入一个共享的全局模块是最明智的选择,除非你有足够的理由想要初始化我描述的行为。 HTH! – grtjn 2012-03-06 16:21:50