Исходя из этого вопроса , мне удалось решить одно совершенно неудовлетворительное решение для доступа к 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()
.
Если что, надеюсь, этот пост поможет будущим поисковикам столкнуться с той же проблемой.