
- •Лекция 4-07
- •Тема 5.3. Языки xslt и xsl
- •Тема 5.3. Языки xslTиXsl
- •5.3.1. Связывание документовXmLс таблицами стилей
- •5.3.2. Язык xsLи его компоненты
- •5.3.3. Преобразование документа с помощьюXslt
- •5.3.3.1. Технология преобразования
- •5.3.3.2. Процессоры xslt
- •5.3.4. Структура документаXslt
- •5.3.4.1. Пространство именXslt
- •5.3.4.2. Корневые элементы и элементы верхнего уровня документаXslt
- •5.3.4.3. Условное включение элемента
- •5.3.4.4. Модульная структура преобразованийXslt
- •5.3.4.4.1. Включение внешних файлов
- •5.3.4.4.2. Импорт внешних файлов
- •5.3.4.4.3. Использование сущностей
- •5.3.4.4.4. Импорт схем
- •5.3.5. Совместное использование преобразований и документовXml
- •5.3.6. Управление выводом вXslt
- •5.3.6.1. Элементxsl:output
- •5.3.6.2. Метод вывода "xml"
- •5.3.6.3. Метод вывода "xhtml"
- •5.3.6.4. Метод вывода "html"
- •5.3.6.5. Метод вывода "text"
- •5.3.7. Правила шаблона вXslt
- •5.3.7.1. Образцы и шаблоны
- •5.3.7.2. Объявлениешаблона
- •5.3.7.3. Вызов неименованных правил шаблона
- •5.3.7.4. Упрощенные преобразования
- •5.3.8. Создание узлов элементов и атрибутов вXslt
- •5.3.8.1. Элементxsl:element
- •5.3.8.2. Элементxsl:attribute
- •5.3.8.3. Элементxsl:attribute-set
5.3.4.3. Условное включение элемента
Любой элемент языка XSLTможет иметь атрибутuse-when, значением которого является выражениеXPath. Если атрибут задан для какого либо элемента и результат вычисления выражения XPath равенfalse, этот элемент и все элементы, для которых данный элемент является предком, исключаются из преобразования.
Пример задания атрибута use-when:
<xsl:import-schema
schema-location="http://mysite.com/schema"
use-when="system-property('xsl:is-schema-aware')='yes'"/>
Схема по адресу "http://example.com/schema" не будет импортирована, если системное свойство "xsl:is-schema-aware" не равно "yes".
5.3.4.4. Модульная структура преобразованийXslt
Как и любой, достаточно развитый язык программирования, XSLTобладает средствами для организации модульной структуры преобразований. Существуют два основных способа использования в преобразованиях внешних модулей – включение и импорт. Кроме того, поскольку преобразования в XSLT также являются документами XML, для разбиения их на модули можно применять сущности.
5.3.4.4.1. Включение внешних файлов
Для включения внешних файловв преобразования вXSLTможно использовать элемент-объявлениеxsl:include, который имеет следующий синтаксис:
<xsl:include
href = "URI"
/>
Обязательный атрибут hrefэлементаxsl:includeсодержитURIвнешнего модуля, который должен быть включен в текущее преобразование.
Внешний модуль соответствовать правилам синтаксиса языка XSLT.
При включении модуля вместо элемента xsl:includeподставляется содержимое внешнего модуля. В свою очередь, во внешнем модуле также могут содержаться элементыxsl:include, однако рекурсивные вызовы, т.е. прямые и косвенные включения в вызванном модуле вызвавшего модуля, недопустимы.
Все ссылки и относительные URI, используемые во включаемом внешнем модуле, вычисляются относительно его базового адреса.
Пример использования элемента xsl:include:
<xsl:include href="auxstyles.xsl"/>
5.3.4.4.2. Импорт внешних файлов
Другим способом использования внешних модулей в XSLTявляетсяимпорт внешних файлов, который обеспечивается элементомxsl:import. Этот элемент имеет следующий синтаксис:
<xsl:import
href="URI"
/>
Импорт внешних файлов выполняется так же, как и включение файлов, однако он имеет следующие особенности:
элементы xsl:importдолжны быть первыми дочерними элементами элементаxsl:stylesheet;
порядок следования элементов xsl:importоказывает влияние на приоритет операций преобразования.
Если одни и те же преобразования заданы в документе XSLT и внешних модулях, включаемых с помощью элементов xsl:includeиxsl:import, то действуют следующие правила приоритета:
наивысший приоритет имеют преобразования в документе XSLT и во включаемых внешних файлах;
приоритет преобразования в импортируемом внешнем файле ниже, чем преобразования в документе XSLT и во включаемых внешних файлах;
если в импортируемых внешних файлах задано одно и то же преобразование, то больший приоритет имеет преобразование, которое определено в последнем из импортируемых файлов с одинаковыми преобразованиями;
если в импортируемом внешнем файле задан импорт другого внешнего файла, содержащего то же преобразование, то больший приоритет имеет преобразование, которое определено в вызывающем импорт внешнем файле.
Чтобы изменить приведенные выше правила используются элементы-инструкции xsl:apply-importsиxsl:next-match, которые имеют следующий синтаксис:
<xsl:apply-imports>
<!--
Содержимое: элементы xsl:with-param
-->
</xsl:apply-imports>
<xsl:next-match>
<!--
Содержимое: элементы xsl:with-param
-->
</xsl:next-match>
Элемент xsl:apply-importsиспользуется для изменения правил приоритета в импортируемых стилях, а элементxsl:next-match– для изменения правил приоритета во всех остальных случаях. Оба элемента выбирают преобразование, приоритет которого ниже, чем приоритет текущего преобразование (преобразование называется текущим, если оно имеет наивысший приоритет).
Элементы xsl:with-paramв содержимом элементовxsl:apply-importsиxsl:next-matchзадают параметры для выбранного преобразования.
Пример использования элемента xsl:import:
<xsl:import href="styles1.xsl"/>