XML-технология: элементы и атрибуты для реализации веб-сервисов

XML атрибуты и элементыXML-технология обеспечивает кроссплатформенный и расширяемый стандарт для формата данных. При обсуждении XML-технологии мы будем опираться на спецификации XML 1.0, XML Information Set, Namespaces in XML 1.0 и XML Schema.

В архитектуре Web-сервисов XML-формат используется как для описания серви­сов, так и для обмена сообщениями с Web-сервисами.

eXtensible Markup Language (XML) — это язык разметки документов, обеспечи­вающий текстовый формат хранения данных. Язык XML является подмножеством языка Standard Generalized Markup Language (SGML) и описывает определенный класс объектов, называемых XML-документами.

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

Приложения, работающие с XML-документами, для их обработки используют про­граммный компонент — XML-процессор, обеспечивающий доступ к содержимому и структуре XML-документа. В технологии Java XML-процессоры представлены семейством Java for XML Processing (JAXP), включающим в себя процессоры DOM, SAX, StAX и TrAX.

XML-процессоры подразделяются на две категории — потоковые и объектные об­работчики. При потоковой обработке XML-документа XML-процессор анализиру­ет документ последовательно, в реальном времени, что экономит ресурсы памяти. SAX — это потоковый XML-процессор. При объектной обработке XML- документа XML-процессор создает в памяти объекты, представляющие состояние документа, что дает возможность в произвольном порядке анализировать его части. DOM — это процессор, поддерживающий объектную модель документа.

Процессор StAX является промежуточным между SAX и DOM, обеспечивая управ­ление анализом XML-документа в приложении.

Процессор TrAX дает возможность трансформации XML-документа в другие фор­маты данных с использованием таблицы стилей XSLT. Существуют также XML- процессоры, трансформирующие XML-документы в формат HTML и XHTML с использованием каскадных таблиц стилей CSS.

Модель XML-документа описывает его в терминах логической и физической структуры. Логическая структура состоит из объявления, определения типа доку­мента, элементов, комментариев, ссылок и инструкций по обработке документа.

Каждый XML-документ может начинаться с объявления, ограниченного тегами <?xml и ?> и включающего в себя атрибуты version (версия XML-спецификации — на сегодняшний день только 1.0), encoding (символьная кодировка документа, по умолчанию Unicode) и standalone (по умолчанию no, означает, что документ может иметь свое внешнее описание).

Далее в XML-документе может находиться описание структуры документа — оп­ределение типа документа DTD (Document Type Definition) или ссылка на внешний DTD-файл.

После объявления и определения типа документа его логическая структура пред­ставлена набором элементов, комментариев, ссылок и инструкций по обработке документа.

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

XML-теги определяют значение, типы данных, а не способ их отображения, как в формате HTML.

Атрибуты элементов представляют собой пары "имя/значение" и могут быть трех типов — строковый тип, лексемы и перечисления.

Дочерний элемент корневого элемента — это такое же его свойство, как и атрибут, за исключением того, что дочерний элемент может иметь свою сложную структуру.

Комментарии ограничиваются тегами <!-- и --> и предназначены для документи­рования XML-документа.

Ссылки ограничиваются амперсандом (&) и точкой с запятой (;) и используются в XML-документах для подстановки при обработке документа вместо них символов или различного рода данных, описанных в определении DTD. Подставляемые дан­ные могут быть обрабатываемыми XML-процессором, т. е. представлены в XML- формате, или необрабатываемыми — текстовые данные не формата XML, изобра­жения и другие двоичные данные. Кроме того, для включения в XML-документ символьных данных, которые не следует обрабатывать XML-процессором, исполь­зуется секция CDATA, ограниченная тегами <![CDATA[ и ]]>.

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

Инструкции по обработке ограничиваются тегами <? и ?> и предназначены для передачи информации приложению, работающему с XML-документом.

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

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

Помимо базового XML-синтаксиса, основные понятия XML-технологии, исполь­зуемые в технологии Web-сервисов, — это XML Infoset, XML Schema и XML Namespaces.

 


