Xml 如何在Marklogic中返回元素范围索引中的所有元素
我的XML中有以下元素: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(
<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)