Не удается правильно отобразить xml-текст в XQuery

#xquery #exist-db #exide

Вопрос:

У меня есть XML-файл, и мне нужно отобразить текст в HTML в eXist-db с помощью XQuery. В тексте каждое слово должно иметь комментарий с помощью функции наведения, что я уже сделал. Проблема в том, что в XML-файле у меня есть теги для абзаца (тег ab), для слова (тег rs), но у меня также есть знаки препинания или некоторые другие слова или некоторые части слов, которые находятся за пределами тега rs. Вот фрагмент XML-файла:

       <ab>
           
            <rs type="pers" key="66">[7125.5]მე</rs>, 
            
            <rs type="pers" key="511">ტო[7125.1]ბი</rs>, 
            
            <rs type="pers" key="510">გზათა</rs> 
            
            <rs type="pers" key="367">ჭტ͠ბისათ</rs>
            
            <rs type="pers" key="509">ვიდ</rs> 
            <supplied reason="lost">ო</supplied>
            
            და
            
            <rs type="pers" key="513">სიმ͠რთლისათა</rs>
            
            <supplied reason="lost">
            <rs type="pers" key="523">ყოველთა</rs> 
            
            <rs type="pers" key="763">დღეთა</rs> 
            
           <rs type="pers" key="1509">ცხორებისა</rs>
                
            </supplied> 
            
            <rs type="pers" key="417">ჩ͠მისათა</rs>,
            
            და.
                
            </ab>
 

и это мой код, как я генерирую текст

 xquery version "3.1";

module namespace letter="http://exist-db.org/db/apps/tobi-oshki/modules/letter";
import module namespace templates="http://exist-db.org/xquery/templates" ;
import module namespace config="http://exist-db.org/db/apps/tobi-oshki/config" at "config.xqm";
declare namespace tei="http://www.tei-c.org/ns/1.0";

declare function letter:text_orig($node as node(), $model as map())
{
    let $resource := collection('/db/apps/Tobi-oshki/data')
for $ab in $resource//tei:div[@type="original"]/tei:ab
for $item in tokenize($ab)

  return
<p>
{
    for $rs in $ab//tei:rs

let $note := $resource//tei:div[@type="notes"]/tei:note[@n = $rs//tei:anchor/@n]
 return
if ($item eq $rs) then
  if(data($rs/@key)) then
      if ($note) then
    <span data-toggle="tooltip" data-placement="top" 
         title="{letter:text_lem(data($rs/@key))} note: {data($note/@n)}.{$note} "> {$rs/data()} </span>
        else
             <span data-toggle="tooltip" data-placement="top" 
         title="{letter:text_lem(data($rs/@key))} "> {$rs/data()} {" "}</span>
else
   ()
else
    $item
}
 

};

Поэтому в коде, который я получаю файл, я перебираю абзацы и возвращаю абзацы с

элементы. внутри этого цикла я перебираю слова и перебираю каждый пункт, который у меня есть в абзаце. Я подумал, что если бы я сравнил слова ($rs = тег rs) и каждый элемент в тексте ($item — который содержит все) Я бы напечатал слово и комментарии, и если бы они не были равны, я бы также напечатал потерянные элементы, такие как»,», но цикл работает неправильно, он печатает только элемент $item и несколько раз.

Я хочу отобразить весь текст, но мне также нужно, чтобы тег rs помещал комментарии к нему, а также не терял другие символы, которые не имеют комментариев и не находятся в теге rs. Я надеюсь, что объяснение будет ясным. Ключевым элементом является просто поиск комментариев, относящихся к словам. введите описание изображения здесь Вот как выглядит страница прямо сейчас: текст есть, но некоторые слова и символы, которых нет в теге rs, потеряны.

Комментарии:

1. Пожалуйста, приведите пример желаемого выходного XML на основе вашего входного примера.

2. Ваш запрос ссылается на элементы и пространства имен, не включенные в ваш пример ввода. Если вы ожидаете полезного ответа, пожалуйста, приведите воспроизводимый пример.