eXist-db Lucene / KWIC output - ссылка на URL для документа, который вызвал попадание в $ - PullRequest
0 голосов
/ 14 ноября 2018

В eXist-DB 4.4 мне удалось развернуть простой запрос Люцерна с выводом KWIC в виде таблицы.

У меня есть коллекция tei:xml документов, которая выглядит следующим образом:

<TEI xml:id="MS609-0001.xml">
 <text xml:id="MS609-0001">
   [...]
    <seg type="dep_event" subtype="event" xml:id="MS609-0001-1">
           <pb n="1r"/>
           <lb break="n" n="1"/>
           <date type="deposition_date" when="1245-05-27" cert="high">Anno
              Domini M° CC° XL° quinto VI Kalendas Iunii.</date>  
           <persName nymRef="#Arnald_Garnier_MSP-AU" role="dep">Arnaldus Garnerii</persName> 
           testis iuratus dixit quod vidit in 
           <placeName type="event_loc" nymRef="#home_of_Cap-de-Porc">domo 
              <persName nymRef="#Peire_Cap-de-Porc_MSP-AU" role="own">Petri de Sancto Andrea</persName>
           </placeName>
           <lb break="y" n="2"/>
           <persName nymRef="#Bernard_Cap-de-Porc_MSP-AU" role="her">B<supplied reason="expname">ernardum</supplied> de Sancto Andrea</persName>, 
           fratrem dicti Petri, et socium eius, hereticos. Et vidit ibi cum eis dictum
           <persName nymRef="#Peire_Cap-de-Porc_MSP-AU" ana="#uAdo" role="par">P<supplied reason="expname">etrum</supplied> de Sancto Andrea</persName> et 
           <persName nymRef="#Susanna_Cap-de-Porc_MSP-AU" ana="#uAdo" role="par">uxor dicti<lb break="y" n="3"/>Petri</persName>. Et 
           <persName nymRef="#Arnald_Garnier_MSP-AU" ana="#pAdo" role="par"/>ipse
           testis adoravit ibi dictos hereticos, sed non vidit alios adorare. Et 
           <date type="event_date" when="1239">sunt VI anni vel circa</date>. 
           <seg type="inq_int" subtype="specific_question">Et quando ipse testis exivit<lb break="y" n="4"/>domum invenit
                 <persName nymRef="#Guilhem_de_Rosengue_MSP-AU" key="inqint" ana="#pIntra" role="ref">Willelmus de Rozergue</persName> intrantem ad dictos hereticos.</seg>
        </seg>
        <seg>
          [...]
        </seg>
    [...]
  <text>
<TEI>

С помощью этой функции, вызывающей KWIC:

 xquery version "3.1";

 declare namespace tei="http://www.tei-c.org/ns/1.0";
 import module namespace kwic="http://exist-db.org/xquery/kwic";

 let $query := 
   <query>
     <wildcard>heret*</wildcard>
   </query>

 for $hit in collection('/db/apps/deheresi/data/')//tei:seg[ft:query(.,$query)]
 order by ft:score($hit) descending
 return
    kwic:summarize($hit, <config width="80" table="yes" />)

Я получаю, например, этирезультаты в виде таблицы:

<tr>
   <td class="previous">...ernardum de Sancto Andrea, 
           fratrem dicti Petri, et socium eius, </td>
   <td class="hi">hereticos</td>
   <td class="following">. Et vidit ibi cum eis dictum
           Petrum de Sancto Andrea et 
   ...</td>
</tr>
<tr>
   <td class="previous">...r dicti Petri. Et ipse
           testis adoravit ibi dictos </td>
   <td class="hi">hereticos</td>
   <td class="following">, sed non vidit alios adorare. Et 
           sunt VI anni vel circa...</td>
</tr>

Я хотел бы заключить текст в <td class="hi"/> в URL-адрес, указывающий на исходный документ, который можно просмотреть на сайте.Логика сайта достаточно «чиста», так что первая запись <td class="hi"> будет выглядеть следующим образом:

 <td class="hi"><a href="http://localhost:8081/exist/apps/deheresi/doc/MS609-0001">hereticos</a></td>

Где URL является конкататом

http://localhost:8081/exist/apps/deheresi/doc/ 

и значениемузла-предка соответствующего результата

 tei:text/@xml:id

(который всегда будет узлом-предком любого содержимого tei:seg, возвращаемого в запросе).

Замечуесть атрибут @link, доступный для параметра <config> в kwic:summarize(), но я не знаю, как динамически получить узлы исходного документа из возвращенного результата, чтобы заполнить его.

Большое спасибо заранее.

1 Ответ

0 голосов
/ 15 ноября 2018

Оказывается, что узел $hit разрешает доступ к остальной части исходного документа (или его копии в памяти). Таким образом, я смог построить URL как строку, используя $hit/ancestor

let $doclink :=  concat("http://localhost:8081/exist/apps/deheresi/doc/", $hit/ancestor::tei:text/data(@xml:id))                                                    

Затем введите эту строку в параметр функции @link:

 kwic:summarize($hit, <config width="80" table="yes" link="{$doclink}"/>)
...