- •Лекция 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.1. Пространство именXslt
- •5.3.4.2. Корневые элементы и элементы верхнего уровня документаXslt
- •5.3.4. Структура документа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.2. Язык xsLи его компоненты
Как уже говорилось, язык XMLописывает структуру документа, но не говорит о том, как этот документ должен быть обработан или отображен. Выше рассмотрены два средства для решения этих задач: использование инструкции по обработкеxml-stylesheetдля вывода документа с помощью каскадных таблиц стилейCSSи использование средствDOMXML. Первое средство предоставляет очень ограниченные возможности по стилевому оформлению документа, а второе требует написания программ вывода документаXMLна языкахJavaScriptилиJava.
Аналогичная проблема в языке SGML– родителе языкаXML, была решена с помощью создания языка семантики и описания стиля документаDSSSL(DocumentStyleSemanticsAndSpecificationLanguage). Поскольку XMLявляется подмножествомSGML, языкDSSSLможно использовать и для документовXML, например, для преобразования документаXMLс однимDTDв документXMLс другимDTDили форматированного вывода документаXML. Как и сам язык SGML, языкDSSSLявляется мощным, но в тоже время очень сложным средством. Поэтому консорциумW3 разработал свое средство для форматированного вывода документов XML – расширяемый язык стилейXSL(ExtensibleStylesheetLanguage).
Первоначально предполагалось, что задача форматирования документа XMLбудет решена с использованием только языкаXSL. Однако при разработке спецификации этого языка выяснилось, что процесс форматирования документаXMLразбивается на два этапа.
На первом этапевыполняется преобразование исходного документаXML, точнее его иерархического представления, в другое иерархическое представление с возможным изменением структуры документа для его форматирования. Так, например, в документ XML может быть добавлено оглавление или сделана выборка их документа по какому-либо критерию.
На втором этапек узлам полученной иерархической структуры, которые называются объектами форматирования –FO(FormatObjects), применяются стили форматирования на уровне всего документа, его отдельных страниц и элементов (абзацев, фрагментов абзацев, изображений, таблиц, списков и т.д.).
Поэтому в настоящее время язык XSLописан в двух отдельных спецификациях. Первая спецификация – язык преобразований XSL –XSLT(XSLTransformation) версия 1.0, описывающая средства преобразования вXSL, была принята в ноябре 1999 года. В январе 2007 года принята версия 2.0 этой спецификации, предназначенной для работы совместно с XPath 2.0.
Ниже рассматриваются средства и возможности языка XSLT, определенные в спецификации 2.0 (средства собственно языка XSLбудут рассмотрены отдельно).
5.3.3. Преобразование документа с помощьюXslt
5.3.3.1. Технология преобразования
В общем случае в преобразовании участвуют три документа:
входной документ, над которым выполняется преобразование (документ XML);
входной документ, описывающий преобразование (документ XSLT);
выходной документ – результат преобразования.
Процесс преобразования входного документа в соответствии с описанными правилами называется применением преобразования к входному документу или просто выполнением преобразования. Это выполнение осуществляют специальные программы, которые называютсяпроцессорами XSLT.
Документ XSLT, содержащий правила преобразования, также является документом XML (обычно с расширением .xsl), формируемым в соответствии с инструкциями и объявлениями языка XSLT, определенными в пространстве имен этого языка. Документ XSLT может также содержать элементы, которые определены в других пространствах имен, например, в пространстве имен функций XPath 2.0.
Процессор XSLTвыполняет операции над исходным документом XML в три этапа:
этап анализа;
этап преобразования;
этап сериализации.
На этапе анализапроцессорXSLTпреобразует входные текстовые документы в их иерархическое представление (рис. 5.3.1). В спецификации определены два типа процессоров XSLT: процессоры без использования схемы и процессоры с использованием схемы. Последний тип проверяет действительность документа, т.е. его соответствие своей схеме. При анализе входных документов обычно используется встроенный или внешнийSAX-анализатор или DOM-анализатор.

Рис. 5.3.1. Анализ и преобразование входных документов
в иерархические структуры
На этапе преобразованияпроцессор XSLT применяет правила преобразования, описанные в документе XSLT, к иерархической структуре входного документа XML. В результате преобразования получается иерархическая структура выходного документа (рис. 5.3.2).

Рис. 5.3.2. Преобразование документа XML процессором XSLT
На этапе сериализацииполученная структура выходного документа представляется в текстовой форме заданного вида, которая может быть записана в файл или выведена на экран.
Спецификация XSLT 2.0 определяет четыре обязательных вида сериализации, которые должен поддерживать процессор XSLT: документ XML, документHTML, документXHTMLи чисто текстовый документ, не содержащий элементов разметки.
Конкретная реализация процессора XSLTможет поддерживать и другие виды сериализации, например, форматWordили форматPDF.
Этап сериализации показан на рис. 5.3.3.

Рис. 5.3.3. Сериализация структуры выходного документа процессором XSLT
В отличие от языка схем, спецификация языка XSLTпозволяет вводить собственные функции и элементы и использовать их в преобразованиях. Однако использование расширений может привести к потере переносимости при выполнении преобразований на различных компьютерных платформах.
Расширения можно создавать на различных языках программирования, но наиболее часто используется язык Java, поскольку в нем есть средства, облегчающие разработку новых элементов и функций.
