Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Основы XML-технологий. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
☆
ре
гулярное выражение, с которым должно сопоставляться прове-
ряемое значение.
Например, на элемент
Гр
м
ожет быть наложено ограничение,
уппа
чтобы его значение состояло из четырех прописных символов, за которыми следуют один строчный символ знак в диапазоне от на языке
<
Элемент
XSD
можно представить с помощью следующего шаблона:
xs:pattern value="[А-Я]{4}[а-я]{1}-[1-6]{2}"/>
en
о
д
1
umeration
(
6
например,
Б
ЭВМд-41
,
М
ЭВМд-52
позволяет ограничить простой тип набором
различимых значений. Например, на элемент
«-»
и две цифры
Это требование
).
С
татус
,
содержащий данные о статусе студента, можно наложить ограничение, согласно которому он может иметь только значения
агистр
М
следующего перечисления
. Такое требование можно представить в схеме с помощью
enumeration
xs:enumeration value="Бакалавр"/>
< <xs:enumeration value="Специалист"/> <xs:enumeration value="Магистр"/>
РЕ ДЕЛЕН ИЕ ПРОСТЫ Х ПОЛЬЗОВАТЕЛЬ СКИХ ТИ ПО В
П
3.2.5
О
:
Б
акалавр
С
пециалист
,
и
ли
ольшинство языков программирования позволяет разработчи-
Б кам только компоновать различные встроенные типы в структуриро­ванные типы и не дает возможность определять новые простые типы, имеющие определенные пользователем области значений.
Возможности определения данных через встроенные типы есть
XML
и в
ожно представить следующим образом:
м
<xs:element name="Фамилия" type="xs:string"/>
<xs:element name="Имя" type="xs:string"/>
<xs:element name="Отчество" type="xs:string"/>
<xs:element name="датаРождения" type="xs:date"/>
Н
Например, элементы
.
о
XML Schema
кроме встроенных типов данных, позволяет поль-
,
Фамилия
,
Имя
Отчество
,
датаРождения
и
зователям определять собственные простые типы, области значений которых являются подмножествами встроенных типов.
Другими словами, пользовательский тип данных определяется как ограничение, накладываемое на другой тип данных
71
X
ML
.
А
налогичные возможности дают современные СУБД, позволяющие
вводить пользовательские типы данных путем определения доменов.
ML
Механизм ввода пользовательского типа в
X
S
chema
в
ключает
в себя следующие действия.
1. Для определения нового простого типа используется элемент
x
s:simpleType
В элементе
2.
область значений ограничивается с помощью элемента
3. В
.
элементе
s:simpleType
x
s:restriction
x
:string
определяется базовый тип (
xs
xs:restriction
), чья
.
вы определяете, как именно вы хотите
ограничивать базовый тип, сужая один или более из его аспектов
f
(
acets
)
. Варианты ограничений базового типа данных приведены
в нижеследующих пунктах.
.2.5.1 По ль зо ва те льс ки е ти пы с о г р ан ич е н и ем
3
д
иа па зо но в
Например, следующие простые типы ограничивают области зна-
x
чений
s: minInclusive
x
s:double
<!-- Файл SimpleElm.xsd -->
<?xml version="1.0" encoding="UTF-8"?>
x
s:date
и
и
s:maxInclusive
x
о более узких диапазонов, используя аспекты
д
:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:x="http://example.org/publishing"
targetNamespace="http://example.org/publishing" elementFormDefault="qualified"
attributeFormDefault="unqualified">
<!-- Определение типа RoyalityRate -->
<xs:simpleType name="RoyalityRate">
<xs:restriction base="xs:float">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="100"/>
</xs:restriction>
</xs:simpleType>
<!-- Определение типа Pubs2003 -->
<xs:simpleType name="Pubs2003">
<xs:restriction base="xs:date">
72
<xs:minInclusive value="2003-01-01"/> <xs:maxInclusive value="2003-12-31"/> </xs:restriction> </xs:simpleType>
<!-- Объявление переменных типов RoyalityRate, Pubs2003 --> <xs:element name="rate" type="x:RoyalityRate"/> <xs:element name="publicationDate" type="x:Pubs2003"/> </xs:schema>
осле определения простых типов
П
них строках
:RoyalityRate
д
ля типов
ледующие документы содержат корректные экземпляры опре-
С
x
XML-
yaltyRate
Ro
сх
емы определены переменные
:Pubs2003
x
,
.
и
ubs2003
P
и
rate
ослед-
в п
publicationDate
деленных выше документов:
!-- Переменная типа RoyalityRate -->
< <x:rate xmlns:x="http://example.org/publishing">17.34567890</x:rate>
<!-- Переменная типа Pubs2003 --> <x:publicationDate xmlns:x="http://example.org/publishing"> 2003-06-01 </x:publicationDate>
.2.5.2 По ль зо ва те льс ки е ти пы с л е к с и ч е с ки ми
3 о
гр ан ич ен ия м и
Большинство аспектов ограничивают область значений типа,
в то время как шаблонный аспект ограничивает лексическую область типа. Предыдущие примеры ограничивали область значений базового типа,
риведенные далее - ограничивают лексическую
п
а
область строки с помощью регулярных выражений:
<!-- Файл SimpleElm_lexOgranich.xsd --> <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:x="http://example.org/publishing" targetNamespace="http://example.org/publishing" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:simpleType name="SSN"> <xs:restriction base="xs:string"> <xs:pattern value="\d{3}-\d{2}-\d{4}"/>
73
</xs:restriction> </xs:simpleType>
<xs:simpleType name="PublisherAssigned"> <xs:restriction base="xs:string"> <xs:pattern value="\d{2}-\d{8}"/> </xs:restriction> </xs:simpleType>
<xs:simpleType name="Phone"> <xs:restriction base="xs:string"> <xs:pattern value="\d{3}-\d{3}-\d{4}"/> </xs:restriction> </xs:simpleType>
<xs:element name="authorId" type="tns:SSN"/> <xs:element name="pubsAuId" type="tns:PublisherAssigned"/> <xs:element name="phone" type="tns:Phone"/> </xs:schema>
ледующие документы содержат корректные экземпляры опре-
С
деленных выше пользовательских типов данных:
!-- Файл SimpleElm_lexOgranich_authorId.xml-->
< <?xml version="1.0" encoding="UTF-8"?> <x:authorId xmlns:x="http://example.org/publishing"> 123-45-6789 </x:authorId>
<!-- Файл SimpleElm_lexOgranich_pubs.XML--> <?xml version="1.0" encoding="UTF-8"?> <x:pubsAuId xmlns:x="http://example.org/publishing"> 01-23456789 </x:pubsAuId>
<!-- Файл SimpleElm_lexOgranich_phone.xml--> <?xml version="1.0" encoding="UTF-8"?> <x:phone xmlns:x="http://example.org/publishing"> (801)390-45-52 </x:phone>
74
.2.5.3 По ль зо ва те льс ки е ти пы н а о с н о в е с п и с ко в
3
о бъ ед ин ен и й др уг их т ип о в
и Кроме ограничения области значений типа, можно создать
новые простые типы, являющиеся списками или объединениями
s:restriction
других простых типов. Для этого вы используете не
x
,
x
а элементы
s:list
или
типов вы можете использовать следующие конструкции
x
s:restriction
новый тип является ограничением существующего
–
x
s:union
. Таким образом, для создания простых
схемы:
XM
L-
типа, т. е. он имеет более узкий ряд допустимых значений;
s:list
x
–
н
овый тип является разделенным пробелами списком
другого простого типа;
н
s:union
x
–
овый тип является объединением двух или более
других простых типов.
Используя
x
s:list
,
вы, по существу, определяете разделенный пробелами список значений из определенной области значений. При использовании использовании
и
x
s:list
s:restriction
x
ли
x
s:union
поэтому в этих случаях не выполняется
,
совместимость типов. В следующем примере новый тип
ределяется как список
оп
!-- Файл SimpleElm_list.xsd -->
< <?xml version="1.0" encoding="UTF-8"?>
S
SN
н
ет иерархии наследования, как при
начений.
з
uthorList
A
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:x="http://example.org/publishing" targetNamespace="http://example.org/publishing" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:simpleType name="SSN"> <xs:restriction base="xs:string"> <xs:pattern value="\d{3}-\d{2}-\d{4}"/> </xs:restriction> </xs:simpleType> <xs:simpleType name="AuthorList"> <xs:list itemType="tns:SSN"> </xs:simpleType> <xs:element name="authors" type="tns:AuthorList"/>
Следующий документ содержит экземпляр элемента
au
thors
:
75
!-- Файл SimpleElm_list.xml-->
< <?xml version="1.0" encoding="UTF-8"?> <x:authors xmlns:x="http://example.org/publishing"> 111-11-1111 222-22-2222 333-33-3333 444-44-4444 </x:authors>
случае использования
В
x
s:union
ы создаете новый тип, комби-
в нирующий множество областей значений, в которой значением может быть из любой из указанных областей значений. Например,
Au
thorId
следующий тип значений
<
!-- Файл SimpleElm_union.xsd --> <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:x="http://example.org/publishing" targetNamespace="http://example.org/publishing" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:simpleType name="SSN"> <xs:restriction base="xs:string"> <xs:pattern value="\d{3}-\d{2}-\d{4}"/> </xs:restriction> </xs:simpleType> <xs:simpleType name="PublisherAssigned">
ublisherAssignedId
P
с
очетает область значений
:
S
SN
с
областью
<xs:restriction base="xs:string"> <xs:pattern value="\d{2}-\d{8}"/> </xs:restriction> </xs:simpleType> <xs:simpleType name="AuthorId"> <xs:union memberTypes="tns:SSN tns:PublisherAssigned"/> </xs:simpleType> <xs:element name="author" type="tns:AuthorId"/> </xs:schema>
аждый из следующих документов демонстрирует корректный
К
экземпляр элемента
<
!-- Файл SimpleElm_union.xml--> <?xml version="1.0" encoding="UTF-8"?>
<x:author xmlns:x="http://example.org/publishing"> 111-11-1111 </x:authorId>
uthorId
a
:
76
<
!-- Файл SimpleElm_union.xml--> <?xml version="1.0" encoding="UTF-8"?> <x:author xmlns:x="http://example.org/publishing"> 11-11111111 </x:authorId>
П
оддержка
ML Schema
X
д
ля определенных пользователем типов и, в частности, «специальных значений»/«лексических областей» является одним из наиболее мощных аспектов языка. Тот факт, что большинство языков программирования не обеспечивает этого, вынуждает разработчиков решать эти вопросы в коде своих прило­жений самостоятельно (обычно через механизмы уста­новки свойств). Способность определять «специальные значе­ния»/«лексические области», удовлетворяющие вашим точным потребностям, делает возможным осуществлять проверку правиль­ности и обработку ошибок данных не в программном коде, а на уровне
3.2.6
XML Schema
О
типы в структуру, известную как составной тип (
-процессора.
X
ML
ПР ЕДЕЛЕ НИ Е СОСТАВН ЫХ ТИ ПОВ
д
елает возможным компоновать различные простые
c
omplexType
).
3.2.6.1 Пр ос то й пр им е р со с т ав но го э л е м е н т а Чтобы определить новый составной тип в целевом пространстве
имен схемы, вы используете элемент
x
s:complexType
как показано
,
в листинге:
<xs:complexType name="AuthorType"> <!-- здесь размещается композитор --> </xs:complexType>
лемент
Э
x
s:complexType
одержит то, что известно как составитель,
с который описывает формирование содержимого типа, также извест­ного как модель содержимого.
X
ML Schema
пределяет трех составите-
о
лей, которые могут использоваться при описании составного типа:
– уп
s:sequence
x x
s:all
– все части в любом порядке;
s:choice
x
– в
орядоченная последовательность частей;
ыбор содержащихся частей.
77
С
оставители содержат части, которые включают такие объекты, как другие составители, описания элементов и типовые группы. Описания атрибутов не считаются частями, потому что они не повторяются. Следовательно, описания атрибутов помещаются не в составителе, а после него в конце определения составного типа.
Описание элемента (
x
s:element
используемая часть. Следующий
, возможно, наиболее часто
)
mplexType
co
, названный
uthorType
A
, определяет упорядоченную последовательность двух дочерних элементов и атрибута, имеющих простые типы:
!-- Файл ComplexElm_unqualified.xsd -->
< <?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:x="http://example.org/publishing" targetNamespace="http://example.org/publishing"> <xs:complexType name="AuthorType"> <!-- Синтаксис композитора (составителя) --> <xs:sequence> <xs:element name="name" type="xs:string"/> <xs:element name="phone" type="xs:string"/> </xs:sequence> <!-- определение атрибута --> <xs:attribute name="id" type="xs:integer"/> </xs:complexType> <!-- определение элемента “author” и его типа --> <xs:element name="author" type="x:AuthorType"/> </xs:schema>
3
.2.6.2 Бо ле е сл ож н ы й п р и м е р со ст ав но г о э ле м е н та
А теперь приведем немного более сложный пример составного типа, который использует вложенные составные типы, другие соста­вители и повторяющиеся части:
<!-- Файл ComplexElm_all_choice.xsd -->
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:x="http://example.org/publishing"
78
t
argetNamespace="http://example.org/publishing"
elementFormDefault="qualified" attributeFormDefault="unqualified">
<!-- определение простого типа SSN -->
<xs:simpleType name="SSN">
<xs:restriction base="xs:string">
<xs:pattern value="\d{3}-\d{2}-\d{4}"/>
</xs:restriction>
</xs:simpleType>
<!-- определение простого типа Address -->
<xs:complexType name="Address">
<xs:all>
<xs:element name="street" type="xs:string"/>
<xs:element name="city" type="xs:string" minOccurs="0"/>
<xs:element name="state" type="xs:string" minOccurs="0"/>
<xs:element name="zip" type="xs:string"/>
</xs:all>
</xs:complexType>
<!-- определение простого типа PublicationListType -->
<xs:complexType name="PublicationListType">
<xs:choice maxOccurs="unbounded">
<xs:element name="book" type="xs:string"/>
<xs:element name="article" type="xs:string"/>
<xs:element name="whitepaper" type="xs:string"/>
</xs:choice>
</xs:complexType>
<!-- определение простого типа Phone -->
<xs:simpleType name="Phone">
<xs:restriction base="xs:string">
<xs:pattern value="\d{3}-\d{3}-\d{4}"/>
</xs:restriction>
</xs:simpleType>
<!-- определение составного типа AuthorType -->
<xs:complexType name="AuthorType">
<xs:sequence>
<xs:choice>
<xs:element name="name" type="xs:string"/>
<xs:element name="fullName" type="xs:string"/>
79
</xs:choice> <xs:element name="address" type="x:Address"/> <xs:element name="phone" type="x:Phone" minOccurs="0" maxOccurs="5"/> <xs:element name="recentPublications" type="x:PublicationListType"/> </xs:sequence> <xs:attribute name="id" type="x:SSN"/> </xs:complexType> <xs:element name="author" type="x:AuthorType"/> /xs:schema>
этом примере составитель
В
all
определении
в
Address
что порядок следования элементов в экземпляре может быть произвольным.
В описании элемента
включающий в себя другой составитель типа
sequence
,
Au
thorType
содержится составитель типа
рым следуют описания трех элементов.
ch
oice
Составитель
типа
A
uthorType
допускается появление элементов
в
этом определении означает, что в элементе
или
n
ame
В качестве типов элементов, следующих за составителем
выбраны пользовательские составные типы: и
P
ublicationsListType
.2.6.3 Ог ра ни че ни я к о ли ч е с тв а эл е м ен т о в
3
.
AddressType, Phone
Обратите также внимание, что с помощью атрибутов
и
m
axOccurs
исание элемента
оп
ph
one
ределяет ограничения появле-
оп
X
ML
choice
начает,
оз
-д
окумента
за кото-
,
f
ullName
m
.
choice
inOccurs
,
ний (
o
ccurrence
c
onstraints
. В составном типе ограничения появлений
)
могут применяться к любой части.
Стандартное значение для каждой части –
,
это означает, что
1
данная часть должна появиться в указанном месте именно один раз.
Определение
а определение
inOccurs="0"
m
axOccurs="unbounded"
m
де
лает данную часть необязательной,
позволяет бесконечные повторе­ния части. Если пожелаете, вы можете задать также произвольные границы, например,
minOccurs="3" maxOccurs="77"
.
Использование ограничений появлений по отношению к соста­вителю применяется ко всей группе как к целому (обратите внима­ние на
blicationsListType
,
который применяет ограничения появлений
Pu
80
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]