Rambler's Top100 Service калинин.ru / программирование / xml /  << 11.08.00 >>

Преобразование XML при помощи XSL

Одна из самых частых операций, которую требуется произвести с XML-документом, это показать его. Хочется предупредить сразу, что на этот раз я опять не буду рассматривать ни синтаксис XML-документов, ни примеров использования; этих материалов (в основном, правда, на английском языке) в интернете лежит предостаточно. Я просто попытаюсь рассказать о том, что это такое "вообще" и как это можно использовать.

Итак, задача заключается в изображении некоторого XML-документа, т.е. данных с выделенной в них структурой. На текущий момент можно сказать, что неприхотливее формата данных для отображения, чем HTML, не существует --- маленький размер, при желании разметку можно свести к минимуму и объем документа будет не очень сильно отличаться от количества байт полезной информации в нем, простота обработки, большое количество уже существующих браузеров на различных плафтормах. Таким образом, напрашивается достаточно простое решение --- преобразовать XML-документ в соответствующее ему HTML-представление. Понятно, что при этом потеряется информация о структуре, но, зато, такой документ можно просмотреть любым браузером, т.е. донести-таки информацию до человека.

XSL является механизмом, который решает, в принципе, более широкую проблему. Он позволяет преобразовать XML-документ с одной структурой в XML-документ с другой структурой, в частности, в HTML.

XSL-документ представляет из себя, как вы сами понимаете, разновидность XML-документа, который используется для представления правил, по которым будет происходить преобразование. Правила основаны на совпадении шаблонов, т.е., например, "если встретился элемент A, то вставить указанный кусочек HTML-кода и продолжить поиск совпадений шаблонов дальше". Все очень похоже на функциональный или логический язык программирования: есть рекурсивная и процедурная семантика; например, кроме рекурсивных применений шаблонов существует возможность органзации циклов ("для всех элементов A вставить такой HTML-код").

Работает все это достаточно просто: для того, что бы преобразовать XML-документ по XSL-таблице нужно взять XSL-процессор, дать ему на вход два файла и на выходе получится результат. Это первый вариант визуализации данных --- как только потребовалось просмотреть XML-документ, преобразовать его в HTML и просмотреть браузером.

Второй вариант заключается в том, что сам браузер при открытии документа пытался бы выполнить соответствующее преобразование. В принципе, все хорошо, но это сейчас более-менее полно поддерживает только MS Internet Explorer 5.5 (с установленным MS XML SDK, который до сих пор имеет статус "бета"). Кое-какие намеки есть в Netscape, но все остальные браузеры чуть проще (которые показывают только HTML-документы), работать с XSL не смогут --- как следствие теряется одно из самых важных преимуществ HTML-представления, переносимость текста между разными платформами. Кроме того XSL-преобразование происходит на стороне клиента (я имею в виду, если XML-документ выложен на сайте в интернете), что тоже не особенно хорошо... в том смысле, что это неуважение к читателю: требовать что бы он использовал IE последней версии (под FreeBSD, например) и что бы его компьютер еще выполнял какое-нибудь хитрое преобразование (понятно, что ресурсов оно отнимет мало, но отображение HTML-документа отнимет еще меньше ресурсов, а результат будет тем же). Надеюсь, ясно, что мое мнение заключается в том, что сейчас еще рано публиковать XML-документы в интеренте "просто так" --- есть HTML, значит его и надо отдавать пользователю.

Третий вариант --- использование системы наподобие Cocoon, которая занимается тем, что, работая на web-сервере, делает требуемое преобразование XML-документа до того как отдать его пользователю. В принципе, стоит отметить, что это достаточно разумный подход. Понятно, что технически размещение подобной системы на web-сервере ничем не отличается от установки SSI или PHP3 процессоров. При этом ресурсы у пользователя не отбираются и, что самое главное, не требуется иметь браузер с возможностью выполнения XSL-преобразования. Ну и, наконец, появляется возможность публиковать XML-документы в том виде, в котором они поступили от авторов, просто выкладывая нужные файлы на сервер. Кроме всех этих прелестей, Cocoon предоставляет такую забавную возможность, как выбор XSL-преобразования для одного и того же документа по некоторым условиям. Одно из самых приятных условий --- идентификатор браузера, которым пользуется читатель; то есть появляется возможность "на лету" создавать страницы, оптимизированные для просмотра в конкретном браузере (например, для графических браузеров и для текстового lynx, или для IE и NN). Конечно, в последнем случае опять встает проблема, если между web-сервером и пользователями с разными браузерами находится proxy-сервер, но это уже совсем другой вопрос.

Как вы, надеюсь, поняли, лично я считаю, что самые лучшие варианты для публикации XML-документов --- использование XSL-преобразования до того как выложить файлы на сервер или установка XSL-процессора, который выполняет такое преобразование "на лету". Собственно, в этом и заключается моя маленькая мечта --- перевести свою домашнюю страничку в XML и выполнять соответствующее преобразование... так оно и будет когда-нибудь, а пока что я постоянно забываю исправить некоторые недочеты в уже имеющейся XSL-таблице, поэтому пополняю свою страничку по старому.

