550 likes | 830 Views
Основы XML Презентация 6 – XML Schemas. T-Systems CIS, 2011. - XML Schemas создаются на основе XML , в то время как DTD используют другой синтаксис XML Schemas полностью поддерживают рекомендацию по пространствам имён
E N D
Основы XMLПрезентация 6 – XML Schemas T-Systems CIS, 2011
- XML Schemas создаются на основе XML, в то время как DTD используют другой синтаксис • XML Schemas полностью поддерживают рекомендацию по пространствам имён • XML Schemas позволяют проверять содержимое текстовых элементов на основе встроенных и определяемых пользователем типов данных • XML Schemas позволяют создавать сложные и повторно используемые модели содержимого • XML Schemas обеспечивают моделирование программных концепций, таких как наследование и подстановка типов Преимущества XML Schemas XML Schemas
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://ordermanagement.t-systems.com/V1.0" targetNamespace="http://ordermanagement.t-systems.com/V1.0" elementFormDefault="qualified" attributeFormDefault="unqualified" > … </xs:schema> Объявления schema Объявления schema (1)
Основное назначение XML Schemas – объявление словарей. Эти словари могут идентифицироваться пространством имён, указанном в атрибуте targetNamespace: <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://ordermanagement.t-systems.com/V1.0" targetNamespace="http://ordermanagement.t-systems.com/V1.0" elementFormDefault="qualified" attributeFormDefault="unqualified" > … </xs:schema> Целевые пространства имён Объявления schema (2)
Элемент или атрибут называется квалифицированным, если имеется связанное с ним пространство имён. <name xmlns="http://www.t-systems.com/test-school/name"> <first/> <middle/> <last/> </name> <ns:name xmlns:ns="http://www.t-systems.com/test-school/name"> <ns:first/> <ns:middle/> <ns:last/> </ns:name> <ns:name xmlns:ns="http://www.t-systems.com/test-school/name"> <first/> <middle/> <last/> </ns:name> Квалификация элементов и атрибутов Объявления schema (3)
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://ordermanagement.t-systems.com/V1.0" targetNamespace="http://ordermanagement.t-systems.com/V1.0" elementFormDefault="qualified" attributeFormDefault="unqualified" > … </xs:schema> Квалификация элементов и атрибутов (продолжение) Объявления schema (4)
<element name= "имя элемента" type="глобальный тип" ref="глобальное объявление элемента" form="qualified или unqualified" minOccurs= "неотрицательное число" maxOccurs="неотрицательное число или unbounded" default= "значение по умолчанию" fixed="фиксированное значение" > Объявления элементов Объявления element (1)
Глобальное объявление является непосредственным потомком элемента <schema> и может использоваться в XML-схеме повторно <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://ordermanagement.t-systems.com/V1.0" targetNamespace="http://ordermanagement.t-systems.com/V1.0" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:element name='root' type=“xs:string"/> </xs:schema> Глобальные и локальные объявления Объявления element (2)
Локальное объявление не является непосредственным потомком элемента <schema> и может использоваться только в своём конкретном контексте <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://ordermanagement.t-systems.com/V1.0" targetNamespace="http://ordermanagement.t-systems.com/V1.0" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:element name='name'> <xs:complexType> <xs:sequence> <xs:element name="first" type="xs:string" maxOccurs="1"/> <xs:element name="middle" type="xs:string" minOccurs="0" maxOccurs="1"/> <xs:element name="last" type="xs:string" maxOccurs="1"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> Глобальные и локальные объявления Объявления element (3)
Для создания локального типа объявление типа включается в объявление элемента как дочерний элемент: <xs:element name='name'> <xs:complexType> <xs:sequence> <xs:element name="first" type="xs:string" maxOccurs="1"/> <xs:element name="middle" type="xs:string" minOccurs="0" maxOccurs="1"/> <xs:element name="last" type="xs:string" maxOccurs="1"/> </xs:sequence> </xs:complexType> </xs:element> Создание локального типа complexType Объявления element (4)
Для создания локального типа объявление типа включается в объявление элемента как дочерний элемент: <xs:element name='phone'> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="home"/> <xs:enumeration value="work"/> <xs:enumeration value="cell"/> <xs:enumeration value="fax"/> </xs:restriction> </xs:simpleType> </xs:element> Объявление типа может содержать определение complexType или simpleType, но не оба одновременно. Создание локального типа simpleType Объявления element (5)
Многие элементы имеют одно и то же содержимое. Вместо объявления в схеме локальных типов, копирующих друг друга, можно создать глобальный тип, на который будут ссылаться объявления элементов: <xs:complexType name="nameType"> <xs:sequence> <xs:element name="first" type="xs:string" maxOccurs="1"/> <xs:element name="middle" type="xs:string" minOccurs="0" maxOccurs="1"/> <xs:element name="last" type="xs:string" maxOccurs="1"/> </xs:sequence> </xs:complexType> <xs:element name=“CustomerName" type="tns:nameType"/> <xs:element name=“PartnerName" type="tns:nameType"/> Несмотря на то, что тип глобальный, он остаётся частью целевого пространства имён, поэтому при ссылке на него указывается префикс целевого пространства имён. Использование глобального типа Объявления element (6)
Для повторного использования уже определенной модели содержимого можно использовать ссылки на глобальные элементы: <xs:element name="first" type="xs:string"/> <xs:element name="middle" type="xs:string"/> <xs:element name="last" type="xs:string"/> <xs:complexType name="nameType"> <xs:sequence> <xs:element ref="tns:first" maxOccurs="1"/> <xs:element ref="tns:middle" minOccurs="0" maxOccurs="1"/> <xs:element ref="tns:last" maxOccurs="1"/> </xs:sequence> </xs:complexType> <xs:element name="name" type="tns:nameType"/> В этом случае ссылка на глобальный элемент также включает префикс целевого пространства имён. Использование ссылки на глобальный элемент Объявления element (7)
<element name= "имя элемента" type="глобальный тип" ref="глобальное объявление элемента" form="qualified или unqualified" minOccurs= "неотрицательное число" maxOccurs="неотрицательное число или unbounded" default= "значение по умолчанию" fixed="фиксированное значение" > Если элемент квалифицирован, при использовании в XML документе он должен иметь связанное с ним пространство имён. Если атрибут form в объявление элемента не включен, используется значение атрибута elementFormDafault элемента schema. Глобальные элементы всегда должны быть квалифицированы, независимо от значений этих атрибутов. Квалифицированная форма элемента Объявления element (8)
<element name= "имя элемента" type="глобальный тип" ref="глобальное объявление элемента" form="qualified или unqualified" minOccurs= "неотрицательное число" maxOccurs="неотрицательное число или unbounded" default= "значение по умолчанию" fixed="фиксированное значение" > Атрибуты minOccurs и maxOccurs не допускаются при объявлении глобальных элементов и могут использоваться в ссылках на глобальные элементы или при объявлении локальных типов. Число элементов Объявления element (9)
<xs:element name="first" type="xs:string"/> <xs:element name="middle" type="xs:string"/> <xs:element name="last" type="xs:string"/> <xs:complexType name="nameType"> <xs:sequence> <xs:element ref="tns:first"/> <xs:element ref="tns:middle" minOccurs="0"/> <xs:element ref="tns:last"/> </xs:sequence> </xs:complexType> <xs:element name="phone"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="home"/> <xs:enumeration value="work"/> <xs:enumeration value="cell"/> <xs:enumeration value="fax"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:complexType name="customerType"> <xs:sequence> <xs:element name="CustomerName" type="tns:nameType" maxOccurs="unbounded"/> <xs:element ref="tns:phone" maxOccurs="5"/> </xs:sequence> </xs:complexType> Число элементов - пример Объявления element (10)
<element name= "имя элемента" type="глобальный тип" ref="глобальное объявление элемента" form="qualified или unqualified" minOccurs= "неотрицательное число" maxOccurs="неотрицательное число или unbounded" default= "значение по умолчанию" fixed="фиксированное значение" > Чтобы указать значение по умолчанию, включите в объявление элемента атрибут default с требуемым значением. Если значение элемента не может изменяться, включите в объявление элемента атрибут fixed с нужным значением. Значения по умолчанию и фиксированные значения Объявления element (11)
Иногда в схему требуется включить элементы без явного их объявления. Для этих целей используется объявление следующего вида: <xs:any minOccurs="неотрицательное число" maxOccurs="неотрицательное число" namespace=“##any или ##other или ##targetNamespace или ##local или допустимое пространство имён" processContents=“lax или skip или strict" /> Объявление any не может быть глобальным, должно находиться в модели содержимого. Шаблоны элементов (element wildcards) Объявления element (11)
skip: программа пропускает любые шаблонные элементы в экземпляре документа. • lax: программа пытается проверять шаблонные элементы, если имеет доступ к глобальным определениям XML-схем для этих элементов • strict: программа пытается проверить шаблонные элементы и генерирует сообщение об ошибке, если не находит глобальных определений XML-схем для этих элементов Шаблоны элементов - processContents Объявления element (12)
<xs:complexType name="nameType"> <xs:sequence> <xs:element ref="tns:first"/> <xs:element ref="tns:middle" minOccurs="0"/> <xs:element ref="tns:last"/> <xs:any minOccurs="0" maxOccurs="unbounded" namespace="##any" processContents="skip"/> </xs:sequence> </xs:complexType> Шаблоны элементов - пример Объявления element (13)
<xs:complexType mixed="true или false" name="имя типа"> … </xs:complexType> Атрибут mixed определяет модель содержимого. Смешанная модель содержимого допускает содержимое элемента, состоящее как из дочерних элементов, так и из текста: <Name>Ivan Petrovich <LastName>Sidorov</LastName></Name> complexType – атрибут mixed Объявления complexType (1)
<xs:element name="first" type="xs:string"/> <xs:element name="middle" type="xs:string"/> <xs:element name="last" type="xs:string"/> <xs:complexType name="nameType"> <xs:sequence> <xs:element ref="tns:first" maxOccurs="1"/> <xs:element ref="tns:middle" minOccurs="0" maxOccurs="1"/> <xs:element ref="tns:last" maxOccurs="1"/> </xs:sequence> </xs:complexType> <xs:element name="name" type="tns:nameType"/> Атрибут name включается в определение типа только в том случае, если тип определен как глобальный. Локальные типы не имеют атрибута name, то есть являются анонимными. complexType – атрибут name Объявления complexType (2)
Элемент определенный с пустой моделью содержимого: <xs:element name=“emptyElement"> <xs:complexType/> </xs:element> Такое определение не разрешает элементу содержать ни текст, ни дочерние элементы. complexType – пустая модель Объявления complexType (3)
Группа определяется следующим образом: <xs:group name= "имя группы"> … </xs: group> Все глобальные определения групп должны быть именованы. Объявление глобальной группы Объявления group (1)
<xs:element name="first" type="xs:string"/> <xs:element name="middle" type="xs:string"/> <xs:element name="last" type="xs:string"/> <xs:group name="nameGroup"> <xs:sequence> <xs:element ref="tns:first"/> <xs:element ref="tns:middle" minOccurs="0"/> <xs:element ref="tns:last"/> </xs:sequence> </xs:group> <xs:complexType name="nameType"> <xs:group ref="tns:nameGroup"/> </xs:complexType> Пример использования группы Объявления group (2)
Последовательность определяется следующим образом: <xs:sequence minOccurs= "неотрицательное число" maxOccurs= "неотрицательное число или unbounded"> … </xs:sequence> Атрибуты minOccurs и maxOccurs применяются ко всей последовательности. Объявление <sequence> может содержать объявления элементов, шаблоны элементов, внутренние элементы <sequence>, ссылки на группы и элементы <choice>. Это позволяет создавать последовательности внутри последовательностей внутри последовательностей или варианты выбора в последовательностях, которые, в свою очередь, находятся в группах – то есть, практически любые комбинации. Объявление последовательности Объявления sequence
Выбор определяется следующим образом: <xs:choice minOccurs= "неотрицательное число" maxOccurs= "неотрицательное число или unbounded"> … </xs:choice> Атрибуты minOccurs и maxOccurs применяются ко всему выбору. Внутри объявления <choice> может находиться неограниченное число дочерних объявлений, однако в экземпляре XML документа может использоваться только одно из этих объявлений. Объявление выбора Объявления choice
Конструкция allпозволяет объявить, что все элементы в содержимом могут располагаться в произвольном порядке: <xs:all minOccurs= "0 или 1" maxOccurs= "1"> … </xs:all> Объявление all должно быть объявлением модели содержимого, являясь при этом дочерним по отношению к определению complexType. Объявление all может включать в качестве дочерних только объявления элементов. Объявления sequence, choice или group не допускаются. Дочерние по отношению к объявлению all элементы могут встречаться в экземпляре документа только один раз. Это значит, что в объявлении all значения атрибутов minOccurs и maxOccurs ограничены значениями 0 и 1. Объявление all Объявления all
<attribute name= "имя атрибута" type="глобальный тип" ref="глобальное объявление атрибута" form="qualified или unqualified" use= "optional или prohibited или required" default= "значение по умолчанию" fixed="фиксированное значение" > Объявление атрибутов Объявления атрибутов (1)
<xs:attribute name="Id"> <xs:simpleType> <xs:restriction base="xs:string"/> </xs:simpleType> </xs:attribute> Объявление локального типа Объявления атрибутов (2)
<xs:simpleType name="attributeType"> <xs:restriction base="xs:string"/> </xs:simpleType> <xs:attribute name="Id" type="tns:attributeType"></xs:attribute> Использование глобального типа Объявления атрибутов (3)
<xs:complexType name="attrType"> <xs:attribute ref="tns:phone"/> </xs:complexType> Ссылка на существующий глобальный атрибут Объявления атрибутов (4)
<attribute name= "имя атрибута" type="глобальный тип" ref="глобальное объявление атрибута" form="qualified или unqualified" use= "optional или prohibited или required" default= "значение по умолчанию" fixed="фиксированное значение" > Если атрибут квалифицирован, он должен иметь связанное с ним пространство имён. Если атрибут form не включен в объявление атрибута, используется значение атрибута attributeFormDefault элемента schema. Любой глобальный атрибут должен быть квалифицирован. В отличие от элементов, квалифицированные атрибуты в экземпляре XML документа используются редко. Квалифицированная форма атрибута Объявления атрибутов (5)
<attribute name= "имя атрибута" type="глобальный тип" ref="глобальное объявление атрибута" form="qualified или unqualified" use= "optional или prohibited или required" default= "значение по умолчанию" fixed="фиксированное значение" > Способ использования атрибута задается атрибутом use: optional – атрибут необязательный prohibited – атрибут запрещён к использованию required – атрибут обязателен для использования Использование атрибута Объявления атрибутов (6)
<attribute name= "имя атрибута" type="глобальный тип" ref="глобальное объявление атрибута" form="qualified или unqualified" use= "optional или prohibited или required" default= "значение по умолчанию" fixed="фиксированное значение" > Примеры: <attribute name="kind" type="tns:kindType" default="Home"/> <attribute name="version" type="xs:string" fixed="1.0"/> Значение по умолчанию и фиксированные значения Объявления атрибутов (7)
<anyAttribute namespace= "##any или ##other или ##targetNamespace или ##local" processContents="lax или skip или strict" > Объявление anyAttribute может находиться только в объявлениях complexType или AttributeGroup. Пример: <xs:complexType name="attrType"> <xs:anyAttribute namespace="##local http://www.w3.org/XML/1998/namespace" processContents="lax"/> </xs:complexType> Шаблоны атрибутов (attribute wildcards) Объявления атрибутов (8)
<attributeGroup name= "имя глобальной группы атрибутов" > <!-- Объявления атрибутов --> </attributeGroup> Объявление attributeGroup содержит объявления attribute, позволяет использовать шаблоны атрибутов и ссылки на глобальные атрибуты и группы атрибутов (при этом группа атрибутов не может рекурсивно ссылаться сама на себя). Объявление attributeGroup Объявления группы атрибутов
<xs:element name="phone"> <xs:complexType> <xs:simpleContent> <xs:extension base="xs:string"> <xs:attribute name="kind" type="xs:string" default="Home"/> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> Элемент simpleContent указывает, что complexType не может содержать дочерние элементы. simpleContent Создание элементов с простым содержимым и атрибутами
string - любые символьные данные normalizedString -нормализованная строка, в которой все пробелы, символы табуляции, возврата каретки и новой строки преобразованы в одинарные пробелы token - строка, в которой нет последовательностей из двух или более пробелов, символов табуляции, возврата каретки и новой строки byte - числовое значение от -128 до 127 unsignedByte - числовое значение от 0 до 255 base64Binary - бинарная информация, закодированная с использованием base64 Типы данных Типы данных (1)
hexBinary - бинарная информация, закодированная с помощью шестнадцатиричного представления integer - числовое значение, представляющее целое число positiveInteger - целочисленное значение, большее 0 negativeInteger - целочисленное значение, меньшее 0 nonNegativeInteger - целочисленное значение, не меньшее 0 nonPositiveInteger - целочисленное значение, не большее 0 int - числовое значение от -2147483648 до -2147483647 Типы данных Типы данных (2)
unsignedInt - числовое значение от 0 до 4294967295 long - числовое значение от -9223372036854775808 до 9223372036854775807 unsignedLong - числовое значение от 0 до 18446744073709551615 short - числовое значение от -32768 до 32767 unsignedShort - числовое значение от 0 до 65535 decimal - числовое значение, у которого может быть (а может и не быть) дробная часть Типы данных Типы данных (3)
float - числовое значение, соответствующее 32-битовому числу одинарной точности в представлении IEEE, определенное стандартом IEEE 754-1985 double - числовое значение, соответствующее 64-битовому числу двойной точности в представлении IEEE, определенное стандартом IEEE 754-1985 boolean - логическое значение, включая true, false, 0 и 1 time - время суток в формате, определенном разделом 5.4 стандарта ISO 8601 (например, 15:45:00.000) dateTime - дата и время суток в формате, определенном разделом 5.4 стандарта ISO 8601 (например, 2011-11-01Т15:45:00.000) Типы данных Типы данных (4)
duration - промежуток времени в формате, определенном в разделе 5.5.3.2 стандарта ISO 8601 (например, P30D - промежутокв 30 дней) date - дата по григорианскому календарю в формате, определенном в разделе 5.2.1 стандарта ISO 8601 (например, 2011-11-01) gMonth - месяц по григорианскому календарю в формате, определенном в разделе 3 стандарта ISO 8601 (например, 07) gYear - год по григорианскому календарю в формате, определенном в разделе 5.2.1 стандарта ISO 8601 (например, 2011) gYearMonth - месяц и год по григорианскому календарю в формате, определенном в разделе 5.2.1 стандарта ISO 8601 (например, 2011-07) Типы данных Типы данных (5)
gDay - день по григорианскому календарю в формате, определенном в разделе 3 стандарта ISO 8601 (например, 19) gMonthDay - день некоторого месяца по григорианскому календарю в формате, определенном в разделе 3 стандарта ISO 8601 (например, 11-19) name - XML-имя, отвечающее рекомендации по пространствам имён QName - квалифицированное имя, отвечающее рекомендации по пространствам имён NCName - XML-имя без двоеточия, не включающее префикс пространства имён Типы данных Типы данных (6)
anyURI - корректный URI language - языковая константа, определенная в RFC 1766, например en-US Типы данных Типы данных (7)
Пользовательские типы данных создаются при помощи объявления simpleType: <simpleType name="имя простого типа" final="#all или list или union или restriction"> При объявлении simpleType его необходимо основывать на уже существующих типах данных (поэтому объявления simpleType называют «порождёнными» (derived types)). Имеется три основных derived types: - типы-ограничения (restriction) - типы-перечисления (list ) - типы-объединения (union ) Пользовательские типы данных Пользовательские типы данных
Типы-ограничения создаются при помощи объявления restriction: <restriction base="имя типы, из которого порождён данный тип"> Дальнейшее ограничение возможных значений типа данных достигается за счёт использования т.н. аспектов (facet). Объявление restriction Пользовательские типы данных
minExclusive - позволяет указать минимальное значение типа, исключая указанное значение minInclusive - позволяет указать минимальное значение типа, включая указанное значение maxExclusive позволяет указать максимальное значение типа, исключая указанное значение maxInclusive - позволяет указать максимальное значение типа, включая указанное значение totalDigits - позволяет указать общее количество цифр в числовом типе Facets Пользовательские типы данных
fractionDigits - позволяет указать количество цифр дробной части числового типа (справа от десятичной точки) length - позволяет указать количество символов в строковом типе данных minLength - позволяет указать минимальное количество символов в строковом типе данных maxLength - позволяет указать максимальное количество символов в строковом типе данных Facets Пользовательские типы данных
enumeration - позволяет указать допустимое значение в перечислении whiteSpace - позволяет указать как должны трактоваться пробельные символы pattern - позволяет ограничить строковый тип с помощью реглярных выражений Facets Пользовательские типы данных