XML-ТЕХНОЛОГИИ Лекция 4 XSLT-ТРАНСФОРМАЦИЯ Трансформация XML-данных Категории трансформации Структурные трансформации – трансформация одного словаря XML в другой по аналогии с переводом Создание динамических документов – возможность изменять порядок, сортировать и фильтровать части документа XML Трансформации в язык формирования изображения – подготовка документа для визуального представления в какой-либо форме браузера пользователя XSLT. Определение XSLT (Extensible Stylesheet Language for Transformations — расширяемый язык таблиц стилей для преобразований) Спецификация W3C — ноябрь 2000 года Назначение XSLT XSLT позволяет преобразовывать XML-документ: – в другой XML-документ; – в HTML-документ для отображения веб-браузером; – в документы иных форматов (RTF, PDF, TeX и т. п.). Таблицы стилей Таблица стилей (Stylesheet) — это XML-документ специального вида (обычно это файл с расширением «xsl»), содержащий набор правил преобразования исходного XML-документа, написанных на языке XSLT и предназначенных для XSLT-процессора. XSLT-процессор XSLT-процессор — это программа, которая выполняет преобразование исходного XMLдокумента на основе таблицы стилей XSL и FO XSLT - язык преобразований XML XPath - язык определения частей и путей к элементам XML XSL Formatting Objects – язык форматирования XML Пространство имен XSLT Стандартный XSLT относится к пространству имен с URI: http://www.w3.org/1999/XSL/Transform Общепринятым считается префикс «xsl:» Структура таблицы стилей xml xsl:stylesheet version = "1.0" encoding = "UFT-8" xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0" xsl:template КЛЭ Инструкции Как происходит преобразование Основные объекты дерево исходного документа / входное дерево дерево таблицы стилей дерево результирующего документа / выходное дерево Шаблоны в XSL CSS: p { font-family: arial } → XSL: шаблоны (templates) Таблица стилей содержит по крайней мере один шаблон Точка входа — шаблон для обработки корневого элемента Шаблон может содержать: поддеревья конечных литеральных элементов элементы-инструкции Шаблон с КЛЭ Шаблон xsl:template — match = "/" html head title = "Студенты" body h2 = "Список студентов" Результат html head title = "Студенты" body h2 = "Список студентов" Студенты Список студентов Форсирующая трансформация Форсирующая обработка (Push Processing) — обработка, управляемая логикой исходного документа Основные инструкции apply-templates template match="образец" Образец (pattern) — это информация, которая указывается в шаблоне для того, чтобы определить, соответствует ли шаблон выбранному узлу. Примеры образцов в шаблонах template match = "Студент/Предмет/ Сдача" "Предмет [@объем = '120']/Сдача [1]" "Студенты/Студент/ Предмет/Сдача" "Предмет" Форсирующая трансформация Дополнительные инструкции value-of select="образец" value-of select = "Студенты/Студент/@Код" "Студенты/Студент/@ФИО" "Студенты/Студент[1]/@Код" "count(Студенты/Студент[1]/П редмет [@объем = '120']/Сдача)" Пример форсирующей трансформации Исходный документ XSL-таблица стилей Пример форсирующей трансформации Привязка XSL к XML Результирующий документ Пример форсирующей трансформации Исходный документ XSL-таблица стилей Пример форсирующей трансформации Привязка XSL к XML Результирующий документ Извлекающая трансформация Извлекающая обработка (Pull Processing) — обработка, управляемая логикой таблицы стилей Основные конструкции for-each select="XPath-выражение" Пример извлекающей трансформации Исходный документ XSL таблица стилей Пример извлекающей трансформации Результирующий документ Условные конструкции Основные инструкции if: <xsl:if test="Условие"> инструкции </xsl:if> choose <xsl:choose> <xsl:when test="Условие1"> инструкции </xsl:when> <xsl:when test="Условие2"> инструкции </xsl:when> <xsl:otherwise> инструкции </xsl:otherwise> </xsl:choose> Инструкция xsl:if XSL-таблица стилей Инструкция xsl:if Результирующий документ Инструкция xsl:choose Исходный документ Инструкция xsl:choose XSL-таблица стилей Инструкция xsl:choose Результирующий документ Переменные и параметры <xsl:param name = "имя">значение</xsl:param> <xsl:variable name = "имя" select = "XPath-выражение"/> <xsl:variable name = “stud" select = «Студенты/Студент[1]/@ФИО"/> <xsl:value-of select="$stud"/>