Визначення умов на значення елементів і атрибутів
XML – Schema надає також можливість визначити діапазони значень елементів і перелік припустимих значень елементів і атрибутів. Щоб обмежити значення елемента або атрибута областю припустимих значень всередині опису простого типу даних simpleType використовується тег xsd:restriction. Тег xsd:restriction містить припустимі значення, є батьківським тегом по відношенню до тегів xsd:enumeration, кожний з яких визначає певне припустиме значення. Якщо значення елемента або атрибута не відповідає
жодному зі значень, введених тегом xsd:enumeration, то XML – документ вважається невідповідним схемі.
Рисунок 10.4 – Результати перевірки XML – документа на відповідність схемі
Наприклад, створюється документ, у якому зберігаються відомості про автомобілі – назва, колір, ціна, а саме кореневий елемент документ cars має дочірній елемент car, у якого в свою чергу є атрибут kind і дочірні елементи color і price. Припустимим є використання таких значень елемента color: blue, red, black або white. Для документа створено таку схему:
Власно XML - документ має такий вигляд:
Якщо перевірити такий документ на відповідність схемі за допомогою
програми Validator.aspx, то буде отримано таке повідомлення про помилку:
«The 'color' element has an invalid value according to its data type» тому, що значення yellow для елемента color є неприпустимим.
Аналогічним чином можна визначити припустимі значення атрибутів. XML – Schema дає змогу також визначити діапазони припустимих значень.
Це виконується також за допомогою тегу xsd:restriction, який виступає батьківським тегом по відношенню до тегів xsd:minInclusive і xsd:maxInclusive, значення атрибуту value яких визначає відповідно мінімальне і максимальне значення елемента або атрибута.
Можна розглянути це на такому прикладі. Припустимо, що значення ціни автомобіля повинно знаходитись у діапазоні від 5000 до 25000 од. Для забезпечення перевірки припустимості значення ціни потрібно визначити ім’я типу ціни (наприклад, так <xsd:element name="price" type="tprice"/>) і описати простий тип даних:
<xsd:simpleType name="tprice" >
<xsd:restriction base="xsd:integer">
<xsd:minInclusive value="5000" />
<xsd:maxInclusive value="25000" />
</xsd:restriction>
</xsd:simpleType>
У схемах можна також обмежити довжину поля. Якщо значення елемента або атрибута не повинно перевищувати певної кількості символів, то це можна визначити також за допомогою тегу xsd:restriction, всередині якого застосовується тег xsd:maxLength. Припустімо, що назва виду автомобіля не
повинна перевищувати 15 символів. У схемі, що розглядається це можна визначити таким чином. Для атрибуту kind елемента car можна визначити тип даних tkind (<xsd:attribute name="kind" type="tkind"/>), який буде описано так:
<xsd:simpleType name="tkind" >
<xsd:restriction base="xsd:string">
<xsd:maxLength value="15" />
</xsd:restriction>
</xsd:simpleType>
Якщо значення хоча б одного з атрибутів kind перевищить 15 символів, то у результаті перевірки XML – документа на відповідність схемі з використанням програми Validator.aspx, то буде отримано наступне повідомлення про помилку: «The 'kind' attribute has an invalid value according to its data type».
Позитивним є також те, що XML – Schema дає можливість використання регулярних виразів. Регулярний вираз – це шаблон символів, який визначає вид і формат символів, що можна використовувати у якості значення елемента або атрибута. Робота з регулярними виразами у схемах деякою мірою схожа на застосування регулярних виразів у мові Perl, а також у мові PHP. Детальне описання мови регулярних виразів не входить у задачі вивчення дисципліни, його можна знайти у документі «XML-схема. Частина 2: Типи даних» за адресою http://www.w3.org/TR/xmlschema-2. Розглянемо декілька прикладів визначення шаблонів символів для отримання уявлення про те, що представляють собою регулярні вирази.
Для визначення шаблону символів, якому повинні відповідати значення елементів або атрибутів, використовується всередині тегу xsd:restriction тег xsd:pattern.
Уміст шаблону визначається з використанням символів:
. - будь-який символ
* - довільна кількість повторювань символу або послідовності символів
\d - число
\D - будь-який нечисловий символ
[ ] - припустимі значення одного символу, можна визначати перелік припустимих значень, діапазон значень (відокремлюються дефісом)
{ } Кількість символів
Символи, які можуть бути як частиною шаблону, так і складовою текстової інформації, при введенні в якості тексту визначаються після символу \. Наприклад, якщо у постійній частині текстових даних зустрічається символ {, то в шаблоні його слід ввести так: \{.
Приклади використання регулярних виразів:
1. Для атрибута kind елемента car можна, якщо у XML – документі зберігаються відомості про різні автомобілі марки SUZUKI, описати такий шаблон всередині опису простого типу даних:
<xsd:simpleType name="tkind" >
<xsd:restriction base="xsd:string">
<xsd:pattern value="SUZ(.*)" />
</xsd:restriction>
</xsd:simpleType>
З шаблоні, що задано як значення атрибуту value тегу xsd:pattern, визначено наступне: значення атрибуту повинно починатися з символів SUZ, далі можуть слідувати будь-які символи у будь-якій кількості (.*). У результаті перевірки наведеного XML – документа буде отримано повідомлення про помилку, оскільки значення ВАЗ-2109 не відповідає шаблону. Значення атрибуту SUZUKI SWIFT, SUZUKI SPLASH є припустимими.
2. В випадку, коли припустимі значення атрибута kind елемента car включають автомобілі марок SUZUKI і BAZ, можна створити такий простий тип даних:
<xsd:simpleType name="tkind" >
<xsd:restriction base="xsd:string">
<xsd:pattern value="[SB](.*)" />
</xsd:restriction>
</xsd:simpleType>
Шаблон (pattern) цього типу визначає, що вміст атрибуту повинен починатися з букв S або B, далі можуть слідувати будь-які символи у довільній кількості.
3. Для елемента (або атрибута), що вміщує номер телефону, можна описати такий простий тип даних:
<xsd:simpleType name="tphonenumber" >
<xsd:restriction base="xsd:string">
<xsd:pattern value="\(062\)+\d{3}(-)\d{2}(-)\d{2}" />
</xsd:restriction>
</xsd:simpleType>
Такий шаблон означає, що значення елемента (атрибута) вводиться так: послідовність символів (062), далі три цифри, дефіс, дві цифри, дефіс і ще дві цифри. Припустимими значеннями при цьому будуть:
(062)335-46-23 або (062)338-15-70
Якщо введено значення, наприклад, (065)335-98-65 або (062)304-133-70, то у результаті перевірки документа на відповідність схемі, буде виведено повідомлення про помилку.
XML – схеми широко застосовуються на практиці тому, що вони, як ми побачили, мають багато переваг у порівнянні з DTD для визначення правил формування XML – документів та перевірки документів.
Контрольні питання
1. Що таке простір імен? Навіщо він визначається?
2. Як визначити простір імен?
3. Як визначити простір імен за замовчуванням?
4. Які переваги порівняно з DTD має XML – Schema?
5. Які стандарти мов схем Вам відомі?
6. Що визначає XML – Schema?
7. Які типи даних використовуються у XML – Schema?
8. Які прості типи даних Вам відомі?
9. Як описуються у схемі елементи комплексного типу?
10. Як можна у схемі визначити кількість появ елементів у XML – документі?
11. Як можна перевірити документ на відповідність схемі?
12. Як визначити у схемі перелік припустимих значень?
13. Що таке регулярний вираз?
Практичні завдання
Варіант №1
Створити схему XML – документа Banks.xml. Визначити у схемі, що адреси банків повинні включати міста Київ, Донецьк або Харків. Перевірити документ на відповідність схемі у режимі он-лайн.
Дата добавления: 2016-04-14; просмотров: 1124;