У меня работает следующий XQUERY в ExistDB (для документов XML, следующих по схеме TEI):
xquery version "3.1";
declare namespace tei="http://www.tei-c.org/ns/1.0";
let $data-collection := "/db/apps/deheresi/resources/documents"
let $people-collection := "/db/apps/deheresi/resources/documents/codes_people.xml"
for $msdoc in collection($data-collection)/tei:TEI[contains(@xml:id,'ms609')]
for $ordinal in $msdoc/tei:text/tei:front//tei:div[@type='registry_ordinal']/replace(@n, '#', '')
for $doctype in $msdoc/tei:text/tei:front//tei:div[@type='doc_type']/replace(@subtype, '#', '')
for $folio in $msdoc/tei:text/tei:front//tei:div[@type='folio']/replace(@n, '#', '')
for $nameref in $msdoc/tei:text/tei:body[1]/tei:p[1]/tei:seg[1]/tei:persName[@role = 'dep']/replace(@nymRef, '#', '')
for $persname in normalize-space(string-join(doc($people-collection)//tei:person[@xml:id = $nameref]))
return concat('<td>',$ordinal,'</td><td>',$folio,'</td><td>',$doctype,'</td><td>',$persname,'</td>')
Организация документов XML:
Есть700+ документов TEI, каждый с <TEI xml:id="foo_1.xml">
в качестве корневого узла (идентификатор документа увеличивается foo_1.xml, foo_2.xml, foo_3.xml и т. Д.) (Всегда в одном и том же месте)
Каждый документ TEI содержит один уникальный элемент, идентифицирующий человека <persName role="dep" nymRef="#unique_foo_name">
(не всегда в одном и том же месте в документе)
Отдельный документ XML codes_people.xml
, содержащий 1500+xml: идентификаторы разных людей
Функция выполняет следующие действия:
получает идентифицирующие tei:TEI/@xml:id
и tei:persName[@role="dep"]/@nymRef
из каждого xmlдокумент
С помощью tei:persName[@role="dep"]/@nymRef
я ищу имя в codes_people.xml/tei:person/xml:id="unique_foo_name"
Это все возвращает ожидаемые результаты ... кромеэто действительно очень медленно (4 секунды).Очевидно, что я тестирую на локальном компьютере, а не на сервере, но я хотел бы оптимизировать запросы перед тестированием на более мощных серверах.
ДОБАВЛЕНО ПО ЗАПРОСУ:
Версия ExistDB: 3.3.0
Пример выходных данных (конечной целью является таблица HTML)
<td>0001</td><td>1r</td><td>Deposition</td><td>Arnald Garnier</td>
<td>0002</td><td>1r</td><td>Deposition</td><td>Guilhem de Rosengue</td>
<td>0003</td><td>1r</td><td>Deposition</td><td>Hugo de Mamiros</td>
<td>0004</td><td>1r</td><td>Deposition</td><td>P Lapassa senior</td>
Заранее большое спасибо.
РЕДАКТИРОВАТЬ: я добавил больше информации в самостоятельнойответ ниже и ссылка на все файлы в Dropbox в комментариях.