如何返回Marklogic中元素范围索引中的所有元素

use*_*782 2 xml indexing performance xquery marklogic

我的XML中有以下元素:

<series id="iot" type="main">Institute of Theology</series>
Run Code Online (Sandbox Code Playgroud)

我想要做的是@id尽可能以最具性能意识的方式获取数据库中的所有系列值以及匹配值.我已经设置了元素范围索引,<series/>并且还设置了属性范围索引@id.我已经尝试使用cts:element-values()哪个很好地获取系列元素值,但我无法弄清楚如何返回元素和匹配的id值.

我正在寻找的最终结果应该是这样的:

iot Institute of Theology 
Run Code Online (Sandbox Code Playgroud)

wst*_*wst 5

您可以使用获取索引值的元组cts:value-tuples.

例如,这将返回以下对series/@idseries:

cts:value-tuples((
  cts:element-attribute-reference(xs:QName('series'), xs:QName('id')),
  cts:element-reference(xs:QName('series'))
  ))
Run Code Online (Sandbox Code Playgroud)

但是,<series>如果<series>每个文档只有一个,那么这些对将是准确的.否则,你将得到所有的组合series/@idseries每个文档,无论他们是否来自相同的元素.

如果是这种情况,那么您的选择是更改文档(或使用片段根,这可能不是一个好主意),或使用另一种方法,如模板驱动提取,其中对可以投影到"支架 -关闭"索引,像行一样,然后与文档上下文分开查询.