Сергей Дунаев
О новом языке разметки электронных документов XML (Extensible Markup Language), еще одном подмножестве SGML, написано уже достаточно*1. Но до сих пор для многих не ясны перспективы его практического использования. В самом деле, если XML нужен только для того, чтобы преодолеть первоначальную статичность HTML и оживить содержимое Web-страниц, так в нынешнее время подобные задачи решаются необычайно легко с помощью великолепных инструментов - ASP (Active Server Page), JSP (Java Server Page), аплетов, сервлетов, скриплетов и т. д. Казалось бы, зачем изобретать новый язык, если старый, столь хорошо знакомый, постоянно обогащается новыми возможностями? В том-то и дело, что причина есть! Парадигма объектного программирования предполагает повторное использование модулей, вследствие чего удерживает программистов от искушения по тысяче раз переписывать одно и то же. XML хорош уже тем, что позволяет:
- отделить данные от их представления и тем самым преодолеть хаотичность HTML;
- упорядочить данные в деревья и списки, структурировать их и порождать из них объектные модели;
- описывать метаданные на метаязыке таким образом, чтобы программные модули стали абсолютно универсальными, поскольку они будут иметь дело только с XML-файлами и больше ни с чем другим. Таким образом, с помощью XML можно попытаться реализовать принцип: “Данные должны управлять программами, а не наоборот”.
_____
*1. 1. Шелли Пауэрс. “Чего мы ждем от XML?” “Мир ПК”, № 3/98.
2. Язык XML - практическое введение (www.citforum.ru).
3. /xml/ (http://java.sun.com/xml/) .
4. /xml/ncfocus.html (http://java.sun.com/xml/ncfocus.html).
5. Document Object Model (DOM) Level 1 Specification http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/.
В последнее время симбиозом новейших технологий, связанных с Java и XML, активно, но без излишнего рекламного шума занимается IBM, считая это направление для себя стратегическим. Появился целый ряд великолепных и уже реализованных проектов: IBM’s XML for Java parser - мощный высокоскоростной XML-анализатор, написанный на “100%-чистом Java” и поэтому, естественно, кросс-платформный; WebSphere - также кросс-платформный сервер приложений на Java, расширяющий возможности наиболее популярных Web-серверов, таких, как Apache, IIS, Netscape Enterprise, Domino и пр.; XMI Toolkit - средство преобразования UML-моделей, построенных с помощью современных CASE-средств типа Rational Rose, в XML- и DTD-структуры; LotusXSL Processor - ПО, позволяющее задавать для XML-документов стилевые таблицы и, кроме того, преобразовывать XML-данные в стандартный HTML для поддержки браузеров, не умеющих распознавать язык XML. LotusXSL Processor существует в виде набора Java-классов, методы которых можно вызывать из любых Java-программ, агентов или сервлетов.
В чем суть этих проектов? В том, что они дали возможность связать воедино существующие технологии (СУБД + Web), создать некую универсальную модель для любой программной разработки, сулящую невиданные темпы увеличения производительности труда и вовлекающую в процесс проектирования информационных систем сотни тысяч деловых людей, отлично осознающих, что именно нужно будет им завтра, но пока еще не знающих, как это реализовать сегодня.
В новой технологии можно выделить три уровня:
- уровень приложений, написанных на любом объектно-ориентированном языке программирования (например, Java);
- уровень интерпретации содержимого XML-объектов (XML-Parser);
- уровень информационного хранилища (так называемые persistence engines - объектные и реляционные базы данных, файловые системы, Web-сайты). Информацию, находящуюся в этих универсальных хранилищах, легко преобразовать в XML и наоборот, используя объектную модель, построенную на основе Java-классов и получившую название DOM (Document Object Model).
Итак, на первом уровне профессионалы-программисты создают программные модули, полностью абстрагированные от всякой конкретики, связанной с данными и с их представлениями, т. е. внешними интерфейсами. Все это выносится на уровень универсального описания метаданных на универсальном метаязыке - XML. (Вопросы, связанные с генерацией самих описаний, пока еще недостаточно проработаны, и акцент здесь смещен в сторону интерпретации уже готового XML-содержания.) На этом уровне также могут существовать две стратегии: клиент- и сервер-ориентированные приложения.
Рис. 1. Java-приложение с встроенной графикой
Клиент-ориентированные приложения
На рис.1 изображен простейший тип приложения, когда информация сохраняется в XML-документах (файлах). В этом случае вы создаете свой собственный формат описания и представления данных в XML. Данный подход ничем не будет хуже других (скажем, хранения данных в объектной или реляционной базе) - ведь все операции над данными, включая их поиск и различные выборки по заданным критериям, также будут доступны через объектную модель XML. Классический пример, приводимый во множестве руководств по XML, - Адресная книга, которая может размещаться не в СУБД, а непосредственно в XML-файле (см. рис. 2).
Рис. 2. Связь моделей XML и Java
Сервер-ориентированные приложения
В отличие от простейшего клиентского приложения, изображенного на рис. 1, где Java-программа отображала данные из XML-файла, используя собственные графические средства и объектную XML-модель данных, сервер-ориентированные программы выполняются на сервере. На стороне клиента может быть либо обыкновенный браузер, либо миниатюрное приложение, обменивающееся по сети только XML-описаниями, существующими в виде объектов. Сами данные и связанные с ними представления в виде списков, структур, иерархий, а также описания способа их отображения могут быть получены по сети из самых разнообразных источников (см. рис. 3). Поскольку XML-документы позволяют хранить в себе или описывать структурированные данные, любую информацию из СУБД можно представить в виде XML-файла. Именно этой цели и служит DOM. Рис. 4 иллюстрирует процесс прохождения и преобразования объектной информации. Эта модель предоставляет доступ к информации, сохраненной в документе XML, в виде иерархической объектной модели. В ней создается дерево узлов, отражающее структуру информации в XML-документе, и программист может получать доступ к информации, взаимодействуя с узлами этого дерева.
Рис. 3. Сервер приложений XML
Рис. 4. Процесс прохождения и преобразования объектной информации
Как все это можно применить на практике? Естественно, что лучше всего Java/XML-технология реализуется в многозвенных системах, где в качестве звеньев цепи выступают следующие субъекты:
- Ультра-тонкий клиент, иногда еще называемый XML-агентом, в функции которого входит разбор XML-документа, подключение таблицы стилей и представление содержимого документа в том виде, в каком его изначально задумал разработчик. Некоторые XML-агенты преобразуют XML-документ в HTML-формат. Однако Microsoft Internet Explorer 5, будучи XML-агентом, не нуждается в таком преобразовании. Пока еще существует весьма мало XML-агентов, но предполагается, что число их будет постоянно расти вместе с ростом популярности XML. (Современные технологии так бурно развиваются, что технические книги с их описанием устаревают чуть ли не с момента их выпуска. Например, в своей книге “Доступ к базам данных и техника работы в сети”*1, выпущенной летом этого года, я еще ничего не успел сказать о XML.)
_____
*1. Пользуясь случаем, автор приносит извинения Н. Елмановой и редакции “Компьютер-Пресс” в связи с тем, что на с. 204 - 207 упомянутой книги был невольно использован материал, опубликованный ранее в этом журнале (см. № 12/97, с. 108 - 113).
- Сервер приложений, обладающий возможностями взаимодействия с наиболее популярными Web-серверами и поддерживающий многообразные технологии, обслуживающие XML-структуру, - сервлеты, компоненты Enterprise JavaBeans.
Эти технологии необходимы для обработки и динамической генерации XML-документов. Без них сервер сможет работать только со статическими документами. Обычно такие расширения реализуются в виде набора дополнительных модулей и библиотек (plug-ins).
- Сервер базы данных. Динамически генерируемые XML-документы можно получить в результате запроса к серверу СУБД, такому, как Oracle 8i или DB2. В зависимости от типа XML-приложения, СУБД возвращает извлекаемые данные либо сразу в виде XML-документа, либо через структуры JDBC (Java Database Connectivity), преобразуемые сервлетами в XML-структуры. В будущем, вероятно, появится достаточное количество коммерчески доступных JavaBeans-компонентов, которые будут предоставлять удобные средства для работы с СУБД с использованием XML.
Типичная трехзвенная схема работы многочисленных подключенных клиентов через сервер приложений изображена на рис. 5.
Рис. 5. Использование сервера приложений
Охарактеризуем вкратце некоторые технологии, используемые в XML-инфраструктуре.
- Сервлеты - специальные серверные компоненты, написанные на Java с применением интерфейса JSDK и обменивающиеся по протоколу HTTP информацией с запустившим их браузером. Сервлеты, в отличие от аплетов, гораздо более функциональны и быстры, потому что выполняются на сервере и используют более мощную JVM (Java Virtual Machine).
- JavaBeans (“зерна”) и EJBs (Enterprise Java Beans) - это повторно используемые компоненты, написанные на Java. Они могут встраиваться в любые модули и программные системы, включая графические средства программирования и серверы СУБД.
- Сервер приложений может и должен поддерживать новое мощное средство для изготовления динамических Web-страниц - Java (см. рис. 6).
Рис. 6. Использование JSP
Java Server Pages
Рассмотрим подробнее, как работает технология JSP.
Когда Web-сервер получает от браузера запрос на исполнение JSP-страницы (JSP-файл), он переадресует его серверу приложений. Сервер приложений разбирает JSP и генерирует Java-код, который выполняется как сервлет. Компиляция осуществляется только один раз, при первом обращении к странице. JSP-страница почти ничем не отличается от обычного HTML-файла и может содержать следующие теги:
- <servlet> - для встраивания сервлетов в JSP;
- директивы <%...%>, или тег <SCRIPT> - для исполнения скриптов на Jscript и VBScript;
- Inline Java code - так называемые скриплеты, т. е. встроенные в тело документа Java-операторы;
- <BEAN> - тег для JavaBeans-компонентов, который может задаваться в форме:
<bean name=“Bean_name” varname=“local_Bean_name” type =“class_or_interface_name” introspect=“yes|no” beanName=“ser_filename” create=“yes|no” scope=“request|session|userprofile”>
<param property_name=“value”>
</bean>
Например:
<! - Объявление Bean - >
<bean name=“foobar” type=“FooClass” scope=“request” >
<! - Определение некоторых свойств - >
<param fooProperty=“fooValue” barProperty=“1”>
</bean>
<! - Впоследствии можно использовать некоторые методы этого Bean - >
<p> Имя колонки - <%= foobar.getRowName() %>.</p>
Таким образом, функциональность Web-серверов расширяется настолько, что используются не только автоматически генерируемые HTML-страницы, но и встроенные в них средства связи и извлечения данных из СУБД и XML-структур. JavaBeans, выполняющие черновую работу, могут быть файлами типа .class, компонентами, подготовленными для транспортировки по сети (serialized Beans), или динамически генерируемыми сервлетами.
Обобщая сказанное, можно утверждать, что XML является идеальным способом описания и хранения любых данных, в том числе и структурированнных, извлеченных из реляционных БД. Семейство технологий XML опирается на объектную модель и предоставляет объектные интерфейсы для доступа к описанным на XML данным. Эти интерфейсы разработаны для многих объектно-ориентированных языков программирования, но их лучшая реализация - для Java.
Новая эпоха
Что же дальше? На мой взгляд, в ближайшем будущем большинство разработчиков избавятся от необходимости использовать в коде программ прямые SQL-запросы и будут ориентироваться на стандартные классы и компоненты для работы с базами данных, реализованные в виде JavaBeans- и ActiveX-модулей. Программы станут переносимыми и настраиваемыми, а следовательно, их будет сравнительно легко адаптировать к любым эксплуатационным условиям. Каркасы программ будут проектироваться с особой тщательностью и в процессе эксплуатации почти не претерпят перманентных изменений, связанных с корректировками структур данных. Программы будут иметь дело не с самими данными, а с их описаниями. Роль метаязыка и метаданных будет постоянно повышаться, и в скором времени c помощью специально созданных инструментов к ним смогут подключаться профессионалы из различных предметных областей.
Стоимость клиентского рабочего места станет постоянно снижаться, потому что основная нагрузка упадет на сервер. Этому будет способствовать и переход ко все более широкому использованию мобильных и карманных ПК, оснащенных устройствами беспроводной связи. Возможно, на новом витке спирали мы вновь вернемся к использованию мэйнфреймов в качестве серверов, но они уже не будут так чудовищно сложны и пугающи.
Классические тысячедолларовые ПК Desktop, разумеется, останутся, но только в виде компьютеров для разработчиков. Бизнесмену, журналисту, страховому агенту ни Pentium-3, ни Merced, ни тем более операционная система Windows NT 5.0 вовсе не нужны. Ему вполне хватает MS Internet Explorer, который, соединяясь по сетям Internet/intranet/extranet с многочисленными ресурсами, умеет теперь почти все.
Несмотря на то, что Java и XML сами по себе достаточно сложны, инструменты, основанные на них, чрезвычайно просты. Пользователю нет нужды знать внутренние механизмы информационного источника. Он должен лишь уметь пользоваться дистанционным пультом. Точно так же, как люди пользуются своими телевизорами, не задумываясь об их техническом устройстве, в будущем благодаря новым, все более совершенным технологиям можно будет работать с информацией, рассредоточенной по всему миру, структура которой будет определяться пожеланиями клиента.К автору, сотруднику Ивановского государственного энергетического университета, можно обратиться по адресу: sbd@polytech.ivanovo.su.