Я пытаюсь найти следующий экземпляр внутри секции sec-type = 'reading'.
Пример XML:
<?xml version="1.0" encoding="US-ASCII"?>
<book>
<sec sec-type="reading">
<title>Section 1</title>
<p>Sample <bold>Bold</bold>Text <fn><label>1</label></fn> Some more text</p>
<!-- more variations of stuff at various levels -->
<sec>
<title>Section 1.1</title>
<p>Another paragraph with a footnote <fn><label>2</label></fn></p>
</sec>
<sec>
<title>Section 1.2</title>
<p>Another paragraph with a footnote <fn><label>3</label></fn></p>
</sec>
</sec>
<sec sec-type="reading">
<title>Section 2</title>
<p>Sample <bold>Bold</bold>Text <fn><label>6</label></fn> Some more text</p>
<!-- more variations of stuff at various levels -->
<sec>
<title>Section 2.1</title>
<p>Another paragraph with a footnote <fn><label>8</label></fn></p>
</sec>
<sec>
<title>Section 2.2</title>
<p>Another paragraph with a footnote <fn><label>9</label></fn></p>
</sec>
</sec>
</book>
Цель состоит в том, чтобы увидеть, последовательно ли упорядочены метки FN в разделе. Я пронумеровал второй раздел цифрами 6-9, чтобы было легче увидеть, работает ли он.
Вот что я хочу:
Footnote 1 [Next: 2]
Footnote 2 [Next: 3]
Footnote 3 [Next: ]
Footnote 6 [Next: 8]
Footnote 8 [Next: 9]
Footnote 9 [Next: ]
Возможная цель - вернуть предупреждение для Footnote 6 [Next: 8]
Это схематрон, который у меня так далеко. Это дает мне:
Footnote 1 [Next: 2]
Footnote 2 [Next: 3]
**Footnote 3 [Next: 6]**
Footnote 6 [Next: 8]
Footnote 8 [Next: 9]
Footnote 9 [Next: ]
Он находит следующий экземпляр сноски. Однако я не хочу, чтобы он пересек разделы - поэтому Footnote 3 [Next: 6]
не так.
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://purl.oclc.org/dsdl/schematron"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
queryBinding="xslt2" >
<!--check if footnotes are sequential within a reading -->
<pattern id="footnote-sequential">
<rule context="fn">
<let name="next" value="following::fn[1]/label/text()"/>
<assert test="number(label/text()) > 40">
Footnote <value-of select='label'/>
[Next: <value-of select="$next"/>]
</assert>
</rule>
</pattern>
</schema>
Примечание: number(label/text()) > 40
в утверждении есть, чтобы поймать все в данный момент. В конечном итоге это будет что-то вроде number(current)+1 != number(next)
Самое близкое, что я получил, это ancestor::sec[@sec-type='reading']//following::fn[1]/label/text()
- но это теряет «следующее» и дает мне странные результаты, подобные этому:
Footnote 1 [Next: 1236]
Footnote 2 [Next: 1236]
Footnote 3 [Next: 1236]
Footnote 6 [Next: 689]
Footnote 8 [Next: 689]
Footnote 9 [Next: 689]