Построение системы XML/XSL-преобразований

автор: Александр Качанов
перевод: n|a

Лицо Качанова и ссылка на информацию о нем В первой части статьи мы познакомились с общим принципом преобразования контента на стороне сервера с помощью технологии XML/XSL. В данной статье мы поговорим о конкретной реализации данной технологии.

Интерлюдия

Заранее отвечаю на вопрос, который чаще всего приходил ко мне по по e-mail: "А зачем так извращаться?".

Отвечаю: да, XML/XSL преобразование это очень серьезный подход. Для многих проектов такой подход может быть совершенно не нужен. Для многих проектов он просто не может быть реализован. Для многих проектов он будет лишь тратой машинных ресурсов, сил и времени. Но есть проекты (по больше части академические и чисто информационные), для которых подобное преобразование - верное, выгодное и гибкое решение.

Интернет и связанные с ним технологии развиваются семимильными шагами, следовательно потребителями информации вашего сайта могут быть не только люди с 21-дюймовым монитором и 2Гц пентиумом, но и какая-нибудь кофеварка или тостер, подключеные к интернету. Я конечно утрирую, но смысл в том, что информация должна быть отделена от визуального представления точно так же, как в эпоху компьютеров она была отделена от восковых табличек, пергамента и бумаги.

Характерными сферами применения данных технологий могли бы быть он-лайновые библиотеки (библиотека Мошкова, библиотека РАН, заочные курсы повышения квалификации собирателей бабочек), каталоги (электронные магазины, торговые площадки), новостные сайты и так далее.

Мы еще остановимся на этой теме более подробно.

Варианты решений

Так как xml/xsl-преобразование мы собираемся делать на стороне сервера, то выбор решения непосредственно зависит от того, какая ОС, какой веб-сервер, какие права хозяйничать на сервере, и какие машинные ресурсы имеются в нашем распоряжении. Для работы нам нужен xml-парсер, xsl-преобразователь и скриптовой движок, который будет всем этим заправлять.

IIS

Выбор очевиден: Microsoft распространяет продукт под названием MS XML, который является одновременно и xml-парсером и xsl-преобразователем. Вся химия на стороне сервера делается либо с помощью ASP, либо с помощью ISAPI. Для тех, кому интересно это направление, привожу ряд ссылок:

Microsoft & XML
Вкратце: здесь собрано все, что Microsoft связывает с XML

MS XML
Вкратце: самая свежая версия парсера-трансформатора MS XML 4.0. Этот парсер используется и на клиентской стороне броузером Internet Explorer, так что обновить парсер не мешает всем.

XML/XSL преобразование в виде ISAPI-фильтра
Вкратце: в своем ASP вы генерите XML, а IIS перед отправкой ответа клиенту на лету накладывает на этот XML файл XSL, который соотвествует броузеру, приславшему запрос

Apache

Здесь выбор шире. Вы можете пользоваться парсером и трансформерами Perl, парсером и трансформером PHP, либо парсером и трансформером, написанным на C.

Application Server

Многие сервера приложений являются одновременно и Web-серверами и Java-контейнерами. В этом решении в качестве движка используются Java-технологии (Java-сервелеты и JSP-страницы). В качестве xml-парсеров и xsl-преобразователей используются либо родные продукты, поставляемые вместе с сервером приложений, либо сторонние продукты.

В следующей главе мы опишем пример системы, построенной на Java-технологии.

Архитектура

Вся система будет представлять собой сложную связку серверов и приложений:

  • Apache, IIS (web-server).
  • Tomcat/Sun j2sdkee /Resine/JRun (servlet-jsp container)
  • xml-парсер и xsl-преобразователь
  • приложение xml/xsl преобразования
  • (База данных)

Web-сервер (IIS/Apache)

Web-сервер служит входной дверью всех запросов. Веб-сервер работает как обычно: выдает html файлы, обрабатывает серверные скрипты (cgi/php/asp). Для построения системы могут быть использованы наиболее распространенные web-сервера: IIS или Apache

Почти все серверные скриптовые движки сейчас поддерживают работу с XML-документами и стилями. Свои xml-парсеры есть для Perl, PHP, ASP (MS XML Parser). Это значит, что вы вручную сами можете написать приложение обработки XML-документов с нуля, но работа эта очень сложная и трудоемкая. Поэтому советуем вам воспользоваться уже готовыми отточенными и отлаженными проектами.

JDK (от Sun/ IBM / Oracle)

Предлагаемый вариант построен на Java, поэтому фундаментом всей системы, помимо имеющегося уже web-сервера, будет самый свежий Java Development Kit (JDK). Самая последняя версия от Sun - версия 1.4, но мы рекомендуем пользоваться пока версией 1.3. Напомним, что хоть Sun и является владельцем технологии Java, JDK разрабатывают еще и другие компании-монстры, такие как IBM, Oracle, Microsoft (уже нет). Так что JDK можно взять любой, главное, чтобы он не сильно отступал от спецификации.

Servlet-JSP container (Tomcat/jsdkee/Resine/JRun)

