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

Xml 如何在Marklogic中返回元素范围索引中的所有元素,xml,performance,indexing,xquery,marklogic,Xml,Performance,Indexing,Xquery,Marklogic,我的XML中有以下元素: <series id="iot" type="main">Institute of Theology</series> 可以使用获取索引值的元组 例如,这将返回一对series/@id和series: cts:value-tuples(( cts:element-attribute-reference(xs:QName('series'), xs:QName('id')), cts:element-reference(xs:QName(

我的XML中有以下元素:

<series id="iot" type="main">Institute of Theology</series>

可以使用获取索引值的元组

例如,这将返回一对
series/@id
series

cts:value-tuples((
  cts:element-attribute-reference(xs:QName('series'), xs:QName('id')),
  cts:element-reference(xs:QName('series'))
  ))
但是,如果每个文档只有一个
,则这些对仅在
内准确。否则,您将获得每个文档的
series/@id
series
的所有组合,无论它们是否来自同一元素


如果是这种情况,那么您可以选择更改文档(或者使用片段根,这可能不是一个好主意),或者使用另一种方法,例如,将对投影到一个“独立”索引中,如行,然后与文档上下文分开查询。

对wst的答案进行了一些小的更改,我就能够解决这个问题。我正在使用的XML确实在每个文档中有多个
元素,但我通过在
cts:value-tuples()中使用“approxity=N”选项找到了一个解决方法。将接近度设置为0将返回
@id
和最接近的系列标题

代码如下:

for $tuple in 
  cts:value-tuples((
        cts:element-attribute-reference(xs:QName("ia:series"), xs:QName('id')),
        cts:element-reference(xs:QName("ia:series"))
      ), "proximity=0")
let $values := json:transform-from-json($tuple)
return 
  for $value in $values
  let $id := $value/jsonNS:item[1]
  let $title := $value/jsonNS:item[2]
  return fn:concat($id, " | ", $title)

非常感谢。我能根据你的答案想出一个解决办法!好办法!只需注意,一个或多个位置索引可能是始终准确的必要条件。
for $tuple in 
  cts:value-tuples((
        cts:element-attribute-reference(xs:QName("ia:series"), xs:QName('id')),
        cts:element-reference(xs:QName("ia:series"))
      ), "proximity=0")
let $values := json:transform-from-json($tuple)
return 
  for $value in $values
  let $id := $value/jsonNS:item[1]
  let $title := $value/jsonNS:item[2]
  return fn:concat($id, " | ", $title)