Подобно тому, как мы бы использовали в языке С директиву #includeдля включения внешних файлов, преобразования в XSLT могут использовать для той же самой цели элемент xsl:include. Правда, в отличие от языка С, условное включение в XSLT невозможно.
href= " URI "/>
Обязательный атрибут hrefэлемента xsl:includeсодержит URI внешнего модуля, который должен быть включен в текущее преобразование. Внешний модуль обязан быть корректным XSLT-преобразованием.
Включение внешнего преобразования является включением в прямом смысле этого слова: преобразование, включающее внешний модуль, ведет себя так, как если бы на месте элемента xsl:includeбыло содержимое этого внешнего модуля.
Пример
Рассмотрим простое преобразование a.xsl, которое определяет значение переменной date.
Листинг 4.6. Преобразование a.xsl
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Включим a.xslв преобразование b.xsl.
Листинг 4.7. Преобразование b.xsl
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Today is
.
Включение в преобразование b.xslпреобразования a.xslэквивалентно замене в b.xslсоответствующего элемента xsl:includeна содержимое преобразования a.xsl. В нашем случае будет включено только определение переменной date. Преобразование b.xslможно переписать в следующем виде: .
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Today is
.
При включении внешних преобразований при помощи xsl:includeследует учитывать некоторые особенности использования этого элемента.
Все ссылки и относительные идентификаторы ресурсов (URI), используемые во включаемом преобразовании, вычисляются относительно его базового адреса.
Пример
Предположим, что URI нашего преобразования имеет вид:
http://www.xsltdev.ru/examples/a.xsl
В этом случае элемент
будет включать преобразование с URI
http://www.xsltdev.ru/examples/b.xsl
Нет никаких проблем и с включением преобразований по абсолютным идентификаторам. Например, если преобразование identity.xslнаходится по адресу
http://www.xsltdev.ru/stylesheets/identity.xsl
то включить его можно элементом
Естественно, включаемые модули должны быть доступны процессору во время выполнения преобразования, поэтому если они находятся на других серверах, то всегда будет существовать возможность невыполнения преобразования.
В XSLT элементы xsl:import всегда должны быть первыми дочерними элементами головного элемента xsl:stylesheet. Поэтому элементы xsl:importвнешнего преобразования включаются сразу после элементов xsl:importосновного преобразования. Если в основном преобразовании элементов xsl:importнет, то включаемые элементы xsl:importстановятся первыми дочерними элементами xsl:stylesheetосновного преобразования.
Пример
Предположим, что в основное преобразование мы импортируем файл a.xslи включаем файл b.xsl.
Листинг 4.8. Основное преобразование
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Листинг 4.9. Преобразование b.xsl
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Тогда основное преобразование может быть переписано следующим образом.
Листинг 4.10. Основное преобразование после включения b.xsl
Элемент xsl:includeможно использовать и для включения преобразований с упрощенным синтаксисом. Преобразования такого рода будут включаться как эквивалентные им преобразования стандартного синтаксиса — то есть с корневым элементом xsl:stylesheetи единственным шаблоном, соответствующим корневому узлу.
Пример
Предположим, что мы используем преобразование упрощенного синтаксиса simple.xsl.
Листинг 4.11. Преобразование simple.xsl
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Включим simple.xslв основное преобразование.
Листинг 4.12. Основное преобразование
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Тогда основное преобразование может быть переписано в следующем виде.
Листинг 4.13. Основное преобразование после включения simple.xsl
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Полужирным шрифтом на листинге 4.13 выделен шаблон, который соответствует преобразованию simple.xsl.
Читать дальше