Лекция 03 (XML Schema) 2

advertisement
Кафедра «ОСУ»
Весенний семестр 2010/2011 уч. года
Языки описания информации
Лекция 3.
XML Schema и XLink
XSD (XML Schema Definition
Language)
XML Schema: альтернатива
использованию DTD
Язык XML Schema
• Языка DTD не основывается на синтаксисе языка XML и
имеет ограниченный набор типов данных.
• Описания на языке DTD конкретного языка разметки
(структура содержимого и объявления списков
атрибутов) трудно читать и понимать, в элементах и
атрибутах нельзя задавать тип и шаблоны данных.
• Для преодоления этих недостатков был разработан
другой язык описания синтаксиса (структуры)
конкретных языков разметки, называемый XML
Schema,
– часто обозначается как XSD (XML Schema Definition).
• Язык XML Schema имеет следующее пространство
имен – http://www.w3.org/2001/XMLSchema.
Преимущества языка XSD
• Основное преимущество языка XSD – разработан
на основе метаязыка XML и использует его
синтаксис.
– Это позволяет обрабатывать описания синтаксиса на
языке XSD с помощью тех же программ, что и сами
документы.
– Схемы XML можно расширять с помощью применения
пространств имен.
• Другое большое преимуществ языка XSD –
поддержка большого количества типов данных.
– это позволяет точнее задавать правила проверки
содержания XML-документов и создавать новые типы
данных.
Рассмотрим пример простого XMLдокумента (note.xml)
<?xml version="1.0"?>
<сообщение>
<для_кого> Луценко</для_кого>
<от_кого>Фролов</от_кого>
<заголовок>Напоминание</заголовок>
<содержание>
Не забудь о собрании лаборатории в субботу!
</содержание>
</сообщение>
DTD описание (в файле note.dtd)
<!ELEMENT
сообщение
(для_кого, от_кого,
заголовок, содержание)>
<!ELEMENT
для_кого
(#PCDATA)>
<!ELEMENT
от_кого
(#PCDATA)>
<!ELEMENT
заголовок
(#PCDATA)>
<!ELEMENT
содержание
(#PCDATA)>
• В первой строке определяется, что элемент
сообщение должен иметь 4 дочерних элемента:
для_кого, от_кого, заголовок, содержание .
• В последующих строках описывается, что эти
дочерние элементы имеют тип "#PCDATA" (т.е.
могут содержать текст).
Связывание DTD описания с XML
документом
<?xml version="1.0"?>
<! DOCTYPE note SYSTEM
"http://www.w3schools.com/dtd/note.dtd">
<сообщение>
<для_кого> Луценко</для_кого>
<от_кого>Фролов</от_кого>
<заголовок>Напоминание</заголовок>
<содержание>
Не забудь о собрании лаборатории в субботу!
</содержание>
</сообщение>
Описание схемы на языке
XML Schema
• На языке XML Schema язык разметки использованный для составления XMLдокумента note.xml может быть описан следующим образом (файл note.xsd):
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3schools.com"
xmlns="http://www.w3schools.com"
elementFormDefault="qualified">
<xs:element name="note">
<xs:complexType>
<xs:sequence>
<xs:element name="to" type="xs:string"/>
<xs:element name="from" type="xs:string"/>
<xs:element name="heading" type="xs:string"/>
<xs:element name="body" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
• Связывание XML-документ note.xml с описанием его
синтаксиса на языке XML Schema можно выполнить
следующим образом:
<?xml version="1.0"?>
< сообщение xmlns="http://www.w3schools.com"
xmlns:xsl="http://www.w3.org/2001/XMLSchema-instance"
xsl:schemaLocation="http://www.w3schools.com note.xsd">
<для_кого>Луценко</для_кого>
<от_кого>Фролов</от_кого>
<заголовок>Напоминание</заголовок>
<содержание>
Не забудь о собрании лаборатории в субботу!
</содержание>
</сообщение>
• Здесь все используемые элементы, с помощью первого атрибута
объявлены в пространстве имен "http://www.w3schools.com".
• Во втором атрибуте
(xmlns:xsl="http://www.w3.org/2001/XMLSchema-instance")
создается префикс для пространства имен «XML Schema Instance»,
которое используется для связывания с экземплярами документов
описания схем на языке XSD.
• Из данного пространства имен можно использовать атрибут
schemaLocation, которому задается два значения, разделенные
пробелом.
– первое значение (http://www.w3schools.com) – это используемое
пространство имен,
– второе значение (note.xsd) – местоположение документа с описанием
XML схемы для данного пространства имен.
• Например:
xsl:schemaLocation="http://www.w3schools.com note.xsd"
• Язык XML Schema позволяет описывать структуру XML документа.
• Пример XSD описания:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3schools.com"
xmlns="http://www.w3schools.com"
elementFormDefault="qualified">
<xs:element name="note">
<xs:complexType>
<xs:sequence>
<xs:element name=“для_кого" type="xs:string"/>
<xs:element name="от_кого" type="xs:string"/>
<xs:element name="заголовок" type="xs:string"/>
<xs:element name="содержание" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Введение в XML Schema
• Язык XML Schema предназначен для описания структуры
XML документов.
– Язык XML Schema также называется XML Schema Definition
(XSD).
• Целью создания языка XML Schema является описание
правильного синтаксиса конкретного языка разметки
(также, как и язык DTD).
• XML Schema определяет:
–
–
–
–
–
–
–
элементы, которые могут появляться в документах;
атрибуты, которые могут использоваться с элементами;
как элементы могут вкладываться друг в друга;
порядок следования дочерних элементов;
может ли элемент быть пустым или может ли он включать текст;
типы данных для элементов и атрибутов;
значения по умолчанию и фиксированные значения для
элементов и атрибутов.
• XML Schema является правопреемником
(заменителем) языка DTD.
• Считается, что скоро XML Schema будет использоваться
в большинстве Web приложений в качестве замены
для DTDs.
• Причинами этого является:
– XML Schema является расширяемым для будущих
дополнений;
– XML Schema более выразительный и более мощный, чем
DTD;
– XML Schema использует семантику метаязыка XML;
– XML Schema поддерживает типы данных;
– XML Schema поддерживает пространства име
(namespaces).
Почему нужно использовать XML
Schema
• Язык XML Schemas является более мощным по
сравнению с языком DTD.
– XML Schemas поддерживает Data Types.
– XML Schemas использует XML Syntax.
– XML Schemas делает безопасным Data
Communication.
– XML Schemas является Extensible.
– Well-Formed не является Достаточным.
Синтаксис языка XSD
• Корневым элементом описаний на языке XML Schema
является элемент <schema>:
<?xml version="1.0"?>
<xs:schema>
...
...
</xs:schema>
• Элемент <schema> может включать некоторые атрибуты.
Например:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3schools.com"
xmlns="http://www.w3schools.com"
elementFormDefault="qualified">
• Первый атрибут
xmlns:xs="http://www.w3.org/2001/XMLSchema" указывает,
что в данном документе используется пространство имен
"http://www.w3.org/2001/XMLSchema".
• Второй атрибут targetNamespace=
"http://www.w3schools.com" указывает на то, что для
описываемых в документе новых элементов (сообщение,
для_кого, от_кого, заголовок, содержание) задается
пространство имен "http://www.w3schools.com".
• Третий атрибут xmlns="http://www. w3schools.com"
указывает, что пространством имен по умолчанию является
"http://www.w3schools.com".
• Четвертый атрибут elementFormDefault= "qualified"
указывает, что все элементы данного XML-документа должны
браться из пространства имен targetNamespace.
Встроенные типы языка
XML Schema
•
•
В описаниях всех элементов и атрибутов конкретного языка может использоваться
атрибут type – тип значений элемента или атрибута.
В языке XML Schema определен набор из 19 встроенных (предопределенных) типов
данных, которые могут использоваться при описании элементов и атрибутов.
Примеры встроенных типов
• xs:string – произвольные строки текста;
• xs:byte, xs:float, xs:long – числовые форматы:
– xs:byte – любое 8-разрядное число со знаком;
– xs:long – любое 32-разрядное число со знаком;
– xs:float – число с плавающей точкой, например,
15,6 или 5.032E-6.
• xs:time, xs:date, xs:timeinstant, xs:timeduration –
шаблоны для обозначения времени, даты и
длительности;
• xs:boolean – значение true или false (допускаются
также числовые эквиваленты: 0 или 1);
• xs:binary – шаблон для двоичных чисел,
например, 00101110;
• xs:language – код языка, например, en-US или
RUS;
• xs:uri-reference – шаблон для любого URI,
например,
http://www.donut.org/cruller.xml#ingredients;
• xs:ID, xs:IDREF, xs:IDREFS, xs:NMTOKEN,
xs:NMTOKENS – типы атрибутов, действующие так
же, как соответствующие типы в DTD.
• Такое большое количество встроенных типов
делает язык XSD очень полезным для
описания документов, связанных со
специальными приложениями для обработки
данных.
– например, базами данных и бланками ввода
заказов.
• не требуется писать программу, проверяющую
типы данных, т.к. эту работу выполняет сам
XML-процессор.
Описание простых элементов
• В состав описываемого конкретного языка могут
входить простые элементы и составные
элементы.
– Простые элементы могут включать только текстовое
содержание и не могут включать другие элементы или
атрибуты.
– Составные элементы могут содержать текст, атрибуты
и дочерние элементы.
• Для описания простого элемента используется
следующий синтаксис:
<xs:element name="имя"
type="тип"/>
где "имя" это имя элемента, а "тип" – тип данных, которые
описываемый элемент может иметь.
Примеры простых XML элементов
• XML-документ:
<lastname>Refsnes</lastname>
<age>36</age>
<dateborn>1970-03-27</dateborn>
• Эти элементы могут быть следующим образом
описаны с помощью языка XSD:
<xs:element name="lastname" type="xs:string"/>
<xs:element name="age" type="xs:integer"/>
<xs:element name="dateborn" type="xs:date"/>
Значения по умолчанию и
фиксированные значения
• Простые элементы могут иметь значения по
умолчанию или фиксированные значения.
• Значение по умолчанию автоматически назначается
элементу, когда никакого значения ему не задано.
• Например:
<xs:element name="color" type="xs:string" default="red"/>
• Если для простого элемента задано фиксированное
значение, то данному элементу не могут быть заданы
другие значения.
• Например:
<xs:element name="color" type="xs:string" fixed="red"/>
Описание атрибутов
• Простые элементы не могут иметь атрибуты. Если элемент
имеет атрибуты, то он считается составным типом.
• Однако, сами атрибуты описываются, как простые типы,
следующим образом:
<xs:attribute name="имя" type="тип"/>,
– "имя" – это имя атрибуты,
– "тип" – тип данных, который может быть задан данному
атрибуту.
• Например:
<xs:attribute name="lang" type="xs:string"/>
• Атрибуты, также, как и простые типы могут иметь значения
по умолчанию или фиксированные значения.
• Например:
<xs:attribute name="lang" type="xs:string" default="EN"/>
<xs:attribute name="lang" type="xs:string" fixed="EN"/>
• По умолчанию атрибуты считаются не
обязательными.
• Для задания обязательности описываемых
атрибутов используется атрибут "use".
• Например:
<xs:attribute name="lang" type="xs:string"
use="required"/>
Ограничения на содержание
элементов
• Если простому элементу или атрибуту задан тип,
то он налагает ограничения на их содержание.
– Например, если элемент типа xs:date будет содержать
строку типа "Hello World", то он не будет считаться
верным.
• Кроме использования типов на значения простых
элементов и атрибутов можно также
накладывать дополнительные ограничения,
которые еще называются «гранями» (facets).
• Ограничения можно задать с помощью
элементов xs:restriction, в который вкладываются
разные типы ограничений,
Типы ограничений на элементы
Ограничение
Описание
enumeration
Определение допустимых значений.
fractionDigits
Задание максимальное количество знаков после запятой
(равно или больше чем 0).
length
Задание точного количества разрешенных символов или
значений (равно или больше 0).
maxExclusive
Задание верхней границы для числового значения (значение
должно быть меньше чем заданная граница).
maxInclusive
Задание верхней границы для числового значения (значение
должно быть меньше или рано заданной границе).
maxLength
Задание максимального количества символов или элементов
списка. (равно или больше чем 0).
Типы ограничений на элементы (2)
Ограничение
Описание
minExclusive
Задание нижней границы для числового значения (значение
должно быть больше чем заданная граница).
minInclusive
Задание нижней границы для числового значения (значение
должно быть больше или равно заданной границе).
minLength
Задание минимального количества символов или элементов
списка. (равно или больше чем 0).
pattern
Описание точной последовательности символов, которые
считаются верными.
totalDigits
Задание точного количества цифр (больше чем 0).
Описание того, как обрабатываются пробельные символы в
тексте (white space) (перевод строки, табуляция, пробел и
возврат каретки).
whiteSpace
Пример ограничения
• Для элемента age (возраст) возможный интервал
значений от 0 до 120 можно задать следующим
образом:
<xs:element name="age">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="120"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
Пример ограничения (2)
• C помощью элемента xs:enumeration можно ограничить
содержание элемента списком возможных значений.
• Например, с помощью элемента xs:enumeration можно
установит условие, что элементу car могут задаваться
только значения из списка (Audi, Golf, BMW):
<xs:element name="car">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="Audi"/>
<xs:enumeration value="Golf"/>
<xs:enumeration value="BMW"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
• Пример с типами автомобилей можно описать и подругому:
– вначале создать новый тип carType,
– затем использовать его для описания элемента car:
<xs:simpleType name="carType">
<xs:restriction base="xs:string">
<xs:enumeration value="Audi"/>
<xs:enumeration value="Golf"/>
<xs:enumeration value="BMW"/>
</xs:restriction>
</xs:simpleType>
<xs:element name="car" type="carType"/>
• Новый тип carType может использоваться и для описания и
других элементов, т.к. не является частью элемента car.
Ограничения содержания текстового
элемента
• Для ограничения содержания элемента,
имеющего тип xs:string, можно использовать
шаблоны, которые задаются с помощью
элемента xs:pattern и атрибута value.
• Шаблоны используют язык регулярных
выражений и задают наборы правил
формирования последовательности допустимых
символов.
• Они могут задаваться в виде перечня
разрешенных строк разделенных знаком "|".
– Например: "male | female".
• В каждой строке могут быть заданы конкретные
символы или не определенные символы,
описываемые в квадратных скобках […], в которых
перечисляются возможные их значения,
– например, [xyz] – символ может получать значение x или y
или z.
• Вместо перечисления значений символа можно
задавать интервалы возможных значений:
– a-z (только маленькие буквы);
– A-Z (только большие буквы);
– 0-9 (только цифры).
• Интервалы можно комбинировать,
– например, a-zA-Z – возможна маленькая или большая
буква.
• Кроме задания символов в квадратных скобках можно
использовать следующие указатели:
– \d – одна цифра;
– \s – пробельный символ;
– \w – буква или цифра.
• С помощью круглых скобок возможные символы
можно объединять в группы, после которой можно
указать сколько раз данная группа может повториться.
• Для этого после закрывающейся скобки группы можно
указать символы:
– * – ноль или более;
– + – 1 или более;
– {n} – точно n раз.
Пример 1
<xs:pattern value="([a-z][A-Z])+"/>
• разрешенными значениями являются одна
или несколько пар символов,
• каждая пара состоит из маленькой и большой
буквы
– верно: "sToP";
– неверно: "Stop" или "STOP".
Пример 2
<xs:pattern value="[a-zA-Z0-9]{8}"/>
• должно задаваться точно 8 символов, каждый
из которых может быть
– маленькой (a-z) или большой буквой (A-Z), или
– цифрой от 0 до 9 (0-9).
Пример 3
<xs:pattern value="[A-Z]-\d{3}"/>
• может задаваться
– любой символ алфавита ([A-Z]),
– за которым следует дефис (-) и
– три цифры (\d{3}).
Описание составных элементов
• Составные элементы могут содержать текст,
другие элементы и/или атрибуты.
• Имеются 4 вида составных элементов:
– пустые элементы пустые элементы, которые не могут
иметь содержание, но могут иметь атрибуты;
– элементы, содержащие другие элементы;
– элементы, содержащие только текст;
– элементы, которые содержат другие элементы и текст
(смешанное содержание).
• Каждый из этих видов элементов также может
содержать и атрибуты.
Примеры составных элементов
• Пример пустого составного элемента
"product":
<product pid="1345" />
• Пример составного элемента "employee",
содержащего только дочерние элементы :
<employee>
<firstname>John</firstname>
<lastname>Smith</lastname>
</employee>
Описание пустых элементов
• Пустые элементы не могут иметь содержания, но могут
иметь атрибуты.
• Их нужно описывать, как составные элементы, но не
включать в них никакие дочерние элементы, а определять
только их атрибуты.
• Например: элемент, использующий атрибут pid, которому
могут задаваться только целые положительные значения
(например, <product pid="1345" />), может описываться на
языке XML Schema следующими способами:
<xs:element name="product">
<xs:complexType>
<xs:attribute name="prodid" type="xs:positiveInteger"/>
</xs:complexType>
</xs:element>
• Создание нового составного типа и указание его в описании элемента
product:
<xs:element name="product" type="prodtype"/>
<xs:complexType name="prodtype">
<xs:attribute name="prodid" type="xs:positiveInteger"/>
</xs:complexType>
• Непосредственное описание элемента без содержания и с одним
атрибутом с помощью элементов xs:complexType и xs:restriction:
<xs:element name="product">
<xs:complexType>
<xs:complexContent>
<xs:restriction base="xs:integer">
<xs:attribute name="prodid" type="xs:positiveInteger"/>
</xs:restriction>
</xs:complexContent>
</xs:complexType>
</xs:element>
Описание составных элементов,
содержащих только дочерние элементы
• Составные элементы, содержащие только дочерние элементы, как
например элемент person:
<person>
<firstname>John</firstname>
<lastname>Smith</lastname>
</person>
• могут определяться на языке XSD следующим образом:
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
• Элемент xs:sequence указывает, что дочерние элементы (firstname и
lastname) должны в XML-документе появляться в заданном порядке.
• Также можно задать создать новый тип
составного элемента persontype и использовать
его при описании элемента person:
<xs:element name="person" type="persontype"/>
<xs:complexType name="persontype">
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:sequence>
</xs:complexType>
Описание элементов, имеющих
простое содержание
• При описании элемента, включающего только простое
содержимое (текст и атрибуты), нужно использовать
элемент simpleContent.
• В элементе simpleContent можно описать расширение
(xs:extension) или ограничение (xs:restriction):
<xs:element name="somename">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="basetype">
...
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
• Описание элемента simpleContent с использованием
ограничение (xs:restriction):
<xs:element name="somename">
<xs:complexType>
<xs:simpleContent>
<xs:restriction base="basetype">
...
</xs:restriction>
</xs:simpleContent>
</xs:complexType>
</xs:element>
Пример описания простого
элемента
• Например, нужно описать элемент "shoesize" (размер обуви), которые
записываются следующим образом:
<shoesize country="france">35</shoesize>
• Данный элемент может быть описан, как составной элемент, содержащий
только целые значения и использующий атрибут с именем country:
<xs:element name="shoesize">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:integer">
<xs:attribute name="country" type="xs:string" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
• Также можно вначале создать новый составной тип shoetype, а затем
использовать его при описании элемента shoesize.
Описание составных типов со
смешанным содержанием
• Составные типы со смешанным содержанием
могут включать атрибуты, дочерние элементы и
текст.
• Например, рассмотрим элемент letter, который
может содержать, как текст, так и другие элементы:
<letter>
Уважаемый господин <name>Луценко
Александр</name>.
Ваш заказ <orderid>1032</orderid>
Был отправлен <shipdate>2012-03-13</shipdate>.
</letter>
• Данный элемент "letter" можно описать следующим
образом:
<xs:element name="letter">
<xs:complexType mixed="true">
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="orderid" type="xs:positiveInteger"/>
<xs:element name="shipdate" type="xs:date"/>
</xs:sequence>
</xs:complexType>
</xs:element>
• Отметим, чтобы разрешить записывать символьные
данные между дочерними элементами, требуется задать
атрибуту mixed значение true.
Индикаторы
• Для задания правил использования в XMLдокументе дочерних элементов применяются
индикаторы.
• Имеется три вида индикаторов:
– Индикаторы порядка – используются для
определения порядка элементов (all, choice,
sequence).
– Индикаторы кратности – используется для
определения того, сколько раз могут записываться
элементы: (maxOccurs, minOccurs).
– Индикаторы группирования – используются для
задания взаимосвязанных наборов элементов (Group,
attributeGroup).
Индикатор <all>
• Индикатор <all> указывает, что дочерние элементы могут
появляться в любом порядке и каждый элемент должен быть
появится только один раз.
• Например:
<xs:element name="person">
<xs:complexType>
<xs:all>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:all>
</xs:complexType>
</xs:element>
• Отметим, что при использовании индикатора <all> можно
– индикатору <minOccurs> задавать значение 0 или 1,
– индикатору <maxOccurs> может задаваться только значение 1.
Индикатор <choice>
• Индикатор <choice> указывает, что в составном
элементе должен быть задан один из перечисленных
дочерних элементов.
• Например:
<xs:element name="person">
<xs:complexType>
<xs:choice>
<xs:element name="employee" type="employee"/>
<xs:element name="member" type="member"/>
</xs:choice>
</xs:complexType>
</xs:element>
Индикатор <sequence>
• Индикатор <sequence> указывает, что дочерние
элементы должны записываться в том порядке, как
они описаны.
• Например:
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
Индикаторы <maxOccurs> и <minOccurs>
• Индикатор <maxOccurs> указывает на максимальное
количество, а индикатор <minOccurs> указывает на
минимальное количество дочерних элементов. Например,
для задания ограничения детей от 0 до 10 можно записать
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="full_name" type="xs:string"/>
<xs:element name="child_name" type="xs:string"
maxOccurs="10" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
• По умолчанию для всех элементов
задаются индикаторы maxOccurs=1 и
minOccurs=1.
• Для того, что не было ограничения на
максимальное количество дочернего
элемента нужно задать:
maxOccurs="unbounded".
• С помощью индикаторов группирования элементов можно
описывать группы элементов, задавать им имена и использовать их
в других описаниях.
• При создании группы элементов нужно указать индикатор порядка
элементов внутри данной группы (all, choice или sequence).
• Например: описание группы элементов с именем persongroup,
которые должны появляться в заданном порядке:
<xs:group name="persongroup">
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
<xs:element name="birthday" type="xs:date"/>
</xs:sequence>
</xs:group>
• После определения группы с именем
persongroup, на нее можно ссылаться в других
описаниях с помощью атрибута ref.
• Например, при описании составного элемента:
<xs:element name="person" type="personinfo"/>
<xs:complexType name="personinfo">
<xs:sequence>
<xs:group ref="persongroup"/>
<xs:element name="country" type="xs:string"/>
</xs:sequence>
</xs:complexType>
• С помощью индикаторов группирования атрибутов можно описывать
группы атрибутов, задавать им имена и использовать их в других
описаниях.
• Например: описание группы атрибутов с именем personattrgroup:
<xs:attributeGroup name="personattrgroup">
<xs:attribute name="firstname"
type="xs:string"/>
<xs:attribute name="lastname"
type="xs:string"/>
<xs:attribute name="birthday"
type="xs:date"/>
</xs:attributeGroup>
• После создания данной группы атрибутов на нее можно ссылаться в
других описаниях.
• Например:
<xs:element name="person">
<xs:complexType>
<xs:attributeGroup ref="personattrgroup"/>
</xs:complexType>
</xs:element>
Элемент <any>
•
Элемент <any> позволяет включать в XML-документ элементы, которые не указаны
в описании схемы конкретного языка разметки.
• Пример, показанный ниже, является фрагментом из схемы конкретного языка
разметки, хранящегося в файле family.xsd.
• В нем содержится описание элемента person.
• С помощью элемента <any> выполняется расширение содержания типа элементов
person.
• В этом случае в элементе person после элемента lastname могут записываться
любые не описанные в схеме элементы:
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
<xs:any minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
•
Теперь в элементе person включать, например, элемент children, хотя в самой
схеме возможность использования данного элемента не была описана.
• Рассмотрим файл, называемый "children.xsd", который содержит описание схему
(описание синтаксиса конкретного языка разметки):
<?xml version="1.0" encoding="ISO-8859-1"?>
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3schools.com"
xmlns="http://www.w3schools.com"
elementFormDefault="qualified">
<xs:element name="children">
<xs:complexType>
<xs:sequence>
<xs:element name="childname" type="xs:string”
maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
•
Ниже показан XML-документ (называемый "Myfamily.xml"), использующий
элементы из двух разных схем "family.xsd" и "children.xsd":
<?xml version="1.0" encoding="ISO-8859-1"?>
<persons xmlns="http://www.microsoft.com"
xmlns:xsl="http://www.w3.org/2001/XMLSchema-instance"
xsl:schemaLocation="http://www.microsoft.com family.xsd
http://www.w3schools.com children.xsd">
<person>
<firstname>Hege</firstname>
<lastname>Refsnes</lastname>
<children>
<childname>Cecilie</childname>
</children>
</person>
<person>
<firstname>Stale</firstname>
<lastname>Refsnes</lastname>
</person>
</persons>
• Данный XML-документ является
действительным (valid), так как схема
"family.xsd" позволяет расширять элемент
"person" необязательным элементом после
элемента "lastname".
• Элементы <any> и <anyAttribute>
используются для того, чтобы сделать
конкретный язык разметки расширяемым!
• Они позволяют документу содержать
дополнительные элементы, которые не
объявлены в основной XML схеме.
Спасибо за внимание!
Download