【问题标题】:Search Xpath with its value in XML Documents and Get Document URI From Marklogic使用 XML 文档中的值搜索 Xpath 并从 Marklogic 获取文档 URI
【发布时间】:2018-04-24 18:18:16
【问题描述】:

如下所述,我将 XML 存储在 MarkLogic 中

<testData>
  <datatypes>
    <datatypename>datatypename1</datatypename>
    <datatype>datatype1</datatype>
  </datatypes>
  <datavalue>
    <code>code1</code>
    <value>value1</value>
  </datavalue>
  <datavalue>
    <code>code2</code>
    <value>value2</value>
  </datavalue>
  <datavalue>
    <code>code3</code>
    <value>value3</value>
  </datavalue>
</testData>

并且上述值和文档结构可能出现在另一个 XML 中,但具有不同的 URI。

所以我的要求是,我需要来自 MarkLogic 的所有文档 URI,其中包含 /testData/datatypes/datatypename 作为确切的 xpath,其确切值为 datatypename1

【问题讨论】:

    标签: marklogic marklogic-8 marklogic-9


    【解决方案1】:

    最直接的方法是在/testData/datatypes/datatypename 上创建路径范围索引并使用路径范围查询:

    cts:path-range-query("/testData/datatypes/datatypename", "=", "datatypename1")
    

    另一种方法是在范围元素查询中使用值查询:

    cts:element-query(xs:QName("testData"), 
      cts:element-query(xs:QName("datatypes"), 
        cts:element-value-query(xs:QName("datatypename"), "datatypename1"))) 
    

    这种方法更容易出现误报。对于小的候选结果集,可以通过过滤来减轻这种误报。

    对于大型候选结果集,可以通过索引元素位置来消除位置误报(例如具有testData/datatypes 和datatypes/datatypename 但没有testData/datatypes/datatypename 的文档)。当标点符号对匹配项具有独特性时,值的标记化也会产生误报。在这种情况下,路径范围索引是大型候选结果集的正确解决方案。

    【讨论】:

    • 如果您有能力修改 XML 格式(模式),另一种方法是将数据类型名称(可能还有整个文档)放在不同/唯一的命名空间中,这样 '{namespace}datatypename'本身就是独一无二的。然后元素值查询将是精确的,甚至基本的 xpath 也可能会被优化(例如 //ns:datatypename[. = "value"] )
    猜你喜欢
    • 1970-01-01
    • 2018-09-01
    • 1970-01-01
    • 2014-07-27
    • 1970-01-01
    • 2012-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多