</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