XML Namespaces

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

Идентификатор XML-пространства имен является URI-адресом и используется в определении типа элемента XML-документа (имени начального и конечного тега элемента) и имени атрибута элемента.

Пространство имен объявляется с помощью зарезервированного имени xmlns, после которого может следовать префикс пространства имен, являющийся, по сути, сокращением идентификатора, и далее идет URI-идентификатор пространства имен.

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

Таким образом, механизм XML Namespaces позволяет присваивать уникальные имена элементам и атрибутам XML-документа, предоставляя каждому элементу и атрибуту свое уточненное QName-имя в пределах глобального XML-пространства имен.

 


XML Infoset

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

Спецификация XML Information Set (XML Infoset) описывает абстрактную модель данных, представленных XML-документом, в виде набора информационных еди­ниц. Каждая информационная единица является абстрактным описанием опреде­ленной части XML-документа и имеет набор связанных с ней свойств.

Необязательно каждый XML-документ должен иметь информационное простран­ство XML Infoset. Информационное пространство XML Infoset имеют лишь XML- документы, отвечающие правилам XML-синтаксиса согласно спецификации XML и соответствующие пространству имен согласно спецификации XML Namespaces.

Таким образом, правильно оформленный XML-документ — это сериализованная форма определенного информационного пространства.

Модель XML Infoset реализуется различными языками программирования в виде объектов, обеспечивающих доступ к частям XML-документа.

Спецификация XML Infoset определяет для XML-документа 11 типов информаци­онных единиц — каждая с соответствующим набором свойств.

Информационное пространство XML-документа содержит как минимум корневую информационную единицу document. Все остальные информационные единицы информационного пространства XML-документа доступны с помощью свойств кор­невой информационной единицы document или свойств дочерних для document ин­формационных единиц.

Информационная единица document имеет следующие свойства:

Каждый XML-документ состоит из элементов, ограниченных тегами и представ­ляющих соответствующие информационные единицы element информационного пространства XML Infoset.

Информационные единицы element являются дочерними по отношению к инфор­мационной единице document element и имеют следующие свойства:

Атрибуты элементов в виде пар "имя/значение" XML-документа представляют ин­формационные единицы attribute информационного пространства XML Infoset. Атрибуты могут быть определены в XML-документе или установлены по умолча­нию.

Атрибуты подразделяются на три типа — строковые, лексемы (знаковый тип) и пе­речисления.

Информационная единица attribute имеет следующие свойства:

Информационная единица processing instruction, представленная инструкцией обработки элемента в XML-документе, имеет следующие свойства:

Информационная единица unexpanded entity reference представлена ссылкой на необработанную XML-процессором внешнюю сущность, подлежащую разбору. Эта информационная единица имеет следующие свойства:

 

Информационная единица character представлена символьными данными XML- документа и имеет следующие свойства:

Информационная единица comment представлена комментариями XML-документа и имеет следующие свойства:

Информационная единица document type declaration представлена ссылкой или са­мим DTD-описанием структуры XML-документа и имеет следующие свойства:

Информационная единица unparsed entity представлена сущностью, не подлежа­щей обработке XML-процессором и объявленной в описании структуры XML- документа. Обычно это ресурс в двоичном формате или другом не XML-фор­мате, например GIF, BMP и др. Информационная единица unparsed entity имеет свойства:

Информационная единица notation представлена нотацией, объявленной в описании структуры XML-документа. Нотации используются для определения формата  сущностей (ресурсов), не подлежащих обработке XML-процессором, а также для указания приложений, получающих инструкции по обработке элементов XML- документа. Эта информационная единица имеет следующие свойства:

Информационная единица namespace представлена пространством имен элемента XML-документа и имеет следующие свойства:

Как уже было сказано, XML-документы предназначены для хранения данных. Но приложение, использующее XML-документ, работает не непосредственно с документом, а с его информационным пространством XML Infoset, получаемым как ре­зультат разбора XML-документа XML-процессором. Однако информационное про­странство XML Infoset может быть получено и другими способами, например, с использованием библиотек API DOM. В этом случае такое информационное пространство называется синтетическим.

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

