
- •Лекция 4-07
- •Тема 5.3. Языки xslt и xsl
- •Тема 5.3. Языки xslTиXsl
- •5.3.1. Связывание документовXmLс таблицами стилей
- •5.3.2. Язык xsLи его компоненты
- •5.3.3. Преобразование документа с помощьюXslt
- •5.3.3.1. Технология преобразования
- •5.3.3.2. Процессоры xslt
- •5.3.4. Структура документаXslt
- •5.3.4.1. Пространство именXslt
- •5.3.4.2. Корневые элементы и элементы верхнего уровня документаXslt
- •5.3.4.3. Условное включение элемента
- •5.3.4.4. Модульная структура преобразованийXslt
- •5.3.4.4.1. Включение внешних файлов
- •5.3.4.4.2. Импорт внешних файлов
- •5.3.4.4.3. Использование сущностей
- •5.3.4.4.4. Импорт схем
- •5.3.5. Совместное использование преобразований и документовXml
- •5.3.6. Управление выводом вXslt
- •5.3.6.1. Элементxsl:output
- •5.3.6.2. Метод вывода "xml"
- •5.3.6.3. Метод вывода "xhtml"
- •5.3.6.4. Метод вывода "html"
- •5.3.6.5. Метод вывода "text"
- •5.3.7. Правила шаблона вXslt
- •5.3.7.1. Образцы и шаблоны
- •5.3.7.2. Объявлениешаблона
- •5.3.7.3. Вызов неименованных правил шаблона
- •5.3.7.4. Упрощенные преобразования
- •5.3.8. Создание узлов элементов и атрибутов вXslt
- •5.3.8.1. Элементxsl:element
- •5.3.8.2. Элементxsl:attribute
- •5.3.8.3. Элементxsl:attribute-set
5.3.4.4.3. Использование сущностей
Поскольку преобразования XSLT являются документами XML, можно воспользоваться средствами XMLдля модульной организации данных. Части преобразований можно просто вынести во внешние документы ивключать в документ в виде сущности.
Пример включения внешнего преобразования как сущности:
<!DOCTYPE xsl:stylesheet [
<!ENTITY extStyle SYSTEM "ext.xsl">
]>
<xsl:stylesheet
version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
…
&extStyle;
</xsl:stylesheet>
В этом примере содержимое файлаext.xslбудет вставлено в преобразование вместо ссылки на сущность.
5.3.4.4.4. Импорт схем
Для процессоров XSLTс использованием схемы для идентификации компонент схемы используется элемент-объявление xsl:import-schema, который имеет следующий синтаксис:
<xsl:import-schema
namespace="ссылка-на URI"
schema-location="ссылка-на-URI"
>
<!--
Содержимое: xs:schema
-->
</xsl:import-schema>
Необязательный атрибут namespaceзадает ссылку на пространство имен для импортируемых компонент схемы, а необязательный атрибутschema-location задает ссылку на схему.
В объявлении import-schemaв качестве содержимого элемента может быть задана схема с корневым элементомxs:schema(в этом случае атрибутschema-locationзадавать не надо).
Примеры использования элемента xsl:import-schema:
1. Вызов внешней схемы:
<xsl:import-schema namespace="xs"
schema-location="http://mysyte.org/schemas/schema1.xs">
2. Создание пользовательского простого типа по перечислению на основе типаxs:string:
<xsl:import-schema>
<xs:schema targetNamespace="http://localhost/RGBColor"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:simpleType name="local:RGBColor">
<xs:restriction base="xs:string">
<xs:enumeration value="red"/>
<xs:enumeration value="green"/>
<xs:enumeration value="blue"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
</xsl:import-schema>
5.3.5. Совместное использование преобразований и документовXml
Включение преобразования в документ XMLвыполняется с помощью рассмотренной ранее инструкции по обработкеxml-stylesheet, в которой для атрибутаtypeзадается значение "text/xsl".
Инструкция xml-stylesheetможет быть включена только в пролог документа, то есть она должна предшествовать корневому элементу.
Пример включения файла преобразования в документ XML:
<?xml-stylesheet type="text/xsl" href="message.xsl"?>
Включение операций преобразования, содержащихся в файле message.xsl, в документmessage.xml.
Если преобразование документа выполняется в режиме командной строки одним из процессоров XSLT, то инструкциюxml-stylesheetв документеXMLможно не задавать.
Преобразование XSLTчаще всего является самостоятельным документомXML. Однако преобразование может встроено и в сам документ XML, для которого выполняется преобразование.
В этом случае в преобразовании (элементе xsl:stylesheetилиxsl:transform) внутри документа должен быть обязательно задан атрибутid, а в инструкцииxml-stylesheetв атрибуте hrefзадается (с префиксом "#") значение атрибутаidпреобразования.
Поскольку элемент xsl:stylesheetвключен в преобразуемый документ, он также подвергнется преобразованию. Для того чтобы избежать этого, в преобразование включается правило шаблона, которое указывает, что элементыxsl:stylesheetследует игнорировать:
<xsl:template match="xsl:stylesheet"/>
Правила шаблона будут рассмотрены ниже.
Пример включения преобразования в преобразуемый документ:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="#trans"?>
<email-folder>
…
<xsl:stylesheet
version="2.0"
id="trans"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
…
<xsl:template match="xsl:stylesheet"/>
</xsl:stylesheet>
…
</email-folder>
Хотя возможность непосредственного включения преобразования в документ XMLи определена в спецификации языкаXSLT, ее поддерживают пока немногие процессорыXSLT.