Коллекция eXist-db / XSLT / Saxon () медленная как патока (или ошибки с ограничением памяти) - PullRequest
0 голосов
/ 23 октября 2018

Исходя из этого вопроса , мне удалось решить одно совершенно неудовлетворительное решение для доступа к eXist-DB collection() из документа XSLT 2.0, загруженного из функции преобразования eXist-db / Xquery:

Файл XSLT объявляет переменную:

 <xsl:variable name="coll" select="collection('xmldb:exist:///db/apps/deheresi/data/collection_ms609.xml')"/>

Это указывает на созданный мною XML-файл каталога (для Саксонской документации ), который выглядит следующим образом, чтобы загрузить фактическая коллекция:

<collection stable="true">
  <doc href="xmldb:exist:///db/apps/deheresi/data/ms609_0001.xml"/>
  <doc href="xmldb:exist:///db/apps/deheresi/data/ms609_0002.xml"/>
  ...
  ...
  <doc href="xmldb:exist:///db/apps/deheresi/data/ms609_0709.xml"/>
  <doc href="xmldb:exist:///db/apps/deheresi/data/ms609_0710.xml"/>
</collection>

Это позволяет XSLT-файлу использовать ключ, который необходим для поиска по всем этим файлам:

<xsl:key name="correspkey" match="tei:seg[@type='dep_event' and @corresp]" use="@corresp"/>

<xsl:variable name="correspvar" select="self::seg[@type='dep_event' and @corresp]/@corresp"/>

<xsl:value-of select="$coll/(key('correspid',$correspvar) except $correspvar)/@id" separator=", "/>

Как есть, если у меня есть50 документов в каталоге, я получаю результат за 2 минуты;со всеми 710 я получаю ошибку Java GC через 4 минуты.

Я установил индексы на соответствующих узлах в eXist-DB, но это никак не влияет на производительность.Мне кажется, что Saxon работает «вне» оптимизаций eXist-DB, рассматривая eXist-DB как простую файловую систему.

(Что бы ни стоило, установка href="/db/apps/deheresi/data/ms609_0001.xml" не позволяет Саксону видеть документы.)

Я подозреваю, что все это объясняет, почему документация eXist-DB несуществующий.

Итак, я ищу решения для интенсивного поиска коллекций из XSLT 2.0, загруженных в eXist-DB Xquery transform().

Если что, надеюсь, этот пост поможет будущим поисковикам столкнуться с той же проблемой.

1 Ответ

0 голосов
/ 23 октября 2018

Общий архитектурный принцип: попробуйте приблизить поиск к данным.В этом случае это означает: используйте eXist, чтобы найти интересующие вас документы, не извлекайте все возможные документы-кандидаты из eXist, а затем попросите Saxon выполнить поиск.Выберите нужные документы в eXist XQuery, а затем передайте список этих документов Saxon в параметре таблицы стилей.

...