Обзор XML-стандартов, часть 2

Юч Огбуджи (Uche Ogbuji)/
Перевод: Intersoft Lab


Стандарты для обработки XML

Мир XML огромен и постоянно растет, он населен множеством стандартов и технологий, которые связаны друг с другом самым причудливым образом. Поэтому тем, кто только начинает свое знакомство с XML, может оказаться непросто ориентироваться в наиболее важных аспектах XML, тем же, кто уже использует XML —следить за новинками и изменениями. Автор этой серии статей, посвященной XML-стандартам, Юч Огбуджи на этот раз рассказывает о технологиях обработки XML.

С момента своего появления язык XML зарекомендовал себя с самой лучшей стороны, поэтому довольно быстро получил широкое распространение. Он оказался чрезвычайно полезной технологией, которая, однако, может оказаться весьма непростой для понимания —если попытаться рассмотреть все, что попадает под определение «XML». В этой серии статей автор кратко рассмотрит наиболее важные, по его мнению, XML-технологии и расскажет, какое место в мире XML занимает каждая из них. Кроме того, в конце каждого раздела, посвященного той или иной из обсуждаемых технологий, читатель сможет найти список рекомендуемых учебных пособий и других справочных материалов, которые могут оказаться полезными при ее изучении и апробировании.

Все технологии, представленные в этих статьях, являются стандартами, хотя само это слово довольно двусмысленно. Дело в том, что имеется множество всевозможных стандартов, и многие из них часто оказываются предназначенными для одной и той же предметной области, что приводит к их «конкуренции». При определении стандарта автор статьи будет стоять на позиции прагматизма, считая стандартом любую спецификацию, которая признана представительной выборкой поставщиков или рекомендована авторитетной независимой от них организацией.

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

XSLT

В спецификации «Преобразования расширяемого языка стилей» (Extensible Stylesheet Language Transformations (XSLT) 1.0) [Рекомендация W3C] определяется язык, используемый для описания преобразований входного XML-документа в выходное дерево. Выходное дерево может, например, принять форму HTML-документа или другого XML-формата и, таким образом, XSLT может считаться языком, предназначенным для преобразования XML в форму представления традиционного браузера или для обработки XML-файлов с помощью скриптов. Это преобразование представляет собой XML-документ, определенный в отдельном словаре, а для обращения к исходному документу и выполнения общих операций обработки используются выражения спецификации XPath (рассмотренной ранее). Специальные инструкции устанавливают правила обработки (XSLT является декларативным языком) и управляют процессом создания выходного дерева.

Спецификация XSLT 1.0 пользуется исключительной популярностью, и с помощью языка XSLT можно решить большинство типичных задач обработки XML. Если читатель знаком с XML, то ему не составит труда изучить основы XSLT, хотя для полного овладения этим языком потребуются некоторые усилия. XSLT обладает хорошо спроектированным механизмом расширений, а его декларативная модель обработки допускает многократное использование кода. В спецификации «Ассоциирование таблиц стилей с XML-документами, версия 1.0» (Associating Style Sheets with XML documents, Version 1.0) [Рекомендация W3C] описывается стандартный способ связывания XML-документа с документом таблицы стилей XSLT. Спецификация XSLT была переведена на многие языки.

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

При создании EXSLT была предпринята попытка охватить большинство наиболее востребованных расширений, как, например, обработка дат, регулярные выражения и математические операции. В большинстве реализаций EXSLT используется один или несколько модулей EXSLT.

Хотя спецификация XSLT 2.0 [находится в стадии разработки] была подвергнута принципиальной доработке с учетом коллективного опыта использования XSLT 1.0, и эта версия XSLT не лишена изъянов, будучи тесно связанной с языком XPath 2.0, который, по мнению автора, имеет существенные недостатки.

Рекомендуемые обучающие руководства и учебные пособия

Список литературы и другие ресурсы

 

SAX