При использовании XML-документа, не имеющего правил, вся ответственность за корректность написания документа лежит на его авторе.

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

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

Описание структуры XML-документа, накладывающее ограничения на структуру и содержание документов данного типа, может быть создано с помощью различных языков, таких как Document Type Definition (DTD), XML Schema, RELAX NG и др.

Первым языком для создания XML-схем был язык Document Type Definition (DTD). Язык DTD является компактным и позволяет включать описание структуры XML- документа непосредственно в сам XML-документ. Но синтаксис языка DTD отли­чается от XML-синтаксиса, поэтому он прямо не поддерживается платформами и инструментами технологии XML. Кроме того, язык DTD не поддерживает про­странства имен, а поддержка типов данных ограничена. Язык DTD не позволяет определять элементы, содержащие целые и вещественные числа, даты и времена и др., и не может указывать сложные связи между элементами.

Язык XML Schema дает более богатые возможности по сравнению с DTD и устра­няет его недостатки. Синтаксис XML Schema является XML-синтаксисом, кроме того, в языке XML Schema обеспечена поддержка пространств имен и всех необхо­димых типов данных. Также язык XML Schema позволяет создавать собственные типы данных и расширять существующие. Использование языка XML Schema обеспечивает трансформацию XML-документа в иерархию объектов определенных типов, доступных программным способом с помощью интерфейса (функциональ­ность Post-Schema-Validation Infoset (PSVI)).

Язык RELAX NG, как и XML Schema, использует XML-синтаксис и по сравнению с XML Schema является более простым и легким в изучении. Язык RELAX NG со­четает в себе простоту DTD и богатые возможности XML Schema. Однако так как язык RELAX NG является в определенном смысле упрощением XML Schema, то он не поддерживает функциональность PSVI и имеет упрощенную типовую модель, что делает необходимым использование сторонних библиотек типов данных.

Здесь мы более подробно остановимся на языке XML Schema.

 


XML Schema

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

XML-документ ссылается на свое описание — XML-схему, созданную с помощью языка XML Schema, используя атрибуты xsi:schemaLocation и xsi:noNamespace- SchemaLocation, где xsi префикс пространства имен, указанного в XML-до­кументе с помощью атрибута xmlns:

xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance

Атрибут schemaLocation ссылается на XML-схему, имеющую определение про­странства имен, а атрибут noNamespaceSchemaLocation — на XML-схему, не указывающую пространство имен для элементов и атрибутов. Атрибуты xsi :schemaLocation и xsi :noNamespaceSchemaLocation ссылаются на XML-схему своими значениями, представленными в виде URI-адреса схемы.

Корневым компонентом XML Schema является элемент <schema>, имеющий сле­дующие атрибуты.

Элемент <schema> имеет также атрибут xmlns:xsd="http://www.w3.org/2001/ XMLSchema", указывающий пространство имен для элементов и типов данных самой
схемы. При наличии префикса для данного пространства имен все элементы и типы данных схемы, включая элемент <schema>, должны уточняться этим префиксом (xsd:schema). Если префикс отсутствует, тогда атрибут xmlns указывает для схемы пространство имен по умолчанию. Данное пространство имен используется, чтобы очертить круг элементов и простых типов, относящихся к словарю языка XML Schema, а не к словарю автора схемы.

Элемент <schema> (рис. 1) может содержать вложенные элементы <include>, <import>, <redefine>, <annotation>, <type> (<simpleType>, <complexType>), <group>, <attributeGroup>, <element>, <attribute>, <notation>, <identityConstraint> (<key>, <unique>, <keyref>).

Общая схема элемента <schema> 

Рис. 1. Общая схема элемента <schema>

Язык XML Schema позволяет создавать описание структуры XML-документов, со­стоящее из нескольких схем, с помощью элементов <include> и <import>.

Элемент <include> добавляет все компоненты указанной схемы в основную схему, а элемент <import> дает возможность использовать компоненты указанной схемы в основной схеме.

