time

Пример работы с XSLT 2.0

xslt.png W3C разработала стандарт для представления информации хранящейся в XML – XSL (расширяемый язык таблиц стилей), который включает в себя три составляющих:

  • XSL-FO – язык разметки для представления и описания объектов на странице.
  • XSLT – язык разметки для преобразования любого, основанного на XML, документа в другой документ, но уже на другом языке разметки или в простой текст
  • XPath – язык для указания на элементы внутри XML документа

Схема работы парсера XSLT:

xslt_parser.gif

Парсер XSLT 2.0 бывает двух видов:

  1. простой XSLT парсер
  2. парсер XSLT с поддержкой схемы данных

Три распространенных, программных реализаций XSLT парсеров:

  1. MSXML
  2. Saxon
  3. Xalan

Для простого примера работы с 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 состоит из:

  • строка 1 – объявления XML
  • строка 2 – объявление пространства имен (http://www.w3.org/1999/XSL/Transform) и версии

В файле есть обычные 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

blog comments powered by Disqus