在XML文档中搜索Xpath及其值,从Marklogic获取文档URI

时间:2018-04-24 18:18:16

标签: marklogic marklogic-8 marklogic-9

我将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

1 个答案:

答案 0 :(得分:4)

最直接的方法是在/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/datatypesdatatypes/datatypename但不是testData/datatypes/datatypename的文档)。当标点符号对于匹配而言是独特的时,该值的标记化也将产生误报。在这种情况下,路径范围索引是大型候选结果集的正确解决方案。