在Marklogic Server中,我能否声明一个全局变量在xquery中?

9

我希望能有一个全局变量,可以在不同的.xqy页面中使用。在Marklogic Server中,我能否声明这样一个变量?

4个回答

15

你可以在任何模块中声明变量。例如,在config.xqy模块中。

declare variable $PRECISION as xs:integer := 4;

要使用这个变量,你需要在你的工作模块中导入这个模块。

import module namespace config = "http://your-namespace" at "config.xqy";

并且参考这个变量:

$config:PRECISION

1
这应该是 $conf:PRECISION 吧? - Tamas
1
@Tamas,是的。谢谢。我已经调整了例子。 - Andrei Orlov

5
如果您的应用程序在单个E节点上运行,您可以使用服务器字段,这些字段也是为此用例设计的。

2
如果您需要在服务器上访问值,那么Marklogic XQuery Commons中有一个库用于存储持久的键/值对:

https://github.com/marklogic/commons/blob/master/properties/properties.xqy

你可能已经考虑过这一点,但你也可以简单地将全局数据存储在数据库上的文档中,并使用doc()访问它 - 或者如果你需要从不同的数据库访问它,可以使用eval()。

1

你有几个选择。如果你需要一个全局常量变量,那么@Andrew Orlov的答案中提到的config.xqy方法非常好,因为它避免了对properties.xml文件的并发访问所带来的任何锁定。

如果你需要一个可以在节点集群中被改变的变量,那么@wst链接的property.xqy示例似乎使用全局分配的命名空间来嵌入可检索的键和值。相当聪明。然而,我不确定这是否适用于大量更改。

@Eric Bloch提供的E-node特定变量很好,但请注意它将无法在系统重新启动后存活。

我很想知道它们在性能方面如何比较。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接