Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ППТС-2 / Лабы / Lab4-03.doc
Скачиваний:
12
Добавлен:
12.05.2015
Размер:
596.99 Кб
Скачать

3.3.3. Вызов неименованных правил шаб­лона

Для применения правил шаб­лона (в которых не задан атрибут name) вXSLTиспользуется элемент-инструкцияxsl:apply-templates.

Этот элемент имеет следующий синтаксис:

<xsl:apply-templates

select="выражение"

mode="режим">

<!--

Содержимое: элементы xsl:sort или xsl:with-param

-->

</xsl:apply-templates>

Элемент xsl:apply-templatesполучает на входе последовательность узлов, соответствующих образцу, заданному в атрибутеmatchэлементаxsl:template. Необязательный атрибутselectзадает выражение, результатом которого является последовательность узлов, которая является выборкой из исходной последовательности узлов. Если ат­рибутselectне задан, то правила шаблона применяются ко всем дочерним узлам текущего узла, т.е. инструкция

<xsl:apply-templates/>

действует так же, как инструкция

<xsl:apply-templates select="child::node()"/>

В результате выполнения элемента xsl:apply-templatesполучается последовательность компонент, которая чаще всего добавляется к результирующей иерархической структуре.

Оба элемента xsl:templateиxsl:apply-templatesимеют необязательный атрибутmode. Если элементxsl:templateне имеет атрибутаmatch, то он не должен иметь и атрибутаmode. Если элементxsl:apply-templatesимеет атрибутmode, то он применяется только к тем правилам шаблона из элементовxsl:template, которые имеют атрибутmodeс тем же значением, либо имеют значение атрибутаmode, равное "#all". Если элементxsl:apply-templatesатрибутаmodeне имеет, то он применяется только к тем правилам шаблона из элементовxsl:template, которые также не имеют атрибутаmode, либо имеют значение атрибутаmode, равное "#default". В элементеxsl:apply-templatesсуществует два предопределенных имени режимов: "#default" (режим, действующий по умолчанию) и "#current" (текущий режим).

3.3.4. Создание узлов элементов и атрибутов вXslt

3.3.4.1. Элемент xsl:element

Каждому элементу документа XML соответствует узел элемента. Дочерними узлами узла элемента могут быть узлы его дочерних элементов, а также узлы комментариев, инструкций по обработке и текстовые узлы, которые пред­ставляют его непосредственное содержимое. Следует отметить, что узлы атрибутов не считаются дочерними узлами своего элемента, они лишь только ассоциируются с ними.

Узлы элементов в выходя­щем документе можно создавать с помощью литеральных элементов. Однако в тех случаях, когда требуется создать элемент с заранее неизвестным (например, вычисляемым во время выполнения) именем или создать элемент, принадлежащий пространству имен, известному обрабатывающему процессору, литеральные элементы не подходят.

Для создания элемента с вычисляемым названием используется элемент xsl:element, который имеет следующий синтаксис:

<xsl:element

name="имя"

namespace="пространство-имен"

inherit-namespaces="yes" | "no"

use-attribute-sets="имена"

type="имя-типа"

validation="strict" | "lax" | "preserve" | "strip"

>

<!--

Содержимое: конструктор последовательности

-->

</xsl:element>

Здесь обязательный атрибут nameуказывает имя создаваемого элемента. Этот атрибут может содержать шаблон значения, а значит, имя элемента может быть вычислено во время выполнения. Все остальные атрибуты элемента являются необязательными.

Атрибут namespaceуказываетURIпространства имен создаваемого элемента. Точно так же, как иname, этот атрибут может содержать шаблон значения, что позволяет вычислять пространство имен создаваемого элемента при помощи выражений.

В качестве значений атрибутов nameиnamespaceмогут быть использованы вычисляемые выражения, т.е. выражения, заключенные в фигурные скобки "{" и "}".

Атрибут inherit-namespacesзадает ("yes") или отменяет ("no") наследование узлов пространства имен для потомков создаваемого элемента. По умолчанию значение этого атрибута равно "yes".

Атрибут use-attribute-setsперечисляет (через пробел) имена наборов атрибутов, кото­рые должны быть включены в создаваемый элемент.

Атрибут typeзадает проверку создаваемого элемента на соответствие простому или комплексному типу, заданному в значении атрибута и определенному в схеме документа.

Атрибут validationопределяет действия по проверке действительности создаваемого элемента. Значение "strip" этого атрибута указывает, что новый элемент и все содержащиеся в нем узлы должны иметь типxs:untyped. Значение "preserve" указывает, что копируемые элементы сохраняют свой тип, а создаваемые элементы будут иметь типxs:untyped. Значение "strict" указывает, что создаваемые и копируемые элементы должны строго соответствовать своему типу, определенному в схеме документа (в случае такого несоответствия выдается сообщение об ошибке). Значение "lax" аналогично значению "strict", за исключением того, что в случае несоответствия сообщения об ошибке не выдается, а создаваемые или копируемые элементы будут иметь типxs:untyped.

Атрибуты typeиvalidationявляются взаимоисключающими, т.е. в элементе может быть задан только один из этих атрибутов.

Содержимым xsl:elementявляется конструктор последовательности, который создается процес­сором и затем включается в создаваемый элемент.

Соседние файлы в папке Лабы