\viewkind4\uc1\pard\langl033\b\ The Planets Table\par\b0
Name\tab Mass\tab Rad.\tab Day\par
<xsclass="underline" apply-templates/>
\par
}</xsclass="underline" template>
<xsclass="underline" template match="PLANET">
<xsclass="underline" value-of select="NAME"/>
\tab
<xsclass="underline" value-of select="MASS"/>
\tab
<xsclass="underline" value-of select="RADIUS"/>
\tab
<xsclass="underline" value-of select="DAY"/>
\tab
\par
</xsclass="underline" template>
</xsclass="underline" stylesheet>
Результирующий документ RTF, planets.rtf, изображен на рис. 2.3 в Microsoft Word 2000. Обратите внимание на то, что я установил метод вывода в текст в элементе <xsclass="underline" output method="text">:
<?xml version="1.0"?>
<xsclass="underline" stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsclass="underline" output method="text"/>
<xsclass="underline" template match="/PLANETS">{\rtf1\ansi\deff0{\fonttbl(\\fcharset0 Courier New;}}
\viewkind4\ucl\pard\lang1033\b\ The Planets Table\par
.
.
.
Рис. 2.3. Planets.rtf в Microsoft Word
Вы также могли заметить, что я принялся записывать коды RTF сразу же после элемента <xsclass="underline" template> — я сделал так потому, что в документах RTF коды RTF должны появляться с самого начала. Если бы я решил вставлять коды RTF на следующей строке — например, так:
<?xml versions="1.0">
<xsclass="underline" stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsclass="underline" output method="text"/>
<xsclass="underline" template match="/PLANETS">
{\rtf1\ansi\deff0{\fonttbl{\\fcharset0 Courier New;}}
\viewkind4\uc1\pard\lang1033\b\ The Planets Table\par
.
.
.
то выходной файл RTF начинался бы с символа новой строки, что вызвало бы ошибку приложения для работы с файлами RTF — такого, как Microsoft Word. Более подробно RTF и другие форматы будут рассмотрены в главе 6.
Упрощенные таблицы стилей
Как можно заметить на основе рассмотренного до сих пор материала, создавать таблицы стилей XSLT не так-то просто. W3C попытался облегчить эту процедуру, разработав упрощенные таблицы стилей (simplified stylesheets), в которые не нужно — а на самом деле и невозможно — включать элемент <xsclass="underline" stylesheet> или какие-либо еще элементы высокого уровня.
Фактически упрощенная таблица стилей представляет собой результирующий документ, содержащий несколько элементов XSL невысокого уровня. W3C называет такую таблицу «элемент буквального результата как таблица».
В листинге 2.7 я осуществлю преобразование planets.xml в planets.html, но теперь я сделаю это при помощи упрощенной таблицы стилей. В упрощенных таблицах стилей вы не можете применять элементы высокого уровня, такие как <xsclass="underline" template>, позволяющие рекурсивную обработку всех элементов в исходном документе. Поэтому здесь я зайду немного вперед и воспользуюсь элементом <xsclass="underline" for-each> (рассматриваемым в главе 5), который, не являясь элементом высокого уровня, позволяет обработать в цикле сразу несколько узлов.
Мне также нужно каким-либо образом выбрать все элементы <PLANET> в исходном документе, и вы можете подумать, что это невозможно без использования шаблонов нескольких уровней — например, один для корневого узла, затем один для выбора на следующем уровне вниз, корневом элементе <PLANETS>, и затем еще один уровень вниз для самих элементов <PLANET>. Однако, используя XPath, можно при помощи выражения "//PLANET" найти все узлы элемента <PLANET>, производные от корневого узла (см. главу 4). Это значит, что я могу написать упрощенную таблицу стилей следующим образом.
Листинг 2.7. Упрощенная таблица стилей<HTML xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xsclass="underline" version="1.0">
<HEAD>
<TITLE>
The Planets Table
</TITLE>
</HEAD>
<BODY>
<H1>
The Planets Table
</H1>
<TABLE BORDER="2">
<TR>
<TD>Name</TD>
<TD>Mass</TD>
<TD>Radius</TD>
<TD>Day</TD>
</TR>
<xsclass="underline" for-each select="//PLANET">
<TR>
<TD><xsclass="underline" value-of select="NAME"/></TD>
<TD><xsclass="underline" value-of select="MASS"/></TD>
<TD><xsclass="underline" value-of select="RADIUS"/></TD>
<TD><xsclass="underline" value-of select="DAY"/></TD>
</TR>
</xsclass="underline" for-each>
</TABLE>
</BODY>
</HTML>
Данная версия работает точно так же, как и предыдущая версия planets.xsl, при этом совсем не используя элементы высокого уровня. Упрощенные таблицы стилей, такие как эта, были представлены в помощь авторам HTML при осуществлении преобразований в XSL, однако их применимость весьма ограничена. Очевидно, все равно нужно знать, как работать с элементами XSL, а отсутствие возможности использовать <xsclass="underline" template> в данном случае только затруднило работу. Однако вы должны знать, что упрощенные таблицы стилей существуют и включены в спецификацию XSLT.
ОБРАБОТКА ПО УМОЛЧАНИЮ БЕЗ ЭЛЕМЕНТА <XSL:STYLESHEET>
Если процессор XSLT не может найти в таблице стилей элемент <xsclass="underline" stylesheet>, он трактует таблицу как упрощенную таблицу стилей.