cts:value- 共现返回空序列

cts:value-co-occurrences returning empty sequence

我正在尝试查找在文档属性中具有 属性 <id> 的所有文档的共现。以下是我正在执行的代码,用于列出共现和不工作..有人可以建议我做错了什么。

xquery version "1.0-ml";
declare namespace html = "http://www.w3.org/1999/xhtml";
declare namespace prop = "http://marklogic.com/xdmp/property";
import module namespace search = "http://marklogic.com/appservices/search" at "/MarkLogic/appservices/search/search.xqy";


 cts:value-co-occurrences(
              cts:element-reference(xs:QName('prop:id')),
              cts:uri-reference())

我确实在此 属性 上创建了元素范围索引

没有提供错误信息,所以这是一个猜测。确保打开了 URI 词典——cts:uri-reference 否则会抛出错误。

注意:我在接受后编辑了这个答案,因为我给了三个项目看。编辑是为了突出给出解决方案的答案部分


解决方案:- 属性片段中的命名空间不同

  • 这有时会让人们感到困惑。
  • 属性 片段中有一个 XML 文档 - 总是。
  • 节点本身声明了一个命名空间,但是前缀为'prop'.
  • 但是,您添加的属性(XML 个元素)不在上述命名空间下 - 当然除非您自己实际使用了 prop 前缀。
  • 这个挑战的最终结果是用户在属性片段中的元素上创建了一个索引,并将索引的范围限定为属性命名空间。这创建了一个完全有效的索引 - 只是空的,因为没有匹配的元素。

回复原文:

您确定有问题的元素确实如您的索引所示位于属性命名空间中吗? cts:element 值的快速转储可能会显示这一点。我提到这一点是因为将属性添加到属性片段并不能推断它们在属性命名空间中。

--


其他想法 - 不是答案,而是调查路径

根据您的示例,我认为您正在寻找 cts:value-tuples 而不是共现。


但是:从你的问题陈述来看,你为什么不只在 属性 片段上使用 cts:uris() constrained by an cts:element-query()(并且都没有范围索引)

这可以告诉您属性片段中存在元素 my-element 的所有 URI:

cts:uris("", (),
  cts:properties-fragment-query(
    cts:element-query(xs:QName("my-element"),
      cts:and-query( () )) 
    )
)