Замечание: Такой образец соответствует даже элементу p, являющемуся элементом этого документа, поскольку корень документа является родителем элемента документа.

Хотя семантика образцов формулируется косвенно в терминах обработки выражений, смысл образца легко понять сразу, не прибегая к терминологии обработки выражений. Символ | в образце обозначает альтернативу. Соответствие образцу с одним или несколькими символами |, разделяющими альтернативы, засчитывается если есть соответствие одной из этих альтернатив. Для образца, состоящего из последовательности StepPattern–ов, разделенных / или //, соответствие проверяется справа налево. Соответствие образцу засчитывается только если есть соответствие самому правому StepPattern, а соответствующий элемент отвечает остальной части образца. Если разделителем является /, то таким элементом может быть только родитель, если же разделителем является //, то в качестве такого элемента может использоваться любой из предков. Соответствие StepPattern, использующему ось child, засчитывается если для данного узла NodeTest дает true, а сам узел не является узлом атрибута. Соответствие StepPattern, использующему ось attribute, засчитывается если для данного узла NodeTest дает true, а сам узел является узлом атрибута. Если присутствует [], то в StepPattern сперва обрабатывается PredicateExpr, причем проверяемый узел используется как узел контекста, а в качестве контекстного набора узлов берутся узлы, которые имеют общего родителя с узлом контекста и соответствуют NodeTest. Однако если проверяемый узел является узлом атрибута, то в этом случае контекстный набор узлов – это все атрибуты, имеющие с проверяемым атрибутом общего родителя и соответствующие NameTest.

Например,

appendix//ulist/item[position()=1]

соответствует узлу тогда и только тогда, когда выполняются все следующие условия:

NodeTest item дает true для данного узла, а сам узел не является узлом атрибута, иными словами, данный узел является элементом item

обработка PredicateExpr position()=1 дает true, если данный узел берется как узел контекста, а набор элементов item , имеющих с ним общего родителя, берется как контекстный набор узлов

данный узел имеет родителя, отвечающего условию appendix//ulist , это будет так, если этот родитель является элементом ulist , предком которого является элемент appendix.

5.3 Определение правил шаблона

<!– Category: top-level-element ->

<xsl:template

match = pattern

name = qname

priority = number

mode = qname >

<!– Content: ( xsl:param *, template ) ->

</xsl:template>

Правило шаблона задается элементом xsl:template. Атрибут match соответствует образу, который идентифицирует исходные узел или узлы, к которым это правило применяется. Если элемент xsl:template не имеет атрибута name, атрибут match обязателен (см. [6 Именованные шаблоны]). Если в значении атрибута match содержится VariableReference, фиксируется ошибка. Содержимое элемента xsl:template является шаблоном, который обрабатывается если данное правило шаблона задействовано.

Например, документ XML может содержать:

This is an <emph>important</emph> point.

Приведенное далее правило шаблона соответствует элементам emph и создает объект форматирования fo:inline-sequence, имеющий свойство font-weight со значением bold.

<xsl:template match='emph'>

<fo:inline-sequence font-weight='bold'>

<xsl:apply-templates/>

</fo:inline-sequence>

</xsl:template>

Примечание: В примерах этого документа префикс fo: используется для пространства имён http://www.w3.org/1999/XSL/Format (пространства имён объектов форматирования, определенных в [XSL] ).

Как описано далее, элемент xsl:apply-templates рекурсивно обрабатывает непосредственные потомки данного исходного элемента.

5.4 Использование правил шаблона

<!– Category: instruction ->

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату
×