Следующий пример таблицы стилей первоначально был приведен в главе 2, где она использовалась с целью перевода planets.xml в формат RTF, для понимания которого вы теперь лучше вооружены. В этом случае я преобразую planets.xml в planets.rtf, используя коды RTF как элементы буквального результата:
<?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" strip-space elements="*"/>
<xsclass="underline" template match="/PLANETS">{\rtf1\ansi\deff0{\fonttbl
{\\fcharset0 Courier New:}}
\viewkind4\ucl\pard\lang1033\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, показан на рис. 6.2 в редакторе Microsoft Word 2000.
Рис. 6.2. Файл planets.rtf в Microsoft Word
Заметьте, что методом вывода является текст, а не что-нибудь наподобие «rtf»:
<?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" strip-space elements="*"/>
<xsclass="underline" template match="/PLANETS">{\rtf1\ansi\deff0{\fonttbl
{\\fcharset0 Courier New:}}
\viewkind4\ucl\pard\lang1033\b\ The Planets Table\par
.
.
.
Отметьте также, что я поместил коды RTF сразу же после элемента <xsclass="underline" template>, поскольку документы RTF должны с самого начала начинаться с кодов RTF; если бы я начал вставлять коды RTF на следующей строке, как, например:
<?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" strip-space elements="*"/>
<xsclass="underline" template match="/PLANETS">{
\rtf1\ansi\deff0{\fonttbl
{\\fcharset0 Courier New:}}
\viewkind4\ucl\pard\lang1033\b\ The Planets Table\par
.
.
.
то выходной файл RTF начинался бы с символа новой строки, что привело бы к ошибке в приложении, работающем с файлом RTF (например, вероятно, Microsoft Word).
Вывод в формате XHTML
W3C представил XHTML как последователя HTML, но ни в XSLT 1.0, ни в рабочем проекте XSLT 1.1 нет никакой специальной поддержки для преобразований из XML в XHTML. Предполагается, что надлежащая поддержка будет включена в XSLT 2.0. Тем не менее, при помощи процессоров XSLT все равно можно создавать документы XHTML.
ПОДРОБНЕЕ О XHTML
Если вы хотите узнать больше о XHTML, обратитесь к источникам: W3C рекомендация XHTML 1.0 по адресу www.w3.org/TR/xhtml1/, а также рекомендация XHTML 1.1 по адресу www.w3.org/TR/xhtml11/.
Помимо заботы о том, что ваш документ должен удовлетворять правилам XHTML (таким, как отсутствие отдельных атрибутов, заключение в кавычки всех значений атрибутов, использование для разметки символов в нижнем регистре, наличие для каждого открывающего тега закрывающего, проверка того, что документ является хорошо сформированным XML, и т.д.), основная задача — гарантировать, что в результирующем документе появится элемент <!DOCTYPE>.
Ниже приведены элементы <!DOCTYPE>, которые следует использовать с тремя типами XHTML 1.0 — строгим (strict), переходным (transitional) и кадровым (frameset):
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
А вот элемент <!DOCTYPE> для XHTML 1.1:
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
ЭЛЕМЕНТЫ <!DOCTYPE> И HTML 4.01
Строго говоря, даже документы HTML должны начинаться с элемента <!DOCTYPE>. Официально существует три формы HTML 4.01: строгая (strict), переходная (transitional) и кадровая (frameset). Вот полные элементы <!DOCTYPE> для этих версий: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">, <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> и <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">. Если вы генерируете совершенно правильные документы HTML, не забудьте добавить в них этот элемент. Дополнительную информацию можно получить по адресу www.w3.org/TR/html40/struct/global.html.
При установке метода вывода в XML для создания элемента <!DOCTYPE> можно воспользоваться атрибутами doctype-system и doctype-public элемента <xsclass="underline" output>. Вот пример элемента <xsclass="underline" output>, создающего элемент <!DOCTYPE> для переходного XHTML 1.0:
<xsclass="underline" output method="xml"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
indent="yes"/>