Электронный магазин на Java и XML

       

Создание таблиц стилей с использованием XSL


Расширяемый язык таблиц стилей (Extensible Stylesheet Language, XSL), как следует из его названия, — это язык для конструирования таблиц стилей. Таблицы стилей XSL используются для описания внешнего вида документов XML, предназначенных для чтения людьми.

Например, web-дизайнер может создать таблицу стилей для XML-каталога товаров. В этой таблице стилей может быть указано, какие шрифты, размеры шрифтов и границ нужно использовать в документе, что фактически выполняется, когда сам документ объединяется с таблицей стилей с помощью процессора XSL.

Применение таблицы стилей к документу процессор таблиц стилей осуществляет в два этапа. Первый этап — трансформация дерева (tree transformation). Вы можете, например, написать таблицу стилей, которая расположит товары в вашем каталоге в алфавитном порядке или пронумерует их, прежде чем отобразить. Трансформация дерева позволяет также перемещать данные XML и выполнять вычисления с этими данными.

Второй этап — форматирование (formatting). Форматирование фактически представляет собой процесс задания стиля отображения данных, размеров шрифтов, разрывов страниц и т. п.

Спецификация XSL содержит три различных языка, предназначенных для осуществления этих двух задач:

XML Path Language (XPath) — язык для создания ссылок на различные части документа XML;

XSL Transformations (XSLT) — язык, предназначенный для генерации дерева документа;

Extensible Stylesheet Language (XSL) — XSLT плюс описание набора объектов форматирования и свойств форматирования.

Предположим, что у вас имеется документ XML, описывающий вашу музыкальную библиотеку, например такой, как представленный в листинге 1.7.

Листинг 1.7. Пример каталога музыкальной библиотеки (MyMusic.xml)

<?xml version="l.0"?>

<library>



<cd>

<title>Just Singin' Along</title>

<artist>The Happy Guys</artist>

<description>

A lovely collection of songs that the whole family can sing right along with.

</description>


<song><title>I'm Really Fine</title></song>

<song><title>Can't Stop Grinnin'</title></song>

<song><title>Things Are Swell</title></song>

<purchase_date>2/23/1954</purchase_date>

</cd>

<cd>

<title> It' s Dot Com Enough for Me: Songs From Silicon Somewhere </title>

<artist>The Nettizens</artist>

<description> A collection of the best folk music from Internet companies. </description>

<song><title>My B2B Is B-R-0-K-E</title></song>

<song><title>Workin' in a Cubicle</title></song>

<song><title>Killer Content Strategy</title></song>

<song><title> She Took the Bricks. I Got the Clicks </title></song>

<purcnase_date>7/12/2000</purchase_date>

</cd>

</library>

Допустим, вы хотите создать и напечатать список всего, что имеется в вашей библиотеке. Один из способов сделать это заключается в том, чтобы применить к документу MyMusic.xml таблицу стилей, которая трансформирует его в формат HTML. В листинге 1.8 приводится такая таблица стилей.



Листинг 1.8. Таблица стилей, генерирующая документ HTML (CDstyle.xsl)

<?xml version="l.0"?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">

<xsl:template match="/">

<TABLE STYLE="border:lpx solid black; width:300px">

<TR STYLE="font-size:10pt; font-family:Verdana; font weight:bold; text-decoration:underline">

<TD>Title</TD>

<TD>Artist</TD>

</TR>

<xsl:for-each select="library/cd">

<TR STYLE="font-family:Verdana; font-size:12pt; padding:0px 6px">

<TD><xsl lvalue-of select=" title"/></TD>

<TD><xsl:value-of select="artist"/></TD>

</TR>

</xsl:for-each>

</TABLE>



</xsl:template>

</xsl:stylesheet>

Связать таблицы стилей с документом XML можно с помощью инструкции по обработке. Например:

<?xml-stylesheet href="CDstyle.xsl" type="text/xsl"?>

Также вы можете использовать каскадные таблицы стилей (Cascading Style Sheets, CSS) для применения определенного формата к данным XML. В этом случае вы должны связать документ с таблицей стилей с помощью инструкции по обработке, подобной следующей:

<?xml-stylesheet href="CDstyle.ess" type="text/css"?>

В листинге 1.8 показан базовый пример трансформации данных XML с помощью стандартной таблицы стилей. XSLT находит данные, которые соответствуют некоторому образцу, и вставляет их в нужное место шаблона. Поиск соответствия с образцом — очень важная часть XSL. Посмотрим на образец, который применялся во второй части нашего примера:

<xsl:for-each selееt="library/cd">

Эта строка задает цикл по всем экземплярам элемента cd внутри элемента library. Если вы хотите создать разделенный запятыми список всех песен на каждом диске (каждому диску соответствует свой экземпляр элемента cd), вы можете задать еще один цикл внутри приведенного выше цикла, как показано в следующем примере:

...

<xsl:for-each select="library/cd">

<TR STYLE="font-family:Verdana; font-size:12pt; padding:0px 6px">

<TD><xsllvalue-of select="title"/></TD>

<TD><xsl:value-of select="artist"/></TD>

<TD>

<xsl:for-each select="song">

"<xsl :value-of select="title"/>"

<xsl:if test="context()[not(end())]">, </xsl:if>

</xsl: for-each>

</TD>

</TR>

</xsl:for-each>

...

Если получившийся документ XML открыть в браузере, поддерживающем XSL, то он будет выглядеть примерно так, как показано на рис. 1.1.





Рис. 1.1. Результат применения таблицы CDstyle.xsl к файлу MyMusic.xml




Содержание раздела