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