Xquery поиск дублирующих идентификаторов - PullRequest
2 голосов
/ 06 октября 2010

У меня есть база данных XML, которая содержит элементы с идентификатором.Это все уникально.У них также есть вторичный идентификатор, который связывает их с похожим объектом в другой базе данных.Не все они уникальны.

Существует ли XQuery, который позволил бы мне идентифицировать все неуникальные идентификаторы?Я могу подсчитать, сколько из них используют Different-values ​​(), но это не помогает идентифицировать идентификаторы с дубликатами!

Пример XML: (каждый объект содержится в отдельном файле в базе данных eXist)

<object id="uniqueID123">
  <secondary identifier="nonUnique888"/>
</object>

<object id="uniqueID456">
  <secondary identifier="nonUnique888"/>
</object>

<object id="uniqueID789">
  <secondary identifier="Unique999"/>
</object>

Я бы хотел определить дублированную строку "nonUnique888".

Ответы [ 3 ]

3 голосов
/ 06 октября 2010

Следующий запрос возвращает все неуникальные идентификаторы:

let $sec := doc('source')/root/object/secondary
for $id in distinct-values($sec/@identifier)
where count($sec[@identifier eq $id]) gt 1
return $id
2 голосов
/ 07 октября 2010

Использование :

let $vSeq := /object/secondary/@identifier
  return
    $vSeq[index-of($vSeq,.)[2]] 

Прочитать объяснение здесь .

0 голосов
/ 10 мая 2016

использовать это хранилище кодов в XML-файле

let $path:="/db/test/all.xml"
let $a := xmldb:store( $col,'adub.xml',<root></root>)  

let $sec := doc($path)//profile
for $id in distinct-values($sec/mail)
where count($sec[mail eq $id]) gt 1
return 
 update insert  
            <profile>
                {$id}
                </profile>
   into  doc($a)/root 
...