Подобно тому, как мы бы использовали в языке С директиву #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
.
Читать дальше