9

我想要一个可以在不同的 .xqy 页面中使用的全局变量。我可以在 Marklogic Server 的 xquery 中声明这样的变量吗?

4

4 回答 4

15

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

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

要使用此变量,您需要在工作模块中导入此模块。

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

并参考这个变量:

$config:PRECISION
于 2012-06-15T09:05:10.933 回答
5

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

于 2012-06-15T16:50:11.947 回答
2

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

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

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

于 2012-06-15T15:37:36.253 回答
1

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

如果您需要一个可以跨节点集群变异的变量,property.xqy@wst 链接的示例似乎使用全局分配的命名空间来嵌入可检索的键和值。相当聪明。但是,我不确定这对重大变化意味着多少。

@Eric Bloch的E-node特定变量很好,但也请注意,它不会在系统重新启动后继续存在。

我很想知道这些在性能方面是如何比较的。

于 2012-06-15T23:47:09.597 回答