В спецификации «Простой интерфейс прикладного программирования для XML» (Simple API for XML (SAX)) [Общественный стандарт] описывается управляемый событиями интерфейс прикладного программирования (API). Разработчик регистрирует код обработчика для определенных событий, которые запускаются различными частями разметки XML (как, например, начальный и конечный теги, текст, сущности). Затем парсер, опираясь на входной XML, посылает поток этих событий, которые поочередно обрабатываются кодом обработчика.

SAX явился результатом длительной интерактивной конференции, начатой в 1997 году на ресурсе XML-DEV mailing list, который уже давно является «прибежищем» экспертов в области XML. Эту конференцию вел Дэвид Меггинсон, и ее итогом явилось создание одного из наиболее успешных XML-проектов, в подготовке которого не была задействована ни одна крупная компания или орган стандартизации.

До появления SAX каждый парсер имел свой собственный специфический API, предназначенный для установления связи между структурой XML и кодом обработчика. SAX же обеспечил необходимую унификацию. В большинстве случаев парсеры предоставляют драйверы SAX, которые транслируют низкоуровневые события парсера в стандартные события SAX, предусматривая переносимый код. Несмотря на то, что SAX был разработан с ориентацией на язык Java, он стал популярен среди многочисленных языков и оболочек; хотя иногда его ориентированность на Java усложняет переносимость.

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

В большинстве языков управляемый событиями интерфейс обычно реализуется с помощью функций обратного вызова (стиль, присущий программированию графического пользовательского интерфейса (GUI)). В объектно-ориентированных языках, функции обратного вызова обычно являются зарегистрированными методами для объекта, использующими полиморфизм для сопоставления имени метода с кодом обработчика и инкапсуляцию для управления состоянием в обработчике между обратными вызовами. Эта полная модель управляемого событиями программирования известна как модель проталкивания (push model) и «славится» свой трудностью для освоения.

Большинство моделей, которые считаются более легкими для программирования, однако, требуют произвольного доступа к документу и, таким образом, могут понизить эффективность, в связи с чем SAX имеет репутацию наиболее эффективного, если ни легкого, стандартного способа обработки XML.

Рекомендуемые обучающие руководства и учебные пособия

Список литературы и другие ресурсы

На странице ресурса XML.org — focus on SAX содержится полезная информация о SAX.

 

DOM

Языки программирования для XML


С момента своего появления язык XML пользовался огромной популярностью у программистов. Ниже приведены некоторые полезные ресурсы, которые посвящены различным языкам, с помощью которых можно совершенствовать XML-технологии.

