У меня есть файлы tei-xml, в которых я размечал именованные объекты в средневековых документах, в частности имена людей, используя <persName/>
.Простой пример:
<persName nymref="#Bernard_Faure_Senior">Bernardus Fabri senior</persName>
Однако в рукописи часто встречаются имена, на которых мне нужно разметить «Raimunda uxor Bernardi Fabri» (т. Е. «Raimunda, жена Бернара Фора»).Здесь я размечаю оба имени в вложенном виде:
<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>
является вложеннымdeep)
Я совершенно заблудился относительно того, как рекурсивно различать и обрабатывать //persName[x]
и //persname[x]//persName[x]
, чтобы сделать их отдельными URL-адресами.
URL-адрес создается из статического значения +after-substring(//tei:persName/@nymRef,'#')
.Очевидно, что простой оператор XSL возвращает ошибку количества элементов:
concat('www.foo.com/person',after-substring(//tei:persName/@nymRef,'#'))
Заранее большое спасибо за любую помощь.