Выбрать главу

 <xsclass="underline" template match="DENSITY"> </xsclass="underline" template>

 <xsclass="underline" template match="DISTANCE"> </xsclass="underline" template>

</xsclass="underline" stylesheet>

Далее я применяю эту новую версию planets.xsl к planets.xml, используя Xalan, чтобы создать новый документ XML, new.xmclass="underline"

C:\planets>java org.apache.xalan.xslt.Process -IN planets.xml -XSL planets.xsl -OUT new.xml

Вот как выглядит результирующий документ XML, new.xmclass="underline"

<?xml version="1.0" encoding="UTF-8"?>

<PLANET>

 <NAME>Mercury</NAME>

 <MASS>.0553(Earth = 1)</MASS>

</PLANET>

<PLANET>

 <NAME>Venus</NAME>

 <MASS>.815(Earth = 1)</MASS>

</PLANET>

<PLANET>

 <NAME>Earth</NAME>

 <MASS>1(Earth = 1)</MASS>

</PLANET>

Отметьте, что этот файл выглядит во многом похоже на исходный файл planets.xml, за тем исключением, что каждый элемент <PLANET> содержит только элементы <NAME> и <MASS>. Таким образом, мы смогли получить подмножество данных первоначального документа XML.

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

В дополнение следует сказать, что многие программы используют XML для обмена данными в Интернете, и, так как обычно они форматируют свои документы XML по-разному, еще одним популярным способом использования преобразований XML-XML в Интернете является преобразование XML из формата, используемого одной программой, в формат другой программы.

Преобразования из XML в XHTML

Хотя во многих книгах рассматриваются исключительно преобразования из XML в HTML, правда состоит в том, что консорциум W3C этому не очень-то рад. Консорциум пытался сместить акцент с HTML (который они первоначально стандартизировали) на свою новую спецификацию, XHTML, представляющую собой совместимую с XML переработку HTML. Документы XHTML являются также хорошо сформированными допустимыми документами XML, поэтому преобразование из XML в XHTML в действительности есть преобразование из XML в специальный вид XML.

Хотя W3C активно продвигает XHTML, этот формат еще не стал широко распространенным. Поэтому в данной книге я в основном рассматриваю HTML; но поскольку W3C утверждает, что следует использовать XHTML, я кратко рассмотрю эту тему здесь и в главе 6. Если вы хотите узнать больше о XHTML, прочитайте рекомендацию W3C XHTML 1.0 по адресу www.w3.org/TR/xhtml1/, а также рекомендацию XHTML 1.1 по адресу www.w3.org/TR/xhtml11/.

Пусть W3C и утверждает, что XML следует преобразовывать в XHTML, а не в HTML, я не видел ни одного работающего примера на их web-узле. Представленные ими примеры на самом деле не генерируют допустимых документов XHTML. Тем не менее, поддержка преобразований XML-XHTML предположительно будет встроена в XSLT 2.0, и желаемое W3C явление, вероятно, нас вскоре ждет.

Более подробно мы рассмотрим этот тип преобразования в главе 6, а здесь я приведу рабочую версию таблицы planets.xsl, которая создает допустимую XHTML-версию planets.html (листинг 1.7). Заметьте, что на этот раз в элементе <xsclass="underline" output> нужно использовать атрибут doctype-public, и хотя это корректный код XSLT, не все процессоры XSLT смогут его обработать.

Листинг 1.7. Преобразование XML-XHTML

<?xml version="1.0"?>

<xsclass="underline" stylesheet version="1.0"

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

 <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"/>

 <xsclass="underline" 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>

     <xsclass="underline" apply-templates/>

    </table>

   </body>

  </html>

 </xsclass="underline" template>

 <xsclass="underline" template match="PLANET">

  <tr>

   <td><xsclass="underline" value-of select="NAME"/></td>

   <td><xsclass="underline" apply-templates select="MASS"/></td>

   <td><xsclass="underline" apply-templates select="RADIUS"/></td>

   <td><xsclass="underline" apply-templates select="DAY"/></td>

  </tr>

 </xsclass="underline" template>

 <xsclass="underline" template match="MASS">

  <xsclass="underline" value-of select="."/>

  <xsclass="underline" text> </xsclass="underline" text>

  <xsclass="underline" value-of select="@UNITS"/>

 </xsclass="underline" template>

 <xsclass="underline" template match="RADIUS">

  <xsclass="underline" value-of select="."/>

  <xsclass="underline" text> </xsclass="underline" text>

  <xsclass="underline" value-of select="@UNITS"/>

 </xsclass="underline" template>

 <xsclass="underline" template match="DAY">

  <xsclass="underline" value-of select="."/>

  <xsclass="underline" text> </xsclass="underline" text>

  <xsclass="underline" value-of select="@UNITS"/>

 </xsclass="underline" template>

</xsclass="underline" stylesheet>

Я преобразую planets.xml в допустимый документ XHTML, planets.html, используя этот новый вариант planets.xsl и процессор XSLT XT. Сначала нужно корректно установить переменную classpath: