我可以在 Marklogic Server 的 xquery 中声明一个全局变量吗?

Posted

技术标签:

【中文标题】我可以在 Marklogic Server 的 xquery 中声明一个全局变量吗?【英文标题】:Can I declare a global variable in xquery in Marklogic Server? 【发布时间】:2012-06-18 07:58:31 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

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

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

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

并引用这个变量:

$config:PRECISION

【讨论】:

不应该是 $conf:PRECISION 吗? @Tamas,是的。谢谢你。我已经调整了示例。【参考方案2】:

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

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

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

【讨论】:

【参考方案3】:

如果您的应用程序在单个 E 节点上运行,您可以使用 server fields ,它也是为此用例设计的。

【讨论】:

【参考方案4】:

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

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

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

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

【讨论】:

以上是关于我可以在 Marklogic Server 的 xquery 中声明一个全局变量吗?的主要内容,如果未能解决你的问题,请参考以下文章

MarkLogic LDAP身份验证

Marklogic Json Xquery 无法查询

MarkLogic 8 和服务器端 JavaScript - 调试支持

如何使用 JavaApi 将 XML 中的重音字符写入 MarkLogic?

MarkLogic 9-在Raw模式下显示部分结果

带参数的marklogic调用函数