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 имеет следующие свойства:

  • [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>).

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

Рис. 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) имеет следующие атрибуты.

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

Рис. 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 (символьная строка с нормализацией пробелов). Встроенный производный тип данных от normalizedStringtoken (лексема), который также имеет встроенные производные типы данных — 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-идентификатор нотации.

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

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

 

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

Архитектура SOA (Service Orien...
Архитектура SOA (Service Orien... 7689 просмотров Денис Fri, 02 Nov 2018, 07:24:48
Seo для Google: фильтр Broken ...
Seo для Google: фильтр Broken ... 1495 просмотров Игорь Воронов Fri, 13 Mar 2020, 15:35:59
Как вставить код PHP в докумен...
Как вставить код PHP в докумен... 1578 просмотров Natalia Mon, 11 Feb 2019, 16:47:16
Что представляет собой РНР 7? ...
Что представляет собой РНР 7? ... 9204 просмотров Zero Cool Wed, 17 Oct 2018, 10:48:32
Войдите чтобы комментировать