У меня большой список имен (с биографическими данными) в файле people.xml
.Эти люди появляются в случайных местах в другом файле corpus.xml
.Они «связаны» с @xml:id
.
. Таким образом, в файле people.xml
есть записи типа
<person xml:id="john_foo"/>
<person xml:id="ann_foo"/>
<person xml:id="sally_foo"/>
...
. И в файле corpus.xml
мы можем найтиэти те же самые xml: идентификаторы (где угодно в документе) в @nameref
<corpus>
<p>
<persName nameref="#john_foo" role="a"/>
<persName nameref="#ann_foo" role="g"/>
<s>
<persName nameref="#john_foo" role="g"/>
</s>
</p>
<p>
<persName nameref="#sally_foo" role="a"/>
<d>
<persName nameref="#sally_foo" role="p"/>
</d>
</p>
...
<corpus>
Я хочу проверить (используя XSL 3.0, Saxon) каждый people.xml//@xml:id
на существование в corpus.xml/corpus//persName/@nameref
НО только когда @role
соответствует определенному значению.В этом случае я хочу вернуть «положительный результат», только если @role="a"
Я пытаюсь использовать для этого ключи, но ничего не возвращается:
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="3.0">
<xsl:key name="namerefs" match="corpus" use=".//persName[@role='a']"/>
<xsl:param name="documt" select="doc('corpus.xml')"/>
<xsl:template match="person">
<!-- test if exists @xml:id + @role="a" -->
<xsl:if test="key($namerefs, concat('#',@xml:id) ,$documt")>if found, do something here</xsl:if>
</xsl:template>
</xsl:stylesheet>
Я думаю, что у меня нет доступа к нужному узлу в ключе?
Большое спасибо заранее.
nb.Обновлено для различных опечаток