Основы XML Презентация 6 – XML Schemas T-Systems CIS, 2011
XML Schemas - XML Schemas создаются на основе XML, в то время как DTD используют другой синтаксис -XML Schemas полностью поддерживают рекомендацию по пространствам имён -XML Schemas позволяют проверять содержимое текстовых элементов на основе встроенных и определяемых пользователем типов данных -XML Schemas позволяют создавать сложные и повторно используемые модели содержимого -XML Schemas обеспечивают моделирование программных концепций, таких как наследование и подстановка типов Преимущества XML Schemas
Объявления schema (1) … Объявления schema
Объявления schema (2) Основное назначение XML Schemas – объявление словарей. Эти словари могут идентифицироваться пространством имён, указанном в атрибуте targetNamespace: … Целевые пространства имён
Объявления schema (3) Элемент или атрибут называется квалифицированным, если имеется связанное с ним пространство имён. Квалификация элементов и атрибутов
Объявления schema (4) … Квалификация элементов и атрибутов (продолжение)
Объявления element (1) Объявления элементов
Объявления element (2) Глобальное объявление является непосредственным потомком элемента и может использоваться в XML-схеме повторно Глобальные и локальные объявления
Объявления element (3) Локальное объявление не является непосредственным потомком элемента и может использоваться только в своём конкретном контексте Глобальные и локальные объявления
Объявления element (4) Для создания локального типа объявление типа включается в объявление элемента как дочерний элемент: Создание локального типа complexType
Объявления element (5) Для создания локального типа объявление типа включается в объявление элемента как дочерний элемент: Объявление типа может содержать определение complexType или simpleType, но не оба одновременно. Создание локального типа simpleType
Объявления element (6) Многие элементы имеют одно и то же содержимое. Вместо объявления в схеме локальных типов, копирующих друг друга, можно создать глобальный тип, на который будут ссылаться объявления элементов: Несмотря на то, что тип глобальный, он остаётся частью целевого пространства имён, поэтому при ссылке на него указывается префикс целевого пространства имён. Использование глобального типа
Объявления element (7) Для повторного использования уже определенной модели содержимого можно использовать ссылки на глобальные элементы: В этом случае ссылка на глобальный элемент также включает префикс целевого пространства имён. Использование ссылки на глобальный элемент
Объявления element (8) Если элемент квалифицирован, при использовании в XML документе он должен иметь связанное с ним пространство имён. Если атрибут form в объявление элемента не включен, используется значение атрибута elementFormDafault элемента schema. Глобальные элементы всегда должны быть квалифицированы, независимо от значений этих атрибутов. Квалифицированная форма элемента
Объявления element (9) Атрибуты minOccurs и maxOccurs не допускаются при объявлении глобальных элементов и могут использоваться в ссылках на глобальные элементы или при объявлении локальных типов. Число элементов
Объявления element (10) Число элементов - пример
Объявления element (11) Чтобы указать значение по умолчанию, включите в объявление элемента атрибут default с требуемым значением. Если значение элемента не может изменяться, включите в объявление элемента атрибут fixed с нужным значением. Значения по умолчанию и фиксированные значения
Объявления element (11) Иногда в схему требуется включить элементы без явного их объявления. Для этих целей используется объявление следующего вида: Объявление any не может быть глобальным, должно находиться в модели содержимого. Шаблоны элементов (element wildcards)
Объявления element (12) -skip: программа пропускает любые шаблонные элементы в экземпляре документа. -lax: программа пытается проверять шаблонные элементы, если имеет доступ к глобальным определениям XML-схем для этих элементов -strict: программа пытается проверить шаблонные элементы и генерирует сообщение об ошибке, если не находит глобальных определений XML-схем для этих элементов Шаблоны элементов - processContents
Объявления element (13) Шаблоны элементов - пример
Объявления complexType (1) … Атрибут mixed определяет модель содержимого. Смешанная модель содержимого допускает содержимое элемента, состоящее как из дочерних элементов, так и из текста: Ivan Petrovich Sidorov complexType – атрибут mixed
Объявления complexType (2) Атрибут name включается в определение типа только в том случае, если тип определен как глобальный. Локальные типы не имеют атрибута name, то есть являются анонимными. complexType – атрибут name
Объявления complexType (3) Элемент определенный с пустой моделью содержимого: Такое определение не разрешает элементу содержать ни текст, ни дочерние элементы. complexType – пустая модель
Объявления group (1) Группа определяется следующим образом: … Все глобальные определения групп должны быть именованы. Объявление глобальной группы
Объявления group (2) Пример использования группы
Объявления sequence Последовательность определяется следующим образом: … Атрибуты minOccurs и maxOccurs применяются ко всей последовательности. Объявление может содержать объявления элементов, шаблоны элементов, внутренние элементы, ссылки на группы и элементы. Это позволяет создавать последовательности внутри последовательностей внутри последовательностей или варианты выбора в последовательностях, которые, в свою очередь, находятся в группах – то есть, практически любые комбинации. Объявление последовательности
Объявления choice Выбор определяется следующим образом: … Атрибуты minOccurs и maxOccurs применяются ко всему выбору. Внутри объявления может находиться неограниченное число дочерних объявлений, однако в экземпляре XML документа может использоваться только одно из этих объявлений. Объявление выбора
Объявления all Конструкция all позволяет объявить, что все элементы в содержимом могут располагаться в произвольном порядке: … Объявление all должно быть объявлением модели содержимого, являясь при этом дочерним по отношению к определению complexType. Объявление all может включать в качестве дочерних только объявления элементов. Объявления sequence, choice или group не допускаются. Дочерние по отношению к объявлению all элементы могут встречаться в экземпляре документа только один раз. Это значит, что в объявлении all значения атрибутов minOccurs и maxOccurs ограничены значениями 0 и 1. Объявление all
Объявления атрибутов (1) Объявление атрибутов
Объявления атрибутов (2) Объявление локального типа
Объявления атрибутов (3) Использование глобального типа
Объявления атрибутов (4) Ссылка на существующий глобальный атрибут
Объявления атрибутов (5) Если атрибут квалифицирован, он должен иметь связанное с ним пространство имён. Если атрибут form не включен в объявление атрибута, используется значение атрибута attributeFormDefault элемента schema. Любой глобальный атрибут должен быть квалифицирован. В отличие от элементов, квалифицированные атрибуты в экземпляре XML документа используются редко. Квалифицированная форма атрибута
Объявления атрибутов (6) Способ использования атрибута задается атрибутом use: optional – атрибут необязательный prohibited – атрибут запрещён к использованию required – атрибут обязателен для использования Использование атрибута
Объявления атрибутов (7) Примеры: Значение по умолчанию и фиксированные значения
Объявления атрибутов (8) Объявление anyAttribute может находиться только в объявлениях complexType или AttributeGroup. Пример: Шаблоны атрибутов (attribute wildcards)
Объявления группы атрибутов Объявление attributeGroup содержит объявления attribute, позволяет использовать шаблоны атрибутов и ссылки на глобальные атрибуты и группы атрибутов (при этом группа атрибутов не может рекурсивно ссылаться сама на себя). Объявление attributeGroup
Создание элементов с простым содержимым и атрибутами Элемент simpleContent указывает, что complexType не может содержать дочерние элементы. simpleContent
Типы данных (1) string - любые символьные данные normalizedString -нормализованная строка, в которой все пробелы, символы табуляции, возврата каретки и новой строки преобразованы в одинарные пробелы token - строка, в которой нет последовательностей из двух или более пробелов, символов табуляции, возврата каретки и новой строки byte - числовое значение от -128 до 127 unsignedByte - числовое значение от 0 до 255 base64Binary - бинарная информация, закодированная с использованием base64 Типы данных
Типы данных (2) hexBinary - бинарная информация, закодированная с помощью шестнадцатиричного представления integer - числовое значение, представляющее целое число positiveInteger - целочисленное значение, большее 0 negativeInteger - целочисленное значение, меньшее 0 nonNegativeInteger - целочисленное значение, не меньшее 0 nonPositiveInteger - целочисленное значение, не большее 0 int - числовое значение от до Типы данных
Типы данных (3) unsignedInt - числовое значение от 0 до long - числовое значение от до unsignedLong - числовое значение от 0 до short - числовое значение от до unsignedShort - числовое значение от 0 до decimal - числовое значение, у которого может быть (а может и не быть) дробная часть Типы данных
Типы данных (4) float - числовое значение, соответствующее 32-битовому числу одинарной точности в представлении IEEE, определенное стандартом IEEE double - числовое значение, соответствующее 64-битовому числу двойной точности в представлении IEEE, определенное стандартом IEEE boolean - логическое значение, включая true, false, 0 и 1 time - время суток в формате, определенном разделом 5.4 стандарта ISO 8601 (например, 15:45:00.000) dateTime - дата и время суток в формате, определенном разделом 5.4 стандарта ISO 8601 (например, Т15:45:00.000) Типы данных
Типы данных (5) duration - промежуток времени в формате, определенном в разделе стандарта ISO 8601 (например, P30D - промежуток в 30 дней) date - дата по григорианскому календарю в формате, определенном в разделе стандарта ISO 8601 (например, ) gMonth - месяц по григорианскому календарю в формате, определенном в разделе 3 стандарта ISO 8601 (например, 07) gYear - год по григорианскому календарю в формате, определенном в разделе стандарта ISO 8601 (например, 2011) gYearMonth - месяц и год по григорианскому календарю в формате, определенном в разделе стандарта ISO 8601 (например, ) Типы данных
Типы данных (6) gDay - день по григорианскому календарю в формате, определенном в разделе 3 стандарта ISO 8601 (например, 19) gMonthDay - день некоторого месяца по григорианскому календарю в формате, определенном в разделе 3 стандарта ISO 8601 (например, 11-19) name - XML-имя, отвечающее рекомендации по пространствам имён QName - квалифицированное имя, отвечающее рекомендации по пространствам имён NCName - XML-имя без двоеточия, не включающее префикс пространства имён Типы данных
Типы данных (7) anyURI - корректный URI language - языковая константа, определенная в RFC 1766, например en-US Типы данных
Пользовательские типы данных Пользовательские типы данных создаются при помощи объявления simpleType: При объявлении simpleType его необходимо основывать на уже существующих типах данных (поэтому объявления simpleType называют «порождёнными» (derived types)). Имеется три основных derived types: - типы-ограничения (restriction) - типы-перечисления (list ) - типы-объединения (union ) Пользовательские типы данных
Типы-ограничения создаются при помощи объявления restriction: Дальнейшее ограничение возможных значений типа данных достигается за счёт использования т.н. аспектов (facet). Объявление restriction
Пользовательские типы данных minExclusive - позволяет указать минимальное значение типа, исключая указанное значение minInclusive - позволяет указать минимальное значение типа, включая указанное значение maxExclusive позволяет указать максимальное значение типа, исключая указанное значение maxInclusive - позволяет указать максимальное значение типа, включая указанное значение totalDigits - позволяет указать общее количество цифр в числовом типе Facets
Пользовательские типы данных fractionDigits - позволяет указать количество цифр дробной части числового типа (справа от десятичной точки) length - позволяет указать количество символов в строковом типе данных minLength - позволяет указать минимальное количество символов в строковом типе данных maxLength - позволяет указать максимальное количество символов в строковом типе данных Facets
Пользовательские типы данных enumeration - позволяет указать допустимое значение в перечислении whiteSpace - позволяет указать как должны трактоваться пробельные символы pattern - позволяет ограничить строковый тип с помощью реглярных выражений Facets
Пользовательские типы данных Типы-перечисления создаются при помощи объявления list: Объявление list
Пользовательские типы данных Типы-объединения создаются при помощи объявления union: Объявление union
Создание схемы из нескольких документов Объявление import используется в тех случаях, когда в схему требуется включить объявления из другой схемы, имеющей другое значение targetNamespace. Объявление import должно быть глобальным. Объявление import
Создание схемы из нескольких документов Объявление include используется в тех случаях, когда в схему требуется включить объявления из другой схемы, имеющей то же значение targetNamespace. Объявление include должно быть глобальным. Объявление include
Документирование схемы Документирование схемы возможно с помощью комментариев, имеющих обычный для XML вид: Другим вариантом является использование аннотаций: This element contains ID of the customer, which refers to DBID in appropriate database table Документирование