Конечно же, существуют варианты, когда информацию просто невозможно наглядно отобразить при помощи HTML, например, химические или математические формулы. В таких случаях, кроме использования специализированных браузеров, может помочь опять же XSL и инструмент наподобие FOP который позволяет на основании XSL генерировать файлы в PDF. Некоторые издательские системы умеют работать с данными, представленными в SGML или XML... так что XSL достаточно удобен и популярен.

Резюме

XSL позволяет сделать из одного XML-документа другой, в частности, HTML. Этот механизм можно использовать для визуализации данных, содержащихся в XML.


Версия для печати


  Ссылки по теме:
http://www.w3.org/xml
   Раздел на сайте W3C, посвященный XML.
http://www.w3.org/xsl
   Раздел на сайте W3C, посвященный XSL.
http://www.bim.f2s.com
   Некоторая информация (более формальная, чем изложена выше) про XML и XSL. К сожалению, этот сайт выполнен как раз в манере "второго варианта", т.е. требует наличия браузера с возможностью XSL-преобразования, т.е. IE 5.x.
http://xml.apache.org
   Apache XML Project --- FOP и Cocoon входят в этот проект.
http://www.xmlsoftware.com
   XMLSoftware --- набор ссылок на программное обеспечение для работы с XML. В частности, на XSL-процессоры.
http://www.citforum.ru/interne
   Раздел, посвященный XML, на сервере Центра Информационных Технологий.
  Рядом в разделе:
Средства для разбора XML-файлов (27.09.00)
   С момента последнего обновления в этом разделе прошло уже больше месяца... но ведь никто же никому ничего не обещал? ;) Тем...   >>>>
Зачем же все-таки нужен XML (02.08.00)
   XML сейчас является очень модным словом --- обычно вместе с его упоминанием встречаются слова "метаязык", "перспективная технология" и прочее. Вообще, как...   >>>>
  Рядом по дате:
Алгоритмы: построение и анализ (11.08.00)
   Эту книгу ждали, по-моему, пару лет. При этом ее никто не рекламировал, не предлагал заказать в интернет-магазине до выхода как новое...   >>>>
Оператор безусловного перехода goto (10.08.00)
   Так уж сложилось, что именно присутствие или отсутствие этого оператора в яызке программирования всегда вызывает жаркие дебаты среди сторонников "хорошего стиля"...   >>>>
  Содержание:
Заглавная страница
Мой блог
Мое резюме
Дайджест
Программирование
   C&C++
Сети
Unix
Алгоритмы
Оптимизация
Соревнования
Отвлеченно
XML
TeX
Просто так
Студенческое
Туризм
  Байки
Фотографии
Комментарии
   Книги
Web-ресурсы
Фильмы
Интернет
Программное обеспечение
Жизнь
Благодарности
Форум
Хронология
 
  В этом разделе:
HTML must die (18.11.00)
   Язык гипертекстовой разметки документов (HTML) используется сейчас повсеместно. Задачи, которые ставились перед создателями этого языка заключались в необходимости создания универсального формата...   >>>>
Средства для разбора XML-файлов (27.09.00)
   С момента последнего обновления в этом разделе прошло уже больше месяца... но ведь никто же никому ничего не обещал? ;) Тем...   >>>>
Преобразование XML при помощи XSL (11.08.00)
   Одна из самых частых операций, которую требуется произвести с XML-документом, это показать его. Хочется предупредить сразу, что на этот раз я...   >>>>
Зачем же все-таки нужен XML (02.08.00)
   XML сейчас является очень модным словом --- обычно вместе с его упоминанием встречаются слова "метаязык", "перспективная технология" и прочее. Вообще, как...   >>>>
Содержание раздела полностью...
   Примерно в тоже время
Алгоритмы: построение и анализ (11.08.00)
   Эту книгу ждали, по-моему, пару лет. При этом ее никто не рекламировал, не предлагал заказать в интернет-магазине до выхода как новое...   >>>>
Оператор безусловного перехода goto (10.08.00)
   Так уж сложилось, что именно присутствие или отсутствие этого оператора в яызке программирования всегда вызывает жаркие дебаты среди сторонников "хорошего стиля"...   >>>>
Хронология полностью...
   Содержание
Заглавная страница
Мой блог
Мое резюме
Дайджест
Программирование
  C&C++
Сети
Unix
Алгоритмы
Оптимизация
Соревнования
Отвлеченно
XML
TeX
Туризм
  Байки
Фотографии
Комментарии
  Книги
Web-ресурсы
Фильмы
Интернет
Программное обеспечение
Жизнь
Студенческое
Просто так
Благодарности
Форум
Хронология
© 2000-2008, Andrey L. Kalinin
mailto:andrey@kalinin.ru
Rambler's Top100