<xsl:include href='b.xsl'/>
будет включать преобразование с URI
http://www.xsltdev.ru/examples/b.xsl
Нет никаких проблем и с включением преобразований по абсолютным идентификаторам. Например, если преобразование identity.xsl
находится по адресу
http://www.xsltdev.ru/stylesheets/identity.xsl
то включить его можно элементом
<xsl:include href=' 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
.
<xsl:stylesheet
version='1.0'
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:import href='a.xsl'/>
<xsl:variable name='a'/>
<xsl:include href='b.xsl'/>
<!-- Содержимое основного преобразования -->
</xsl:stylesheet>
<xsl:stylesheet
version='1.0'
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:import href='c.xsl'/>
<!-- Содержимое преобразования b.xsl -->
</xsl:stylesheet>
Тогда основное преобразование может быть переписано следующим образом.
<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0'> <xsl:import href='a.xsl'/>
<xsl: import href=f'c.xsl'/>
<xsl:variable name='a'/>
<!-- Содержимое преобразования b.xsl -->
<!-- Содержимое основного преобразования -->
</xsl:stylesheet>
Элемент xsl:include
можно использовать и для включения преобразований с упрощенным синтаксисом. Преобразования такого рода будут включаться как эквивалентные им преобразования стандартного синтаксиса — то есть с корневым элементом xsl:stylesheet
и единственным шаблоном, соответствующим корневому узлу.
Предположим, что мы используем преобразование упрощенного синтаксиса simple.xsl
.
<html xsl:version='1.0'
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:apply-templates/>
</html>
Включим simple.xsl
в основное преобразование.
<xsl:stylesheet
version='1.0'
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:include href='simple.xsl'/>
<xsl:template match='a'>
<xsl:value-of select='.'/>
</xsl:template>
</xsl:stylesheet>
Тогда основное преобразование может быть переписано в следующем виде.
<xsl:stylesheet
version='1.0'
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:template match='/'>
<html>
<xsl:apply-templates/>
</html>
</xsl:template>
<xsl:template match='a'>
<xsl:value-of select='.'/>
</xsl:template>
</xsl:stylesheet>
Полужирным шрифтом на листинге 4.13 выделен шаблон, который соответствует преобразованию simple.xsl
.
Следует отметить, что разные процессоры по-разному обрабатывают включение упрощенных преобразований. К сожалению, большинство из них не поддерживают эту особенность, хотя она четко определена в спецификации, поэтому, если требуется высокая надежность и переносимость, таких включений лучше избегать.
Включаемые модули являются полноценными и самостоятельными преобразованиями. К примеру, они также могут включать другие преобразования при помощи тех же элементов xsl:include
. При этом преобразование не должно прямо или косвенно включать само себя — такая ситуация породит бесконечный цикл включений.
Импорт преобразований