</comment>
</note>

Рисунок 9– Використання типів атрибутів з перерахуванням
У випадку, якщо в рядку
<!ATTLIST date day (Sunday | Monday | Thursday) “Monday”
значення, яке набуває атрибут за замовчанням, не відповідатиме значенням, які перлічені в дужках, обробник негайно повідомить про помилку (рис. 10).

Рисунок 10 – Повідомлення про помилку
У разі потреби вказати, що даний атрибут є необов'язковим, використовують оголошення типу необов'язкового атрибута.
<! ATTLIST date day (Sunday | Monday | Thursday ) #IMPLIED
month CDATA #REQUIRED
year CDATA #FIXED "2009">
АНАЛІЗ ПРАВИЛЬНИХ ЕКЗЕМПЛЯРІВ
Оголошення зовнішніх схем DTD. Основна відмінність внутрішніх і зовнішніх схем полягає в тому, що зовнішні схеми DTD зберігаються у вигляді окремого файлу, а не як частина XML-документа.
До цих пір ми користувалися внутрішньою схемою DTD, яка задається таким чином:
<! DOCTYPE кореневий_елемент [>
<! ELEMENT кореневий_елемент (модель вмісту)
]> .
Все, що зазначалося в квадратах дужках, було внутрішньою схемою DTD. Зовнішні схеми DTD зберігаються в окремих файлах з розширенням *.dtd.
Повна схема DTD для екземпляра XML складається з комбінації внутрішньої і зовнішньої схем (якщо вони існують).
Для того, щоб підключити зовнішню схему DTD до XML-документа, необхідно в рядку оголошення типу документа вказати слово SYSTEM або PUBLIC, після якого вказати URL адреса файлу, що містить схему DTD:
PUBLIC – використовується, якщо схема загальнодоступна і використовується багатьма користувачами (такі схеми зберігаються в спеціальній бібліотеці – репозиторії);
SYSTEM – використовується для вказівки власних схем.
Наприклад,
<! DOCTYPE кореневий_елемент SYSTEM “my_dtd. dtd”>.
Розділ 3 СХЕМИ XDR
Незважаючи на всі переваги схем DTD, з ними пов'язаний ряд проблем:
1. Передусім вони не є екземплярами XML, робота з ними вимагає від розробника вивчення іншої мови програмування, що використовує інший синтаксис.
2. Створювати, перевіряти і підтримувати на відповідність за допомогою редакторів і утиліт XML достатньо важко.
3. Схеми DTD не надають контроль за типами даних, окрім текстових даних і типів документів, що ускладнює перевірку на відповідність стандартам у додатках, що використовують інші типи даних, наприклад, фінансові транзакції, обмін даними, наукові дані.
4. Схеми DTD не є екземплярами XML, тому немає можливості розширити і перетворити такі схеми.
5. Схеми DTD не забезпечують підтримку просторів імен XML, які дозволяють змішувати в документі елементи різних структур документів.
У зв'язку з переліченими недоліками стала необхідність використання інших схем, альтернативних DTD.
Схеми XDR визначають елементи, подані в екземплярі XML, а також будь-які атрибути, пов'язані з цими елементами, крім того в схемах XDR визначаються взаємозв'язки елементів XML-документа.
Дуже важливо усвідомити той факт, що XDR-схеми є екземплярами XML, тобто вони складаються з елементів і атрибутів XML, а отже, вони перевіряються на відповідність іншій схемі. Тому, створюючи XML-документ згідно розробленій XDR-схемі, програміст має ще справу і з третім документом, що містить середовище для XDR-файла.
РОЗРОБЛЕННЯ XDR –СХЕМ
Ми вже знаємо як підключати внутрішні і зовнішні схеми DTD, знаємо всі переваги таких схем і їх недоліки. Розберемося з тим, як працюють XDR-схеми.
Перш за все, відзначимо, що XDR-схеми – зовнішні. Зв'язок XML - файлу з його XDR-схемою прописується як атрибут кореневого елемента. Наприклад,
1: <?xml version= ‘1.0’ encoding= ‘windows-1251’ ?>
2: <note xmlns=‘x-shemas:example_4.xdr’>
3: Завтра о 12.45 лекція з Web-дизайну
4: </note>.
Тут, в рядку 2 кореневий елемент note містить атрибут xmlns, який вказує, в якому файлі міститься відповідна XDR-схема.
ОГОЛОШЕННЯ ТИПУ ЕЛЕМЕНТА
Всі XDR-схеми описуються в окремому файлі, що має розширення *.xdr. Оскільки XDR-схема є XML-документом, то першим рядком є визначення документа
<? xml version= “1.0”?>,
далі йде опис кореневого елемента. Кореневий елемент завжди виглядає таким чином:
1: <Schema
2: name=“ім’я_схеми”
3: xmlns=“urn:schemas-microsoft-com: xml-data”
4: xmlns:dt=“urn:schemas-microsoft-com: datatypes”>
5: <!--Оголошення інших елементів -->
6: <ElementType />
7: <!--кінець списку оголошення елементів-->
8: </Schema>
У рядку 3 описується, на якому просторі імен базується опис елемента Schema. У рядку 4 оголошується простір імен для даних елемента Schema. Решта рядків (5-7) є рядками опису дочірніх елементів ElementType.
Опис елементів в XDR-схемах має такий синтаксис:
<ElementType
name= “idref”
сontent= “{empty|textOnly|eltOnly|mixed}”
dt:type= “datatype”
model=“{open|closed}”
order=“{one|seq|many}” />
Тут кожен з атрибутів має значення, залежне від описуваного елемента
name – задає ім'я елемента
content– вказує на те, що містить описуваний елемент. Допустимими значеннями цього атрибута є:
- empty – порожній елемент;
- eltOnly – означає, що елемент може бути тільки контейнером для інших елементів;
- textOnly – може містити тільки текст;
- mixed – змішані дані (стандартне значення).
dt:type – оголошує тип даних елемента. Префікс дозволяє вказати простір імен для URI адрес.
model – дозволяє (open) або забороняє (closed) використовувати елементи, не визначені в схемі XDR.
order – оголошує порядок проходження дочірніх елементів екземпляра XML
- one – припускає наявність одного елемента;
- seq – указує елементи в строгому порядку;
- many – припускає наявність будь-якої кількості елементів.
Наприклад, розглянемо схему schema_5.xdr, розроблену для XML-документа example_5.xml.
XDR-схема для example_5.xml буде такою:
1: <?xml version= “1.0”>
2: <Schema
3: name= “example_5”
4: xmlns=“urn:shemas-microsoft-com: xml-data”
5: xmlns:dt=“urn:shemas-microsoft-com: datatypes”>
6: <ElementType name=“note” model= “closed” content = “textOnly” dt:type= “string”/>
7: </Schema>
У даній схемі дескриптор <Schema>, що відкривається, містить три атрибути. Атрибуту name (рядок 3) привласнено ім'я документа, для якого призначається схема, що розробляється.
У рядку 4 визначається стандартний простір імен для схеми XDR.
У рядку 5 визначається простір імен для типів даних, оголошених у схемі.
Рядок 6 детальніше описує елемент: ім'я, заборона використання неописаних в схемі елементів, вміст – лише текст, тип даних може бути тільки строковий.
ОГОЛОШЕННЯ ElementType ВКЛАДЕНИХ ЕЛЕМЕНТІВ
Точно так, як і в схемах DTD, XDR-схеми можуть описувати вкладені елементи. Опис вкладених елементів відбувається за правилом.
< ElementType name= ‘.’ >
<element type= ‘ім'я вкладеного елемента’>
</ElementType >
</ElementType name= ‘ім'я вкладеного елемента’ / >
Наприклад, для XML-документа example_6.xml:
<?xml version=“1.0” encoding= “windows-1251”?>
<note xmlns=‘x-shemas:example_6.xdr’>
<text>Завтра о 12.45 лекція з Web-дизайну
</text>
</note>,
де елемент <note> має дочірній елемент text, XDR-схема виглядатиме так:
1: <?xml version= ‘1.0’?>
2: <Schema
3: name= ‘example_6’
4: xmlns= ‘urn: shemas-microsoft-com: xml – data’
5: xmlns:dt=‘urn: shemas-microsoft-com: datatypes’>
6: <ElementType name= ‘note’ model= ‘closed’ content=‘eltOnly’>
7: <element name= ‘text’/>
8: </ElementType>
9: <ElementType name=‘text’ model= ‘closed’ content=‘textOnly’ dt:type=‘string’/>
10: </Schema>.
Необхідно звернути увагу на те, що елемент text у схемі згаданий двічі. Перший раз описаний у рядку 7, як дочірній елемент елемента note, другий, – повністю визначається в рядку 9.
Як дочірні елементи для елемента ElementType можуть бути такі елементи:
Element – оголошує дочірній елемент
Description – забезпечує опис ElementType елемента
Datatype – визначає тип даних ElementType елемента
Group – визначає порядок проходження елемента
Attribute Type – визначає атрибут
Attribute – визначає відомості про дочірній елемент Attribute Type.
У разі розроблення XDR-схеми для елемента, що містить декілька елементів, використовують наступний підхід.
Схема складена для прикладу example_7.xml:
<?xml version= “1.0” encoding= “windows-1251” ?>
<note xmlns= ‘x-shemas:example_7.xdr’>
<time />
<date />
<text>Завтра о 12.45 лекція з Web-дизайну
</text>
</note>.
XDR-схема example_7.xdr для XML-файлу example_7.xml.
1: <?xml version= ‘1.0’>
2: <Schema
3: name= ‘example_7’
4: xmlns= ‘urn: shemas-microsoft-com: xml – data’
5: xmlns:dt= ‘urn:shemas-microsoft-com: datatypes’>
6: <ElementType name=‘note’ model=‘closed’ content=‘eltOnly’>
7: <element name= ‘time’/>
8: <element name= ‘date’/>
9: <element name= ‘text’/>
10: </ElementType>
11: <ElementType name= ‘time’ model= ‘closed’ content= ‘empty’ />
12: <ElementType name= ‘data’ model= ‘closed’ content= ‘empty’ />
13: <ElementType name= ‘text’ model= ‘closed’ content= ‘textOnly’ dt:type= ‘string’/>
14: </Schema>
Внесення пустих дочірніх елементів в якості атрибутів елементів більш високого рівня, вважається прикладом гарного програмування.
Так, у попередньому прикладі порожніми елементами були time і data. Перенесемо їх у XML-документ як атрибути елемента note.
example_8.xml
1: <?xml version= “1.0” encoding= “windows-1251” ?>
2: <note xmlns= ‘x-shemas:example_8.xdr’
3: time= ’12:54:13’
4: date= ’’>
5: <text>
6: Завтра о 12.45 лекція з Web-дизайну
7: </text>
8: </note>
З появою атрибутів у елементі виникає необхідність використання в XDR-схемі елемента AttributeType.
ЕЛЕМЕНТ AttributeType
Синтаксис визначення елемента AttributeType має вигляд:
<AttributeType
default=‘default-value’
dt:type=‘primitiv-type’
dt:values=‘enumerated-values’
name=‘idref’
required=‘{yes|no}’>.
Тут
default – значення атрибута за замовчанням. Наприклад, якщо атрибут відноситься до переліченого типу, значення за замовчанням повинне вказуватися у списку;
dt:type – тип даних для атрибута певного типу: entity, entities, enumeration, id, idref, idrefs, nmtoken, nmtokens, notation, string. При обраному типі enumeration необхідно вказувати і атрибут dt:values;
dt:values – містить всі допустимі значення, якщо dt:type=‘enumeration’;
name – ім'я типу атрибута. Цей атрибут обов'язковий;
required – указує на необов'язкову наявність атрибута в описі елемента.
У даному прикладі атрибут відноситься до елемента note. Тому ElementType для елемента note міститиме і елементи, і AttributeType, і Attribute.
Розглянемо синтаксис елемента Attribute.
<Attribute
default=‘default-value’
type=‘attribute-type’
required= ‘{yes|no}’>.
Тут
default – значення атрибута за замовчанням. Має перевагу перед будь-яким значенням за замовчанням, вказаним в елементі AttributeType;
type – ім'я елемента AttributeType, яке визначене в даній схемі (або в іншій, вказане за допомогою відповідного простору імен). Вказане значення повинне відповідати значенню атрибута name в AttributeType;
required – вказує на необов'язкову наявність атрибута в описі елемента. Необов'язковий, якщо необхідний атрибут присутній в AttributeType.
Таким чином, для прикладу example_8.xml XDR-схема буде мати такий вигляд:
1: <?xml version= '1.0' ?>
2: <Schema
3: name='example_8'
4: xmlns= 'urn:shemas-microsoft-com:xml-data'
5: xmlns:dt='urt:shemas-microsoft-com:datatype'>
6: <ElementType name='note' content='eltOnly' model='close' >
7: <AttributeType
8: dt:type='time'
9: name= 'time'
10: required='yes'/>
11: <Attribute
12: type= 'time'
13: required='yes'/>
14: <AttributeType
15: dt:type='date'
16: name= 'date'
17: required= 'yes'/>
18: <Attribute
19: type= 'date'
20: required= 'yes'/>
21: <element name = 'text'/>
22: </ElementType>
23: <ElementType name='text content='textOnly' model='close'/>
24: </Schema>.
Якщо в рядку
4: date= ’’
прикладу example_8.xml внести зміни
4: date= ’17 жовтня 2009’
валідатор при перевірці XML-документа повідомить про помилку «невідповідність типів даних».
ТИПИ ДАНИХ У XDR-СХЕМАХ
bin. base64 | – двійкові дані з використанням шифрування MIME; |
bin. hex | – визначає двійкові дані в шістнадцятиричному форматі; |
boolean | – 0 або 1; |
char | – символ (рядок, що складається з одного символу); |
date | – указує на дату без часу у форматі ISO-8601, наприклад, . Проте правильність зазначення дати не перевіряється, тобто допустиме значення і дати ; |
dataTime | – вказує дату (вказівка часу необов'язкова) в підмножині формату ISO-8601, наприклад, T09:57:12; |
dataTime. tz | – вказує дату (вказівка часу і часового поясу необов'язково) в підмножині формату ISO-8601. Наприклад, T09:57:12-02:00; |
fixed.14.4 | – визначає десяткове число, що містить не більше 14 знаків зліва і не більше 4 цифр праворуч від десяткової крапки; |
float | – визначає дійсне число (без обмежень на кількість цифр), може містити знак дробу, а також показник ступеня, значення від 1.797693E+308 до 2.22507Е-308; |
int | – ціле число з необов'язковим знаком; |
number | – визначає число без обмеження цифр, може містити знак дробу і ступінь значення від 1.797693E+Е-308; |
time | – вказує час без дати і часового поясу в підмножині формату ISO – 8601, наприклад, 10:14:51; |
time. tz | – вказує час і часовий пояс, наприклад, 10:14:51+02:00; |
i1 | – визначає ціле число, представлене одним байтом (1-128). Дробові знаки і знаки піднесення до ступеня не допускаються; |
i2 | – визначає ціле число, представлене одним словом (1-32768); |
i4 | – визначає ціле число, представлене чотирма байтами (1-1; |
i8 | – визначає ціле число, представлене вісьма байтами; |
r4 | – дійсне число з точністю 7 цифр. Може містити знак, дробову частку необов'язковий знак ступеня; |
r8 | – дійсне число з точністю 15 цифр; |
ui1 | – ціле число без знаку, дробової частки або ступеня; |
ui2 | – ціле число, що складається з 2 байтів, без знаку, дробової частки або ступеня; |
ui4 | – ціле число, що складається з 4 байтів, без знаку, дробової частки або ступеня; |
ui8 | – ціле число, що складається з 8 байтів, без знаку, дробової частки або ступеня; |
uri | – уніфікований індикатор ресурсу URI, наприклад, urn: schemas-microsoft-com:Office 9.0; |
uuid | – шістнадцятиричне число, розбите на октети, містить необов'язкові перенесення, які ігноруються, наприклад, 345FFD3A1-F501-FA33-12-ADFFD3A1. |
ІНДИКАТОРИ ВХОДЖЕННЯ В XDR-СХЕМАХ
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 |


