Лекция 4. · Лекция 4. XML Schema Курс «Языки разметки» ... ряд...
Transcript of Лекция 4. · Лекция 4. XML Schema Курс «Языки разметки» ... ряд...
Лекция 4.
XML Schema
Курс «Языки разметки»
Проблемы DTD
У определений DTD имеется ряд
недостатков, которые выявляются при
углубленной работе с XML:
программная обработка их метаданных
затруднена;
они не являются расширяемыми и не
поддерживают пространства имен;
они не поддерживают типов данных;
они не поддерживают наследование.
Аксенова Е.В. Языки разметки 3
Альтернативы DTD
В связи с необходимостью создания языка схем, призванного заменить и расширить DTD, было выдвинуто множество предложений. В их число входят:
RDF (Resource Description Framework)
XML-Data
Document Content Description (DCD)
Schema for Object-Oriented XML (SOX)
Document Definition Markup Language (DDML, ранее известный как XSchema)
Ни один из этих проектов не был формально поддержан консорциумом W3C, тем не менее, каждый из них рассматривается консорциумом в процессе его работы над схемами XML.
XML Schema стала W3C рекомендацией в 2001 году.
Аксенова Е.В. Языки разметки 4
XML Schema
<?xml version="1.0" encoding="UTF-8"?>
<catalog
xmlns:xsi="http://www.w3.org/
2001/XMLSchema-instance"
xsi:schemaLocation="cd.xsd">
<cd>
<title>empire burlesque</title>
<artist>bob dylan</artist>
</cd>
...
</catalog>
Аксенова Е.В. Языки разметки 5
<?xml version="1.0„
encoding="UTF-8"?>
<xs:schema
xmlns:xs="http://www.w3.org/
2001/XMLSchema">
...
</xs:schema>
XSD-файл: cd.xsd
XML-файл: cd.xml
Типы данных элементов
Сложный (комплексный) тип - тип
элементов, которые могут иметь
вложенные элементы и атрибуты
Простой тип - тип элементов, которые
не могут иметь вложенных элементов
или атрибутов
Аксенова Е.В. Языки разметки 6
Определения и объявления
типов данных элементовОпределения создают новые типы элементов
(простые и сложные).
Объявления задают имена и содержимое элементов
и атрибутов (простых и комплексных типов), которые
могут использоваться в документах, соответствующих
данной схеме.
Элементы объявляются оператором element.
Аксенова Е.В. Языки разметки 7
Объявление элемента
<element
maxOccurs =
(nonNegativeInteger | unbounded)
minOccurs = nonNegativeInteger
name = NCName
ref = QName
type = Qname >
Content: (simpleType | complexType)?
</element>
Аксенова Е.В. Языки разметки 8
Типы данных элемента
Встроенные типы данных:
xs:boolean (логический тип)
xs:integer (целый тип)
xs:integer (целый тип)
xs:float и xs:double (вещественные типы)
xs:string (строковый тип)
xs:date (дата)
simpleType - простой тип элементов
complexType – сложный тип элементов
Аксенова Е.В. Языки разметки 9
Примеры определения типа
данных элемента<xs:element name="title" type="xs:string"/>
<xs:element name="cd">
<xs:simpleType> ... </xs:simpleType>
</xs:element>
<xs:element name="cd" type="myType">
<xs:complexType> ... </xs:complexType>
Аксенова Е.В. Языки разметки 10
Определение количества
появлений элементаmaxOccurs
Максимальное число появлений элемента в содержащем его
элементе. maxOccurs >= 0
Любое количество появлений элемента: maxOccurs="unbounded"
minOccurs
Минимальное число появлений элемента в содержащем его
элементе. minOccurs >= 0
Для необязательных элементов: minOccurs = 0
Пример: <xs:element name="cd" maxOccurs = "unbounded" />
<xs:element name="cd" minOccurs = "0" />
Аксенова Е.В. Языки разметки 11
Использование атрибута ref
<xs:element name="cat" type="xs:string"/>
<xs:element name="dog" type="xs:string"/>
<xs:element name="pets">
<xs:complexType>
<xs:choice>
<xs:element ref="cat"/>
<xs:element ref="dog"/>
</xs:choice>
</xs:complexType>
</xs:element>
Аксенова Е.В. Языки разметки 12
Простой тип элементов
(simpleType)
<simpleType name = NCName>
Content:(restriction | list | union)
</simpleType>
Аксенова Е.В. Языки разметки 13
Элемент restriction
Ограничивает диапазон значений встроенного типа данных.
<restriction base = QName>
Content: (minExclusive | minInclusive | maxExclusive
| maxInclusive | totalDigits |fractionDigits | length
| minLength | maxLength | enumeration | whiteSpace |
pattern)*)
</restriction>
minExclusive,maxExclusive - определяют исключающую нижнюю/верхнюю границу области значений типа.
minInclusive, maxInclusive - определяют включающую нижнюю/верхнюю границу области значений типа.
length - определяет количество символов в строковом типе, количество байтов в двоичном типе или количество элементов в списочном типе.
pattern - определяет шаблон, основанный на регулярном выражении, с которым должен совпадать тип.
enumeration - определяет фиксированное значение, с которым должен совпадать тип.
Аксенова Е.В. Языки разметки 14
Элемент restriction
Ограничивает диапазон значений встроенного типа данных.<restriction base = QName>Content: (minExclusive | minInclusive | maxExclusive | maxInclusive | totalDigits|fractionDigits | length | minLength | maxLength | enumeration | whiteSpace | pattern)*)</restriction>
Пример:
<xs:element name="cd">
<xs:simpleType>
<xs:restriction base="xs:string">
<xsd:enumeration value="Book"/> <xsd:enumeration value="Magazine"/> <xsd:enumeration value="Journal"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
Аксенова Е.В. Языки разметки 15
Элемент list
list
Определяет простой тип, который
содержит разделенный пробелами
список значений наследуемого простого
типа.
Аксенова Е.В. Языки разметки 16
Элемент union
union
Определяет простой тип, который
содержит объединение множества
значений двух или более наследуемых
простых типов.
Аксенова Е.В. Языки разметки 17
Сложный тип элементов
<complexType
name = NCName>
Content:
simpleContent |
complexContent |
(
(group | all | choice | sequence)?,
((attribute|attributeGroup)*,anyAttribute?)
)
</complexType>
Аксенова Е.В. Языки разметки 18
Сложный тип элементов
При описании документов, имеющих
сложную иерархическую структуру, можно
сначала определить все элементы и
атрибуты, а затем ссылаться на них.
Аксенова Е.В. Языки разметки 19
group, all, choice, sequence
groupГруппирует набор объявлений элементов таким образом, что их можно включить в качестве группы в определения сложных типов.
Пример:<xs:group name="myGroup"> <xs:sequence> <xs:element ref="thing1"/> <xs:element ref="thing2"/> <xs:element ref="thing3"/>
</xs:sequence> </xs:group>
<xs:complexType name="myComplexType"> <xs:group ref="myGroup"/>
</xs:complexType>
Аксенова Е.В. Языки разметки 20
group, all, choice, sequence
allПозволяет элементам группы появляться (или не появляться) в содержащем элементе в любом порядке.
Пример:
<xs:complexType name="myComplexType">
<xs:all>
<xs:element ref="thing1"/>
<xs:element ref="thing2"/>
<xs:element ref="thing3"/>
</xs:all>
</xs:complexType>
Аксенова Е.В. Языки разметки 21
group, all, choice, sequence
choice
Позволяет присутствовать в элементе-контейнере
одному и только одному элементу из выбранной
группы.
Пример:
<xs:complexType name="myComplexType">
<xs:choice>
<xs:element ref="thing1"/>
<xs:element ref="thing2"/>
<xs:element ref="thing3"/>
</xs:choice>
</xs:complexType>
Аксенова Е.В. Языки разметки 22
group, all, choice, sequence
sequenceТребует, чтобы элементы группы появлялись в содержащем их элементе в указанной последовательности.
Пример:
<xs:complexType name="myComplexType">
<xs:sequence>
<xs:element ref="thing1"/>
<xs:element ref="thing2"/>
<xs:element ref="thing3"/>
</xs:sequence>
</xs:complexType>
Аксенова Е.В. Языки разметки 23
Объявление атрибута<attribute
default = string
fixed = string
name = NCName
ref = QName
type = QName
use = (optional | prohibited | required)>
Content: (simpleType?)
</attribute>
default - Атрибут со значением по умолчанию.
fixed - Атрибут с фиксированным значением.
Аксенова Е.В. Языки разметки 24
Параметр use
use - Указывает, как используется атрибут.optional - Атрибут является необязательным и может принимать
любое значение.
<xs:attribute name="myattr" type="xs:string" use="optional"/>
prohibited - Атрибут нельзя использовать. Этот атрибут
используется в ограничении другого сложного типа, чтобы
запретить использование существующих атрибутов.
required - Атрибут должен отобразиться один раз. Атрибут
необходим и может принимать любое значение, допускаемое
определением типа этого атрибута.
<xs:attribute name="myattr" type="xs:string" use="required"/>
Аксенова Е.В. Языки разметки 25