У меня есть файлы tei-xml, в которых я пометил именованные объекты в средневековых документах, в частности имена людей, используя <persName/>
. Простой пример:
<persName nymref="#Bernard_Faure_Senior">Bernardus Fabri senior</persName>
Однако в рукописи часто встречаются имена, где мне нужно сделать пометку «Raimunda uxor Bernardi Fabri» (т.е. «Раймунда, жена Бернара Фора»). Здесь я размечаю оба имени во вложенном виде:
<persName nymref="#Raimunda_Faure">Raimunda uxor
<persName nymref="#Bernard_Faure_Senior">Bernardi Fabri
senior</persName></persName>
Как правило, это не проблема для запроса данных. Однако я хочу вывести через XSLT 2.0 следующее для веб-страницы, где каждое имя превращается в URL-адрес, указывающий на собственную веб-страницу этого человека (используя @nymRef
). Вышеприведенное должно вывести это:
<a href="www.foo.com/person/Raimunda_Faure">Raimunda
uxor</a><a href="www.foo.com/person/Bernard_Faure_Senior">Bernardi
Fabri<a>
(т.е. ...etiam nec tortor erat Raimunda uxor Bernardi Fabri est leo cursus magna, maximus finibus...)
Более того, бывают случаи, когда происходит следующее (два имени, вложенных в одно):
<persName nymref="#Raimunda_Faure">Raimunda uxor
<persName nymref="#Bernard_Faure_Senior">Bernardi Fabri
senior</persName> matris
<persName nymRef="Bernard_Faure_Junior">Bernardi
junior</persName></persName>
(Хотя никогда не бывает случая, когда <persName>
вложен в три раза)
Я совершенно не понимаю, как рекурсивно различать и обрабатывать //persName[x]
и //persname[x]//persName[x]
, чтобы сделать их отдельными URL-адресами.
URL-адрес генерируется из статического значения + after-substring(//tei:persName/@nymRef,'#')
. Очевидно, что простой оператор XSL возвращает ошибку кардинальности:
concat('www.foo.com/person',after-substring(//tei:persName/@nymRef,'#'))
Заранее большое спасибо за любую помощь.