Разница между элементами <include> и <import> состоит в том, что при использо­вании элемента <include> целевое пространство имен включаемой схемы (атрибут targetNamespace) должно быть таким же, что и целевое пространство имен основ­ной схемы, а при использовании элемента <import> можно ссылаться на компонен­ты схемы с произвольным целевым пространством имен.

Элемент <include> имеет следующие атрибуты:

Элемент <import> имеет следующие атрибуты:

С помощью элемента <redefine> можно переопределять компоненты внешней схе­мы, которая имеет такое же целевое пространство имен, что и основная схема.

Элемент <redefine> имеет атрибуты: необязательный id (идентификатор элемента) и обязательный schemaLocation (URI-адрес схемы, компоненты которой переопре­деляются).

Во все компоненты XML-схемы можно включать документацию с помощью эле­мента <annotation>, содержащего в свою очередь элементы <appinfo> и <documentation>.

Элемент <appinfo> XML-схемы позволяет давать информацию приложениям, ис­пользующим схему, а элемент <documentation> содержит текстовые комментарии. Информация элемента <appinfo> используется приложением в качестве инструкции по обработке. Элемент <appinfo> имеет необязательный атрибут source, указываю­щий URI-адрес приложения.

Элемент <documentation> имеет необязательные атрибуты source (URI-адрес при­ложения, использующего комментарии) и xml:lang (язык комментариев).

XML-схема определяет элементы и атрибуты для XML-документов, используя эле­менты <element> и <attribute>.

Элементы <element> и <attribute> называются глобальными, если они являются дочерними для элемента <schema>.

Элемент <element> (рис. 2) имеет следующие атрибуты.

Общая схема элемента <element>

Рис. 1. Общая схема элемента <element>

Элемент <element> как контейнер может содержать элементы <annotation>, <simpleType> или <complexType>, <unique> либо key или <keyref>.

Элемент <key> указывает, что значение элемента-поля, определенного с помощью вложенного элемента <field>, должно быть ключом в пределах его элемента- контейнера, указанного с помощью вложенного элемента <selector>. Элемент <key> имеет атрибуты: необязательный id (идентификатор ключа) и обязательный name (имя ключа). Ключ должен быть ненулевым и постоянно доступным.

Элемент <unique> указывает, что значение элемента-поля, определенного с по­мощью вложенного элемента <field>, должно быть уникальным в пределах его элемента-контейнера, указанного с помощью вложенного элемента <selector>. Элемент <unique> имеет атрибуты: необязательный id (идентификатор) и обяза­тельный name (имя). Значение элемента-поля должно быть уникальным или пустым.

Элемент <keyref> является ссылкой на элемент <unique> или <key>. Элемент <keyref> имеет атрибуты: необязательный id (идентификатор элемента <keyref>),

обязательный name (имя элемента <keyref>) и обязательный refer (QName-имя эле­мента <unique> или <key>, определенного в этой или внешней схеме).

Элементы <unique>, <key> и <keyref> в свою очередь являются контейнерами для элементов <annotation>, <selector> и <field>.

Элемент <selector> содержит XPath-выражение, определяющее множество элемен­тов-контейнеров, которые имеют значения элементов-полей. Элемент <selector> имеет атрибуты: необязательный id (идентификатор) и обязательный xpath (XPath- выражение). Элемент selector должен быть одним для своего элемента-контейнера.

Элемент <field> содержит XPath-выражение, определяющее элемент-поле, и имеет атрибуты: необязательный id (идентификатор) и обязательный xpath (XPath- выражение).

ПРИМЕЧАНИЕ

XPath — это язык запросов к элементам XML-документа. Подробно язык XPath рассмотрен в приложении "Язык XPath" справки "Приложения" и PDF-файле в каталоге Приложения компакт-диска.

Элемент <simpleType> объявляет простой тип содержимого элемента XML- документа и имеет следующие атрибуты:

Элемент <simpleType> является контейнером для элемента annotation и одного из элементов <restriction>, <list> или <union>.

