1

我正在尝试查找<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())

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

4

2 回答 2

5

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


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

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

回复原文:

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

--


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

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


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

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

cts:uris("", (),
  cts:properties-fragment-query(
    cts:element-query(xs:QName("my-element"),
      cts:and-query( () )) 
    )
)
于 2016-03-15T17:50:16.533 回答
1

没有提供错误消息,所以这是一个猜测。确保您已打开 URI 词典——否则 cts:uri-reference 将引发错误。

于 2016-03-15T17:32:02.647 回答