cts:返回空序列的值共现

Rav*_*avi 1 marklogic marklogic-8

我试图找到其中有一个属性的所有文件的共同出现<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())
Run Code Online (Sandbox Code Playgroud)

我确实在这个属性上创建了元素范围索引 在此输入图像描述

Dav*_*nis 5

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


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

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

回复的原始措辞:

您确定有问题的元素实际上是在索引显示的属性名称空间中吗?快速转储cts:element-values可能会显示这一点.我之所以提到这一点,是因为向属性片段添加属性并不会推断它们位于属性名称空间中.

-


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

我认为你正在寻找cts:value-tuples而不是基于你的例子共同出现.


但是:从你的问题陈述中,为什么你不只是使用cts:uris()约束属性片段上的cts:element-query()(并且所有没有范围索引)

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

cts:uris("", (),
  cts:properties-fragment-query(
    cts:element-query(xs:QName("my-element"),
      cts:and-query( () )) 
    )
)
Run Code Online (Sandbox Code Playgroud)