>3716
.943
66.8
.
.
.
Что, если нам нужно только подмножество этих данных — например, имя и масса каждой планеты? В терминах баз данных
planets.xml
представляет собой таблицу, и мы хотим создать новую таблицу, содержащую подмножество данных из первой. В базах данных для этого служит язык SQL, а для документов XML мы можем использовать XSLT.В листинге 1.6 приведена новая версия файла
planets.xsl
, осуществляющая требуемое преобразование: выбираются только имя и масса каждой планеты, которые отправляются в выходной документ. В особенности обратите внимание на то, что мы осуществляем преобразование XML-XML, поэтому я использую элемент
, атрибут method
которого установлен в «xml» (фактически тип выходных данных обычно и есть XML, но если процессор XSLT видит тег
, он обычно по умолчанию генерирует HTML).Листинг 1.6. Выбор только имени и массы
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Далее я применяю эту новую версию
planets.xsl
к planets.xml
, используя Xalan, чтобы создать новый документ XML, new.xml
:C:\planets>java org.apache.xalan.xslt.Process -IN planets.xml -XSL planets.xsl -OUT new.xml
Вот как выглядит результирующий документ XML,
new.xml
:
Mercury
.0553(Earth = 1)
Venus
.815(Earth = 1)
Earth
1(Earth = 1)
Отметьте, что этот файл выглядит во многом похоже на исходный файл
planets.xml
, за тем исключением, что каждый элемент
содержит только элементы
и
. Таким образом, мы смогли получить подмножество данных первоначального документа 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). Заметьте, что на этот раз в элементе
нужно использовать атрибут doctype-public
, и хотя это корректный код XSLT, не все процессоры XSLT смогут его обработать.Листинг 1.7. Преобразование XML-XHTML
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" indent="yes"/>
The Planets Table
The Planets Table
Name
Mass
Radius
Day