3 番目のタイプの要素 (eXist DB 内) を照会するために使用する要素のリストが 2 つあります。しかし、両方のクエリで見つかった結果のみが必要なので (つまり、初期パラメーターの 2 つのセットを満たす)、これら 2 つのサブ結果の交差を行います。
let $aList1 := for $elementB in $elementListB return //ElementA[ft:query(@referenceB, $elementB/@id)]
let $aList2 := for $elementC in $elementListC return //ElementA[ft:query(@referenceC, $elementC/@id)]
let $results := $aList1 intersect $aList2
問題は、追加情報を取得するために開始リストの各要素で呼び出す必要がある関数があることです。通常、私は次のようなことをします:
let $aList1 := for $elementB in $elementListB
let $additionalInfo := additionalInfoFunction($elementB)
return
<wrapper>
<additionalInfo>{$additionalInfo}</additionalInfo>
{
//ElementA[ft:query(@referenceB, $elementB/@id)]
}
</wrapper>
ただし、これを行うと、交差は値ではなく参照で機能するため、 $aList1
andの交差を実行できなくなり$aList2
ます。
additionalInfoFunction
次のように交差点の後に呼び出すことを考えました:
return for $result in $results
let $elementB := $elementListB[@id = $result/@referenceB]
let $additionalInfo := additionalInfoFunction($elementB)
return
<wrapper>
<additionalInfo>{$additionalInfo}</additionalInfo>
{
BLA BLA
}
</wrapper>
しかし、ここでの問題は、少数の要素しか含まない一方$elementListB
で、何百もの要素を含むことができるということです。これは、比較的高価であるため問題です。$elementListC
$results
additionalInfoFunction
ここに私が見ることができない巧妙な回避策はありますか?