В чем разница между xsd и xsi?
В чем именно разница между документом схемы XML и экземпляром схемы XML ?
- xmlns:xsd=»http://www.w3.org/2001/XMLSchema»
- xmlns:xsi=»http://www.w3.org/2001/XMLSchema-instance»
xsd и xsi сходства
- Оба являются префиксами пространства имен XML , сокращениями для пространства имен XML .
- Оба, как и все префиксы пространств имен, имеют произвольные имена; также можно использовать другие сокращения префиксов пространств имен. Однако оба префикса являются обычными и поэтому рекомендуются. (Также обычная альтернатива xsd is xs .)
xsd и xsi различия
-
xsd (Или xs ) префикс со ссылкой на схемы пространство имен ( http://www.w3.org/2001/XMLSchema ) используется в XML — схеме (XSDs) для элементов, атрибутов и типов Рекомендации W3C XML Schema самого. (Это возможно, потому что XML-схема сама по себе является XML.)
xsi Префикс со ссылкой на схемы Instance пространство имен http://www.w3.org/2001/XMLSchema-instance используется в случаях XML документа для нескольких специальных атрибутов , определенных в Рекомендации XML — схемы:
xsi:type позволяет экземпляру XML связывать информацию о типе элемента напрямую, а не через XSD. См. Раздел Как ограничить значение элемента XML с помощью xsi: type в XSD?
xsi:nil позволяет пустому элементу считаться допустимым, если в противном случае XSD не мог этого допустить.
xsi:schemaLocation и xsi:noNamespaceSchemaLocation предоставить подсказки процессору XML относительно того, как связать XSD с документом XML. Используйте, xsi:schemaLocation когда есть пространство имен; используйте, xsi:noNamespaceSchemaLocation когда нет пространства имен.
Смотрите также
Простая версия: это пространство имен, используемое в схеме XML (XSD). Схема XML используется для описания того, что допустимо в документе экземпляра XML.
Менее простая версия: это пространство имен схемы XML, которое описывает структуру схемы XML. Другими словами, схема, которая описывает себя.
Схема XML (XSD) должна быть написана с использованием типов, определенных в этой схеме.
Например.
Это пространство имен, используемое в документах экземпляра XML для предоставления дополнительных данных синтаксическому анализатору XML, который их обрабатывает. Он описывает атрибуты xsi: schemalocation, xsi: noSchemalocation, xsi: type и xsi: nil, которые синтаксический анализатор XML может использовать для помощи при проверке.
Xmlns xsi что это
В этой главе будет показано, как писать 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:
Что означают атрибуты xmlns , xmlns:xsi и xsi:schemaLocation ? Как они связаны? Что для : для?
И есть 2 URL-адреса в xsi:schemaLocation=
Если 1 не существует, зачем его все еще класть?
Связанные с пространством имен атрибуты в XML и XML-схеме (XSD)
Префикс xmlns используется только для объявления привязок пространства имен и по определению связано с именем пространства имен http://www.w3.org/2000/xmlns/.
В вашем примере он объявляет, что http://maven.apache.org/POM/4.0.0 является пространством имен по умолчанию для элементов вашего проекта Maven.
xmlns:xsi объявляет стандартный префикс пространства имен ( xsi ) для используемого основного пространства имен в XSD: http://www.w3.org/2001/XMLSchema-instance
Схема XML: Структуры также определяют несколько атрибутов для прямого использования в любых XML-документах. Эти атрибуты находятся в другом пространстве имен, который имеет имя пространства имен http://www.w3.org/2001/XMLSchema-instance. Для краткости текст и примеры в этой спецификации используют префикс xsi: для этого последнее пространство имен; на практике может использоваться любой префикс.
В вашем примере он объявляет обычную привязку префикса пространства имен xsi к http://www.w3.org/2001/XMLSchema-instance , который правильно устанавливает следующие атрибуты:
xsi:type позволяет экземпляру XML напрямую связывать информацию типа элемента, а не через XSD, См. Как ограничить значение элемента XML с помощью xsi: type в XSD?
В вашем примере , xsi:type не используется; включенный здесь для полноты относительно xsi .
xsi:nil позволяет считать пустой элемент действительным, если XSD не может в противном случае разрешили его.
В вашем примере , xsi:nil не используется; включенный здесь для полноты относительно xsi .
xsi:schemaLocation и xsi:noNamespaceSchemaLocation предоставляют подсказки для XML-процессор относительно того, как связать XSD с XML-документом. Используйте xsi:schemaLocation , когда есть пространство имен; используйте xsi:noNamespaceSchemaLocation , когда нет пространства имен.
В вашем примере существует пространство имен, поэтому вы правильно используете xsi:schemaLocation , значения которого разделены пробелом пары пространства имен и XSD-location-URI . В вашем примере используется пространство имен, http://maven.apache.org/POM/4.0.0 , а пространства имен – это лексические конструкции именования, которые не должны быть восстановлены . В вашем примере также используется XSD-location-URI, http://maven.apache.org/xsd/maven-4.0.0.xsd , который может быть восстановлен, как и должно быть.
Если ваш пример не использовал пространство имен, вы должны использовать xsi:noNamespaceSchemaLocation , значение которого представляет собой единственный XSD-location-URI , который намекает на местоположение предполагаемого XSD и который должен быть извлечен.
targetNamespace является атрибутом корня xs:schema элемент XSD, который определяет пространство имен корневого элемента экземпляров XML-документа, которые XSD предназначен для управления. Это должно соответствие по умолчанию или явное пространство имен этих корней XML-документов элементы.
Консорциум W3C выработал рекомендацию языка определения схем XML (XSD), объединив наиболее популярные языки описания схем в один стандарт. Основная цель, которая при этом преследовалась, — получение стандарта, который можно широко реализовать и при этом он платформно-независимый.
Язык XML Schema Definition Language, который также называют XML Schema Language, во многом похож на язык XDR, с которым вы познакомились раньше. Схемы XSD способны решать следующие задачи:
- Перечисление элементов в документе XML и проверка наличия в документе только объявленных элементов.
- Объявление и определение атрибутов, модифицирующих элементы документа.
- Определение родительско-дочерних отношений между элементами.
- Определение состояний и моделей содержания для элементов и атрибутов.
- Задание типов данных.
- Установка значений по умолчанию.
- Возможность расширения.
- Поддержка использования пространств имен.
Корневым элементом в схеме XML является элемент , который содержит все остальные элементы в документе схемы. В рамках корневого элемента схемы XSD атрибутом определяется пространство имен , которое содержит элементы и атрибуты XSD схемы.
Все элементы XSD начинаются с префикса , который указывается для пространства имен XSD, объявленного в корневом элементе экземпляра схемы.
XML-документ, который проверяется с помощью схемы, также должен содержать объявление пространства имен. Пространство имен всегда указывается в корневом элементе экземпляра документа с помощью атрибута
Это пространство имен содержит элементы и атрибуты , которые можно включать в документ XML. По общему соглашению префикс используется для этого пространства имен и добавляется в начале имен всех элементов и атрибутов, принадлежащих пространству имен, отделяясь от них двоеточием.
Ссылка на конкретную схему приводится в атрибуте
Объявление элемента и атрибута XSD
Процесс создания схемы включает в себя два шага — определение и объявление типов элементов или типов атрибутов. Элементы и атрибуты XML-документа объявляются элементами схемы и . Структура же XML-документа определяется элементами схемы и .
Основное объявление элемента состоит из имени и типа данных
В схемах XSD дескрипторы, используемые в документах XML, разделяются на две категории — сложные типы и простые типы. Элементы сложных типов могут содержать другие элементы, а также обладают определенными атрибутами; элементы простых типов такими возможностями не обладают.
Атрибут – объявление простого типа, которое не может содержать другие элементы. Объявление атрибута похоже на объявление элемента:
Простые типы данных
Есть две главных категории простых типов:
- встроенные типы;
- определенные пользователем простые типы.
Язык XSD имеет большое количество данных. Встроенные типы включают в себя примитивные типы и производные. данных не получены из других типов данных. Например, числа с плавающей запятой – математическое понятие, которое не получено из других типов данных. данных определены в терминах существующих типов данных. Например, целое число – частный случай, полученный из десятичного типа данных.
Следующая таблица представляет список примитивных типов данных XML-схемы, аспекты, которые могут быть применены к типу данных и описания типа данных.
Следующая таблица представляет список производных типов данных XML-схемы, аспекты, которые могут быть применены к типу данных и описания типа данных.
Определённые пользователем простые типы
Получены из встроенных типов, применением к ним именованых ограничений, называемыми аспектами(Facets). Аспекты ограничивают допустимые значения простых типов. Синтаксис применения аспектов ограничения следующий:
Аспекты могут быть указаны только однажды в определении типа, кроме и – они могут иметь многократные вхождения и группируются.
Именованный тип данных
В языке XSD, в отличие от тех двух, с которыми вы познакомились раньше, существует концепция именованных типов. Например, при создании определения, можно присвоить этому определению имя, чтобы повторно использовать его в схеме XSD. Вы можете создать определение простого типа и назвать его, например, . В результате вы получите именованное ограничение. После этого вы сможете применять это ограничение и к другим элементам в схеме. Это особенно полезно, когда в определении применяются аспекты ограничения типа данных, чтобы не повторять их каждый раз в других определениях. Например, элемент может быть связан с элементом и атрибутом для объявления содержания этих элемента и значения атрибута как строковых данных:
Обратили внимание на ключевое слово в объявлении атрибута? Как и в предыдущих схемах, оно все так же означает обязательность использования объявленного атрибута. Другими предопределенными значениями атрибута элемента схемы могут быть ключевые слова и . Если первое из них означает необязательность использования, то второе запрещает использование объявленного атрибута. Такая необходимость возникает в случае локального объявления ранее определенной группы атрибутов элементом схемы , например:
далее в контексте определения элемента сложного типа мы делаем ограничение на применение атрибутов этой группы:
Сложные типы данных
элемента сложного типа – формальное описание структуры и допустимого содержания элемента, которое используется для проверки правильности XML документа. Модели содержания Схемы предоставляют больший контроль структуры элементов, чем модели содержания DTD. Кроме того, модели содержания схемы позволяют проверять правильность смешанного содержания.
Модель содержания может ограничивать документ до некоторого набора элементных типов и атрибутов, описывать и поддерживать связи между этими различными компонентами и уникально обозначать отдельные элементы. Свободное использование модели содержания позволяет разработчикам изменять структурную информацию.
Перечень объявлений дочерних элементов приводится в структуре группирующих XSD-элементов choice, sequence, и all.
Элемент позволяет только одному из элементов, содержащихся в группе присутствовать в составе элемента. Элемент требует появления элементов группы в точно установленной последовательности в составе элемента. элемент позволяет элементам в группе быть (или не быть) в любом порядке в составе элемента.
Элемент используется для четкого определения группы и для ссылки к именованной группе. Вы можете использовать модель группы, чтобы определить набор элементов, которые могут быть повторены в документе. Это полезно для формирования определения комплексного типа. Именованную модель группы можно далее определить, используя , или дочерние элементы. Именованные группы должны определяться в корне схемы. При необходимости многократного использования перечня элементов, определенного в группе, не надо каждый раз писать этот перечень – достаточно дать ссылку на именованную группу
Определение элемента сложного типа
Определения сложных типов создаются с использованием элемента , его атрибутов и любых допустимых аспектов. Обычно, сложные типы будут содержать набор элементных объявлений, объявлений атрибутов и элементных ссылок.
XML XML Schema Definition Language
Консорциум W3C выработал рекомендацию языка определения схем XML (XSD), объединив наиболее популярные языки описания схем в один стандарт. Основная цель, которая при этом преследовалась, — получение стандарта, который можно широко реализовать и при этом он платформно-независимый.
Язык XML Schema Definition Language, который также называют XML Schema Language, во многом похож на язык XDR, с которым вы познакомились раньше. Схемы XSD способны решать следующие задачи:
- Перечисление элементов в документе XML и проверка наличия в документе только объявленных элементов.
- Объявление и определение атрибутов, модифицирующих элементы документа.
- Определение родительско-дочерних отношений между элементами.
- Определение состояний и моделей содержания для элементов и атрибутов.
- Задание типов данных.
- Установка значений по умолчанию.
- Возможность расширения.
- Поддержка использования пространств имен.
Корневым элементом в схеме XML является элемент , который содержит все остальные элементы в документе схемы. В рамках корневого элемента схемы XSD атрибутом определяется пространство имен , которое содержит элементы и атрибуты XSD схемы.
Все элементы XSD начинаются с префикса , который указывается для пространства имен XSD, объявленного в корневом элементе экземпляра схемы.
XML-документ, который проверяется с помощью схемы, также должен содержать объявление пространства имен. Пространство имен всегда указывается в корневом элементе экземпляра документа с помощью атрибута
Это пространство имен содержит элементы и атрибуты , которые можно включать в документ XML. По общему соглашению префикс используется для этого пространства имен и добавляется в начале имен всех элементов и атрибутов, принадлежащих пространству имен, отделяясь от них двоеточием.
Ссылка на конкретную схему приводится в атрибуте
xsi:schemaLocation=»http://kit.znu.edu.ua/scemes/имя_файла.xsd» <h3″>Объявление элемента и атрибута XSD
Процесс создания схемы включает в себя два шага — определение и объявление типов элементов или типов атрибутов. Элементы и атрибуты XML-документа объявляются элементами схемы и . Структура же XML-документа определяется элементами схемы и .
Основное объявление элемента состоит из имени и типа данных
<xsd:element name=»имя_элемента» type=»xsd:тип_данных»/>
В схемах XSD дескрипторы, используемые в документах XML, разделяются на две категории — сложные типы и простые типы. Элементы сложных типов могут содержать другие элементы, а также обладают определенными атрибутами; элементы простых типов такими возможностями не обладают.
Атрибут — объявление простого типа, которое не может содержать другие элементы. Объявление атрибута похоже на объявление элемента:
<xsd:attribute name=»имя_атрибута» type=»xsd:тип_данных»/>
Простые типы данных
Есть две главных категории простых типов:
- встроенные типы;
- определенные пользователем простые типы.
Язык XSD имеет большое количество данных. Встроенные типы включают в себя примитивные типы и производные. данных не получены из других типов данных. Например, числа с плавающей запятой — математическое понятие, которое не получено из других типов данных. данных определены в терминах существующих типов данных. Например, целое число — частный случай, полученный из десятичного типа данных.
Следующая таблица представляет список примитивных типов данных XML-схемы, аспекты, которые могут быть применены к типу данных и описания типа данных.
| Тип данных | Аспекты | Описание |
|---|---|---|
| length, pattern, maxLength, minLength, enumeration, whiteSpace | Представляет символьную строку. | |
| pattern, whiteSpace | Представляет логическое значение, которое может быть true или false. | |
| enumeration, pattern, totalDigits, fractionDigits, minInclusive, minExclusive, maxInclusive, maxExclusive, whiteSpace | Представляет произвольное число. | |
| pattern, enumeration, minInclusive, minExclusive, maxInclusive, maxExclusive, whiteSpace | Представляет 32-битовое число с плавающей запятой одиночной точности. | |
| pattern, enumeration, minInclusive, minExclusive, maxInclusive, maxExclusive, whiteSpace | Представляет 64-битовое число с плавающей запятой двойной точности. | |
| enumeration, pattern, minInclusive, minExclusive, maxInclusive, maxExclusive, whiteSpace | Представляет продолжительность времени. Шаблон для duration следующий — PnYnMnDTnHnMnS, где nY представляет число лет; nM — месяцев; nD — дней; Т — разделитель даты и времени; nH — число часов; nM — минут; nS — секунд. | |
| enumeration, pattern, minInclusive, minExclusive, maxInclusive, maxExclusive, whiteSpace | Представляет конкретное время. Шаблон для dateTime следующий — CCYY-MM-DDThh:mm:ss, где CC представляет столетие; YY — год; MM — месяц; DD — день; Т — разделитель даты и времени; hh — число часов; mm — минут; ss — секунд. При необходимости можно указывать доли секунды. Например, сотые доли в шаблоне: ss.ss | |
| enumeration, pattern, minInclusive, minExclusive, maxInclusive, maxExclusive, whiteSpace | Представляет конкретное время дня. Шаблон для time следующий -hh:mm:ss.sss (долевая часть секунд необязательна). | |
| enumeration, pattern, minInclusive, minExclusive, maxInclusive, maxExclusive, whiteSpace | Представляет календарную дату. Шаблон для date такой — CCYY-MM-DD (здесь необязательна часть, представляющая время). | |
| enumeration, pattern, minInclusive, minExclusive, maxInclusive, maxExclusive, whiteSpace | Представляет конкретный месяц конкретного года (CCYY-MM ). | |
| enumeration, pattern, minInclusive, minExclusive, maxInclusive, maxExclusive, whiteSpace | Представляет календарный год (CCYY). | |
| enumeration, pattern, minInclusive, minExclusive, maxInclusive, maxExclusive, whiteSpace | Представляет конкретный день конкретного месяца (—MM-DD). | |
| enumeration, pattern, minInclusive, minExclusive, maxInclusive, maxExclusive, whiteSpace | Представляет календарный день (—DD). | |
| enumeration, pattern, minInclusive, minExclusive, maxInclusive, maxExclusive, whiteSpace | Представляет календарный месяц (—MM—). | |
| length, pattern, maxLength, minLength, enumeration, whiteSpace | Представляет произвольную шестнадцатерично-закодированную двоичную информацию. HexBinary — набор двоичных октетов фиксированной длины, состоящий из четырех пар шестнадцатеоисных символов. Например, 0-9a-fA-F. | |
| length, pattern, maxLength, minLength, enumeration, whiteSpace | Представляет произвольную Base64-закодированную двоичную информацию. Base64Binary — набор двоичных октетов фиксированной длины. | |
| length, pattern, maxLength, minLength, enumeration, whiteSpace | Представляет URI как определено в RFC 2396. Значение anyURI может быть абсолютно или относительно, и может иметь необязательный идентификатор фрагмента. | |
| length, enumeration, pattern, maxLength, minLength, whiteSpace | Представляет составное имя. Имя составлено из префикса и локального названия, отделенного двоеточием. И префикс и локальные названия должны быть NCNAME. Префикс должен быть связан с namespace URI ссылкой, используя объявление пространства имени. | |
| length, enumeration, pattern, maxLength, minLength, whiteSpace | Представляет тип атрибута СИСТЕМЫ ОБОЗНАЧЕНИЙ. Набор QNAMES. |
Следующая таблица представляет список производных типов данных XML-схемы, аспекты, которые могут быть применены к типу данных и описания типа данных.
| Тип данных | Аспекты | Описание |
|---|---|---|
| length, pattern, maxLength, minLength, enumeration, whiteSpace | Представляет нормализованные строки. Этот тип данных получен из string. | |
| enumeration, pattern, length, minLength, maxLength, whiteSpace | Представляет маркированные строки. Этот тип данных получен из normalizedString. | |
| length, pattern, maxLength, minLength, enumeration, whiteSpace | Представляет идентификаторы естественного языка (определенный RFC 1766). Этот тип данных получен из token | |
| length, maxLength, minLength, enumeration, whiteSpace | Представляет тип атрибута IDREFS. Содержит набор значений типа IDREF. | |
| length, maxLength, minLength, enumeration, whiteSpace | Представляет тип атрибута ENTITIES. Содержит набор значений типа ENTITY. | |
| length, pattern, maxLength, minLength, enumeration, whiteSpace | Представляет тип атрибута NMTOKEN. NMTOKEN — набор символов имен (символы, цифры и другие символы) в любой комбинации. В отличие отName и NCNAME, NMTOKEN не имеет никаких ограничений на первый символ. Этот тип данных получен из token. | |
| length, maxLength, minLength, enumeration, whiteSpace | Представляет тип атрибута NMTOKENS. Содержит набор значений типа NMTOKEN. | |
| length, pattern, maxLength, minLength, enumeration, whiteSpace | Представляет имена в XML. Name — лексема(маркер), которая начинается с символа, символа подчеркивания или двоеточия и продолжается символами имен (символы, цифры, и другие символы). Этот тип данных получен из token. | |
| length, pattern, maxLength, minLength, enumeration, whiteSpace | Представляет неколонкированные названия. Этот тип данных — тот же, что и Name, но не может начинаться с двоеточия. Этот тип данных получен из Name. | |
| length, enumeration, pattern, maxLength, minLength, whiteSpace | Представляет тип атрибута ID, определенный в XML 1.0 Рекомендации. ИДЕНТИФИКАТОР не должен иметь двоеточия (NCName) и должен быть уникален в пределах XML документа. Этот тип данных получен из NCNAME. | |
| length, enumeration, pattern, maxLength, minLength, whiteSpace | Представляет ссылку к элементу, имеющему атрибут ID, который точно соответствует установленному ИДЕНТИФИКАТОРУ. IDREF должен быть NCNAME и должен быть значением элемента или атрибута типа ID в пределах XML документа. Этот тип данных получен из NCNAME. | |
| length, enumeration, pattern, maxLength, minLength, whiteSpace | Представляет тип атрибута ENTITY. Это — ссылка к неанализируемому объекту с именем, которое точно соответствует установленному имени. ENTITY должен быть NCNAME и должен быть объявлен в схеме как неанализируемое имя объекта. Этот тип данных получен из NCNAME. | |
| enumeration, fractionDigits, pattern, minInclusive, minExclusive, maxInclusive, maxExclusive, totalDigits, whiteSpace | Представляет последовательность десятичных цифр с необязательным знаком (+ или -). Этот тип данных получен из decimal. | |
| enumeration, fractionDigits, pattern, minInclusive, minExclusive, maxInclusive, maxExclusive, totalDigits, whiteSpace | Представляет целое число, меньшее или равное нулю. NonPositiveInteger состоит из отрицательного знака (-) и последовательности десятичных цифр. Этот тип данных получен из целого числа. | |
| enumeration, fractionDigits, pattern, minInclusive, minExclusive, maxInclusive, maxExclusive, totalDigits, whiteSpace | Представляет целое число, меньшее нуля. Этот тип данных получен из nonPositiveInteger. | |
| enumeration, fractionDigits, pattern, minInclusive, minExclusive, maxInclusive, maxExclusive, totalDigits, whiteSpace | Представляет целое число с минимальным значением -9223372036854775808 и максимумом 9223372036854775807. Этот тип данных получен из целого числа. | |
| enumeration, fractionDigits, pattern, minInclusive, minExclusive, maxInclusive, maxExclusive, totalDigits, whiteSpace | Представляет целое число с минимальным значением -2147483648 и максимумом 2147483647. Этот тип данных получен из long. | |
| enumeration, fractionDigits, pattern, minInclusive, minExclusive, maxInclusive, maxExclusive, totalDigits, whiteSpace | Представляет целое число с минимальным значением -32768 и максимумом 32767. Этот тип данных получен из int. | |
| enumeration, fractionDigits, pattern, minInclusive, minExclusive, maxInclusive, maxExclusive, totalDigits, whiteSpace | Представляет целое число с минимальным значением -128 и максимумом 127. Этот тип данных получен из short. | |
| enumeration, fractionDigits, pattern, minInclusive, minExclusive, maxInclusive, maxExclusive, totalDigits, whiteSpace | Представляет целое число, большее равное нулю. Этот тип данных получен из целого числа. | |
| enumeration, fractionDigits, pattern, minInclusive, minExclusive, maxInclusive, maxExclusive, totalDigits, whiteSpace | Представляет целое число с минимумом нуль и максимумом 18446744073709551615. Этот тип данных получен из nonNegativeInteger. | |
| enumeration, fractionDigits, pattern, minInclusive, minExclusive, maxInclusive, maxExclusive, totalDigits, whiteSpace | Представляет целое число с минимумом нуль и максимумом 4294967295. Этот тип данных получен из unsignedLong. | |
| enumeration, fractionDigits, pattern, minInclusive, minExclusive, maxInclusive, maxExclusive, totalDigits, whiteSpace | Представляет целое число с минимумом нуль и максимумом 65535. Этот тип данных получен из unsignedInt. | |
| enumeration, fractionDigits, pattern, minInclusive, minExclusive, maxInclusive, maxExclusive, totalDigits, whiteSpace | Представляет целое число с минимумом нуля и максимума 255. Этот тип данных получен из unsignedShort. | |
| enumeration, fractionDigits, pattern, minInclusive, minExclusive, maxInclusive, maxExclusive, totalDigits, whiteSpace | Представляет целое число, которое является большим чем нуль. Этот тип данных получен из nonNegativeInteger. |
Определённые пользователем простые типы
Получены из встроенных типов, применением к ним именованых ограничений, называемыми аспектами(Facets). Аспекты ограничивают допустимые значения простых типов. Синтаксис применения аспектов ограничения следующий:
<xsd:restriction base=»тип_данных»> <xsd:имя_аспекта value=»значение_аспекта»/> </xsd:restriction>
| Аспект | Значение |
|---|---|
| Определенный набор значений. Ограничивает тип данных указанными значениями. | |
| Значение с определенным максимальным числом десятичных цифр в дробной части. | |
| Целочисленное число единиц длины. Единицы длины зависят от типа данных. | |
| Верхний предел значений (все значения — меньше указанного). | |
| Максимальное значение. | |
| Целочисленное число единиц максимальной длины. | |
| Нижний предел значений (все значения — больше указанного). | |
| Минимальное значение. | |
| Целочисленное число единиц минимальной длины. | |
| Литеральный шаблон, которому должны соответствовать значения. | |
| Значение с определенным максимальным числом десятичных цифр. | |
| Одно из предопределенных значений: preserve, replace или collapse |
| Значение | Описание |
|---|---|
| Никакая нормализация не выполняется. | |
| Все #x9 (tab), #xA (line feed) and #xD (carriage return) заменяются на #x20 (пробел). | |
| После replace-обработки все внутренние цепочки #x20 разрушаются до одного пробела, а окружающие пробелы удаляются. |
Аспекты могут быть указаны только однажды в определении типа, кроме и — они могут иметь многократные вхождения и группируются.
Именованный тип данных
В языке XSD, в отличие от тех двух, с которыми вы познакомились раньше, существует концепция именованных типов. Например, при создании определения, можно присвоить этому определению имя, чтобы повторно использовать его в схеме XSD. Вы можете создать определение простого типа и назвать его, например, . В результате вы получите именованное ограничение. После этого вы сможете применять это ограничение и к другим элементам в схеме. Это особенно полезно, когда в определении применяются аспекты ограничения типа данных, чтобы не повторять их каждый раз в других определениях. Например, элемент может быть связан с элементом и атрибутом для объявления содержания этих элемента и значения атрибута как строковых данных:
Обратили внимание на ключевое слово в объявлении атрибута? Как и в предыдущих схемах, оно все так же означает обязательность использования объявленного атрибута. Другими предопределенными значениями атрибута элемента схемы могут быть ключевые слова и . Если первое из них означает необязательность использования, то второе запрещает использование объявленного атрибута. Такая необходимость возникает в случае локального объявления ранее определенной группы атрибутов элементом схемы , например:
далее в контексте определения элемента сложного типа мы делаем ограничение на применение атрибутов этой группы:
Сложные типы данных
элемента сложного типа — формальное описание структуры и допустимого содержания элемента, которое используется для проверки правильности XML документа. Модели содержания Схемы предоставляют больший контроль структуры элементов, чем модели содержания DTD. Кроме того, модели содержания схемы позволяют проверять правильность смешанного содержания.
Модель содержания может ограничивать документ до некоторого набора элементных типов и атрибутов, описывать и поддерживать связи между этими различными компонентами и уникально обозначать отдельные элементы. Свободное использование модели содержания позволяет разработчикам изменять структурную информацию.
Перечень объявлений дочерних элементов приводится в структуре группирующих XSD-элементов choice, sequence, и all.
Элемент позволяет только одному из элементов, содержащихся в группе присутствовать в составе элемента. Элемент требует появления элементов группы в точно установленной последовательности в составе элемента. элемент позволяет элементам в группе быть (или не быть) в любом порядке в составе элемента.
Элемент используется для четкого определения группы и для ссылки к именованной группе. Вы можете использовать модель группы, чтобы определить набор элементов, которые могут быть повторены в документе. Это полезно для формирования определения комплексного типа. Именованную модель группы можно далее определить, используя , или дочерние элементы. Именованные группы должны определяться в корне схемы. При необходимости многократного использования перечня элементов, определенного в группе, не надо каждый раз писать этот перечень — достаточно дать ссылку на именованную группу
Определение элемента сложного типа
Определения сложных типов создаются с использованием элемента , его атрибутов и любых допустимых аспектов. Обычно, сложные типы будут содержать набор элементных объявлений, объявлений атрибутов и элементных ссылок.
Листинг 1. Пример XSD-схемы «Картотека.xsd»
Задание на лабораторную работу
Необходимо для XML документа, созданого в первой лабораторной работе, определить его струткуру с помощью XSD. Осуществить проверку соответсвия документа описанию его структуры.
W3C парсеры для XML.
Проблемой при валидации (проверка правилоьности XML документа согласно схеме) является тот факт, что соответствие документов их схемам некоторые броузеры не проверяют. В связи с этим возникает необходимость использовать возможности DOM (Document Object Model — см. лаб.раб. №5) для проверки правильности. Функция валидации так или иначе присутствует в любом парсере. Ее необходимо правильно вызвать. Проверить соответствие XDR схеме в ОС Windows несколько легче, поскольку XML парсер от Microsoft является частью операционной системы. Достаточно воспользоваться Java скриптом для проверке (как в прошлой лабораторной работе).
XSD является стандартом, поддерживаемым и развиваемым консорциумом W3C. В рамках этой поддержкиThe Apache Software Foundation создала набор ПО, представляющего собой парсеры и другое обеспечение для работы с XML. Одним из таких известных парсеров является Xerces. Он существует в виде отдельного ПО, реализованного на С++ или Java. Чтобы не ограничивать Вас в выборе инструментальной среды и ОС, будем использовать Java реализацию ввиду ее кроссплатформенности и простоты использования.
Замечание. Для запуска Java приложения необходимо, чтобы на компьютере была установлена Java машина от Sun. Желательно с Java SDK.
Предположим у нас есть XML документ SONNET.XML
И есть соответсвенно схема SONNET.XSD
Готовый DomValidator для проверки правильности XML документа на Java можно скачать здесь.
Скомпилировать DOMValidator можно коммандой:
Проверить правильность SONNET.XML относительно схемы SONNET.XSD (должна находится в том же каталоге) можно коммандой
java DomValidator sonnet.xml xsd
И при необходимости сам Xerces можно скачать отсюда или с официального сайта.