Примечание: заголовок изменен, чтобы лучше отражать проблему.
Мои XML-документы содержат элемент <tei:seg @type @xml:id @corresp>
, который заключает в себе маленькие «истории».Атрибут @corresp
позволяет мне связать эти истории с главной историей.Например, все эти seg
связаны между собой своим @corresp
:
doc1.xml//seg[@type='dep_event' @corresp='#JKL' @xml:id='doc1-05']
doc2.xml//seg[@type='dep_event' @corresp='#JKL' @xml:id='doc2-06']
doc6.xml//seg[@type='dep_event' @corresp='#JKL' @xml:id='doc6-03']
Моя цель: когда шаблон XSLT находит @corresp
, найдите другие seg
в других документах с таким же@corresp
и выведите соответствующие им `@xml: id``
Итак, в приведенном выше примере, если текущим seg
было @xml:id='doc1-05'
, шаблон выводит список: Corresponds to doc2-06, doc6-03
Пока я не смогу решить текущие проблемы с коллекцией XSLT () в eXist-DB, я возвращаюсь к своему предыдущему решению: xml-документу TEI corpus, который содержит основной список всехсвязанные документы tei-xml через xi:include
.Таким образом, я предоставляю один узел документа, с помощью которого процессор может получить доступ ко всем XML-документам и выполнить поиск по ним.
Итак, я объявляю корпусный документ:
<xsl:variable name="corpus" select="doc('ms609_corpus.xml')"/>
Затем создайте key
для@corresp
:
<xsl:key name="correspkey" match="//tei:seg[@type='dep_event' and @corresp]" use="@corresp"/>
Затем я использую ключ с doc()
для поиска:
<xsl:when test="tei:seg[@type='dep_event' and @corresp]">
<xsl:variable name="correspvar"
select="data(self::seg[@type='dep_event' and @corresp]/@corresp)"/>
<xsl:text>Corresponds to </xsl:text>
<xsl:value-of select="data($corpus/(key('correspkey',$correspvar) except $correspvar)/@xml:id)" separator=", "/>
</xsl:when>
Возвращает результаты, но except
должен исключить текущий@corresp
.И все же он включен в результаты.