Input:
<relations>
<relation>
<isIdenticalInternationalStandardOf id="AssetID" metadataStatus="Publishable">1234</isIdenticalInternationalStandardOf>
<isIdenticalInternationalStandardOf id="PrimaryDesignator">abc</isIdenticalInternationalStandardOf>
</relation>
<relation>
<isIdenticalRegionalStandardOf id="AssetID" metadataStatus="Publishable">1234</isIdenticalRegionalStandardOf>
<isIdenticalRegionalStandardOf id="PrimaryDesignator">abc</isIdenticalRegionalStandardOf>
</relation>
<relation>
<supersededBy id="AssetID" metadataStatus="Publishable">5647</supersededBy>
<supersededBy id="PrimaryDesignator">pqr</supersededBy>
</relation>
<relation>
<replacedBy id="AssetID" metadataStatus="Publishable">1234</replacedBy>
<replacedBy id="PrimaryDesignator">abc</replacedBy>
</relation>
<relation>
<supersededBy id="AssetID" metadataStatus="Publishable">1234</supersededBy>
<supersededBy id="PrimaryDesignator">xyz</supersededBy>
</relation>
<relation>
<isIdenticalInternationalStandardOf id="AssetID" metadataStatus="Publishable">1234</isIdenticalInternationalStandardOf>
<isIdenticalInternationalStandardOf id="PrimaryDesignator">abc</isIdenticalInternationalStandardOf>
</relation>
<relation>
<isIdenticalInternationalStandardOf id="AssetID" metadataStatus="Publishable">1234</isIdenticalInternationalStandardOf>
<isIdenticalInternationalStandardOf id="PrimaryDesignator">abc</isIdenticalInternationalStandardOf>
</relation>
</relations>
Я смог найти дубликат из ввода, вот код:
let $data := $each-search-copy/relations
let $map := map:map()
let $uniqueList :=
for $outer at $i in $data/relation
for $inner at $j in $data/relation
where $i ne $j
return
if(fn:deep-equal($outer, $inner)) then
if(fn:exists(map:get($map, xs:string($j)))) then () else map:put($map, xs:string($i), xs:string($j))
else ()
let $duplicate :=
for $each at $i in $data/relation
return
if(fn:exists(map:get($map, xs:string($i))))
then (
fn:string-join((xdmp:quote($each), " "), "|")
) else ()
поиск дублирующего узла завершен. Теперь я хочу написать запрос на обновление транзакции, который будет хранить только уникальный список узлов.
если имеется многократное вхождение, оно должно быть удалено.
с помощью конструкции MAP я могу удалить, если есть дубликат, но не многократные вхождения.