W3C разработала стандарт для представления информации хранящейся в XML – XSL (расширяемый язык таблиц стилей), который включает в себя три составляющих:
Схема работы парсера XSLT:
Парсер XSLT 2.0 бывает двух видов:
Три распространенных, программных реализаций XSLT парсеров:
Для простого примера работы с XSLT нам понадобится XML файл, и таблица стилей XSLT.
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="hw.xsl"?> <groups> <group> <name>root</name> <desc>root group</desc> <users right="rwx">root, admin</users> </group> <group> <name>user</name> <desc>users group</desc> <users right="r--">bob, keli</users> </group> </groups>
XML файл содержит в себе абстрактный пример набора групп пользователей, с названием группы (тег name), описанием (тег desc), перечнем пользователей (тег users) для которых в атрибуте right указаны права.
Сам файл состоит из объявления XML (строка 1), ссылки на файл со стилями XSLT (строка 2) и набора тегов.
<?xml version="1.0" encoding="UTF-8"?> <html xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xsl:version="2.0"> <head> <title>Groups</title> </head> <body> <xsl:for-each select="/groups/group"> <h3 id="{name}"><xsl:value-of select="name" /></h3> <p><strong>Users:</strong> <xsl:value-of select="users" /> [<xsl:value-of select="users/@right" />]</p> <p><strong>Desc:</strong> <xsl:value-of select="desc" /></p> </xsl:for-each> </body> </html>
Файл стилей XSLT состоит из:
В файле есть обычные html теги, которые без изменений уйдут в результирующий файл и инструкций парсера, которые начинаются с <xsl: … />.
Ниже представлена инструкция определяющая цикл по перебору элементов, в атрибуте select=”" указывается путь к группе элементов group начиная с корневого элемента /
<xsl:for-each select="/groups/group"> … </xsl:for-each>
В самом цикле мы просто выбираем значения вложенных тегов и вставляем в обычные html теги. За выборку значений тегов отвечает инструкция <xsl:value-of select=”name” />, где name – имя тега в XML документе. За выборку значений атрибутов отвечает та же инструкция, но с указанием имени тега <xsl:value-of select=”users/@right” />.
Для просмотра результата существует несколько способов. Наиболее простой – открыть непосредственно в браузере (IE 6+, Firefox, Opera) XML файл.
На странице developer.mozilla.org написано, что Firefox на данный момент не поддерживает XSLT версии 2.0, но есть способы реализации поддержки с помощью сторонних расширений. Поддерживают ли другие браузеры XSLT версии 2.0 я не знаю.
Просмотр в браузере XML документа с подключенной таблицей стилей XSLT заставляет браузер в реальном времени выполнять преобразование, в этом можно удостоверится просмотрев исходный код нашего XML документа – мы увидим текст XML документа без изменений, т.е. результирующий xhtml файл существует только в памяти браузера.
Что бы преобразовать XML документа с помощью таблицы стилей XSLT в ‘физический’ HTML файл нам понадобится внешней интерпретатор – Saxon, реализация которого есть для .NET и Java. На момент написания поста последняя версия – 9.1, которая поддерживает XSLT версии 2.0. Я покажу пример трансляции в HTML на Java реализации. После скачивания архива и распаковки необходимо прописать в переменную окружения CLASSPATH (Управление Java classpath под Windows) путь к файлу saxon9.jar из библиотеки Saxon.
Для себя я сделал небольшой исполняемый скрипт, который принимает три параметра:
1-й – имя выходного файла
2-й – имя документа XML
3-й – имя файла с таблицей стилей XSLT
Текст скрипта:
java -classpath “c:Program FilesJavajdk1.6.0_11classsaxonsa9saxon9.jar” net.sf.saxon.Transform -o %1 %2 %3
Пример запуска: xslt.bat grp.html grp.xml grp.xsl
По материалам книги Jeni Tennison – Beginning XSLT 2.0: From Novice to Professional