XSLT 2.0 - xsl: номер не соответствует порядку номеров - PullRequest
0 голосов
/ 05 ноября 2018

В XSLT 2.0 я обрабатываю документы tei: xml в HTML. Во время этого процесса я выводил номера сносок за два прохода по двум причинам.

Сначала добавляем числа в самом текстовом теле, выбирая определенные элементы, к которым прикрепляются / заменяются на <sup> (для чисел верхнего индекса).

Во-вторых, в нижнем колонтитуле div Я создаю список тех же номеров сносок с различными примечаниями.

Все это прекрасно работает, во многом благодаря полученной помощи здесь на SO.

Но во время тестирования сотен документов я заметил проблему с порядком номеров.

На первом шаге выводятся числа в правильном порядке (строки 9-45). Второй шаг выводит элементы в неправильном порядке (строки 73-99). Скрипт XSLT здесь демонстрирует это просто и ясно в представлении HTML: https://xsltfiddle.liberty -development.net / jyH9rNj

Поместите в простое сравнение, вывод выглядит так

body footnote #        footnote div footnote #
     1                          3
     2                          1
     3                          2

Я полагаю, что это вопрос обработки заказа, но после попытки настроить его через modes и priority я не смог решить эту проблему. Похоже, что это связано с перемещением элемента seg перед тем, как дать ему номер ...

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

Примечание: числа для seg/@corresp и date могут появляться только один раз за каждый максимум <seg>; note теоретически может появляться несколько раз.

1 Ответ

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

Я думаю, что вы хотите исправить переменную до

<xsl:variable name="footnote-sources" select="$fn-markers-added//tei:date[@type='deposition_date'] |                            
            $fn-markers-added//tei:note[@type='public'] | $fn-markers-added//tei:fn-marker"/>

, так как вы больше не хотите нумеровать seg s, а fn-marker s, в которые они были преобразованы на промежуточном этапе.

Тогда вам также нужно настроить шаблон на

<!-- outputs each item to a <p> in footnote <div> -->
<xsl:template match="*[. intersect $footnote-sources]" mode="build_footnotes">
    <xsl:choose>    
    <xsl:when test="self::tei:date[@type='deposition_date']">
            <xsl:element name="p">
                <sup>
                    <xsl:number count="*[. intersect $footnote-sources]" format="1" level="any"/>
                </sup> this is the foo /date (that should be footnote #1)
            </xsl:element>
        </xsl:when>
        <xsl:when test="self::tei:fn-marker">
            <xsl:element name="p">
                <sup>
                    <xsl:number count="*[. intersect $footnote-sources]" format="1" level="any"/>
                </sup> this is the foo seg/@corresp (that should be footnote #3)
            </xsl:element>
        </xsl:when>  
        <xsl:when test="self::tei:note[@type='public']">
            <xsl:element name="p">
                <sup>
                    <xsl:number count="*[. intersect $footnote-sources]" format="1" level="any"/>
                </sup> this is the foo /note (that should be number footnote #2)
            </xsl:element>
        </xsl:when>

        <xsl:otherwise/>
    </xsl:choose>
</xsl:template>

То есть https://xsltfiddle.liberty -development.net / jyH9rNj / 1 показывает

1 this is the foo /date (that should be footnote #1)

2 this is the foo /note (that should be number footnote #2)

3 this is the foo seg/@corresp (that should be footnote #3)

очевидно, что объяснение "это foo seg/@corresp сейчас немного вводит в заблуждение, поскольку это действительно fn-marker, размещенный ранее на шаге преобразования.

...