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

5.3.7.2. Объявлениешаблона

Объявление шаблона задается элементом xsl:template, который имеет следующий синтаксис:

<xsl:template

match="образец"

name="имя"

priority="число"

mode="режимы"

as="тип"

>.

<!--

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

конструктор-последовательности

-->

</xsl:template>

Это объявление определяет шаблон, который содержит 0 и более элементов xsl:param, а также конструктор последовательности для создания набора узлов и/или атомарных значений.

Все атрибуты элемента xsl:templateявляются необязательными.

Атрибут matchзадает образец узлов дерева, для которых необходимо применить преобразования. Если элементxsl:templateсодержит атрибутmatch, он называетсяправилом шаблона.

Правила шаблона вызываются при помощи инструкции xsl:apply-templates.

Объявление шаблона также может иметь имя, определяемое атрибутом name. Такое объявление называетсяименованным шаблоном.

Именованные шаблоны вызываются при помощи инструкции xsl:call-template.

Именованные шаблоны могут вызываться вне зависимости от текущего контекста, и даже вести себя как функции – принимать на вход параметры и возвращать не­которые значения.

При объявлении шаблона нужно обязательно указать хотя бы один из атрибутов matchилиname, причем эти атрибуты могут присутствовать вxsl:templateодновременно. Если атрибутmatchне задан, атрибутыpriorityиmodeигнорируются.

Атрибут priorityиспользуется для определения числового значения, которое называ­ется приоритетом шаблона (чем больше число, тем больше приоритет). Это значение используется для раз­решения конфликтов шаблонов в случае, когда один узел может быть обра­ботан различными объявлениями шаблонов. Если атрибут неpriorityзадан, используются довольно сложные правила приоритета по умолчанию, зависящие от выражения в атрибутеmatch. Упрощенно можно считать, что более точно определенный образец имеет более высокий приоритет, чем менее точно определенный, т.е. правило с образцом "/message/header" имеет более высокий приоритет, чем правило "//header".

Атрибут modeопределяет режим или режимы обработки данного объявления шаблона. Режимы задаются как идентификаторы типаtoken, отделенные друг от друга пробелами. Режимы по­зволяют задавать различные преобразования для одних и тех же частей до­кумента (имена этих режимов используются в элементеxsl:apply-templates). Существует два предопределенных имени режимов: "#default" (режим по умолчанию, действующий, когда режим не задан) и "#all" (правило действует для всех режимов).

Атрибут as задает тип возвращаемого функцией значения (один из типовXPath2.0). Если этот атрибут задан, результат выполнения конструктора последовательности преобразуется к заданному типу. Если такое преобразование невозможно, генерируется сообщение об ошибке. Если атрибутas не задан, преобразование результата не выполняется и тип элементов результата по умолчанию становитсяitem(), что предполагает любой тип.

Атрибуты объявления шаблона не влияют на выполнение его содержимого. Они используются элементами xsl:apply-templatesиxsl:call-templateпри выборе шаблонов. Правила, которые были импортированы в преобразо­вание, вызываются могут быть вызваны элементомxsl:apply-imports.

В правиле шаблоне можно использовать не только элементы языка XSLT, но и строковые (литеральные) элементы.

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

Помимо литеральных элементов тело правила шаблона может также содержать следующие элементы XSLT, называемыеинструкциями:

  • xsl:apply-imports;

  • xsl:apply-templates;

  • xsl:attribute;

  • xsl:call-template;

  • xsl:choose;

  • xsl:comment;

  • xsl:copy;

  • xsl:copy-of;

  • xsl:element;

  • xsl:fallback;

  • xsl:for-each;

  • xsl:if;

  • xsl:message;

  • xsl:number;

  • xsl:param;

  • xsl:processing-instruction;

  • xsl:text;

  • xsl:value-of;

  • xsl:variable.

Элементы xsl:paramиxsl:variableв теле шаблона определяют локальные параметры и перемен­ные.

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