You want to find all XML documents that are missing a particular element.
Applies to MarkLogic versions 7+
cts.search( cts.notQuery( cts.elementQuery( xs.QName("target"), cts.trueQuery() ) ) )
cts:search( fn:doc(), cts:not-query( cts:element-query( xs:QName("targetElement"), cts:true-query() ) ) )
For MarkLogic 7 and earlier, replace the cts:true-query()
with cts:and-query(())
.
MarkLogic’s built-in search engine uses query criteria to identify matching fragments. The indexes map terms (words, phrases, structures, etc.) to fragment identifiers. To run a search, the specified terms are looked up in the appropriate index to find fragment identifiers. In the case of cts:not-query, the search will return any fragment identifiers except those matched by the nested query.
cts:element-query is a useful way to constrain a search to part of a document. The function restricts the nested query to matching within the specified XML element.
The query passed to cts:element-query
is cts:true-query for MarkLogic 8 and above and cts:and-query(()) for MarkLogic 7 and before. cts:true-query
does what it sounds like — it matches everything. Passed to cts:element-query
, this provides a simple way to test for the existence of an element. If you’re using a version of MarkLogic that predates cts:true-query
, the way to simulate it is to use cts:and-query
and pass in the empty sequence to it. An and-query matches if all queries passed into are true; if none are passed in, then it matches, thus making cts:and-query(())
work the same as cts:true-query
.
By continuing to use this website you are giving consent to cookies being used in accordance with the MarkLogic Privacy Statement.