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
имеет следующие свойства:
[children]
— список дочерних для document информационных единиц верхнего уровня, при этом список содержит как минимум одну информационную единицу — document element. Список также содержит информационные единицы processing instruction (инструкция по обработке информационной единицы) и comment (комментарий). Список может содержать информационный элемент document type declaration (DTD-описание или ссылка на DTD -описание структуры XML-документа);[document element]
— идентификатор информационной единицы document element;[notations]
— набор информационных единиц notation (нотации, которые дают возможность передавать приложениям различную информацию, например, способ обработки сущности, не подлежащей разбору);[unparsed entities]
— набор информационных единиц unparsed entity (сущности, не подлежащие разбору);[base uri]
— URI-идентификатор XML-документа;[character encoding scheme]
— символьная кодировка XML-документа;[standalone]
— если YES, тогда указывает автономность документа, т. е. возможность обработки XML-документа без привлечения других документов;[version]
— версия XML-документа;[all declarations processed]
— если true, тогда XML-процессор должен полностью обработать DTD-описание структуры XML-документа.
Каждый XML-документ состоит из элементов, ограниченных тегами и представляющих соответствующие информационные единицы element информационного пространства XML Infoset.
Информационные единицы element являются дочерними по отношению к информационной единице document element и имеют следующие свойства:
[namespace name]
— URI-идентификатор пространства имен, к которому принадлежит элемент;[local name]
— локальная часть имени элемента, которая вместе со свойством [namespace name] образует имя элемента;[prefix]
— префикс пространства имен элемента;[children]
— список дочерних информационных единиц, содержащий информационные единицы element, а также информационные единицы processing instruction (инструкции для обработки), unexpanded entity reference (ссылка на необработанную внешнюю сущность, подлежащую разбору), character (единица текста — последовательности символов) и comment (комментарии) для данного элемента;[attributes]
— набор информационных единиц attribute, представленный атрибутами элемента XML-документа;[namespace attributes]
— набор информационных единиц attribute, представленный атрибутами элемента, объявляющими используемые элементом пространства имен;[in-scope namespaces]
— набор информационных единиц namespace (пространства имен, используемые элементом);[base uri]
— URI-идентификатор элемента;[parent]
— информационная единица, являющаяся родительской.
Атрибуты элементов в виде пар "имя/значение" XML-документа представляют информационные единицы attribute информационного пространства XML Infoset. Атрибуты могут быть определены в XML-документе или установлены по умолчанию.
Атрибуты подразделяются на три типа — строковые, лексемы (знаковый тип) и перечисления.
Информационная единица attribute имеет следующие свойства:
[namespace name]
— URI-идентификатор пространства имен, к которому принадлежит атрибут;[local name]
— локальная часть имени атрибута, которая вместе со свойством [namespace name] образует имя атрибута;[prefix]
— префикс пространства имен атрибута;[normalized value]
— нормализованное значение атрибута с преобразованием пробелов;[specified]
— флаг, указывающий, что атрибут определен в начальном теге элемента или установлен по умолчанию в DTD-описании;[attribute type]
— тип атрибута, объявленный в описании структуры XML- документа. Возможные значения — ID, IDREF, IDREFS (идентификаторы и ссылки на идентификаторы — знаковые типы), ENTITY, ENTITIES (имена сущностей, не подлежащих разбору — знаковые типы), NMTOKEN, NMTOKENS (лексемы имен — знаковые типы), NOTATION (информация, используемая приложением — строковый тип), CDATA (символьная строка — строковый тип) и ENUMERATION (список допустимых значений атрибута — перечисление);[references]
— если тип атрибута равен IDREF, IDREFS, ENTITY, ENTITIES или NOTATION, тогда список информационных единиц element, unparsed entity или notation; если тип атрибута — ID, NMTOKEN, NMTOKENS, CDATA или ENUMERATION, тогда свойство не имеет значения;[owner element]
— информационная единица element, к которой относится данная единица attribute.
Информационная единица processing instruction
, представленная инструкцией обработки элемента в XML-документе, имеет следующие свойства:
[target]
— имя приложения, исполняющего инструкцию;[content]
— данные для приложения в виде пар "имя/значение";[base uri]
— URI-идентификатор инструкции;[notation]
— информационная единица notation, определяющая имя приложения, которое исполняет инструкцию;[parent]
— информационная единица, к которой относится данная инструкция.
Информационная единица unexpanded entity
reference представлена ссылкой на необработанную XML-процессором внешнюю сущность, подлежащую разбору. Эта информационная единица имеет следующие свойства:
[name]
— имя сущности;[system identifier]
— системный идентификатор сущности в виде URI-адреса сущности;[public identifier]
— публичный идентификатор общедоступной сущности в виде URI-адреса сущности;[declaration base uri]
— базовый URI-адрес, относительно которого разрешается системный идентификатор;[parent]
— информационная единица element, к которой относится данная сущность.
Информационная единица character
представлена символьными данными XML- документа и имеет следующие свойства:
[character code]
— символьная кодировка ISO 10646;[element content whitespace]
— если true, тогда символ является пробелом;[parent]
— информационная единица element, к которой относится данная информационная единица character.
Информационная единица comment
представлена комментариями XML-документа и имеет следующие свойства:
[content]
— строка комментария;[parent]
— информационная единицаdocument
илиelement
, к которой относится данный комментарий.
Информационная единица document type declaration
представлена ссылкой или самим DTD-описанием структуры XML-документа и имеет следующие свойства:
[system identifier]
— системный идентификатор внешнего DTD-описания в виде URI-адреса;[public identifier]
— публичный идентификатор общедоступного внешнего DTD-описания в виде URI-адреса;[children]
— список информационных единиц processing instruction, представленных инструкциями обработки DTD-описания;[parent]
— информационная единица document, к которой относится данное DTD -описание.
Информационная единица unparsed entity
представлена сущностью, не подлежащей обработке XML-процессором и объявленной в описании структуры XML- документа. Обычно это ресурс в двоичном формате или другом не XML-формате, например GIF, BMP и др. Информационная единица unparsed entity имеет свойства:
[name]
— имя сущности;[system identifier]
— системный идентификатор сущности в виде URI-адреса сущности;[public identifier]
— публичный идентификатор общедоступной сущности в виде URI-адреса сущности;[declaration base uri]
— базовый URI-адрес, относительно которого разрешается системный идентификатор;[notation name]
— имя нотации, определяющей формат сущности, которая не подлежит обработке;[notation]
— информационная единица notation с именем, указанным в свойстве[notation name]
.
Информационная единица notation
представлена нотацией, объявленной в описании структуры XML-документа. Нотации используются для определения формата сущностей (ресурсов), не подлежащих обработке XML-процессором, а также для указания приложений, получающих инструкции по обработке элементов XML- документа. Эта информационная единица имеет следующие свойства:
[name]
— имя нотации;[system identifier]
— системный идентификатор нотации в виде URI-адреса;[public identifier]
— публичный идентификатор общедоступной нотации в виде URI-адреса;[declaration base uri]
— базовый URI-адрес, относительно которого разрешается системный идентификатор.
Информационная единица namespace представлена пространством имен элемента XML-документа и имеет следующие свойства:
[prefix]
— часть имени, следующая после xmlns:, если префикс отсутствует, тогда пространство имен является установленным по умолчанию;[namespace name]
— пространство имен, следующее после префикса.
Как уже было сказано, 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>
, имеющий следующие атрибуты.
- Необязательный атрибут
attributeFormDefault
. Значение атрибута "qualified
" указывает, что атрибуты XML-документа должны уточняться (квалифицироваться) префиксом их пространства имен. По умолчанию значение атрибута — "unqualified
". - Необязательный атрибут
blockDefault
устанавливает по умолчанию значение атрибута block для всех элементов схемы. Возможные значения атрибута: #all
— в XML-документах запрещена замена базового элемента его производными, созданными любым способом;extension
— запрещена замена в XML-документах базового элемента производными элементами, полученными путем расширения базового типа элемента;restriction
— запрещена замена в XML-документах базового элемента производными элементами, полученными путем ограничения базового типа элемента;substitution
— в XML-документах запрещена любая замена базового элемента.- Необязательный атрибут
elementFormDefault
. Значение атрибута "qualified
" указывает, что элементы XML-документа должны уточняться (квалифицироваться) префиксом их пространства имен. По умолчанию значение атрибута — "unqualified
". - Необязательный атрибут
finalDefault
устанавливает по умолчанию значение атрибута final для всех типов данных схемы. Возможные значения атрибута: #all
— в XML-схеме запрещено создание производных типов любым способом;extension
— в XML-схеме запрещено создание производных типов путем расширения базового типа;restriction
— в XML-схеме запрещено создание производных типов путем ограничения базового типа;list
— в XML-схеме для простых типов запрещено создание производных типов путем создания списков;union
— в XML-схеме для простых типов запрещено создание производных типов путем объединения.- Необязательный атрибут id — идентификатор схемы.
- Необязательный атрибут targetNamespace указывает пространство имен для элементов XML-документа, определяемых данной схемой.
- Необязательный атрибут
version
— версия схемы. - Необязательный атрибут xml:lang определяет по умолчанию язык для всех комментариев схемы.
Элемент <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>
).
Рис. 1. Общая схема элемента <schema>
Язык XML Schema позволяет создавать описание структуры XML-документов, состоящее из нескольких схем, с помощью элементов <include>
и <import>
.
Элемент <include>
добавляет все компоненты указанной схемы в основную схему, а элемент <import>
дает возможность использовать компоненты указанной схемы в основной схеме.
Разница между элементами <include>
и <import>
состоит в том, что при использовании элемента <include>
целевое пространство имен включаемой схемы (атрибут targetNamespace) должно быть таким же, что и целевое пространство имен основной схемы, а при использовании элемента <import> можно ссылаться на компоненты схемы с произвольным целевым пространством имен.
Элемент <include>
имеет следующие атрибуты:
- необязательный атрибут
id
— идентификатор элемента; - обязательный атрибут
schemaLocation
— URI-адрес включаемой схемы.
Элемент <import>
имеет следующие атрибуты:
- необязательный атрибут
id
— идентификатор элемента; - необязательный атрибут
namespace
— целевое пространство имен компонентов схемы, на которые можно ссылаться в основной схеме; - необязательный атрибут
schemaLocation
— URI-адрес схемы, на компоненты которой можно ссылаться в основной схеме.
С помощью элемента <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) имеет следующие атрибуты.
Рис. 1. Общая схема элемента <element>
- Необязательный атрибут
abstract
. Если true, тогда этот элемент является абстрактным и сам не может использоваться в XML-документе, а должен замещаться элементами, имеющими в качестве значения атрибутаsubstitutionGroup
— имя данного абстрактного элемента. По умолчанию значение атрибута abstract="false
".
- Необязательный атрибут
block
ограничивает использование вместо данного элемента элементов с определенным типом наследования. Возможные значения: #all
— в XML-документах запрещена замена данного элемента его производными, созданными любым способом;extension
— запрещена замена в XML-документах данного элемента его производными элементами, полученными путем расширения типа данного элемента;restriction
— запрещена замена в XML-документах данного элемента его производными элементами, полученными путем ограничения типа данного элемента;substitution
— в XML-документах запрещена любая замена данного элемента.- Необязательный атрибут
default
устанавливает для элементов с простым типом данных значение по умолчанию. - Необязательный атрибут
final
ограничивает тип наследования данного элемента. Возможные значения: #all
— для данного элемента в XML-схеме запрещено создание производных любым способом;extension
— для данного элемента в XML-схеме запрещено создание производных путем расширения типа данного элемента;restriction
— для данного элемента в XML-схеме запрещено создание производных путем ограничения типа данного элемента.- Необязательный атрибут
fixed
для элемента с простым типом данных задает неизменяемое значение. Атрибут является взаимоисключающим с атрибутом default. - Необязательный атрибут
form
задает форму элемента. Возможные значения: qualified
— элемент необходимо уточнять префиксом пространства имен;unqualified
— элемент не обязательно уточнять префиксом пространства имен.- Необязательный атрибут
id
— идентификатор элемента. - Необязательный атрибут
maxOccurs
задает максимальное число появлений данного элемента в содержащем его элементе XML-документа. Возможные значения — целое число, большее или равное 0, или unbounded (без ограничений). Данный атрибут запрещен для глобального элемента. - Необязательный атрибут
minOccurs
задает минимальное число появлений данного элемента в содержащем его элементе XML-документа. Возможные значения — целое число до 1 или 0 (элемент необязателен). Данный атрибут запрещен для глобального элемента. - Необязательный атрибут
name
задает имя элемента в XML-документе. Атрибут является обязательным для глобального элемента. - Необязательный атрибут
nillable
. Если значение атрибута true, тогда в XML- документе для элемента можно задать его содержимое пустым с помощью атрибутаxsi:nil="true"
. По умолчанию значение атрибута —false
. - Необязательный атрибут
ref
— ссылка на элемент этой или внешней схемы. Значение атрибута должно быть QName-имя элемента (префикс пространства имен и локальное имя элемента). Ссылаться можно только на глобальные элементы, т. е. элементы, являющиеся дочерними для корневого элементаschema
. Данный атрибут запрещен для глобального элемента. - Необязательный атрибут
substitutionGroup
задает имя элемента, который можно заменить данным элементом, при этом элемент должен иметь тот же тип данных или тип данных, унаследованный от типа данных указанного элемента. Значение атрибута должно быть QName-имя элемента. - Необязательный атрибут
type
указывает QName-имя элементовsimpleType
илиcomplexType
, задающих тип данных элемента. Атрибут является взаимоисключающим с атрибутомref
. С помощью атрибутаtype
можно прямо указать существующий тип данных элемента, например,type="xs:string"
.
Элемент <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- документа и имеет следующие атрибуты:
- необязательный атрибут
final
накладывает ограничения на наследование данного простого типа с помощью возможных значений: #all
— запрещает любое наследование;list
— запрещает наследование списком;union
— запрещает наследование объединением;restriction
— запрещает наследование ограничением;- необязательный атрибут
id
— идентификатор простого типа; - атрибут name — имя типа, присутствует только в элементах
<simpleType>
, дочерних для элементаschema
.
Элемент <simpleType>
является контейнером для элемента annotation и одного из элементов <restriction>
, <list>
или <union>
.
Простые типы, объявляемые элементом <simpleType>
, представляют собой производные от встроенных типов данных XML Schema или производные от уже объявленных простых типов.
Создание простого типа, как производного, осуществляется с помощью вложенных элементов <restriction>
, <list>
или <union>.
Элемент <restriction>
определяет простой тип, как производный от существующего, путем ограничения возможных значений, используя следующие атрибуты и вложенные элементы:
- обязательный атрибут
base
указывает базовый тип, из которого создается данный производный простой тип. Базовый тип может быть встроенным типом XML Schema или уже объявленным простым типом; - необязательный атрибут
id
— идентификатор в пределах схемы; - вложенный элемент
<annotation>
— документация; - вложенный элемент
<simpleType>
— дочерний простой тип; - вложенный элемент
<minExclusive>
указывает исключающую нижнюю границу области значений с помощью атрибута value. Имеет также атрибуты fixed (если true, тогда значение value является неизменяемым для производных, по умолчанию — false) и id (идентификатор); - вложенный элемент
<minInclusive>
указывает включающую нижнюю границу области значений с помощью атрибута value. Имеет также атрибуты fixed и id; - вложенный элемент
<maxExclusive>
указывает исключающую верхнюю границу области значений с помощью атрибута value. Имеет также атрибуты fixed и id; - вложенный элемент
<maxInclusive>
указывает включающую верхнюю границу области значений с помощью атрибута value. Имеет также атрибуты fixed и id; - вложенный элемент
<totalDigits>
— максимальное количество десятичных знаков перед запятой для типов, унаследованных от decimal с помощью атрибута value. Имеет также атрибуты fixed и id; - вложенный элемент
<fractionDigits>
— максимальное количество десятичных знаков после запятой для типов, унаследованных от decimal с помощью атрибута value. Имеет также атрибуты fixed и id; - вложенный элемент
<length>
— количество единиц длины, для строк — это количество символов, для двоичных данных hexBinary и base64Binary — это 8 бит, для списков — это количество элементов списка. Элемент имеет атрибуты value, fixed и id; - вложенный элемент
<minLength>
— минимальное количество единиц длины, имеет атрибуты value, fixed и id; - вложенный элемент
<maxLength>
— максимальное количество единиц длины, имеет атрибуты value, fixed и id; - вложенный элемент
<enumeration>
ограничивает область возможных значений фиксированным набором значений с помощью атрибута value; - вложенный элемент
<whiteSpace>
указывает для типов, производных от string, правила нормализации с помощью трех возможных значений атрибута value — preserve (нормализация не производится), replace (символы#x9
,#xA
и#xD
заменяются символом#x20
), collapse (пробелы в начале и в конце удаляются, дублирующие пробелы объединяются в один). Имеет также атрибуты fixed и id; - вложенный элемент
<pattern>
ограничивает область возможных значений шаблоном, основанным на регулярном выражении с помощью атрибута value.
Элемент <list>
определяет простой тип, как производный от существующего, путем создания списка, используя следующие атрибуты и вложенные элементы:
- необязательный атрибут
id
— идентификатор в пределах схемы; - атрибут
itemType
— имя встроенного типа данных или уже объявленного простого типа. Атрибут обязательный, если нет дочернего элемента <simpleType>, с которым он является взаимоисключающим; - вложенный элемент
<simpleType>
— производный тип; - вложенный элемент
<annotation>
— документация.
Элемент <union> определяет простой тип, как производный от существующих типов, путем объединения, используя следующие атрибуты и вложенные элементы:
- необязательный атрибут
id
— идентификатор в пределах схемы; - необязательный атрибут memberTypes — список имен встроенных типов данных или уже объявленных простых типов;
- вложенный элемент
<simpleType>
определяет участника объединения; - вложенный элемент
<annotation>
— документация.
XML Schema поддерживает следующие встроенные типы данных.
string
— символьная строка. Встроенный производный тип данных —normalizedString
(символьная строка с нормализацией пробелов). Встроенный производный тип данных отnormalizedString
—token
(лексема), который также имеет встроенные производные типы данных —language
(идентификатор языка),nmtoken
(лексемы, соответствующие XML-типу атрибутаnmtoken
, имеет производный тип —nmtokens
), Name (XML-имена, имеет производный тип — NCName). Встроенный тип NCName, часть XML-имени без двоеточия, имеет производные типы iD (идентификатор), iDREF (ссылка на идентификатор, имеет производный тип idrefs) и entity (XML-сущность, имеет производный тип entities).boolean
— логическое значение true, false.decimal
— десятичные числа. Встроенный производный тип данных — integer (целые числа). Производный тип данных integer имеет, в свою очередь, производные типы nonPositiveinteger (верхняя граница значений — 0, имеет производный тип negativelnteger — верхняя граница —1), nonNegativelnteger (нижняя граница значений — 0, имеет производные типы unsignedLong с верхней границей 18 446 744 073 709 551 615 и positiveinteger с нижней границей 1), long (значения от -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807, имеет производный тип int со значениями от -2 147 483 648 до 2 147 483 647). Тип unsignedLong имеет производный тип unsignedint с верхней границей значений 4 294 967 295. Тип unsignedint имеет производный тип unsignedshort с верхней границей 65 535. Тип unsignedshort имеет производный тип unsignedByte с верхней границей 255. Тип int имеет производный тип short со значениями от -32 768 до 32 767. Тип short имеет производный тип byte со значениями от -128 до 127.float
— числа с плавающей запятой.double
— числа с плавающей запятой двойной точности.duration
— промежуток времени (PnYn MnDTnH nMnS).dateTime
— последовательность даты и времени.time
— время (hh:mm:ss.sss).date
— дата.gYearMonth
— год и месяц.gYear
— год.gMonthDay
— месяц и день.gDay
— день.gMonth
— месяц.hexBinary
— представление двоичных данных в виде последовательностей символов.base64Binary
— Base64-коgировка двоичных данных.anyURi
— URI-адрес.QName
— префикс, локальная часть имени.notation
— значение одноименного XML-атрибута.
Элемент <complexType>
определяет сложный тип содержимого элемента XML- документа и имеет следующие атрибуты:
- необязательный атрибут
abstract
. Если true, тогда в XML-документе используется сложный тип, производный от данного типа. По умолчанию значение атрибута — false; - необязательный атрибут
block
ограничивает использование в XML-документе сложного типа с указанным типом наследования вместо данного сложного типа с помощью следующих возможных значений:#all
(запрет использования вместо этого сложного типа всех производных сложных типов),extension
(запрет использования вместо этого сложного типа всех производных сложных типов, созданных расширением),restriction
(запрет использования вместо этого сложного типа всех производных сложных типов, созданных ограничением); - необязательный атрибут
final
ограничивает тип наследования с помощью следующих возможных значений:#all
(запрет наследования),extension
(запрет наследования расширением),restriction
(запрет наследования ограничением); - необязательный атрибут
id
— идентификатор элемента; - необязательный атрибут
mixed
. Если true, тогда в XML-документе возможно наличие символьных данных между дочерними элементами этого типа. По умолчанию значение атрибута —false
. Если есть дочерний элемент <simpleContent>, тогда использовать атрибут нельзя; - атрибут
name
— имя типа. Атрибут обязательный, если элемент является дочерним для элемента<schema>
, в других случаях использовать атрибут нельзя.
Элементы с простым типом данных могут содержать только символьные данные и не могут включать атрибуты и другие элементы.
Сложный тип определяет содержимое элементов XML-документа, которые могут включать в себя атрибуты и другие элементы.
Элемент <complexType>
является контейнером для элементов <annotation>
, <simpleContent>
, <complexContent>
, <group>
, <all>
, <choice>
, <sequence>
, <anyAttribute>
, <attribute> и <attributeGroup>
.
Элемент <simpleContent>
определяет содержимое элемента, как символьные данные и атрибуты, имеет необязательный атрибут id
(идентификатор элемента в пределах схемы) и должен содержать один из элементов <restriction>
или <extension>
.
Элемент <restriction>
, дочерний для элемента <simpleContent>
, накладывает ограничения на базовый тип данных, определяя тип содержимого элемента XML- документа, и описывает его атрибуты с помощью следующих атрибутов и вложенных элементов:
- обязательный атрибут base указывает базовый тип, из которого создается данный производный сложный тип. Базовый тип может быть встроенным типом XML Schema или уже объявленным простым типом или сложным типом;
- необязательный атрибут
id
— идентификатор в пределах схемы; - вложенный элемент
<annotation>
— документация; - вложенный элемент
<simpleType>
— дочерний простой тип; - вложенный элемент
<minExclusive>
указывает исключающую нижнюю границу области значений с помощью атрибута value. Имеет также атрибуты fixed (если true, тогда значение value является неизменяемым для производных, по умолчанию — false) и id (идентификатор); - вложенный элемент
<minInclusive>
указывает включающую нижнюю границу области значений с помощью атрибута value. Имеет также атрибуты fixed и id; - вложенный элемент
<maxExclusive>
указывает исключающую верхнюю границу области значений с помощью атрибута value. Имеет также атрибуты fixed и id; - вложенный элемент
<maxInclusive>
указывает включающую верхнюю границу области значений с помощью атрибута value. Имеет также атрибуты fixed и id; - вложенный элемент
<totalDigits>
— максимальное количество десятичных знаков перед запятой для типов, унаследованных от decimal с помощью атрибута value. Имеет также атрибуты fixed и id; - вложенный элемент
<fractionDigits>
— максимальное количество десятичных знаков после запятой для типов, унаследованных от decimal с помощью атрибута value. Имеет также атрибуты fixed и id; - вложенный элемент
<length>
— количество единиц длины, для строк — это количество символов, для двоичных данных hexBinary и base64Binary — это 8 бит, для списков — это количество элементов списка. Элемент имеет атрибуты value, fixed и id; - вложенный элемент
<minLength>
— минимальное количество единиц длины. Элемент имеет атрибуты value, fixed и id; - вложенный элемент
<maxLength>
— максимальное количество единиц длины и имеет атрибуты value, fixed и id; - вложенный элемент
<enumeration>
ограничивает область возможных значений фиксированным набором значений с помощью атрибута value; - вложенный элемент
<whiteSpace>
указывает для типов, производных от string, правила нормализации с помощью трех возможных значений атрибута value — preserve (нормализация не производится), replace (символы #x9, #xA и #xD заменяются символом #x20), collapse (пробелы в начале и в конце удаляются, дублирующие пробелы объединяются в один). Имеет также атрибуты fixed и id; - вложенный элемент
<pattern>
ограничивает область возможных значений шаблоном, основанным на регулярном выражении с помощью атрибута value; - вложенный элемент
<attribute>
объявляет атрибут; - вложенный элемент
<attributeGroup>
группирует атрибуты. Элемент <attributeGroup> имеет следующие атрибуты и вложенные элементы: - необязательный атрибут
id
— идентификатор; - необязательный атрибут
name
— имя группы атрибутов, может использоваться, если родительский элемент — <schema>; - необязательный атрибут
ref
— ссылка на группу атрибутов, взаимоисключающий атрибут с атрибутом name, может использоваться, если родительский элемент не является элементом<schema>
; - вложенные элементы
<annotation>
,<attribute>
,<attributeGroup>
,<anyAttribute>
;
- вложенный элемент
<anyAttribute>
разрешает любому атрибуту из указанного пространства имен появляться в содержащем их элементе. Элемент<anyAttribute>
имеет следующие атрибуты: - необязательный атрибут
id
— идентификатор; - необязательный атрибут
namespace
принимает одно из значений: ##any (по умолчанию могут включаться атрибуты из любого пространства имен), ##other (могут включаться атрибуты из любого пространства имен, которое не является целевым пространством имен родительского элемента), URI- идентификаторы пространств имен,##targetNamespace
(могут включаться атрибуты из целевого пространства имен родительского элемента), ##local (могут включаться локальные атрибуты, не принадлежащие пространству имен); - необязательный атрибут
processContents
указывает способ проверки XML- документов, принимает одно из значений strict (по умолчанию, обязательная проверка атрибутов на соответствие указанному пространству имен),lax
(необязательная проверка) и skip (проверка не производится).
Элемент <extension>
, дочерний для элемента <simpleContent>
, расширяет базовый тип данных, определяя тип содержимого элемента XML-документа, и описывает его атрибуты с помощью следующих атрибутов и вложенных элементов:
- обязательный атрибут
base
— базовый тип, из которого создается данный производный сложный тип. Базовый тип может быть встроенным типом XML Schema или уже объявленным простым типом или сложным типом; - необязательный атрибут
id
— идентификатор в пределах схемы; - вложенные элементы
<annotation>
,<attribute>
,<attributeGroup>
,<anyAttribute>
.
Элемент <complexContent>
допускает наличие дочерних элементов в содержимом элемента XML-документа. Элемент <complexContent>
имеет необязательные атрибуты id
(идентификатор) и mixed
(если true, тогда между дочерними элементами могут находиться символьные данные, по умолчанию false), а также вложенные элементы <annotation>, <restriction>
или <extension>
.
Элементы <restriction>
и <extension>
, дочерние для <complexContent>
, имеют следующие атрибуты и вложенные элементы:
- обязательный атрибут
base
— базовый тип, из которого создается данный производный сложный тип. Базовый тип должен быть уже объявленным сложным типом; - необязательный атрибут
id
— идентификатор в пределах схемы; - вложенные элементы —
<annotation>
,<group>
,<all>
,<choice>
,<sequence>
,<attribute>
,<attributeGroup>
,<anyAttribute>
.
Элемент <group>
позволяет создать группу элементов с помощью следующих атрибутов и вложенных элементов:
- необязательный атрибут
id
— идентификатор в пределах схемы; - необязательный атрибут
name
— имя группы элементов, используется, если только родительский элемент —<schema>
; - необязательный атрибут
maxOccurs
— максимальное число появлений группы элементов в родительском элементе XML-документа. Значение атрибута unbounded снимет ограничение на максимальное число; - необязательный атрибут
minOccurs
— минимальное число появлений группы элементов в родительском элементе XML-документа. Значение атрибута 0 указывает, что появление группы необязательно; - необязательный атрибут ref — ссылка на имя уже определенной группы элементов. Атрибут является взаимоисключающим с атрибутом name;
- вложенные элементы
<annotation>
,<all>
,<choice>
,<sequence>
.
Элемент <all>
накладывает ограничения на появление элементов в родительском элементе XML-документа с помощью следующих атрибутов и вложенных элементов:
- необязательный атрибут
id
— идентификатор в пределах схемы; - необязательный атрибут
maxOccurs
— максимальное число вхождений элемента. Значение атрибута должно быть равно 1; - необязательный атрибут
minOccurs
— минимальное число вхождений данного элемента. Значение атрибута может быть 1 (по умолчанию) или 0 (элемент необязателен); - вложенные элементы
<annotation>
,<element>
.
Элемент <choice>
позволяет присутствовать в родительском элементе XML- документа одному-единственному элементу из указанных с помощью следующих атрибутов и вложенных элементов:
- необязательный атрибут
id
— идентификатор в пределах схемы; - необязательный атрибут
maxOccurs
— максимальное число появлений данного выбора элемента в родительском элементе XML-документа. Значение атрибутаunbounded
снимет ограничение на максимальное число. По умолчанию — 1; - необязательный атрибут
minOccurs
— минимальное число появлений данного выбора элемента в родительском элементе XML-документа. Значение атрибута 0 указывает, что появление элемента необязательно. По умолчанию — 1; - вложенные элементы
<annotation>
,<element>
,<group>
,<choice>
,<sequence>
,<any>
.
Элемент <sequence>
указывает наличие упорядоченной последовательности элементов в родительском элементе XML-документа с помощью следующих атрибутов и вложенных элементов:
- необязательный атрибут
id
— идентификатор в пределах схемы; - необязательный атрибут
maxOccurs
— максимальное число появлений данной последовательности элементов в родительском элементе XML-документа. Значение атрибутаunbounded
снимет ограничение на максимальное число. По умолчанию — 1; - необязательный атрибут
minOccurs
— минимальное число появлений данной последовательности элементов в родительском элементе XML-документа. Значение атрибута 0 указывает, что появление последовательности необязательно. По умолчанию — 1; - вложенные элементы
<annotation>
,<element>
,<group>
,<choice>
,<sequence>
,<any>
.
Элемент <attribute>
(рис. 3) описывает атрибуты XML-документа, используя следующие атрибуты и вложенные элементы:
- необязательный атрибут
default
задает значение атрибута XML-документа по умолчанию; - необязательный атрибут
fixed
задает неизменяемое значение атрибута XML- документа, является взаимоисключающим с атрибутомdefault
; - необязательный атрибут
form
указывает, как атрибут должен представляться в XML-документе. Возможные значения атрибута —qualified
(атрибут XML- документа уточняется значением атрибутаtargetNamespace
элемента<schema>
) иunqualified
(атрибут представляется только локальным именем); - необязательный атрибут
id
— идентификатор в пределах схемы; - необязательный атрибут
name
— имя атрибута, является обязательным, если родительский элемент — <schema>; - необязательный атрибут
ref
— ссылка на уже объявленный атрибут, является взаимоисключающим с атрибутами name, form, type и simpleType; - необязательный атрибут
type
— указывает встроенный тип данных XML Schema или простой тип данных для значений атрибута XML-документа; - необязательный атрибут
use
— определяет использование атрибута XML- документа. Возможные значения — optional (по умолчанию атрибут является необязательным),prohibited
(использование атрибута запрещено), required (наличие атрибута обязательно); - вложенные элементы
<annotation>
,<simpleType>
.
Элемент <notation>
, являющийся дочерним элементом элемента <schema>
, объявляет нотацию, описывающую формат данных, отличный от XML-формата.
Элемент <notation>
имеет следующие атрибуты:
- необязательный атрибут
id
— идентификатор в пределах схемы; - обязательный атрибут
name
— имя нотации; - необязательный атрибут
system
— системный URI-идентификатор нотации; - обязательный атрибут
public
— публичный URI-идентификатор нотации.
Рис. 3. Общая схема элемента <attribute>