XSLT 2.0, координирующий несколько режимов - PullRequest
0 голосов
/ 22 октября 2018

XSLT 2.0, таблица стилей и данные в https://xsltfiddle.liberty -development.net / bFDb2D3 / 4

Я преобразовываю средневековые документы, закодированные в tei-xml, в веб-страницы, где пользователь может переключатьсямежду двумя различными видами документов, а также увидеть перевод и различные сноски ( например ).Для этого требуется несколько слоев обработки:

  • Две латинские версии ('inter' и 'diplo'), между которыми пользователь может переключаться (получен из одной и той же разметки tei)
  • Переведенная версия почти без преобразований (только форматирование абзаца и курсив)
  • Критический аппарат с использованием сносок # a, b, c и т. Д.
  • Исторические сноски с использованием сносок # 1, 2, 3 и т. Д..

Я использую modes для обработки уровней обработки, и каждый режим сам по себе работает нормально, но вместе они пропускают выходные данные.

Что должно быть выведено:

  1. <div class="inter"><p> со всеми режимами преобразования inter + fn-add-marker [это должно содержать <a href>, надстрочные буквы и цифры в тексте]

  2. <div class="diplo"><p> с режимом всех преобразований diplo + fn-add-marker [здесь должно быть [текст], номера строк, надстрочные буквы и цифры в тексте]

  3. <div><p> с переводами

  4. <div> с критическими приборами

  5. <div> со сносками

Вывод XSLTfiddle:

  1. URL и надстрочные буквы в порядке! пропущенные надстрочные цифры (режим fn-add-marker)
  2. Надстрочные буквы ок!Строка # и [текст] нормально , за исключением случаев, когда внутри <persName> или <placeName> (т. Е. <xsl:template match="tei:lb"> <xsl:template match="tei:supplied">) и пропущенные надстрочные числа (режим fn-add-marker)
  3. ок!
  4. ок!
  5. ок!

Что касается # 2, то недостающие строка # и [текст] выглядят какрезультат шаблонов, которые обрабатывают <persName> и <placeName>, не передавая другим шаблонам?(шаблоны в строках 173-218)

Все шаблоны, относящиеся к режиму fn-add-marker, находятся в строках 41-77.

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

1 Ответ

0 голосов
/ 22 октября 2018

В основном в XSLT 2, как только вы работаете с именованными режимами, вам необходимо убедиться, что в шаблоне, принадлежащем определенному режиму, например, mode="foo", вы используете, например, mode="foo" или более общий mode="#current" в любомxsl:apply-templates внутри, чтобы обеспечить обработку в этом режиме.Подробнее см. https://www.w3.org/TR/xslt20/#element-apply-templates.

В https://xsltfiddle.liberty -development.net / gWmuiK7 Я пытался XSLT исправить вашу таблицу стилей, а затем https://xsltfiddle.liberty -development.net/bFDb2D3/5 вы можете увидеть результат применения фиксированной таблицы стилей.Не уверен, что этот программный подход является правильным инструментом, но он может помочь продемонстрировать предложенный режим использования mode на xsl:apply-templates.

Тогда я думаю, что вам нужно убедиться, что вы обрабатываете добавленные маркеры в двухновые режимы:

<!-- adds fn numbers -->
<xsl:template match="tei:date[@type='deposition_date']" mode="inter dilpo">
    <xsl:apply-templates mode="#current"/>
    <xsl:apply-templates select="." mode="number"/>
</xsl:template>

<xsl:template match="tei:note[@type='public'] | tei:fn-marker" mode="inter diplo">
    <xsl:apply-templates select="." mode="number"/>
</xsl:template>

<xsl:template match="tei:date[@type='deposition_date'] |  tei:note[@type='public'] | tei:fn-marker" mode="number">
    <sup>
       <xsl:number count="tei:date[@type='deposition_date'] |  tei:note[@type='public'] | tei:fn-marker" format="1" level="any"/>
    </sup>
</xsl:template>
<!-- end of footnote transformations -->

https://xsltfiddle.liberty -development.net / bFDb2D3 / 6 строки от 51 до 66.

...