xsl:include¶
Включение внешнего преобразования является включением в прямом смысле этого слова: преобразование, включающее внешний модуль, ведет себя так, как если бы на месте элемента xsl:include
было содержимое этого внешнего модуля.
Синтаксис¶
1 |
|
Атрибуты:
href
- обязательный атрибут, содержит URI внешнего модуля, который должен быть включен в текущее преобразование. Внешний модуль обязан быть корректным XSLT-преобразованием.
Описание и примеры¶
Пример 1¶
Рассмотрим простое преобразование a.xsl
, которое определяет значение переменной date
.
Листинг 4.6. Преобразование a.xsl
1 2 3 4 5 6 |
|
Включим a.xsl
в преобразование b.xsl
.
Листинг 4.7. Преобразование b.xsl
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
Включение в преобразование b.xsl
преобразования a.xsl
эквивалентно замене в b.xsl
соответствующего элемента xsl:include
на содержимое преобразования a.xsl
. В нашем случае будет включено только определение переменной date
. Преобразование b.xsl
можно переписать в следующем виде:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
При включении внешних преобразований при помощи xsl:include
следует учитывать некоторые особенности использования этого элемента.
Все ссылки и относительные идентификаторы ресурсов (URI), используемые во включаемом преобразовании, вычисляются относительно его базового адреса.
Пример 2¶
Предположим, что URI нашего преобразования имеет вид:
1 |
|
В этом случае элемент
1 |
|
будет включать преобразование с URI
1 |
|
Нет никаких проблем и с включением преобразований по абсолютным идентификаторам. Например, если преобразование identity.xsl
находится по адресу
1 |
|
то включить его можно элементом
1 2 3 |
|
Естественно, включаемые модули должны быть доступны процессору во время выполнения преобразования, поэтому если они находятся на других серверах, то всегда будет существовать возможность невыполнения преобразования.
В XSLT элементы xsl:import
всегда должны быть первыми дочерними элементами головного элемента xsl:stylesheet
. Поэтому элементы xsl:import
внешнего преобразования включаются сразу после элементов xsl:import
основного преобразования. Если в основном преобразовании элементов xsl:import
нет, то включаемые элементы xsl:import
становятся первыми дочерними элементами xsl:stylesheet
основного преобразования.
Пример 3¶
Предположим, что в основное преобразование мы импортируем файл a.xsl
и включаем файл b.xsl
.
Листинг 4.8. Основное преобразование
1 2 3 4 5 6 7 8 9 |
|
Листинг 4.9. Преобразование b.xsl
1 2 3 4 5 6 7 |
|
Тогда основное преобразование может быть переписано следующим образом.
Листинг 4.10. Основное преобразование после включения b.xsl
1 2 3 4 5 6 7 8 9 10 |
|
Элемент xsl:include
можно использовать и для включения преобразований с упрощенным синтаксисом. Преобразования такого рода будут включаться как эквивалентные им преобразования стандартного синтаксиса — то есть с корневым элементом xsl:stylesheet
и единственным шаблоном, соответствующим корневому узлу.
Пример 4¶
Предположим, что мы используем преобразование упрощенного синтаксиса simple.xsl
.
Листинг 4.11. Преобразование simple.xsl
1 2 3 4 5 6 |
|
Включим simple.xsl
в основное преобразование.
Листинг 4.12. Основное преобразование
1 2 3 4 5 6 7 8 9 |
|
Тогда основное преобразование может быть переписано в следующем виде.
Листинг 4.13. Основное преобразование после включения simple.xsl
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
Комментарием на листинге 4.13 выделен шаблон, который соответствует преобразованию simple.xsl
.
Следует отметить, что разные процессоры по-разному обрабатывают включение упрощенных преобразований. К сожалению, большинство из них не поддерживают эту особенность, хотя она четко определена в спецификации, поэтому, если требуется высокая надежность и переносимость, таких включений лучше избегать.
Включаемые модули являются полноценными и самостоятельными преобразованиями. К примеру, они также могут включать другие преобразования при помощи тех же элементов xsl:include
. При этом преобразование не должно прямо или косвенно включать само себя — такая ситуация породит бесконечный цикл включений.
См. также¶
xsl:import
— импорт преобразований.
Ссылки¶
xsl:include
MDN (рус.)xsl:include
MSDN (en)