http www w3 org 2001 xmlschema instance

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

XML документ

Давайте посмотрим на следующий XML документ под названием «shiporder.xml»:

Приведенный выше XML документ состоит из корневого элемента shiporder с обязательным атрибутом orderid. Элемент shiporder содержит три дочерних элемента: orderperson, shipto и item. Элемент item используется дважды и содержит элемент title, необязательный элемент note, а также элементы quantity и price.

Строка xmlns:xsi=»http://www.w3.org/2001/XMLSchema-instance» говорит XML парсеру, что этот документ должен быть проверен на соответствие схеме. Строка xsi:noNamespaceSchemaLocation=»shiporder.xsd» указывает, где именно находится схема (в данном случае она находится в той же папке, что и файл «shiporder.xml»).

Создание XML схемы

Теперь для приведенного выше XML документа создадим XML схему.

Создадим новый файл, который назовем «shiporder.xsd». Для создания XML схемы будем просто следовать за структурой XML документа и определять каждый встреченный элемент. Начнем со стандартной XML декларации, за которой опишем элемент xs:schema, который и определяет саму схему:

Здесь мы используем стандартное пространство имен (xs) и URI, ассоциированный с этим пространством имен, который имеет стандартное значение http://www.w3.org/2001/XMLSchema.

Теперь мы должны определить элемент shiporder. У этого элемента есть атрибут, и он содержит другие элементы, поэтому мы рассматриваем его как элемент составного типа. Определения дочерних элементов элемента shiporder поместим в декларацию xs:sequence, что задает жесткую последовательность подэлементов:

Теперь определим элемент orderperson, который будет простого типа (так как он не содержит ни атрибуты, ни другие элементы). Его тип (xs:string) имеет префикс пространства имен, ассоциированного с XML схемой, что указывает на использование предопределенного типа данных:

Теперь нам нужно определить два элемента составного типа: shipto и item. Начнем с определения элемента shipto:

При помощи схем мы можем определить число возможных вхождений любого элемента. В этом нам помогут атрибуты maxOccurs и minOccurs. Атрибут maxOccurs задает максимальное число вхождений элемента, а атрибут minOccurs задает минимальное число вхождений. По умолчанию значение обоих атрибутов равно 1.

Теперь определим элемент item. Этот элемент может использоваться неограниченное число раз внутри элемента shiporder. Определить такую особенность элемента item позволяет присваивание атрибуту maxOccurs значения «unbounded». Это означает, что элемент item может использоваться столько раз, сколько нужно автору документа. Обратите внимание, что элемент note опционален. Определим это установив атрибут minOccurs в нулевое значение:

Теперь мы можем декларировать атрибут элемента shiporder. Поскольку это обязательный атрибут, используем определение use=»required».

Примечание: Атрибуты должны всегда декларироваться последними:

Вот полный код файла схемы «shiporder.xsd»:

Разделение схемы

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

Следующий способ компоновки схемы заключается в том, что сначала определяются все элементы и атрибуты, а затем на эти определения создаются ссылки при помощи атрибута ref.

Ниже приводится новая компоновка файла схемы («shiporder.xsd»):

Использование поименованых типов

Третий способ компоновки схемы предполагает определение классов или типов, которые позволяют повторное использование определений элементов. Это становится возможным, если дать имена элементам simpleTypes и complexTypes, а затем указать на них при помощи атрибута type.

Третий способ компоновки файла схемы («shiporder.xsd»):

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

Однако гораздо чаще элемент restriction используется для накладывания ограничений на элементы. Посмотрите на следующие строки из приведенной выше схемы:

Этот фрагмент кода указывает, что значение элемента или атрибута должно быть строковым, ровно шесть символов в длину, и этими символами должны быть цифры от 0 до 9.

XML Schema
Орган стандартизации Консорциум Всемирной паутины
Создатель Консорциум Всемирной паутины
Создан май 2001
Официальный сайт w3.org/TR/xmlschema-0/
w3.org/TR/xmlschema-1/
w3.org/TR/xmlschema-2/

XML Schema — язык описания структуры XML-документа. Спецификация XML Schema является рекомендацией W3C.

Как большинство языков описания XML, XML Schema была задумана для определения правил, которым должен подчиняться документ. Но, в отличие от других языков, XML Schema была разработана так, чтобы её можно было использовать в создании программного обеспечения для обработки документов XML.

После проверки документа на соответствие XML Schema читающая программа может создать модель данных документа, которая включает:

  • словарь (названия элементов и атрибутов);
  • модель содержания (отношения между элементами и атрибутами и их структура);
  • типы данных.

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

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

Файл, содержащий XML Schema, обычно имеет расширение «.xsd» (XML Schema definition).

Содержание

История [ править | править код ]

Версия 1.0 была одобрена в качестве рекомендации консорциума W3C 2 мая 2001 года. Таким образом XML Schema стала первой спецификацией описания схемы XML-документа, получившей статус рекомендации W3С, среди множества предложенных на рассмотрение. 28 октября 2004 года была опубликована вторая редакция версии 1.0, исправляющая ряд ошибок.

5 апреля 2012 года была одобрена в качестве рекомендации консорциума Версия 1.1.

Пример [ править | править код ]

Простой пример схемы на XML Schema, расположенной в файле «country.xsd» и описывающей данные о населении страны:

Пример документа, соответствующего этой схеме:

Where is the XSD schema definition file for the namespace «http://www.w3.org/2001/XMLSchema-instance»?

4 Answers 4

Strange it may sound, but the XML schema for http://www.w3.org/2001/XMLSchema-instance namespace does exist and is found exactly by the very URL denoted by the namespace URI: http://www.w3.org/2001/XMLSchema-instance

For a proof, just open that link (URL) in an HTML browser (e.g. FireFox). You will probably see some HTML text, like: «XML Schema instance namespace . «. Then, save that ‘HTML’ as a file on your computer (e.g. File | Save Page As). When you look into this file, you will see that it is not HTML at all. Rather, it is a complete XML schema for that namespace!

Equally, you can import the http://www.w3.org/2001/XMLSchema-instance namespace into your own schema as the following:

See also this question: Error while parsing xsd using xjc, which although sounds very differently, actually very much related to the same problem.

Just to add fuel to the fire — many XML tools have knowledge of http://www.w3.org/2001/XMLSchema-instance baked-in, so it looks like you never need the schema at all. In fact, you need the schema if you are using an XML tool that does not bake-in this knowledge.

So is for that reason that we find actually always beginning of xml documents where there ins’t xml-schema xsd declaration at all? For example like this:

Here is some updated information on this topic.

XSD 1.1 part 1 §2.7 states:

XML Schema Definition Language: Structures defines several attributes for direct use in any XML documents. These attributes are in the schema instance namespace (http://www.w3.org/2001/XMLSchema-instance) described in The Schema Instance Namespace (xsi) (§1.3.1.2) above. All schema processors must have appropriate attribute declarations for these attributes built in.

Further, §3.2.6.4 says:

The of an attribute declaration, whether local or top-level, must not match http://www.w3.org/2001/XMLSchema-instance (unless it is one of the four built-in declarations given in the next section). Note: This reinforces the special status of these attributes, so that they not only need not be declared to be allowed in instances, but in consequence of the rule just given must not be declared.

So, you can’t declare attributes such as xsi:type or xsi:schemaLocation in a schema document, and therefore you can’t import a schema document that attempts to declare such attributes.

This of course is XSD 1.1 and therefore doesn’t directly constrain an XSD 1.0 processor. However, it’s one of the many areas where XSD 1.1 issues guidance for cases where XSD 1.0 said nothing, and where different implementations went off in different directions.

Оцените статью