Xslt преобразование что это
Применение языка преобразований XSLT
Язык преобразований XSLT
А это как раз то, что нужно для генерации кода. Применение XSLT может существенно помочь в генерации кода. Кроме того, он предоставляет удобную альтернативу технологии шаблонов Т4.
XSLT был разработан консорциумом W3C (World Wide Web Consortium). Первая версия языка XSLT 1.0 стала рекомендацией 16 ноября 1999 года, а версия XSLT 2.0 стала рекомендацией 23 января 2007 года. Обе версии используются достаточно активно, и в этой лекции мы рассмотрим ту базовую функциональность, которая является для них общей. А это значит, что рассматривать будем в основном первую версию. Также упомянем некоторые команды из второй версии.
Как работает XSLT
Модель XSLT включает в себя такие части как:
Документы XML являются входными данными, которые нужно преобразовать в другие документы. Документ стиля XSLT является корректным (well formed) документом XML и содержит набор правил для выполнения преобразования. Иными словами, документ стиля является шаблоном.
XPath
Применение XSLT
Для преобразования документа XML необходимо добавить в начало документа инструкцию, подобную следующей:
Файл стилей будет применяться следующий:
Инструкция xsl :value-of служит для вычисления выражения, записанного в атрибуте select с последующим выводом результата в том месте, где расположен сам элемент.
Фильтрация
Мы рассмотрели случай, когда считываются значения каждого узла. Однако часто возникает необходимость выбирать только часть данных, то есть их надо фильтровать. Шаблоны XSLT поддерживают два способа фильтрации.
Посмотрим на результат:
Языки высокого уровня:
Как видим, значение «Assembler» не отображается в списке языков, то есть процессор XSLT отфильтровал данные согласно заданным условиям.
Сортировка
Получается такой результат.
Языки высокого уровня:
Названия языков отсортированы в алфавитном порядке и значение «Assembler» не отображается в списке.
Вложенные шаблоны
В сложных случаях возникает необходимость применения вложенных друг в друга шаблонов. Рассмотрим документ, в котором содержатся таблицы и их поля вместе с названиями.
При открытии сгенерированного результата в браузере будет показано следующее:
Практическое руководство. Выполнение преобразования XSLT в редакторе XML
Редактор XML позволяет связать таблицу стилей XSLT с XML-документом, выполнить преобразование и просмотреть вывод. Результат XSLT-преобразования отображается в новом окне документа.
Свойство Вывод определяет имя выходного файла. Если свойство Вывод пустое, файл с указанным именем создается во временном каталоге. Расширение файла определяется на основе элемента xsl:output в таблице стилей. Это может быть XML, TXT или HTM.
Если свойство Вывод определяет имя файла с расширением HTM или HTML, вывод XSLT открывается для предварительного просмотра с помощью браузера. Файлы с другими расширениями открываются редактором по умолчанию, которые выбирает среда Visual Studio. Например, если файл имеет расширение XML, то в Visual Studio используется редактор XML.
Выполнение преобразования XSLT из XML-файла
Откройте XML-документ в редакторе XML.
Свяжите таблицу стилей XSLT с XML-документом.
Добавьте таблицу стилей XSLT с помощью окна Свойства. Открыв файл XML в редакторе, щелкните правой кнопкой мыши в любом месте редактора и выберите Свойства. В окне Свойства щелкните поле Таблица стилей и нажмите кнопку обзора (. ). Выберите таблицу стилей XSLT, а затем нажмите Открыть.
В строке меню щелкните XML > Запустить XSLT без отладки. Либо нажмите клавиши CTRL+ALT+F5.
Результат XSLT-преобразования отображается в новом окне документа.
Если с XML-документом не связана ни одна таблица стилей, появится диалоговое окно с предложением указать таблицу стилей, которую нужно использовать.
Выполнение преобразования XSLT из таблицы стилей XSLT
Откройте таблицу стилей XSLT в редакторе XML.
Укажите XML-документ в поле Ввод в окне Свойства документа.
XML-документ является входным документом для преобразования. Если документ не указан при запуске преобразования XSLT, появится диалоговое окно Открытие файла, и можно будет указать документ.
В строке меню щелкните XML > Запустить XSLT без отладки. Либо нажмите клавиши CTRL+ALT+F5.
Результат XSLT-преобразования отображается в новом окне документа.
Задание имени выходного файла
У имени выходного файла может быть расширение XML или XS. Откройте окно Свойства и укажите имя файла в поле Вывод.
Как использовать преобразования XSLT в файлах обмена данными Project XML
Стандарт Extensible Stylesheet Language Transformation (XSLT) указывает определение языка для преобразований данных XML. XSLT используется для преобразования XML-документов в XHTML-документы или в другие XML-документы. В этой статье показано, как использовать XSLT с Microsoft Office Project XML-файлами обмена данными 2007 г. для фильтрации и отображения сведений о проекте. (Содержимое этой статьи было предоставлено Джессикой Бриттон, корпорация Майкрософт.)
Сведения о сохранении проектов в виде Project XML-файлов обмена данными см. в материалах Saving and Opening Projects in XML Format.
Таблица стилей XSLT — это XML-документ, состоящий из сочетания разметки XHTML, правил шаблона XSLT и отчетов XPath, которые работают вместе.
Разметка XHTML определяет среду отображения, в которой представлены XML-данные.
Правила шаблона XSLT предоставляют инструкции по преобразованию элемента XML источника определенным образом.
В заявлениях XPath определяются определенные элементы в документе XML.
Если элемент XML соответствует шаблону XPath, вызывается связанное правило шаблона XSLT. Преобразованные данные затем отображаются в рамках отображения, заданной разметка XHTML.
Дополнительные сведения о правилах шаблона XSLT и утверждениях XPath см. в ссылке в конце этой статьи.
Отображение Project с помощью преобразований XSLT
Процедура 1. Чтобы создать таблицу стилей XSLT:
Создайте XSLT-файл для таблицы стилей. Если вы работаете в Microsoft Visual Studio 2005 г., вы можете использовать шаблон XSLT File (в Visual Studio нажмите кнопку Файл, указать на Новый , а затем нажмите файл . Этот шаблон предварительно заселяется кодом XML, показанным в следующем примере. Если вы работаете в другом тексте или редакторе XML, скопируйте XML-шаблон и вклейте его в XSLT-файл.
Удалите следующий комментарий по коду XML. Здесь вы пишете XSLT-код.
Создайте код XSLT. Код XSLT, показанный в этом примере, делает следующее:
Отображает текстовое значение имени ребенка элемента Project в загонах.
Проверяет ребенка сводки каждого элемента Задачи, чтобы узнать, является ли значение 0 (false).
Тестирует критическое дитя каждого элемента Задачи, чтобы узнать, является ли значение 1 (true).
Отображает данные для критически важных задач, которые не являются сводными задачами в жирный шрифт.
Отображает данные для некритических задач, которые не являются сводными задачами.
Сортировка сведений о ресурсах в алфавитном порядке по текстовому значению имени каждого элемента Ресурса.
Тестирует переоправдаемого ребенка каждого элемента Ресурса, чтобы узнать, является ли значение 1 (true).
Отображает отсортченные данные ресурсов только для перенаваляемых ресурсов.
Сохраните файл в качестве ProjectTransform.xslt.
После создания таблицы стилей XSLT необходимо связать Project XML-файл с ней, добавив инструкции по обработке. В процедуре 2 показано, как связать файл ProjectTransform.xslt, созданный в процедуре 1, с любым Project XML-файлом.
Процедура 2. Чтобы изменить Project XML-файл, используйте таблицу стилей XSLT:
Откройте файл Project XML в Visual Studio или в другом тексте или редакторе XML.
Вставьте следующую строку кода после объявления XML, которая является первой строкой в Project XML-файле.
Удалите объявление пространства имен XML из Project, который является корневым элементом Project XML-файла. Если вы не удалите объявление пространства имен, встроенное в элемент Project, XPath не будет соответствовать элементам в XML Project XML-файле.
После выполнения этапов 2 и 3 первые три строки XML Project XML-файла должны выглядеть следующим примером кода.
Сохраните Project XML-файл.
Рекомендуется сохранить файл с помощью имени файла, которое отличается от исходного имени XML Project XML, так как изменения, внесенные в шаге 3, отсоедят XML-файл Project от схемы Project XML-обмена данными.
Просмотр преобразованного Project XML-файла. Преобразование XSLT можно выполнить в Visual Studio, задав свойство Stylesheet XML Project xML-файла ProjectTransform.xslt, а затем выбрав show XSLT Output из меню XML.
Вы также можете открыть Project XML-файл в Internet Explorer 7, Microsoft Office Word 2007 или любом другом приложении, которое поддерживает XSLT.
На рисунке 1 показан преобразованный выход Project XML-файла в Word 2007. Когда вы открываете Project XML-файл, по умолчанию отображается только представление данных. Чтобы просмотреть преобразованный выход, необходимо выбрать представление данных ProjectTransform.xslt в области документов XML.
Рисунок 1. XML-файл преобразованного проекта
Практический XSLT. Использование в качестве шаблонизатора
В сети доступно масса документации по языку XSL. Данный раздел не претендует на роль документации по языку, а лишь кратко, по шагам объясняет, как создать свой XSLT-шаблон.
Описанная ниже схема успешно мною используется уже более 3 лет. По началу я к XSLT относился с большой опаской (особенно, когда разбирал чужие исходники), однако однажды поняв, что к чему, уже не представляю, как без него можно работать.
Рабочий стол
К XHTML-макету никаких ограничений нет. Есть лишь определенные рекомендации по верстке, которые позволят значительно сэкономить время на формирование шаблона.
В качестве парсера (сборщика) конечного документа можно использовать браузер. Нужно лишь указать в XML-документы путь к файлу шаблону:
Хотя, как показала практика, этот механизм довольно глючный (мне пришлось пользовать IE). Лучше воспользоваться средствами XML-парсинга языка, на котором написана CMS-система. Я использую Parser (на нем, вообщем-то, у меня вся система и работает).
Входной XML-документ
Для начала разберемся со входным XML-документом. Для того, чтобы использовать XSL нужно иметь полное представление о его структуре.
Я использую следующую схему:
Обозначенный выше пример схемы не претендует на свою оптимальность. В силу тех или иных причин, мне он удобен. Но, обо всем по порядку.
— заголовок XML-файла. Должен идти строго с начала файла. В нем прописана версия используемого XML-языка и кодировка документа. Я как правило работаю в windows-1251 (пока так удобнее), но, по идее UTF-8 лучше.
Подготовка XHML-шаблона
XSL-шаблон создается на базе XHTML-шаблона (некой типовой страницы сайта). Код XHTML-страницы, при этом, должен быть валидным.
Рассмотрим по шагам процесс создания шаблона.
Администрирование сайта
Основы описания XSL-шаблонов
Все файлы XSL-шаблонов имеют следующий вид:
данные шаблона
Структура папок шаблонов
Для того, чтобы хранить на одном сайте несколько модулей необходимо как-то продумать структуру их хранения в папкам. При этом, удобнее разбить шаблоны на модули по нескольким xsl-файлам. Такой подход позволит в дальнейшем повторно их использовать при создании новых шаблонов.
В простейшем варианте можно создать каталог xsl и там все складировать.
Где:
— шаблон для элемента /node() (корневого). Вместо /node() можно указать //document, т.к. он у нас являеться корневым узлом.
Копируем весь XHTML-код внутрь блока
Этот шаблон будет автоматически применяться ко всему XML-документу. В нашем случае, XSL-преобразование заменит весь XML-код на XHTML-код вашего шаблона.
Где:
Директива импорта внешнего XSL-файла (обрабатываеться XSL-процессором) из указанного файла. Путь к файлу указываем относительный.
Создание шаблона для основного навигационного меню
Наш предыдущий шаблон не обладает никакой динамикой, т.к. просто заменяет весь выходной XML-документ на код нашего шаблона.
Меню навигации сайта строиться на основе его структуры, представленной в XML-документе в следующем виде:
Начало
/
1. Создаем в директории xsl/my_template файл navigation.xsl следующего вида:
2. Вставляем в шаблон код нашего меню из файла layout.xsl:
3. …а на его место в файле layout.xsl вставляем вызов нашего шаблона меню:
4. Плюс, добавим в файл layout.xsl директиву импорта файла шаблона navigation.xsl:
5. Далее, создаем в файле navigation.xsl еще один шаблон, для обработки пунктов меню:
Где:
— вызов шаблона по имени. При этом шаблон не имеет привязки к элементу, т.е. вызывается произвольно.
6. Немного изменяем шаблон sections:
Где:
— обработка всех элементов item элемента sections. При этом, элементы item самих элементов item (sections/item/item) обрабатываться не будут, т.е. выводиться только один уровень меню разделов.
Мы вынесли обработку элементов item (пунктов меню) в отдельный шаблон. При этом, в нем мы добавили еще и вызов другого шаблона:
Этот шаблон будет формировать нормальные uri-ссылки для элементов нашего меню. О нем немного позже.
7. Теперь нам необходимо доделать меню,
чтобы оно учитывало, какой раздел является текущим. Для этого нам придется добавить условную обработку в наш шаблон элемента item:
Здесь мы сталкиваемся с новой конструкцией:
…которая, собственно, и задает условную обработку XML-элементов. В качестве параметра мы задаем условие:
В нашем случае это условие равенства атрибутов ID у корневого элемента (document) и текущего элемента (item), которое и определяет, является ли элемент текущим.
8. Теперь, разберем шаблон href_attribute:
Здесь мы сталкиваемся с инструкцией xsl:attribute. Она позволяет создавать атрибуты для элементов внутри которого она вызывается. В нашем случае мы вызываем ее из элемента a, соответственно, она создаст для него атрибут href, т.е. адрес.
Далее, нам необходимо каким-то образом определить, как у нас будут обрабатываться модули содержимого. Но, об этом в следующий раз.
UPD:
Материалы к статье. Собрал из того, что было:
parser.proc.ru/iso/xslt-1.zip
В шаблоне все пути прописаны от корня (делал на основе шаблона работающего на реальном сайте) поэтому либо перепишите их на относительные либо запускайте из под Apache.
XSLT первый шаг
1. Введение
Важные ссылки по теме, первоисточники:
Переводы на русский язык:
Для лучшего понимания всего происходящего я рекомендую читать спецификации в следующем порядке:
Особо пытливые могут также уделить внимание расширенному языку стилей XSL.
2. Валидный XHTML
Что такое валидный XHTML? В первую очередь, это XML-документ, который должен соответствовать спецификации XML. Во-вторую, почти обычная HTML-страница, к которой все привыкли.
Почему нужен именно XHTML? Исключительно из соображений совместимости и кросс-браузерности. Страница в XHTML будет с большей вероятностью отображаться корректно в популярных браузерах, чем обычный HTML.
Для рядового клепателя страниц словосочетание XML-документ должно означать следующее:
Также сам XHTML обязывает выполнять следующие условия:
Пример простого документа XHTML1.0:
И так обо всём по порядку.
Объявление XML-документа, в котором указывается его версия и кодировка.
Для большей безопасности кодировку нужно всегда выставлять, иначе могут возникнуть проблемы с невалидными (по отношению к дефолтной кодировке) символами.
Объявление типа документа и его схемы.
Объявление пространства имён и используемого языка.
Очень важно указывать ссылку именно в таком регистре и никак иначе. Это связано с тем, что в XML имена элементов и содержимое их атрибутов регистрозависимы.
Три версии XHTML1.0 предназначены для лучшей обратной совместимости:
Помимо XHTML1.0 на данный момент доступен XHTML1.1:
XHTML1.1 по сути является тем же XHTML1.0 Strict и призван вытеснить другие версии XHTML1.0. Однако, по сравнению с XHTML1.0 Strict, у него есть ряд отличий:
Итак, если вам нужна наибольшая кросс-браузерность и совместимость с рекомендациями W3C, то XHTML1.1 самое оно!
Из этих соображений результатом моих преобразований будет именно XHTML1.1.
3. XSLT-преобразования
Что такое XSLT? Это язык преобразований XML-документа, который был разработан как часть расширенного языка стилей (XSL).
Зачем нужен XSLT? Он позволяет реализовать схему, при которой данные хранятся отдельно, а их представление отдельно. То есть, один XML-документ преобразуется с помощью другого XML-документа (XSL, в котором находятся XSLT-шаблоны) в конечный документ. Результатом может быть XML, HTML или текстовый документ любого формата.
Для того, чтобы воспользоваться XSLT-преобразованиями, в первую очередь нужно сформировать правильный стиль XSL и подключить его к XML-файлу.
Валидным XSL-документом является XML-документ, у которого задано пространство имён xsl и присутствует корневой элемент stylesheet. В самом простом случае стиль может выглядеть, например, так:
Этот стиль не содержит каких-либо явных определений шаблонов или других элементов XSL. Однако, его уже можно использовать. Чтобы посмотреть результат, достаточно сформировать произвольный XML-документ и подключить к нему этот стиль:
За подключение стиля отвечает строка:
Если файлы text.xml и test.xsl созданы и находятся в одной папке, то с помощью любого XSLT-парсера можно преобразовать исходный test.xml в результирующий документ. В качестве парсера могут выступать все популярные браузеры (IE5+, FF2+, Opera9+ и другие), а также модули в языках программирования, например, в PHP. Если вы используете браузер, то достаточно открыть test.xml, и он сразу отобразит примерно такой результат:
При этом кодировка результата будет UTF-8, несмотря на то, что исходный документ был сформирован в windows-1251. К сожалению, браузеры обычно не позволяют просмотреть код результирующего документа, но модуль XSLT в PHP5 даёт возможность передать результирующий код в переменную, которую можно сохранить в файл. Поэтому, используя PHP, я приведу исходный код результирующего документа:
Этот код не является валидным XML-документом и тем более XHTML1.1. Для того, чтобы сформировать нужный код, я усложню исходный XSL-стиль и добавлю туда необходимые шаблоны и преобразования. При этом исходный XML-документ останется без изменений.
В качестве примера я приведу XSL-стиль, который при помощи XSLT будет выводить список атрибутов исходного XML-документа с их значениями, при этом будет формироваться валидный XHTML1.1. Итак, стиль:
Чтобы понять, как он работает, я распишу каждое действие отдельно:
Документ сформирован в кодировке windows-1251, о чём сообщается в атрибуте encoding. Версию XML-документа желательно всегда указывать, это рекомендация W3C.
Затем идёт объявление корневого элемента, стиля:
Следующим шагом в корневом элементе stylesheet объявляется, каким образом нужно формировать результирующий документ:
Объявление основного шаблона:
Именно этот XSLT-шаблон соответствует корню исходного дерева и будет вызван первым для преобразования. Атрибут match принимает значения, которые должны соответствовать языку поиска элементов XPath.
Остальные шаблоны, если таковые имеются, должны подключаться из этого шаблона при помощи средств XSLT.
Атрибут xmlns= «http://www.w3.org/1999/xhtml» указывает на пространство имён xhtml, которое будет применено по умолчанию к этому элементу и всем дочерним элементам, у которых оно не задано явно.
Атрибут xml:lang= «ru» указывает на язык, в котором сформирована страница (будущая).
Эта часть стиля была нужна для формирования атрибутики валидного XHTML1.1 кода.
Теперь что касается XSLT-преобразований:
Вставка простого текста:
Текст «Мой список:» будет подставлен в тег
Организация цикла по выборке:
Атрибут select принимает выражение XPath, на основе которого делает выборку. Если выборка вернула список узлов, то начинает работать цикл по каждому элементу.
В данном случае выборка вернёт список атрибутов для этого (корневого) и всех дочерних элементов.
В данном случае проверяется на чётность позиция элемента в списке выборки. Если тест возвращает true (порядковый номер элемента чётный), то срабатывает содержимое этого элемента.
Управление атрибутами вышестоящего элемента:
Вывод значений элемента:
Этот код подставит в вышестоящий элемент строку, собранную из имени текущего элемента и его значения. Содержимое атрибута select соответствует XPath.
Вывод ссылки на разработчика парсера XSLT:
Этот небольшой код XSLT формирует ссылку на разработчика парсера XSLT. Во многих случаях она будет разная и содержать разные значения.
Результатом обработки этого стиля ( test.xsl ) станет такой код:
Этот код соответствует стандарту XHTML1.1 и был сформирован на основе исходного XML-документа. Для проверки можно воспользоваться валидатором от W3C, который расположен по адресу http://validator.w3.org/.
В браузере этот код выглядит примерно так:
IE 6 | FireFox 3 | Opera 9.02 |
---|---|---|
4. Приложение
Ссылки на исходный код
Постоянный адрес статьи //anton-pribora.ru/articles/xml/xslt-first-step/. /Автор: Прибора Антон Николаевич, 2009 год/
Использование PHP5 для обработки XSLT
Для получения результирующего документа при помощи PHP5 я использовал такой код:
Дополнительную информацию по использованию XSLT в PHP5 можно найти по адресу http://ru2.php.net/manual/ru/book.xslt.php.
Мысли вслух
«Товарищи, мы стоим на краю огромной пропасти! И я предлагаю сделать большой, решительный шаг вперёд!»
© 2021 Антон Прибора. При копировании материалов с сайта, пожалуйста, указывайте ссылку на источник.