Вывод в формате XHTML
Вывод в формате 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 элемента <xsl:output>. Вот пример элемента <xsl:output>, создающего элемент <!DOCTYPE> для переходного XHTML 1.0:
<xsl: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"/>
В листинге 6.5 приведена полная таблица стилей planets.html, использующая этот элемент <xsl:output> для преобразования planets.xml в допустимый документ XHTML.
Листинг 6.5. Преобразование planets.xml в XHTML
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl: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"/>
<xsl:template match="/PLANETS">
<html>
<head>
<title>
The Planets Table
</title>
</head>
<body>
<h1>
The Planets Table
</h1>
<table>
<tr>
<td>Name</td>
<td>Mass</td>
<td>Radius</td>
<td>Day</td>
</tr>
<xsl:apply-templates/>
</table>
</body>
</html>
</xsl:template>
<xsl:template match="PLANET">
<tr>
<td><xsl:value-of select="NAME"/></td>
<td><xsl:apply-templates select="MASS"/></td>
<td><xsl:apply-templates select="RADIUS"/></td>
<td><xsl:apply-templates select="DAY"/></td>
</tr>
</xsl:template>
<xsl:template match="MASS">
<xsl:value-of select="."/>
<xsl:text> </xsl:text>
<xsl:value-of select="@UNITS"/>
</xsl:template>
<xsl:template match="RADIUS">
<xsl:value-of select="."/>
<xsl:text> </xsl:text>
<xsl:value-of select="@UNITS"/>
</xsl:template>
<xsl:template match="DAY">
<xsl:value-of select="."/>
<xsl:text> </xsl:text>
<xsl:value-of select="@UNITS"/>
</xsl:template>
</xsl:stylesheet>
Вот результирующий файл XHTML:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>
The Planets Table
</title>
</head>
<body>
<h1>
The Planets Table
</h1>
<table>
<tr>
<td>Name</td>
<td>Mass</td>
<td>Radius</td>
<td>Day</td>
</tr>
<tr>
<td>Mercury</td>
<td>.0553 (Earth = 1)</td>
<td>1516 miles</td>
<td>58.65 days</td>
</tr>
<tr>
<td>Venus</td>
<td>.815 (Earth = 1)</td>
<td>3716 miles</td>
<td>116.75 days</td>
</tr>
<tr>
<td>Earth</td>
<td>1 (Earth = 1)</td>
<td>2107 miles</td>
<td>1 days</td>
</tr>
</table>
</body>
</html>
Полученный документ, planets.html, является и хорошо сформированным, и допустимым документом XHTML 1.0 — в соответствии с программой допустимости W3C для HTML и XHTML, расположенной по адресу: http://validator.w3.org/file-upload.html. Заметьте, что, поскольку документы XHTML являются в то же время хорошо сформированными XML-документами, мы воспользовались методом вывода XML, — поэтому преобразование не было слишком сложным; единственной сложностью оказалось создание элемента <!DOCTYPE>.