Xquery 使用cts:query检查缺少属性

Xquery 使用cts:query检查缺少属性,xquery,marklogic,cts-search,Xquery,Marklogic,Cts Search,我有一个XML片段,其中我希望根据id属性的存在进行不同的查询: <author order="1" id="99999999" initials="A." given-names="Able" surname="Baker" fullname="Able Baker"/> 如果该id存在,则会发生另一个查询,并与该id匹配。如何检测MarkLogic中缺少属性?我在数据库中插入了两个测试文档

我有一个XML片段,其中我希望根据id属性的存在进行不同的查询:

<author order="1" 
        id="99999999" 
        initials="A." 
        given-names="Able" 
        surname="Baker" 
        fullname="Able Baker"/>

如果该id存在,则会发生另一个查询,并与该id匹配。如何检测MarkLogic中缺少属性?

我在数据库中插入了两个测试文档:

xdmp:document-insert('/example.xml', <author order="1"
        id="99999999"
        initials="A." 
        given-names="Able" 
        surname="Baker" 
        fullname="Able Baker"/>)

xdmp:document-insert('/example2.xml', <author order="1" 
        initials="A." 
        given-names="Able" 
        surname="Baker" 
        fullname="Able Baker"/>)

此搜索仅匹配ID属性不存在的文档。

您可以尝试指定“通配符”作为
cts:element属性值查询的选项,因为根据通配符,只有在启用通配符索引时才会自动启用通配符。但我不知道在进行未过滤的搜索(或仅使用词典函数)时,这是否会产生正确的结果。另一种选择是永远不要删除属性,而是将其保留为空字符串。这一点都不漂亮,但确实有效。我认为您实际上不需要
cts:element查询
,因为
cts:element属性值查询
已经指定了
作者
元素
xdmp:document-insert('/example.xml', <author order="1"
        id="99999999"
        initials="A." 
        given-names="Able" 
        surname="Baker" 
        fullname="Able Baker"/>)

xdmp:document-insert('/example2.xml', <author order="1" 
        initials="A." 
        given-names="Able" 
        surname="Baker" 
        fullname="Able Baker"/>)
cts:search(fn:doc(),
cts:element-query(xs:QName('author'), cts:and-query((
  cts:not-query(cts:element-attribute-value-query(xs:QName('author'), xs:QName('id'), '*', ("wildcarded")))
 )
)))