在 XML 文档中搜索 Xpath 及其值并从 Marklogic 获取文档 URI
Search Xpath with its value in XML Documents and Get Document URI From Marklogic
我有 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
最直接的方法是在 /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 存储在 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
最直接的方法是在 /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
的文档)。当标点符号对于匹配而言是独特的时,值的标记化也会产生误报。在这种情况下,路径范围索引是大型候选结果集的正确解决方案。