Документы XML уже сейчас можно использовать для разделения содержания сайта и его дизайна, так как они хорошо подходят для хранения информации. В самом простом случае можно воспользоваться уже зарекомендовавшей себя технологией каскадных таблиц стилей, но их возможности для отображения XML-документов сильно ограничены, что не удивительно. Ведь главная задача XML — это структурирование информации, а не ее отображение. Но уже сейчас у нас есть прекрасный инструмент, который прекрасно справляется с отображением информации — это хорошо знакомый нам язык разметки HTML (или xHTML, который является полноценным диалектом XML). идеальным вариантом было бы совместить достоинства этих языков, используя их сильные стороны, и технология, позволяющая это сделать, уже существует и носит название расширяемого языка стилей XSL (eXtendible stylesheet language).
Язык XSL включает в себя несколько компонентов, но нас, в первую очередь, интересует такая его составная часть, как язык преобразований XSLT (XSL Transformation Language), который позволяет преобразовать XML-документ в документ с другой древовидной структурой. Иными словами, с его помощью можно преобразовывать документы с одного диалекта XML на другой. Этим и можно воспользоваться и при разработке веб-приложений, сохраняя информацию в XML-документах и преобразовывая ее при необходимости с помощью инструкций XSLT в диалект xHTML или правильный HTML с древовидной структурой. Этот способ очень походит для создания шаблонов сайтов, тем более что последние версии браузеров (Internet Explorer 5.5, Mozilla 1.5, Firebird) поддерживают эту технологию, и со временем она будет использоваться все шире. Помимо браузеров, существуют программы — например xsltproc, — позволяющие на основе файла XML и инструкций для его преобразования сгенерировать HTML-файл. Если создание статичного файла вас не устраивает, то возможность создавать HTML-код по запросу браузера на стороне сервера позволяют скриптовые языки программирования, что делает возможным использовать эту технологию даже с учетом устаревших браузеров. Не следует также забывать, что, несмотря на то что мы будем рассматривать возможности XSLT для преобразований в HTML-язык, вы можете создать несколько наборов инструкций для преобразования XML-файла в другие диалекты — например, в язык WML, создавая одновременно с обычным сайтом wap-сайт на основе одной и той же информации.
Для того чтобы ознакомиться, как работает эта технология, нам понадобится XML-файл и файл с набором инструкций для преобразований XSLT, который часто называют таблицей стилей XSL. Создадим простой XML-документ, с которым будем работать в дальнейшем:
Таблицы XSL можно использовать с браузерами последних поколений
Обратите внимание на вторую стоку документа, где инструкция xml-stylesheet связывает наш документ с таблицей стилей XSL. Синтаксис этой инструкции одинаков как для привычных таблиц CSS, так и для XSL, отличаясь только атрибутом type, который приобретает соответственно значения text/css и text/xsl. Атрибут href знаком нам по языку HTML и содержит ссылку на файл с таблицей стилей.
Рассмотрим простую таблицу стилей XSL example.xsl, которая, однако, содержит достаточно элементов, чтобы понять, как работает эта технология и использовать их для создания вполне работоспособных шаблонов:
Таблицы CSS и XSL связываются с документами XML одинаково
Сразу отметим, что язык XSLT сам является подмножеством XML, и поэтому правила оформления таблицы стилей должны подчиняться всем правилам оформления XML-документов. Первой строкой нашего файла как раз и будет декларация XML, но в данном случае нам необходимо указать схему с описанием диалекта языка XSLT, по правилам которого мы составили наш документ. Это указание необходимо для программ, которые будут обрабатывать XML-документ с таблицей стилей, будь то браузеры или XSLT-процессоры, для подтверждения, что мы используем общепринятую схему для данного диалекта. Строка
указывает, что мы будем использовать схему для создания таблиц стилей xsl:stylesheet, которую можно обнаружить по адресу, указанному в атрибуте xmlns:xsl. Здесь также появляется префикс xsl, который задает название пространства имен, используемых в этой схеме. Он встретится во всех тегах нашей таблицы стилей XSL, указывая на их принадлежность к языку XSLT.
Необходимо указать схему, используемую в таблице стилей
В нашей таблице мы создадим набор шаблонов, привязанных к определенных узлам созданного нами XML-документа. Процессор xslt, встроенный в браузер или в виде отдельной программы, будет пробегать наш документ и, при совпадении условий, применять наши инструкции к элементам XML. Первым делом, естественно, мы должны создать шаблон для корневого элемента нашего документа stock. Шаблон создается с помощью тега xsl:template с атрибутом match, задающим элемент, для которого шаблон будет применен. В нашем случае задаем в соответствие корневому элементу стандартные блоки HTML-документа: html, head, title, body, а также создаем таблицу для более удобного представления информации, хранящейся в XML-документе. В блоке body мы применили инструкцию , задача которой — передать содержание элемента stock на обработку остальных шаблонов в нашей таблице стилей. Так как это корневой элемент, содержащий все элементы, то и для них будут применены прописанные далее в таблице шаблоны. По такому же принципу построен шаблон для тега book, создающий для каждого элемента строку таблицы.
Таблица стилей XSL — набор шаблонов для элементов XML
Следующий шаблон несколько сложней. В нем мы используем конструкции языка XPath, который когда-то был составной частью XSLT, но сейчас уже стал самостоятельной технологией. Его задача — обнаруживать определенные узлы XML по описанию заданному пользователем и передавать их другим инструментам, обрабатывающим документ XML. Благодаря ему мы можем воспользоваться оператором «|» в качестве логического «ИЛИ» для указания элементов, к которым мы хотим применить один и тот же шаблон. Таким образом, мы создаем один шаблон для элементов author, name и price.
В таблицах XSL широко иcпользуется язык XPath
В этом и следующем шаблонах мы используем еще одну инструкцию: xsl:value-of. Эта команда извлекает значение узла XML и помещает его в итоговый документ. Последний шаблон нашего документа обрабатывает текстовое содержание тегов XML, что также указывается с помощью команды XPath text(). Этот шаблон прописывать было не обязательно, т
ак как предыдущий шаблон неявно передает на обработку содержание узлов author, name и price, даже без наших указаний. Тем не менее явная обработка текстовых элементов документа делает наш шаблон более понятным. В команде xsl:value-of в атрибуте select тоже используется команда XPath «.», которая ссылается на текущий элемент. Таким образом, последний шаблон выполнтся при нахождении текстовой строки, извлечет ее значение и поместит в результирующий документ. Команда xsl:value-of используется также в шаблоне для элементов author, name, price — для извлечения значения атрибута currency тега price. В языке XPath символ «@» используется для обозначения атрибутов элементов, а выражение
<xsl:value-of select=»@currency» />
дает указание извлечь значение атрибута currency и поместить его в итоговый документ. Так как атрибут currency есть только в теге price, то во время обработки тегов author и name не будет возвращено никаких значений, что позволяет использовать эту инструкцию в одном шаблоне для нескольких тегов.
Результат обработки XML-документа с помощью нашей таблицы стилей XSL можно посмотреть браузерах последнего поколения:
Обратите внимание, что браузер показывает источник нашего документа как xml-документ, а в окне браузера он отображается как веб-страница — со всей информацией, которую мы хотели вывести.
Описанные выше инструкции XSLT — это вершина огромного айсберга возможностей, которые предоставляет эта технология. С ее помощью можно осуществлять сортировки информации, создавать циклические переборы узлов, примять проверки условий, выводить служебную информацию и так далее. Совместно с языком XPath можно получить доступ к любому элементу документа XML, а используя возможности HTML — создать любой дизайн отображения информации, полностью отделяя содержание ваших страниц от их дизайна.