Технология Java: Страница alphaworks XML на сайте IBM (IBM alphaworks XML page); страница XML на сайте Apache (The Apache XML page); некоммерческая страница технологии Java и XML на сайте Sun (Sun's community page of Java Technology and XML)

C/C++: «Разработчики C/C++: наполните свою инструментальную панель XML (C/C++ developers: Fill your XML toolbox) (developerWorks, сентябрь 2001г.)

Python: Специальная группа, занимающаяся обработкой XML в Python (Special Interest Group for XML Processing in Python); колонка Python & XML на XML.com; «Современное состояние Python-XML (The State of the Python-XML Art, 2003); сайт Юча Огбуджи Akara, посвященный обработке XML в Python (Uche Ogbuji's Akara site on XML processing in Python)

Perl: «Разработчики Perl: наполните свою инструментальную панель XML (Perl developers: Fill your XML toolbox) (developerWorks, июнь 2001г.); проект Perl-XML (Perl-XML Project); колонка Perl & XML на XML.com; XMLperl.com.

Другие: Классы PHP XML (PHP XML Classes); <rubyXML/>; XML and Scheme.

В спецификации «Объектная модель документов» (Document Object Model (DOM)) [Рекомендация W3C] описывается объектная модель XML-документов, которая может быть использована для прямого доступа к частям XML-документа. Согласно концепции модели DOM, документ моделируется в виде дерева, в котором каждый компонент синтаксиса XML (как, например, элемент или текстовое содержание) представляется с помощью узла.

Модель DOM — это интерфейс прикладного программирования, с помощью которого можно перемещаться по дереву, от узла родителя к потомку, к сестринским узлам, а также использовать специальные свойства определенных типов узлов (например, у элементов могут быть атрибуты, а у текстовых узлов — текстовые данные).

Модель DOM задумывалась как нейтральная от языка. Для выражения узлов DOM и поддержки интерфейсов используется спецификация консорциума по технологии манипулирования объектами (Object Management Group, OMG) «Язык описания интерфейса CORBA» (CORBA Interface Definition Language (IDL)) [Международный стандарт ISO, номер 14750].

Первоначально модель DOM создавалась как объектная модель для стандартизации криптовых операций над объектами HTML и XML в Web-браузерах. В некоторых случаях это приводит к затруднениям при использовании этой модели в качестве изолированного интерфейса прикладного программирования. При разработке модели DOM выпускалось несколько версий спецификации (Level), каждая из которых опирается на предыдущую, добавляя новые функциональные возможности.

Так, документ Level 1 охватывал основные возможности, в Level 2 появилась поддержка пространств имен, модель событий пользовательского интерфейса, итераторы и многое другое. В Level 3 включены интерфейсы прикладного программирования для загрузки в файлы XML-документов и сохранения из них, для интегрирования XPath, поддержка проверки допустимости и другое.

Хотя в целом овладеть DOM гораздо легче, чем SAX, поскольку в модели DOM не задействованы функции обратного вызова и сложное управление состоянием, реализации DOM обычно хранят все узлы XML в памяти, что может быть весьма неэффективно для больших документов. Несмотря на то, что реализации DOM написаны на многих языках, модель DOM задумана как независимая от языка.

Приверженцы того или иного языка часто жалуются на то, что модель DOM неудобна и не использует сильные стороны отдельного языка. В результате, появилось множество ориентированных на языки интерфейсов прикладного программирования.

Рекомендуемые обучающие руководства и учебные пособия

Список литературы и другие ресурсы

 

XAPI

В спецификации «Интерфейс прикладного программирования баз данных XML» (XML Database API (XAPI)) [находится в стадии разработки] описывается нейтральный по отношению к поставщику и языку интерфейс прикладного программирования для баз данных XML. XML: DB — это группа разработчиков инструментов управления базами данных XML. Спецификация XAPI охватывает вопросы хранения, извлечения, модификации и задания запросов к данным в базах данных XML, а также предусматривает поддержку управления транзакциями. Она похожа на интерфейс ODBC (Open Database Connectivity interface, открытый интерфейс доступа к базам данных) и интерфейс JDBC (Java Database Connectivity, средство организации доступа Java-приложений к базам данных).

Подобно модели DOM спецификация XAPI определена с использованием языка IDL (Interface Definition Language, язык описания интерфейса) консорциума OMG (Object Management Group, консорциум по технологии манипулирования объектами) и опубликована в виде редакций (по уровням функциональных возможностей). Level 0 — это базовый API, в Level 1 добавлена поддержка XPath (XPathQueryService).

Спецификация XAPI широко используется в инструментах управления «родными» базами данных XML, особенно с открытым кодом, как, например, Apache XIndice и SleepyCat Berkeley XML DB. Помимо спецификации группы XML: DB существует еще несколько Web-ресурсов, посвященных этой технологии. На странице случаи использования API приведено несколько кратких примеров API на языке Java.

 

XUpdate

В спецификации XUpdate [находится в стадии разработки] определяются обновленные функциональные возможности для модификации данных в XML-документах. Несмотря на то, что эта спецификация разрабатывается группой XML: DB, XUpdate предназначен для работы с регулярными XML-документами, а также с XML-документами в совокупностях баз данных и даже с виртуальными моделями данных XML.

XUpdate — это схожий с XSLT словарь XML, к которому очень легко обращаться. Подобно XSLT, для обращения к документу, который необходимо модифицировать, в нем используются выражения XPath, а также специальные элементы, которые определяют операции вывода. XUpdate широко реализован, в основном среди инструментов с открытым кодом, как, например, системы управления базами данных XML и инструментами для выявления различия между XML-документами и внесения необходимыз изменений (difference and patching tools).

Черновой вариант документа «Случаи использования XUpdate» (XUpdate Use Cases) — прекрасное введение в эту технологию.

Рекомендуемые обучающие руководства и учебные пособия

 

XQuery

В спецификации «XQuery: язык запросов XML» (XQuery 1.0: An XML Query Language) [находится в стадии разработки] определяется, как формировать запросы к источникам данных XML.

XQuery — это в значительной степени язык программирования, представляющий собой подмножество XPath. XQuery разрабатывается совместно с XPath 2.0 и вызывает неоднозначные оценки в свой адрес, поскольку, по мнению многих, характеризуется излишней сложностью. Спецификации XQuery 1.0/XPath определяются в многочисленных редакциях, в которых описывается семантика, синтаксис и библиотеки базовых функций:

 

Рекомендуемые обучающие руководства и учебные пособия

 

Список литературы и другие ресурсы

 

SQL/XML

Спецификация SQL/XML [Международный стандарт ISO/МЭК 9075-14:2003] — это новый раздел стандарта SQL, в котором охвачено множество связанных с XML расширений для SQL. Изначально SQL/XML разрабатывался «Неформальной группой компаний SQLX», в которую входил IBM, затем эта спецификация перешла под эгиду Американского национального института стандартов (ANSI —орган стандартизации, занимающейся SQL). SQL/XML охватывает следующие документы (по словам Эндрю Эйзенберга (Andrew Eisenberg) и Джима Мелтона (Jim Melton)):

Спецификация SQL/XML имеет очень мало общего с XQuery, хотя стороны, участвующие в разработке этих спецификаций, обычно работают совместно.

Список литературы и другие ресурсы

 

CSS

В спецификации «Каскадные таблицы стилей» (Cascading Style Sheets (CSS)) [Рекомендация W3C] описывается, как применять стиль презентации к разметке. Эта спецификация широко известна благодаря своему использованию при форматировании HTML Web-страниц, однако после выхода CSS Level 2 она стала подходить и для представления XML-документов в среде Web. Преобразование XML-документов в выходную структуру осуществляется с помощью свойства display. В спецификации «Ассоциирование таблиц стилей с XML-документами, версия 1.0» (Associating Style Sheets with XML documents, Version 1.0) [Рекомендация W3C] определен стандартный способ связывания XML-документа с документом таблицы стилей CSS.

Рекомендуемые обучающие руководства и учебные пособия

 

XForms

В спецификации XForms 1.0 [Рекомендация W3C], которую не следует путать с одноименной библиотекой графического пользовательского интерфейса Xwindows, определяются Web-формы для обработки данных XML, которые могут быть использованы со множеством платформ в различных медиа-средах. Цель этой спецификации —отделить предназначение формы от ее представления. Она разделяет то, что делает форма, от того, как она выглядит. Это словарь XML, который можно использовать для разработки пользовательских интерфейсов для манипулирования содержанием XML. Изначально спецификация XForms разрабатывалась как часть семейства XHTML, но затем получила самостоятельное развитие. Хотя она более сложная, чем необходимо, XForms достаточно тщательно проработана для того, чтобы «привнести порядок в безумный мир Web-форм».

Рекомендуемые обучающие руководства и учебные пособия

 

SOAP

В спецификации SOAP [Рекомендация W3C] описывается протокол, предназначенный для использования XML для передачи сообщений между системами, которые связаны с помощью низкоуровневых Интернет-протоколов. Некоторые пользователи рассматривают SOAP как основание Web-сервисов XML — набор технологий для управления и организации взаимодействия систем, связанных с использованием форматов данных XML и Интернет-протоколов передачи сообщений.

Первоначально SOAP разрабатывался небольшой группой, состоящей из частных лиц и различных компаний, в том числе IBM. Он быстро завоевал популярность, поскольку совпал с направлением работ над обменом сообщениями XML, но обеспечил более надежную архитектуру и коммерческую поддержку. Разработка SOAP перешла под эгиду W3C, после чего появился SOAP 1.2, который не смотря на множество архитектурных улучшений, привнес ряд неоднозначны допущений.

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

Поскольку Web-сервисам необязательно использовать SOAP, большая группа разработчиков отстаивает предложение о том, что достаточно просто обмениваться необработанными XML-документами непосредственно через HTTP — подход продвигаемый под знаменами «REpresentational State Transfer (REST)».

Сам REST — это имя, которое дал архитектурному стилю Web один из его архитекторов, Рой Филдинг (Roy Fielding). Сторонники применения этого стиля для Web-сервисов утверждают, что SOAP сложен, ограничивает свою полезную нагрузку XML и не использует в достаточной степени сильные стороны Web.

В лагере приверженцев SOAP недавно произошли изменения: их устремления сместились с корней RPC к тому, что называется стилем document-literal. В соответствии с этим стилем, данные, подлежащие передаче, упаковываются в дискретные типы данных в специальном формате полезной нагрузки XML (называемом кодированием SOAP). При использовании стиля document-literal полезная нагрузка XML состоит из более естественных форматов XML, которые часто более описательны и удобочитаемы для человека.

The SOAP edifice

На спецификации SOAP базируется огромное число стандартов — гораздо большее, чем можно описать в этой статье. Ниже приведены некоторые полезные источники информации:

Один из предшественников SOAP, который до сих пор широко используется, это стандарт «Удаленный вызов процедуры на XML» (XML Remote Procedure Calls (XML-RPC)) [Общественный стандарт]. В нем определяются вызовы процедур, закодированные на XML и переданные по HTTP. Эта спецификация остается по-прежнему популярной по причине своей простоты (ее полный текст занимает менее десяти печатных страниц), а также из-за того, что на многих языка и каркасах приложений имеются стандартные и готовые реализации XML-RPC.

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

Рекомендуемые обучающие руководства и учебные пособия

 

WSDL

Согласно официальному определению, спецификация «Язык описания Web-сервисов (WSDL), версия 1.2» (Web Services Description Language (WSDL) Version 1.2) [находится в стадии разработки] это «формат XML, предназначенный для описания сетевых сервисов в виде конечных точек, обрабатывающих сообщения, которые содержат ориентированную на документ, либо на процедуру информацию». В этой спецификации на ряде уровней абстрагирования определяются компоненты сквозной передачи в Web-сервисе. Изначально WSDL разрабатывался как совместный проект IBM и Microsoft, но затем был передан в W3C с целью разработки WSDL 1.2. Язык WSDL обычно позиционируется вместе с SOAP, как базовая технология Web-сервисов, но он может быть использован для описания других протоколов помимо SOAP.

Рекомендуемые обучающие руководства и учебные пособия

 

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

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

 

Ресурсы

Об авторе

Юч Огбуджи (Uche Ogbuji) — консультант и один из основателей Fourthought, компании, занимающейся поставками программного обеспечения и предоставлением консалтинговых услуг в области XML-решений для корпоративного управления знаниями. Fourthought разрабатывает 4Suite — платформу с открытым исходным кодом, для XML, RDF и приложений по управлению знаниями. Юч Огбуджи — инженер в области вычислительной техники, родился в Нигерии, живет и работает в Боулдер-Сити (Boulder), штат Колорадо, США. С ним можно связаться по адресу uche.ogbuji@fourthought.com.