Простые типы, объявляемые элементом <simpleType>, представляют собой произ­водные от встроенных типов данных XML Schema или производные от уже объявленных простых типов.

Создание простого типа, как производного, осуществляется с помощью вложенных элементов <restriction>, <list> или <union>.

Элемент <restriction> определяет простой тип, как производный от существующе­го, путем ограничения возможных значений, используя следующие атрибуты и вложенные элементы:

Элемент <list> определяет простой тип, как производный от существующего, пу­тем создания списка, используя следующие атрибуты и вложенные элементы:

Элемент <union> определяет простой тип, как производный от существующих ти­пов, путем объединения, используя следующие атрибуты и вложенные элементы:

XML Schema поддерживает следующие встроенные типы данных.

Элемент <complexType> определяет сложный тип содержимого элемента XML- документа и имеет следующие атрибуты:

Элементы с простым типом данных могут содержать только символьные данные и не могут включать атрибуты и другие элементы.

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

Элемент <complexType> является контейнером для элементов <annotation>, <simpleContent>, <complexContent>, <group>, <all>, <choice>, <sequence>, <anyAttribute>, <attribute> и <attributeGroup>.

Элемент <simpleContent> определяет содержимое элемента, как символьные данные и атрибуты, имеет необязательный атрибут id (идентификатор элемента в пределах схемы) и должен содержать один из элементов <restriction> или <extension>.

Элемент <restriction>, дочерний для элемента <simpleContent>, накладывает огра­ничения на базовый тип данных, определяя тип содержимого элемента XML- документа, и описывает его атрибуты с помощью следующих атрибутов и вложен­ных элементов:

Элемент <extension>, дочерний для элемента <simpleContent>, расширяет базовый тип данных, определяя тип содержимого элемента XML-документа, и описывает его атрибуты с помощью следующих атрибутов и вложенных элементов:

Элемент <complexContent> допускает наличие дочерних элементов в содержимом элемента XML-документа. Элемент <complexContent> имеет необязательные атри­буты id (идентификатор) и mixed (если true, тогда между дочерними элементами могут находиться символьные данные, по умолчанию false), а также вложенные элементы <annotation>, <restriction> или <extension>.

Элементы <restriction> и <extension>, дочерние для <complexContent>, имеют сле­дующие атрибуты и вложенные элементы:

Элемент <group> позволяет создать группу элементов с помощью следующих атри­бутов и вложенных элементов:

Элемент <all> накладывает ограничения на появление элементов в родительском элементе XML-документа с помощью следующих атрибутов и вложенных элементов:

Элемент <choice> позволяет присутствовать в родительском элементе XML- документа одному-единственному элементу из указанных с помощью следующих атрибутов и вложенных элементов:

Элемент <sequence> указывает наличие упорядоченной последовательности эле­ментов в родительском элементе XML-документа с помощью следующих атрибу­тов и вложенных элементов:

Элемент <attribute> (рис. 3) описывает атрибуты XML-документа, используя следующие атрибуты и вложенные элементы:

Элемент <notation>, являющийся дочерним элементом элемента <schema>, объявля­ет нотацию, описывающую формат данных, отличный от XML-формата.

Элемент <notation> имеет следующие атрибуты:

 Общая схема элемента <attribute>

Рис. 3. Общая схема элемента <attribute>

 

Вас заинтересует / Intresting for you:

Архитектура SOA (Service Orien...
Архитектура SOA (Service Orien... 7685 просмотров Денис Fri, 02 Nov 2018, 07:24:48
Как работает фильтр Google Omi...
Как работает фильтр Google Omi... 1186 просмотров Игорь Воронов Sat, 14 Mar 2020, 18:03:25
Как работает фильтр Google Lin...
Как работает фильтр Google Lin... 1297 просмотров Игорь Воронов Sat, 14 Mar 2020, 10:09:24
SEO-оптимизация сайта: поиск и...
SEO-оптимизация сайта: поиск и... 1366 просмотров Денис Sun, 24 Feb 2019, 14:53:38
Печать
Войдите чтобы комментировать