MarkLogic может обрабатывать такую логику многими способами, как упомянуто.
Например, это то, как вы могли бы настроить поисковый запрос с использованием библиотеки CTS (я очень рекомендую библиотеку CTS, так как он использует индексы намного лучше, и строительство их настолько более гибкими):
cts:search(//elementName,
cts:and-query((
cts:element-attribute-value-query(xs:QName("entry"), xs:QName("private"), "true"),
cts:or-query((
cts:element-attribute-value-query(xs:QName("entry"), xs:QName("forced"), "false"),
cts:element-attribute-value-query(xs:QName("entry"), xs:QName("forced"), "pending")
))
))
)
Этот фрагмент показывает логику AND и OR. Функции cts:and-query() и cts:or-query() могут принимать список узлов. В приведенном выше запросе говорится: «Найти элемент (называемый elementName), который имеет атрибут private =« true »И имеет либо одно из следующих значений: принудительное = 'true' или принудительное = 'pending'".
Для более простых данных, вы можете использовать XQuery предиката, делая что-то вроде следующего:
for $node in $xml/parent/child[@param1 eq "test" AND @param2 eq "OK"]/grandchild[@service eq "yahoo" or @service eq "google"]
return $node
И в зависимости от того, что Condition1 через Condition5 на самом деле, библиотеки высокого уровня может оказаться ненужным, потому что сам по себе XQuery обеспечивает логическое операторы. –