содержащий количество узлов, которые соответствуют образцу count и принадлежат набору из текущего узла и всех узлов на всех уровнях документа, предшествующих в документе текущему узлу, за исключением всех узлов атрибутов и пространства имён (иными словами, объединенному множеству членов на осях preceding и ancestor-or- self ). Если указан атрибут from, то после первого узла рассматриваются только те узлы, предшествующие текущему узлу, которые соответствуют образцу from.
Затем полученный перечень чисел преобразуется в строку с помощью атрибутов, описанных в главе [7.7.1 Атрибуты преобразования чисел в строки] . В данном контексте значение каждого из этих атрибутов интерпретируется как шаблон значения атрибута. Строка, полученная после преобразования, подставляется в конечное дерево.
Следующий пример будет нумеровать записи в упорядоченном списке:
<xsl:template match='ol/item'>
<fo:block>
<xsl:number/><xsl:text>. </xsl:text>
<xsl:apply-templates/>
</fo:block>
</xsl:template>
Следующие два правила будут нумеровать элементы title. Правила предназначаются для документа, в котором есть несколько глав, затем следует несколько приложений, причем и главы, и приложения имеют разделы, а те, в свою очередь, содержат подразделы. Главы нумеруются как 1, 2, 3, приложения нумеруются как A, B, C, разделы нумеруются 1.1, 1.2, 1.3, разделы в приложениях нумеруются A.1, A.2, A.3.
<xsl:template match='title'>
<fo:block>
<xsl:number level='multiple' count='chapter|section|subsection' format='1.1 '/>
<xsl:apply-templates/>
</fo:block>
</xsl:template>
<xsl:template match='appendix//title' priority='1'>
<fo:block>
<xsl:number level='multiple' count='appendix|section|subsection' format='A.1 '/>
<xsl:apply-templates/>
</fo:block>
</xsl:template>
Следующий пример последовательно нумерует примечания в главе:
<xsl:template match='note'>
<fo:block>
<xsl:number level='any' from='chapter' format='(1) '/>
<xsl:apply-templates/>
</fo:block>
</xsl:template>
Следующий пример в HTML документе будет нумеровать элементы H4 , используя метки, состоящие из трех частей:
<xsl:template match='H4'> <fo:block>
<xsl:number level='any' from='H1' count='H2'/>
<xsl:text>.</xsl:text>
<xsl:number level='any' from='H2' count='H3'/>
<xsl:text>.</xsl:text>
<xsl:number level='any' from='H3' count='H4'/>
<xsl:text> </xsl:text>
<xsl:apply-templates/>
</fo:block>
</xsl:template>
7.7.1 Атрибуты преобразования числа в строку
Описанные далее атрибуты используются чтобы контролировать преобразование набора чисел в строку. Числа являются целыми и больше нуля. Все атрибуты являются необязательными.
Главным атрибутом является format. По умолчанию атрибут format имеет значение 1. Атрибут format разбивается на последовательность лексем, каждая из которых представляет собой максимальную последовательность alphanumeric символов или максимальную последовательность символов, не являющихся alphanumeric. Alphanumeric здесь означает любой символ, который имеет категорию Unicode Nd, Nl, No, Lu, Ll, Lt, Lm или Lo. Alphanumeric лексемы (лексемы формата) определяют формат, которым должен использоваться для каждого числа в списке. Если первая лексема является не alphanumeric, создаваемая строка начнется с этой лексемы. Если последняя лексема является не alphanumeric, создаваемая строка закончится этой лексемой. Не-alphanumeric лексемы, оказавшиеся между двумя лексемами форматирования, являются разделителями лексем, которые должны использоваться в списке для объединения чисел. n-ая лексема форматирования будет использоваться в списке для форматирования n-го числа. Если чисел больше чем лексем форматирования, для форматирования оставшихся чисел будет использоваться последняя лексема форматирования. Если лексемы форматирования отсутствуют, для форматирования всех чисел должна использоваться лексема форматирования 1. Эта лексема форматирования указывает строку, которая должна использоваться для представления числа 1. Каждое число, начиная со второго, будет отделено от предыдущего числа либо лексемой разделителя, которая предшествует лексеме форматирования, использованной для форматирования этого числа, либо, если лексемы разделителя отсутствуют, символом точки (.).
Лексемы форматирования включают как подмножество разрешенные значения атрибута type в элементе OL из HTML 4.0 и интерпретируются следующим образом:
Любая лексема, где последний символ имеет значение десятичной цифры 1 (указанное в базе