Книга: XSLT

Вывод в формате 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>.

Оглавление книги


Генерация: 0.096. Запросов К БД/Cache: 0 / 0
поделиться
Вверх Вниз