我想要一个全局变量,我可以在不同的.xqy页面中使用它。我可以在Marklogic Server的xquery中声明这样的变量吗?
答案 0 :(得分:15)
您可以在任何模块中声明变量。例如,它是config.xqy。
declare variable $PRECISION as xs:integer := 4;
要使用此变量,您需要在工作模块中导入此模块。
import module namespace config = "http://your-namespace" at "config.xqy";
参考这个变量:
$config:PRECISION
答案 1 :(得分:5)
如果您的应用程序在单个E节点上运行,您可以使用server fields,它也是为此用例设计的。
答案 2 :(得分:2)
如果您需要在服务器上访问值,Marklogic XQuery Commons中有一个用于存储持久键/值对的库:
https://github.com/marklogic/commons/blob/master/properties/properties.xqy
您可能已经考虑过这一点,但您也可以将全局数据存储在数据库中的文档中,并使用doc()或eval()进行访问(如果需要从其他数据库访问它)。
答案 3 :(得分:1)
您有几个选择。如果你需要一个全局常量变量,那么在@Andrew Orlov的回答中提到的config.xqy
方法是很好的,因为你避免了对properties.xml
文件的并发访问的任何锁定。
如果您需要一个可以跨节点集群进行变异的变量,@ wst链接的property.xqy
示例似乎使用全局分配的名称空间来嵌入可检索的键和值。很聪明。但是,我不确定这对于重度变化有多大意义。
来自@Eric Bloch的电子节点特定变量很好,但请注意它不会在系统重启后继续存在。
我很想知道这些都是如何比较性能的。