Поиск Xpath по его значению в XML-документах и ​​получение URI документа из Marklogic - PullRequest
0 голосов
/ 24 апреля 2018

У меня есть 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.

Итак, мое требованиемне нужны все URI документа из MarkLogic, который содержит /testData/datatypes/datatypename в точном xpath и его точное значение как datatypename1

1 Ответ

0 голосов
/ 25 апреля 2018

Самый простой подход - создать индекс диапазона пути на /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) могут быть устранены путем индексации позиций элементов.Если пунктуация является отличительной для совпадения, токенизация значения также приведет к ложным срабатываниям.В таких случаях индексы диапазона пути являются правильным решением для больших наборов результатов кандидатов.

...