【问题标题】:Logical expression evaluation in XpathXpath 中的逻辑表达式求值
【发布时间】:2014-12-08 21:53:16
【问题描述】:

我有一个如下类型的 XPATH 表达式,它预期会返回一个布尔值:

 xs:boolean(expression1 or expression2 or expression3)

如果expression1 返回true,是否会计算其他表达式?

在任何情况下,任何人都可以指出如何在 XPATH 中高效地编写复杂逻辑表达式的示例吗?

顺便说一句:我在 MarkLogic 上运行 XPATH。

【问题讨论】:

    标签: xpath marklogic


    【解决方案1】:

    在 XPath 1.0 中定义了表达式按从左到右的顺序计算,直到其中一个返回 true。

    但是表达式中存在 xs:boolean(这是多余的)表明您正在使用 XPath 2.0,并且允许 XPath 2.0 处理器以任何顺序评估子表达式。这是为了允许数据库风格的优化:其中一个子表达式可能比其他子表达式执行得更快(或更可能返回 true),这可能是因为数据库索引,所以优化器将首先评估那个子表达式。但是任何体面的优化器都会在第一个计算结果为“真”的表达式之后停止计算。

    我不能具体告诉你 MarkLogic 是做什么的。

    对于其他尝试此操作的人,XPath 中的“或”运算符必须为小写。

    【讨论】:

    • 非常感谢。我要把 or 改成更小的大小写。
    【解决方案2】:

    鉴于 Michael Kay 关于优化的 cmets,我不能确定 MarkLogic 是选择表达式先评估还是从左到右进行评估,但您可以看到特定 XPath 是如何评估的。在查询控制台(通常是 localhost:8000/qconsole)中,输入一个表达式,单击配置文件选项卡,然后运行。

    //foo[xs:boolean(1 = 1 or 2 = 3)]
    

    配置文件选项卡显示“1 = 1”已评估,“2 = 3”未评估。

    【讨论】:

      猜你喜欢
      • 2015-09-02
      • 1970-01-01
      • 2015-03-04
      • 2019-07-23
      • 2022-01-14
      • 2012-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多