Критический аппарат TEI, с двойной оконечной точкой;Как работать с XSL, генерирующим HTML - PullRequest
1 голос
/ 29 июня 2011

Мне нужно обработать следующую структуру XML:

<p>[1] Intencio <emph rend="italic">nostra</emph>
  <anchor xml:id="AJH-L.1.1"/>de<anchor xml:id="AJH-L.1.2"/> some more like this..
</p>
<app from="#AJH-L.1.1" to="#AJH-L.1.2">
  <rdg wit="#V">in</rdg>
</app>

в нечто вроде:

<div>[1] Intencio <span class='italic'>nostra</span>
  de<a href='AJH-L.1.1'>1</a> and so on..
</div>
<div class='appEntry'>
  <span class='rdg'>in</span>
</div>

В то время как 1 означает верхний индекс.

У меня нет проблем с созданием фактического устройства, но с созданием сносок, потому что информация о соответствующих якорях поступает от внешних элементов устройства.

Кроме того, я должен упомянуть, что может быть дополнительный элемент приложения от якоря-1 до якоря-4 одновременно.

Я видел вопрос о том, как выбирать текст между такими псевдопересекающимися элементами, и это мне очень помогло. Но я не могу найти решения этой проблемы.

Должно быть решение по такому стандартному методу в TEI, но я не могу его найти, и я был бы очень рад, если бы у кого-нибудь были какие-либо предложения.

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

1 Ответ

0 голосов
/ 30 июня 2011

Итак, вот более сложный пример XML, который также включает проблему перекрытия.

<div type='subdivision'>
  <p>
    ....
     <anchor xml:id="AJH-L.2.63"/>intellectus cum re que sentitur <anchor
     xml:id="AJH-L.2.64"/>in<anchor xml:id="AJH-L.2.65"/> apprehensione<anchor
     xml:id="AJH-L.2.66"/>
    ....
  </p>
  ....
  <app from="#AJH-L.2.64" to="#AJH-L.2.65">
    <rdg wit="#H #M #N #P #R #V">-</rdg>
  </app>
  <app from="#AJH-L.2.63" to="#AJH-L.2.66">
    <rdg wit="#M">- <emph rend="italic">hom.</emph></rdg>
  </app>
  ....
</div>

Мои шаблоны XSLT на данный момент:

    <xsl:template match="TEI:anchor">
      <xsl:variable select="@xml:id" name="anchorId"/>
      <xsl:for-each select="ancestor::TEI:p/TEI:app[@to=concat('#',$anchorId)]">
        <a class="rs" name="rs_{count(preceding::TEI:app)+1}"
          href="#app_{count(preceding::TEI:app)+1}">
          <xsl:value-of select="count(preceding::TEI:app)+1"/>
        </a>
      </xsl:for-each>
    </xsl:template>

    <xsl:template match="TEI:app">
    <xsl:variable select="substring(@from,2)" name="from"/>
    <xsl:variable select="substring(@to,2)" name="to"/>
    <table class="appEntry">
      <tr rowspan="{count(TEI:rdg)+1}">
        <td>
          <a name="app_{position()}" href="#rs_{position()}">
            <xsl:value-of select="position()"/>
          </a>
        </td>
        <td>
        <!-- the referenced text from between the anchors -->
           <xsl:value-of select="//TEI:div[current()]//text()[preceding::TEI:anchor[@xml:id=$from] and following::TEI:anchor[@xml:id=$to]]"/>
          <xsl:for-each select="TEI:rdg">
            <tr>
              <td>
                <!-- all readings -->
                <xsl:value-of select="."/>
              </td>
            </tr>
          </xsl:for-each>
        </td>
      </tr>
    </table>
  </xsl:template>

И полученный результат должен выглядеть следующим образом:

<div class="maintext">
  ....
  intellectus cum re que sentitur in <a href="#app_32" name="rs_32" class="rs">32</a>
  apprehensione <a href="#app_33" name="rs_33" class="rs">33</a>
  ....
</div>
<div class="apparatus">
  ....
  <tr>
    <td><a href="#rs_32" name="app_32">32</a><td>
    <td>in</td>
    <td> - </td>
  </tr>
  <tr>
    <td><a href="#rs_33" name="app_33">33</a><td>
    <td>intellectus cum re que sentitur </td>
    <td>- hom.</td>
    </tr>
  ....
</div>

За исключением хаотичного стола, это, кажется, работает нормально. Это не было вуду, как я думаю, как только я сделал правильный старт.

Надеюсь, я мог бы уточнить свой вопрос и дать хороший ответ. Что ты думаешь?

привет, Timo

...