XSLT Fiddle здесь: https://xsltfiddle.liberty -development.net / bFDb2Dh / 2
В XSL 2.0 я получаю небольшой набор узлов из функции поиска eXist-db Lucene, которая возвращает исходный XML, но оборачивает поисковый термин в <exist:match/>
. Поэтому я выполняю поиск по tei:seg
и получаю следующее (которое я обертываю при выводе в дополнительный элемент для последующей обработки):
<doc>
<url>http://localhost:8081/exist/apps/deheresi/doc/MS609-0454</url>
<seg xmlns="http://www.tei-c.org/ns/1.0" type="dep_event" subtype="event" xml:id="MS609-0454-2" corresp="#MS609-0453-7">Item. Dixit<lb break="y" n="11"/>quod
<persName nymRef="#abbot_of_Saint_Papoul" role="npar">abbas de
<placeName nymRef="#Saint-Papoul_Aude">Sancto Papulo</placeName>
</persName> ceperat
<persName nymRef="#heretics_not_named" role="par">duos hereticos</persName> et
<persName nymRef="#Arnald_Savauza_SML-AU" ana="#pFreeHer" role="par">Arnaldus de Savauza</persName> volebat manulevare dictos hereticos. Et rogavit
ipsum<lb break="y" n="12"/>testim et
<persName nymRef="#Arnald_Forner_SML-AU" ana="#pFreeHer" role="par">Arnaldum Fornier</persName> et
<persName nymRef="#Raimund_Forner_SML-AU" ana="#pFreeHer" role="par">Raimundum Fornier</persName>, fratres,
quod irent cum eo
ad abbatem de <placeName type="event_loc" nymRef="#Saint-Papoul_Abbey">Sancto<lb break="y" n="14"/>Papulo</placeName>
et manulevarent hereticos. Et dictus
<persName nymRef="#Arnald_Savauza_SML-AU" ana="#pFreeHer" role="ref">Arnaldus de Savauza</persName>
dixit quod dictus abbas promiserat ei quod redderet sibi dictos<lb break="y" n="15"/>
hereticos pro mille <exist:match xmlns:exist="http://exist.sourceforge.net/NS/exist">solidis</exist:match> tholosanis. Et
<persName nymRef="#Bernard_Alzeu_SML-AU" ana="#pFreeHer" role="ref">Bernardus Alzeus</persName> et
<persName nymRef="#Ysarn_de_Gibel_SML-AU" ana="#pFreeHer" role="ref">Ysarnus de Gibel</persName> portabant illos denarios.
Sed non potuerunt dictos hereticos ma<lb break="n" n="16"/>nulevare.
<date type="event_date" when="1237">Et sunt anni VIIIor vel circa.</date>
</seg>
</doc>
В XSLT я выводил это в HTML с некоторыми преобразованиями. Однако вывод выглядит так:
<td>Item. Dixit quod
abbas de
Sancto Papulo
ceperat
duos hereticos et
Arnaldus de Savauza volebat manulevare dictos hereticos. Et rogavit
ipsum testim et
Arnaldum Fornier et
Raimundum Fornier, fratres,
quod irent cum eo
ad abbatem de Sancto Papulo
et manulevarent hereticos. Et dictus
Arnaldus de Savauza
dixit quod dictus abbas promiserat ei quod redderet sibi dictos
hereticos pro mille <span class="search-hit">
<a href="http://localhost:8081/exist/apps/deheresi/doc/MS609-0454">
solidis</a></span> tholosanis. Et
Bernardus Alzeus et
Ysarnus de Gibel portabant illos denarios.
Sed non potuerunt dictos hereticos manulevare.
Et sunt anni VIIIor vel circa.
</td>
Но я бы хотел, чтобы конечный результат был сокращен с помощью многоточия:
<td>...dictus abbas
promiserat ei quod redderet sibi dictos
hereticos pro mille <span class="search-hit"><a
href="http://localhost:8081/exist/apps/deheresi/doc/MS609-0454">
solidis</a></span> tholosanis. Et
Bernardus Alzeus et
Ysarnus de Gibel portabant illos...
</td>
Где вывод текста по обе стороны от содержимого <span class="search-hit"/>
ограничен x
количеством символов. (Далее, если возможно, примените normalize-space()
для устранения проблем с пробелами в исходном документе.)
Я не нашел идей, как подойти к этому в рамках текущего преобразования XSL, только в постобработке.
Заранее большое спасибо.