Servlet-JSP контейнер выступает как дополнение к существующему веб-серверу. Контейнер общается с web-сервером чаще всего через редирект по особому протоколу через особый порт. Web-сервер выдает обычные страницы до тех пор, пока не приходит особый запрос, который через перехватчик (redirector) направляется в Servlet-JSP container. Там этот запрос обрабатывается и опять возвращается web-серверу, который его как есть отправляет клиенту.

Использовать можно:

  • Tomcat. Бесплатный контейнер JSP/Servlet. Может работать в связке с существующим web-севрером, а может и сам работать как самостоятельный web-сервер, Tomcat находится под покровительством Sun. В этот проект влилось то, что раньше называлось JServ.
  • Sun j2sdkee. В Sun Java Servlet Development Kit Enterprise Edition есть свой собственный контейнер JSP/Servlet - почти полный аналог Tomcat. Однако в дополнение, этот сервер является еще и контейнером для Enterprise JavaBeans. Если вам они не нужны, пользуйтесь Tomcat-ом
  • Resine (аналог Tomcat, пока бесплатный, но с ограничениями на бесплатное коммерческое использование. Разработчики утверждают, что это самый быстрый JSP/Servlet онтейнер)
  • JRun (Allaire/Macromedia) (полный коммерческий JSP/Servlet/JavaBean контейнер)
  • Прочие Application Servers - такие как iPlanet, WebSphere, WebLogic и так далее

После установки всех этих компонентов на сервере у вас будет создана среда, которая позволит выполнять Java код (в виде сервлетов или JSP-страниц), ну и кроме всего прочего с помощью xml-парсера оперировать XML-документами. Опять-таки, код обработки вы можете написать сами: установив JDK/JSDK, вы получили в свое распоряжение все необходимые составные части. Но вспомним фразу из знаменитого фильма: "Все уже написано до нас".

XML-парсер

Установив Tomcat вы уже получили в свое распоряжение один из xml-парсеров: Crimson. Число парсеров, написаных на Java, весьма велико. Все они отличаются друг от друга скоростью работы, объемом поддерживаемых функций, открытостью кода.

  • Crimson - создавался Sun, потом передан в проект Apache. Входит как библиотека в состав Tomcat, и уже как составная часть JDK в версии Sun JDK 1.4. Исходники не распространяются, бинарники - бесплатны.
  • Saxon - этот парсер является одновременно и xsl-преобразователем. Создан Майклом Кейем (Michael Kay).
  • Xerces - создавался IBM (под названием IBM4J), потом передан в проект Apache. Есть варианты на языке Java, C++ и Perl. Имеются и исходники и бинарники. Распространяется бесплатно.

XSL-преобразователь

  • Xalan - разрабатывается под эгидой Apache. Имеются варианты на Java и C++.
  • Saxon
  • XT - Создан Джеймсом Кларком (James Clark)
  • LotusXSL - by IBM
  • ResineXSL - by Resine

Приложение XML/XSL-преобразования

Xml-парсер и xsl-преобразователь это всего лишь инструменты. Сами по себе они не делают никакого волшебства. Эти инcтрументы связываются в единый ансабль с помощью особого приложения.

Например, в случае с MS XML, ISAPI-фильтр вместе с ASP страницами и есть то самое приложение, которое вызывает установленный в системе MS XML парсер для чтения XML-файлов и для преобразования XML в нужный формат с помощью XSL.

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

В соответствии с духом Apache проект Cocoon представляет собой плод коллективных усилий сообщества открытых исходных кодов. Информация о нем находится по адресу xml.apache.org/cocoon/, где вы сможете найти также сами продукты, документацию, списки почтовой рассылки и форумы. Вы даже можете внести свой вклад в этот проект, если у вас есть силы на это.

Сервера приложений (Application Servers) от таких монстров, как Allaire-Macromedia, BEA, IBM, Oracle, Sybase, Sun-Netscape, IONA, имеют свои собственные модули, позволяющие создавать контент из XML с помощью XSL в нужный формат. Но следует учитывать, что, во-первых, все эти решения - коммерческие и весьма дорогие (цена колеблется от 10.000 до 50.000 долларов за сервер, плюс - стоимость модулей). Вам придется покупать Application-сервер, а покупая его, вы получаете еще кучу функций, которые быть может вам и не нужны. Решение с Cocoon получается хоть и урезанным, но бесплатным. Вполне годится для маленького проекта с маленьким бюджетом.

Если внимательно посмотреть примеры кода, что идут вместе с Xalan и Xerces, простенькое приложение xml/xsl-преобразования с распознаванием броузеров можно написать дня за три. Но Cocoon силен тем, что в нем реализовано намного большее, чем простое преобразование. В его состав входит мощная система кеширования страниц (caching), резервирования объектов (pooling), предтрансляция (pre-translation), гибкие конвейеры преобразований (pipeline transformation) и многое-многое другое, что я не буду пока перечислять. На создание этого приложения и фундамента для этого приложения ушло два года упорного труда десятков программистов высочайшего класса. Поверьте, попытаться создать подобное приложение в одиночку - безнадежное и бессмысленное занятие, можно лишь попытаться сделать, что-то близкое.

А по сему, перейдем непосредственно к Cocoon.

продолжение следует

Александр Качанов

« назад к списку статей

Rambler's Top100
Rating All.BY
Akavita
Valid XHTML 1.0!