簡體   English   中英

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

[英]How to return all elements in an element range index in Marklogic

我的XML中有以下元素:

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

我想要做的是盡可能以最具性能意識的方式獲取數據庫中的所有系列值以及匹配的@id值。 我在<series/>上設置了元素范圍索引,並在@id上設置了屬性范圍索引。 我已經嘗試過使用cts:element-values() ,它可以很好地獲取系列元素值,但我無法弄清楚如何返回元素和匹配的id值。

我正在尋找的最終結果應該是這樣的:

iot Institute of Theology 

您可以使用cts:value-tuples獲取索引值cts:value-tuples

例如,這將返回一對series/@idseries

cts:value-tuples((
  cts:element-attribute-reference(xs:QName('series'), xs:QName('id')),
  cts:element-reference(xs:QName('series'))
  ))

但是,如果每個文檔只有一個<series> ,則對只能在<series>准確。 否則,您將獲得每個文檔的series/@idseries所有組合,無論它們是否來自同一元素。

如果是這種情況,那么您的選擇是更改文檔(或使用片段根,這可能不是一個好主意),或使用另一種方法,如模板驅動提取 ,其中對可以投影到“支架 -關閉“索引,像行一樣,然后與文檔上下文分開查詢。

通過對wst答案的一些小改動,我能夠解決這個問題。 我正在使用的XML確實每個文檔都有多個<series>元素,但我通過在cts:value-tuples()使用“proximity = 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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM