№ 1 2006
А.В. Кудинов
Современная IT-индустрия и язык XML в программных продуктах Intersoft Lab
Почему XML?
Расширяемый язык разметки1 — это простой и очень гибкий язык, предназначенный для описания документов, содержащих структурированную информацию. Слово разметка означает, что в XML используют специальные символы — теги, которые встраиваются непосредственно в текст для описания различных частей и фрагментов теста. Под расширяемостью подразумевается, что XML является языком метаразметки, т. е. служит для разработки языков разметки — позволяет описывать различные структуры данных.
Благодаря своим свойствам XML позволяет решать многие проблемы автоматизации, являясь универсальным форматом обмена данными между приложениями. Чем же так привлекателен XML?
Прежде всего, XML не зависит от платформ, он позволяет обмениваться данными между системами, базирующимися на разных платформах. XML расширяем — в процессе эксплуатации XML-формата в него можно добавлять новые теги. XML присуща иерархичность, являющаяся ключевым свойством языка. Поэтому в отличие от других форматов — например, CSV2, XML позволяет легко описывать сложные структуры данных с неограниченной вложенностью объектов. Кроме того, структура данных в формате XML отлично сочетается с объектно-ориентированной моделью программирования. Так, каждому тегу XML-документа можно поставить в соответствие класс или свойство класса обрабатывающей
1 Extensible Markup Language — сокращенно XML.
2 Comma-Separated Values — формат файла, в котором значения данных разделены запятыми.
программы. В то же время можно описать в XML-формате каждый прикладной объект предметной области в виде отдельного тега. Наконец, и это немаловажно, XML поддерживается в продуктах большинства западных поставщиков программного обеспечения.
Таким образом, можно утверждать: сегодня язык XML становится неотъемлемой частью любой современной корпоративной системы.
Немного истории
История возникновения языка берет начало в 1960-е годы, когда был разработан язык SGML3, принятый в 1986 г. в качестве стандарта ISO4 (ISO 8879). Несмотря на то что SGML — мощный и достаточно универсальный язык, он довольно сложен и не очень удобен при описании простых документов.
В 1998 г. под патронатом международной организации W3C5 был разработан новый, более гибкий и оптимально подходящий для Всемирной сети язык. Формальное описание языка XML содержится в опубликованной на сайте W3C спецификации языка — техническом документе «Extensible Markup Language (XML) 1.0 (Second Edition)»6, где определен синтаксис и представлены рекомендации7 и соглаше-
3 Standard Generalized Markup Language — стандартный язык обобщенной разметки.
4 International Standards Organization — Международная организация по стандартизации.
5 World Wide Web Consortium — Консорциум Всемирной сети.
6 «Расширяемый язык разметки, версия 1.0 (второе издание)».
7 Консорциум W3C издает официальные рекомендации, которые технически являются просто предложениями для дальнейшей стандартизации, однако имеют свойство превращаться в стандарты де-факто.
Современная IT-индустрия и язык XML в программных продуктах Intersoft Lab
№ 1 2006
ния для разработки текстовых форматов данных. Стоит отметить, что в феврале 2004 г. W3C выпустил спецификацию следующей версии языка — 1.1.
Основные понятия
Итак, синтаксис языка XML обеспечивает однозначное описание любых структурированных данных, определяя разметку документов с помощью тегов и атрибутов. Остановимся более подробно на основных терминах и понятиях XML.
Тег (tag) служит для выделения некой структурной единицы содержательной информации, которую называют элементом. Данная единица заключается между открывающим (<’) и закрывающим (‘>’) тегами. Элемент (element) состоит из разметки и текста, заключенного между тегами разметки. Элемент может содержать вложенные элементы, сам быть дочерним элементом и иметь атрибуты. Атрибут элемента (attribute) — это структурная единица языка XML, уточняющая свойства элемента и несущая дополнительную информацию об элементе:
<? xml version=”1.0” encoding=” utf-8”?>
<страна регион=“Европа”>Украина < / страна>
В приведенном примере первая строка является обязательной и называется декларацией. Она означает, что данный документ является XML-документом, т. е. документом в формате XML, а также указывает версию спецификации XML и кодировку текста XML-документа. Во второй строке находится корневой элемент <страна>, значение атрибута «регион» которого равно «Европа».
Наличие декларации в XML-документе необходимо для того, чтобы программа синтаксического разбора, или так называемый XML-парсер, могла автоматически определить кодировку, правильно интерпретировать XML-документ, проверить его корректность и при необходимости состоятельность.
Под корректностью XML-документа понимается набор несложных правил, которым необходимо следовать при его подготовке. Так, в любом XML-документе должен быть хотя бы один корневой элемент, а у каждого элемента — ровно по одному открывающему и закрывающему тегу. Кроме того, элементы могут быть вложены друг в друга, но не могут пересекаться, а пустые элементы, т. е. состоящие только из тегов, необходимо обозначать как <имя_элемента / >. Наконец, нужно следить за тем, чтобы служебные символы были заменены специальными последовательностями символов (например, вместо символа меньше «<» документ должен содержать подстановку вида «<») и значения атрибутов были взяты в кавычки.
W3C XML Schema и состоятельный XML-документ
С концепцией состоятельности XML-документов связано понятие языка схем, и в частности спецификация консорциума W3C XML Schema. Языки схем позволяют описать назначение, использование и взаимосвязи отдельных частей документа — типов данных, элементов и их содержимого, атрибутов и их значений. С их помощью можно указывать дополнительную информацию (например, значения по умолчанию для типов данных).
Использование синтаксиса XML — коренное отличие языка схем от так называемого шаблона DTD8, являющегося первоначальной спецификацией для описания структуры XML-документов. Спецификации DTD присуще много недостатков, включая невозможность определять пользовательские типы. В отличие от DTD XML-схемы поддерживают модульность, которая подразумевает повторное использование схем, и соответствуют стандарту XML, а значит, могут обрабатываться с помощью инструментальных средств XML.
Важно подчеркнуть, что язык схем — это описание разметки XML-документа,
8 Document Type Definition — описание типа документа.
№ 1 2006
сделанное в соответствии с синтаксисом XML. Именно поэтому языки схем часто называют XML-схемами. В настоящее время существует множество XML-схем, наиболее значимыми из которых, на наш взгляд, являются W3C XML Schema, RELAX NG9 и Schematron10. Примечательно, что под эгидой ISO и IEC11 образована объединенная рабочая группа (ISO / IEC JTC 1/ SC 34 / WG 1), занимающаяся разработкой стандарта языка DSDL12. Назначение данного стандарта — объединение многочисленных языков схем с целью упрощения их совместного использования.
Прежде чем привести краткое объяснение, как можно описывать XML-документ с помощью XML-схем на примере W3C XML Schema, будет уместным сказать несколько слов еще об одном понятии, широко используемом в XML-документах, — это пространства имен (namespaces).
Пространства имен имеют очень простой и исключительно практический смысл — возможность различать элементы (и атрибуты), имеющие одинаковые имена, но несущие совершенно различный смысл. Для этого необходимо объявить пространство имен, а именно использовать специальную конструкцию вида xmlns: префикс=" идентификатор".
В результате элементы с одинаковыми именами, но с различными префиксами оказываются в разных пространствах
9 Стандарт RELAX NG разработан международной организацией OASIS и в настоящий момент признан в качестве стандарта ISO.
10 Язык Schematron, созданный Риком Джелиффом (Rick Jelliffe), определяет язык схемы, который использует подход, несколько отличный от примененного в DTD, RELAX NG или W3C Schema. Schematron предполагает задание совокупности правил, по которым проверяется XML-документ, а не отображение всей структуры дерева документа в XML-формате. Поскольку на Schematron можно выражать ограничения, которые невозможно записать на других языках схем, перечисленных выше, его часто используют совместно с ними.
11 International Electrotechnical Committee — Международная электротехническая комиссия.
12 Document Schema Definition Languages — языки
описания схемы документа.
имен, поэтому могут иметь совершенно различные значения. Если же при объявлении пространств имен префикс отсутствует, то говорят о пространстве имен по умолчанию, и в этом случае элементы записываются без префикса. В общем случае идентификатор — это URI13 (например, http://www.w3.org /2001 / XMLSchema) или URN14, как в приведенном ниже примере. Смысл идентификатора — обеспечение уникальности имен элементов. Другими словами, у каждой группы элементов, используемых для описания предметной области, или, как ее еще называют, словаря, оказывается свое уникальное пространство имен. Здесь следует отметить, что хотя в качестве идентификатора чаще используются адреса (URI), это вовсе не означает, что по этому адресу что-то должно находиться. Дело в том, что в этом случае часто используется доменное имя, а оно является зарегистрированным, и это гарантирует уникальность объявляемого пространства имен.
<? xml version=”1.0” encoding=” windows-1251 ”?>
<xsd: schema
targetNamespace=” urn: sample” xmlns=” urn: sample”
xmlns: xsd=”http://www.w3.org / 2001 / XMLSchema”> <xsd: simpleType name=” ТипКода”>
<xsd: annotation>
<xsd: documentation>
Код валюты
< / xsd: documentation>
< / xsd: annotation>
<xsd: restriction base=” xsd: string”>
<xsd: enumeration value=”810” / >
<xsd: enumeration value=”840” / >
< / xsd: restriction>
< / xsd: simpleType>
<xsd: element name=” Валюта”>
<xsd: complexType>
<xsd: sequence>
13 Uniform Resource Identifier — унифицированный идентификатор ресурса.
14 Uniform Resource Name — унифицированное имя ресурса.
А.В. Кудинов
Современная IT-индустрия и язык XML в программных продуктах Intersoft Lab
№ 1 2006
<xsd: element name=”Название” type=”xsd: string” / >
< / xsd: sequence>
<xsd: attribute name=” Код” type=” ТипКода” / >
< / xsd: complexType>
< / xsd: element>
< / xsd: schema>
Рассмотрим более подробно данный пример. Поскольку W3C XML Schema является XML-документом, в первой строке содержится декларация с указанием его кодировки. За ней следует корневой элемент XML-схемы, записанный в полной форме — с префиксом «xsd», который указывает, что данный элемент относится к пространству имен W3C XML Schema. Данный префикс связан с этим пространством имен посредством атрибута xmlns: xsd. Атрибут «targetNamespace» указывает, к какому пространству имен относятся определяемые в этой схеме элементы и атрибуты. В нашем случае — это идентификатор пространства имен «urn: sample».
Далее следует определение простого типа данных «ТипКода». Этот тип данных является строкой и может принимать значения 810 либо 840. Эти ограничения определяются атрибутами и дочерними элементами элемента xsd: restriction. Далее следует определение элемента «Название» с атрибутом «Код», имеющим тип «ТипКода». Тип задается посредством атрибута type. При задании типа не указывается пространство имен, так как используется тип, определенный в пространстве имен по умолчанию.
Приведенная XML-схема может быть использована для описания и проверки следующего XML-документа:
<? xml version=”1.0” encoding=” windows-1251 ”?>
<Валюта
xmlns=”urn: sample”
xmlns: xsi=”http://www.w3.org / 2001 / XMLSchema-instance”
xsi: schemaLocation=”urn: sample sample. xsd”
Код=”840”>
<Название>Доллар США < / Название>
< / Валюта>
В первой строке этого XML-документа находится декларация, во второй — корневой элемент, у которого атрибут xmlns задает пространство имен по умолчанию («urn: sample»), а атрибут «xmlns: xsi» связывает префикс «xsi» c пространством имен для XML-документов, использующих для проверки состоятельности схемы, написанные на языке схемы W3C XML Schema. Атрибут «xsi: schemaLocation» предназначен для XML-парсера, чтобы тот мог определить, где находится схема (хранящаяся в файле «sample. xsd»), которую надо использовать для проверки состоятельности данного XML-документа.
Далее следуют атрибут «Код» и дочерний элемент «Название», несущие данные. Имена атрибута и элемента не содержат префикса, так как относятся к пространству имен по умолчанию.
Мы рассмотрели лишь некоторые основные конструкции W3C XML Schema. На самом деле возможности этого языка схем гораздо богаче, он позволяет описывать разнообразные XML-документы, соответствующие различным предметным областям. Таким образом, основное достоинство XML — возможность создавать собственные XML-форматы — получает дальнейшее развитие: можно не только решать, какие имена элементов и атрибутов лучше использовать и в каком порядке их располагать, но и определять правила проверки документов в разрабатываемом формате.
Заметим, что приведенный пример, несмотря на кажущуюся простоту, имеет реальное практическое применение — он является фрагментом XML-документов в формате Dynamic XML.
Технология Dynamic XML
Сегодня XML — одна из наиболее востребованных технологий. Рамки статьи
№ 1 2006
не позволяют подробно остановиться на этом вопросе, поэтому ограничимся только одним практическим примером применения XML — технологией Dynamic XML. Dynamic XML — это динамически расширяемый язык, предназначенный для интеграции бизнес-приложений с применением Хранилищ данных. Этот язык был разработан компанией Intersoft Lab при создании Хранилища данных «Контур Корпорация». Основой модели Dynamic XML стали следующие принципы: применения объектной модели описания данных и наличие возможности расширения формата обмена данными без остановки процессов передачи данных. Пространство имен XML-документов определяется словарем метаданных Хранилища информации системы «Контур Корпорация».
Для создания XML-документов используются форматы, ориентированные на описание объектов предметной области. XML-форматы объектов не статичны и могут расширяться новыми атрибутами. Для организации свободно расширяемой структуры бизнес-объектов, описывающих предметную область, выделяется конечный набор базовых бизнес-объектов: субъект, штатная единица, бизнес-операция, финансовый инструмент, план, счет, показатель, документ и справочник.
Каждый бизнес-объект описывается с помощью XML-шаблона, который включает статические и динамические разделы (характеристики). Статические разделы присутствуют в составе шаблона и не могут быть изменены. Динамические разделы предназначены для расширения состава атрибутов объекта с целью его максимальной адаптации к составу передаваемой информации.
Все объекты, подлежащие передаче в Хранилище данных, являются наследуемыми от базовых объектов. Поэтому форматы XML-объектов при расширении состава передаваемых данных могут быть легко модернизированы без нару-
шения стройности библиотеки XML-шаблонов.
В настоящее время язык Dynamic XML используется в задаче интеграции бизнес-приложений с использованием Хранилища данных. Dynamic XML нашел применение в десятках проектов, выполненных специалистами компании Intersoft Lab.
Всерьез и надолго
Мы живем в период бурного развития информационных технологий, и особое место в этом процессе занимает язык XML. Созданный более 6 лет назад главным «ин-тернет-стандартизатором» — международным консорциумом W3C, язык XML быстро распространился по планете и стал одной из наиболее популярных среди разработчиков и пользователей технологий коммуникаций. Действительно, согласно исследованию, которое проводили специалисты Intersoft Lab во время работы над первым российским стандартом для банковской отрасли, в настоящее время язык применяется во многих государственных учреждениях и коммерческих организациях во всем мире. Это Австралийское управление пруденциального регулирования, Налоговое управление и Национальная служба здравоохранения Великобритании, Deutsche Bank, Philips Business Communications — список можно продолжать довольно долго. Наконец, об этом свидетельствует и богатый практический опыт компании Intersoft Lab, успешно использующей язык XML в своих программных продуктах.
Уникальные возможности и свойства этого языка и, как следствие, его огромная популярность и богатый практический опыт применения говорят о том, что XML пришел к нам всерьез и надолго.
Литература
1. Harold E. R. XML 1.1 Bible, 3-rd Edition. John Wiley & Sons, Inc., 2004.
2. Чаусов В. И., Андреев К. В. Платформа для интеграции АБС. // Банки и технологии. 2002. № 1.
А.В. Кудинов