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

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

【问题讨论】:

    标签: xquery marklogic


    【解决方案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 特定变量很好,但请注意,它不会在系统重启后继续存在。

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

        【讨论】:

          猜你喜欢
          • 2010-10-01
          • 2020-11-16
          • 2020-03-01
          • 2014-08-09
          • 1970-01-01
          • 1970-01-01
          • 2011-05-09
          • 1970-01-01
          • 2011-06-22
          相关资源
          最近更新 更多