我可以在 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 8 和服务器端 JavaScript - 调试支持