» Xml для новичков
» Главная страница
»
К оглавлению
Стилевые таблицы XSL
Стилевыми таблицами (стилевыми листами) принято называть
специальные инструкции, управляющие процессом отображения элемента в окне
программы-клиента(например, в окне броузера). Предложенные в качестве
рекомендация W3C, каскадные стилевые таблицы(CSS- Cascading Style Sheets) уже больше года используются Web- разработчиками для
оформления Web- страниц. Поддержка CSS наиболее известными на сегодняшний день
броузерами Netscape Navigator(начиная с версии 4.0) и Microsoft Explorer(начиная
с версии 3.0), позволила использовать стилевые таблицы для решения самого
широкого спектра задач - от оформления домашней странички до создания крупного
корпоративного Web-узла. Слово каскадные в определении CSS означает возможность
объединения отдельных элементов форматирования путем вложенных описаний стиля.
Например, атрибуты текста, заданные в тэге <body>, будут распространяться
на вложенные тэги до тех пор, пока в них не встретятся стилевые описания,
отменяющие или дополняющие текущие параметры. Таким образом, использование
таблиц CSS в HTML было весьма эффективно - отпадала необходимость явного задания
тэгов форматирования для каждого из элементов документа.
Являясь очень мощным средством оформления HTML- страниц, CSS-
таблицы, тем не менее, не могут применяться в XML-документах, т.к. набор тэгов в
этом языке не ограничен и использование статических ссылок на форматируемые
объекты документа в этом случае невозможно.
Поэтому для форматирования XML- элементов был разработан новый
язык разметки, являющийся подмножеством XML, и специально был предназначен для
форматирования XML- элементов.
Некоторые его отличия от CSS: Во-первых, стилевые таблицы
XSL позволяют определять оформление элемента в зависимости от его
месторасположения внутри документа, т.е. к двум элементам с одинаковым названием
могут применяться различные правила форматирования. Во-вторых, языком,
лежащем в основе XSL, является XML, а это означает, что XSL более гибок,
универсален и у разработчиков появляется возможность использования средства для
контроля за корректностью составления таких стилевых списков(используя DTD или
схемы данных) В-третьих, таблицы XSL не являются каскадными, подобно CSS,
т.к. чрезвычайно сложно обеспечить "каскадируемость" стилевых описаний, или,
другими словами, возможность объединения отдельных элементов форматирования
путем вложенных описаний стиля, в ситуации, когда структура выходного документа
заранее неизвестна и он создается в процессе самого разбора. Однако в XSL
существует возможность задавать правила для стилей, при помощи которых можно
изменять свойства стилевого оформления, что позволяет использовать довольно
сложные приемы форматирования
В настоящий момент язык XSL находится на стадии разработки в
W3C и в будущем, видимо, станет частью стандарта XML. Это означает, что
использование этого механизма является наиболее перспективным способом
оформления XML- документов. В текущем рабочем варианте W3C, XSL рассматривается
не только как язык разметки, определяющий стилевые таблицы - в него заложены
средства, необходимые для выполнения действий по фильтрации информации,
выводимой в окно клиента, поиска элементов, сложного поиска, основанного на
зависимостях между элементами и т.д. На сегодняшний день единственным броузером,
поддерживающим некоторые из этих возможностей, является бэта-версия Internet
Explorer 5.0, однако в самом ближайшем будущем, безусловно, XSL будет
использоваться также широко, как сегодня стандартные тэги HTML
В этом разделе мы рассмотрим упрощенную объектную модель XSL-
документа, используемую в текущей версии XSL-конвертора Microsoft msxsl, и
поэтому информацию, изложенную далее, нельзя считать описанием стандарта языка.
Полный рабочий вариант спецификации XSL в последней его редакции доступен на
сервере.
Все примеры, приводимые далее, могут быть проверены при помощи
XSL- конвертора, свободно доступного на странице Mcrosoft - www.microsoft.com/xml/xsl/ Принцип обработки XML- документов стилевыми таблицами
заключается в следующем: при разборе XSL-документа программа-анализатор
обрабатывает инструкции этого языка и каждому элементу, найденному в XML- дереве
ставит в соответствие набор тэгов, определяющих форматирование этого элемента.
Другими словами, мы задаем шаблон форматирования для XML- элементов, причем сам
этот шаблон может иметь структуру соответствующего фрагмента XML-документа.
Инструкции XSL определяют точное месторасположение элемента XML в дереве,
поэтому существует возможность применять различные стили оформления к одинаковым
элементам, в зависимости от контекста их использования. В общем случае, XSL позволяет автору задавать параметры
отображения элемента XML, используя любые языки, предназначенные для
форматирования - HTML, RTF и т.д. В этом разделе мы будем использовать в
качестве такого языка HTML, т.к. документы, созданные при помощи этого языка
разметки могут просматриваться любой подходящей программой просмотра Web-страниц
Структура XSL- таблиц
Рассмотрим основные структурные элементы XSL, используемые, в
частности, в конверторе msxsl, для создания оформления XML-документов.
Правила XSL
XSL- документ представляет собой совокупность правил
построения, каждое из которых выделено в отдельный блок, ограниченный тэгами
<rule> и </rule>;. Правила определяют шаблоны, по
которым каждому элементу XML ставится в соответствие последовательность HTML-
тэгов, т.е. внутри них содержатся инструкции, определяющие элементы XML-
документа и тэги форматирования, применяемые к ним.
Элементы XML, к которым будет применяться форматирование,
обозначаются в XSL дескриптором <target-element/>;. Для
указания элемента с конкретным названием (название элемента определяется тэгами,
его обозначающими), т.е. определения класса элемента, можно использовать атрибут
type="<имя_элемента>"
Вот пример простейшего XSL-документа, определяющего
форматирование для фрагмента <flower>rose</flower> : <xsl>
<rule>
<target-element type="flower"/>
<p color="red" font-size="12">
<children/>
</p>
</rule>
</xsl>
Уже на этом примере можно проследить особенность
использования стилевых таблиц: в любых правилах при помощи соответствующих
элементов декларативно задается область, которая определяет фрагмент
XML-документа, как мы чуть позже увидим, программа-анализатор заново проходит
все элементы, начиная с текущего, всякий раз, когда в структуре XML- документа
обнаруживаются новые вложенные элементы.
Инструкция <target-element> указывает на то, что данное
правило определяет элемент. Параметром type="flower" задается название
XML-элемента, для которого будет использоваться это правило. Программа-конвертор
будет использовать HTML-тэги, помещенные внутри блока <rule></rule>
для форматирования XML-элемента, которому "предназначался" текущий блок. В том
случае, если для какого-то элемента XML шаблон не определяется, в выходной
документ будут добавлены тэги форматирования по умолчанию (например,
<DIV></DIV> )
Процесс разбора XSL-правил является рекурсивным, т.е. если у
элемента есть дочерние элементы, то программа будет искать определения этих
элементов, расположенных "глубже" в дереве документа. Указанием на то, что
необходимо повторить процесс разбора XML документа, теперь уже для дочерних
элементов, является инструкция <children/>. Дойдя до нее,
анализатор выберет из иерархического дерева XML- элементов нужную ветвь и найдет
в XSL-шаблонах правила, определяющие форматирование этих нижележащих элементов.
В том случае, если вместо <children> мы укажем инструкцию
<empty/>;, программа закончит движение по данной ветви и
возвратится назад, в родительское правило. При этом текущее правило никакой
информации в выходном HTML-документе изменять не будет, т.к. <empty/> в
данном случае означает, что содержимое элемента отсутствует.
Если в одном правиле <target-element> используется
несколько раз, то инструкции по форматированию будут распространены на все
описываемые внутри него XML-элементы, т.е. можно задавать единый шаблон
форматирования для нескольких элементов одновременно: <xsl>
<rule>
<target-element type="item1"/>
<target-element type="item2"/>
<target-element type="item3"/>
<hr>
<children/>
<hr>
</rule>
</xsl>
Ниже приведен пример более сложного XSL- описания, некоторые
фрагменты которого будут пояснены позже.
XML-документ: <?XML Version="1.0"?>
<documents>
<books>
<book id="Book1">
<title>Макроэномические показатели экономики
Римской Империи в период ее расцвета</title>
<author>Иван Петров</author>
<date>21.08.98</date>
</book>
<book id="Book2">
<title>Цветоводство и животноводство.
Практические советы</title>
<author>Петр Сидоров</author>
<date>10.10.98</date>
</book>
</books>
<articles>
<article id="Article1">
<author>Петр Иванов</author>
<title>Влияние повышения тарифов оплаты за телефон
на продолжительность жизни населения</title>
<date>12.09.98</date>
</article>
</articles>
</documents>
Содержимое XSL-документа: <xsl>
<rule>
<root/>
<HTML>
<BODY bgcolor="white">
<center><hr width="80%"/><b>Library</b>
<hr width="80%"/><br/>
<table width="80%" border="2">
<children/>
</table></center>
</BODY>
</HTML>
</rule>
<rule>
<element type="book">
<target-element type="author"/>
</element>
<td align="center">
<p color="red" font-size="14"> <b>
<children/>
</b></p></td>
</rule>
<rule>
<element type="article">
<target-element type="author"/>
</element>
<td align="center">
<p color="red" font-size="14"
font-style="italic"><children/></p></td>
</rule>
<rule>
<target-element type="book"/>
<tr><children/></tr>
</rule>
<rule>
<target-element type="article"/>
<tr><children/></tr>
</rule>
<rule>
<target-element/>
<td align="center"><p><children/></p></td>
</rule>
<rule>
<target-element type="books"/>
<tr><td colspan="3" bgcolor="silver"
>Books</td></tr>
<children/>
</rule>
<rule>
<target-element type="articles"/>
<tr><td colspan="3" bgcolor="silver"
>Articles</td></tr>
<children/>
</rule>
</xsl>
Следующий
урок
|