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

3.3.Язык xslt

3.3.1. Образцы и шаблоны

Основными компонентами документа XSLT являются правила шаблона. Правило шаблона состоит из двух частей: этообразец(pattern), который сопоставляется с узлами в исходном дереве, ишаблон(template), который содержит конструктор последовательности, используемой для создания фрагментов результирующей иерархической структуры.

Преобразование в XSLTсостоит не из последовательности действий, а изнабора правил шаблона, каждое из которых обрабатывает свою часть документа XML.

Чтобы получить фрагмент результирующей структуры, шаблон обрабатывается для определенного элемента в исходной структуре. Шаблон может содержать элементы, определяющие фиксированную структуру элемента в результирующей структуре (аналог прямого конструктора в XQuery), а также элементы из пространства имен XSLT, содержащие инструкции по формированию фрагментов результирующей структуры (аналог вычисляемого конструктора в XQuery).

При поиске соответствующего правила шаблона может возникнуть ситуация, когда обрабатываемому элементу соответствует не одно, а несколько правил. В этом случае выбирается шаблон с самым большим приоритетом (если правил с самым большим приоритетом окажется несколько, генерируется ошибка).

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

Образец для пути адресации – это некоторый путь адресации, на всех шагах которого используются лишь оси childилиattribute. Хотя образцы и не должны использовать осьdescendant-or-self, в образцах могут использоваться как оператор "//", так и оператор "/". Образцы путей адресации могут начинаться также с вызова функцийidилиkeyс фиксированным аргументом. В предикатах образца могут использоваться произвольные выражения.

В шаблонах атрибутов могут присутствовать фиксированные и вычисляемые компоненты. Вычисляемые компоненты, как и в конструкторах XQuery заключаются в фигурные скобки "{" и "}". При преобразовании эти компоненты будут вычислены и заменены своим результатом.

Если символы "{" и "}" используются в шаблонах атрибутов как обычные символы, они должны быть удвоены, т.е. заменены символами "{{" и "}}".

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

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

<xsl:template

match="образец"

name="имя"

priority="число"

mode="режимы"

as="тип-последовательности"

>.

<!--

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

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

-->

</xsl:template>

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

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

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

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

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

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

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

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

Атрибут priorityиспользуется для определения числового значения, которое называ­ется приоритетом шаблона (чем больше число, тем больше приоритет). Это значение используется для раз­решения конфликтов шаблонов в случае, когда один узел может быть обра­ботан различными объявлениями шаблонов.

Атрибуты объявления шаблона не влияют на выполнение его содержимого. Они используются элементами 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в теле шаблона определяют локальные параметры и перемен­ные.

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