У XDR-схемах необхідно указувати скільки разів дочірній елемент може зустрічатися в батьківському елементі. Для цього в описі дочірнього елемента element використовують атрибути minOccur і maxOccur.

Повний синтаксис елемента такий:

<element

type= ’тип_елемента’

minOccur = ’{0|1}’

maxOccur=’{1|*}’ />.

За замовчанням обидва атрибути і minOccur, і maxOccur набувають значення 1.

Для демонстрації роботи атрибутів minOccur і maxOccur елемента element внесемо до XML-документ example_8.xml зміни, повторивши використання елемента text кілька разів. Валідатор тут же відреагує на невідповідність XML-даних XDR-схеми, вказаній в рядку 2.

example_9.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:18.10.2009 у 12.45 лекція з Web-дизайну

7: </text>

8: <text>

9: 18.10.2009 о 13.25 практика з Web-дизайну

10: </text>

11: <text>

12:20.10.2009 знову о 12.45 лекція з Web-дизайну

13: </text>

14: </note>

Для того, щоб уникнути подібних помилок змінимо XDR-схему.

example_9.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' minOccur=’1’ maxOccur=’*’ />

22: </ElementType>

23: <ElementType name='text' content='textOnly' model='close'/>

24: </Schema>

ДОДАТКОВІ ОБМЕЖЕННЯ ТИПІВ ДАНИХ

У XDR-СХЕМАХ

Наприклад, інколи при обробці типу даних string, досить використовувати рядки визначеної довжини. Але сам тип припускає необмежену довжину, тому виникає необхідність штучно обмежити довжину даних. Така ж ситуація може виникнути і у випадку з іншими типами, такими як number, bin. hex, bin. base64.

Для таких випадків були введені додаткові атрибути елемента AttributeType, при цьому використовується такий синтаксис:

<AttributeType

name=’idref’

dt:type=’string|number|bin. hex|bin. base64}

recuired=’{yes|no}’

dt:minLenght=’додатне ціле число’ dt:mаxLenght=додатнє ціле число’ />

ВИКОРИСТАННЯ ГРУП ВМІСТУ

В електронній комерції часто виникають ситуації, коли при перевірці яких-небудь даних може виникнути помилка, тому відкидається цілий документ. Але замість того, щоб відхилити цілу транзакцію, користувачеві пропонують змінити тільки той блок коду, який не пройшов верифікації.

Наприклад, необхідно отримувати відомості про те, що повідомлення було отримане повністю. Крім того, необхідно, щоб додаток перевіряв екземпляр XML так, щоб у ньому була потрібна наявність того або іншого повідомлення.

Нехай маємо XML-документ example_10.xml

<?xml version="1.0" encoding= "windows-1251" ?>

<note>

<text

time=’12:15:45’

date=’’

number=’n1’

from=’’>

Завтра лекція з Web-дизайну о 13.25

</text>

<text

time=’14:45:15’

date=’’

number="n2"

from="Керівник відділу"> Терміново здати звіт</text></note>.

Введемо після кожного елемента text новий елемент <report>, у рамках цього елемента розглянемо дочірній порожній елемент <complete> або <incomplete> .

У результаті отримаємо example_10.xml

<?xml version= "1.0" encoding="windows-1251" ?>

<note>

<text

time=’12:15:45’

date=’’

number=’n1’

from=’’>

Завтра лекція з Web-дизайну о 13.25

</text>

<report> <complete /></report>

<text

time=’14:45:15’

date=’’

number=’n2’

from=’Керівник відділу’>

Терміново здати звіт

</text>

<report>

<incomplete />

</report>

</note>.

Для перевірки цього документа створимо групу змісту в схемі XDR, що містить елементи <complete> і <incomplete>.

Групи змісту створюються завдяки елементу XDR-схеми <group>, який є дочірнім у батьківському елементі ElementType.

Синтаксис елемента <group>:

<group order=’{one|seq|many}’ minOccur=’{0|1}’ maxOccur=’{1|*}’>

<element type=’ElementType’>

<element| type=’ElementType’>

</group>.

У даному випадку, фрагмент XDR-схеми буде мати такий вигляд:

<group

order=’one’

<element type=’incomplete’>

<element type=’complete’>

</group>.

Повна схема XDR виглядатиме так:

1: <?xml version= '1.0' ?>

2: <Schema

3: name= 'example_10'

4: xmlns= 'urn:shemas-microsoft-com:xml-data'

5: xmlns:dt='urt:shemas-microsoft-com: datatype'>

6: <ElementType

7: name='note'

8: content='eltOnly'

9: model='close'

10: order=’many’>

11: <element

12: type=’text’

13: minOccure=’1’

14: maxOccure=’*’ / >

15: <element

16: type=’report’ / >

17: </ElementType>

18: <ElementType

19: name=’incomplete’

20: model=’close’

21: content=’empty’/>

22:

23: <ElementType

24: name=’complete’

25: model=’close’

26: content=’empty’/>

27:

28: <ElementType

29: name=’text’

30: model=’close’

31: content=’textOnly’/>

32:

33: <AttributeType

34: dt:type= 'time'

35: name= 'time'

36: required= 'yes'/>

37: <Attribute

38: type= 'time'

39: required= 'yes'/>

40: <AttributeType

41: dt:type= 'date'

42: name= 'date'

43: required= 'yes'/>

44: <Attribute

45: type= 'date'

46: required= 'yes'/>

47: <AttributeType

48: name= 'date'

49: dt:type= 'string'

50 dt:maxLength=’15’

50: required= 'yes'/>

51: <Attribute

52: type= 'from'

53: required= 'yes'/>

54: </ElementType>

55: <ElementType name=’report’ model=’close’ content=’eltOnly’>

56: <group order=’one’>

57: <element type=’complete’/>

58: <element type=’incomplete’/>

59: </group>

60: </ElementType>

61: </Schema>.

Розділ 4 МОВА ВИЗНАЧЕННЯ СХЕМ XML ( XSD)

Основні риси мови визначення схем xml (xsd)

Мова XML Schema Definition Language, яку також називають XML Schema Language, багато в чому схожа на мову XDR, з якою ви познайомилися раніше. Схеми XSD здатні розв’язувати такі задачі:

- Перелічення елементів у документі XML і перевірка наявності в документі тільки оголошених елементів.

- Оголошення і визначення атрибутів, що модифікують елементи документа.

- Визначення батьківсько-дочірніх стосунків між елементами.

- Визначення станів і моделей вмісту для елементів і атрибутів.

- Завдання типів даних.

- Установка значень за замовчанням.

- Можливість розширення.

- Підтримка використання просторів імен.

Усі схеми, незалежно від використовуваних для їх створення словників і синтаксичних правил, призначені для задання певних обмежень на документи XML, а отже, для забезпечення відповідності останніх певним правилам. Мови опису схем, які базуються на синтаксисі XML, володіють певними перевагами перед DTD, оскільки допускають розширення використовуваних дескрипторів розмітки, а також перевірку документів і схем за допомогою стандартного синтаксичного аналізатора XML.

У схемах XSD дескриптори, що використовуються в документах XML, розділяються на дві категорії :

– складні типи. Елементи складних типів можуть містити інші елементи, а також володіють певними атрибутами, тобто мати змішаний вміст;

– прості типи.

Наприклад, до простого типу можна віднести дескриптор

<text>Завтра о 12.45 лекція з Web-дизайну</text>.

Фрагмент, наведений нижче, містить дескриптор note, який може вважатися за складний.

<note time= ’12:54:13’

date= ’’>

<text>

Завтра о 12.45 лекція з Web-дизайну </text>

</note>.

Прості і складні типи елементів — це унікальні характеристики мови XSD.

ПРОСТОРИ ІМЕН

Будь-яка схема повинна використовувати стандартний простір імен для всіх екземплярів XSD. Цей простір імен ідентифікує набір елементів і атрибутів, які утворюють словник XSD.

Кореневим елементом у схемі XML є елемент Schema, який містить решту всіх елементів у документі схеми.

У рамках кореневого елемента схеми XSD створюється простір імен, використовуючи атрибут xmlns. Наприклад, наведений нижче дескриптор належить угоді про використання префікса "xsd" для зв'язку елементів з іменованою колекцією:

<xsd:schema xmlns:xsd=’http://www. w3c. org/1999/XMLSchema’.

За загальною угодою префікс xsd використовується для зв'язку екземпляра XML-документа зі схемою. Проте і його використання має бути узгоджене з іменованою колекцією, тобто префікс має бути описаний шляхом використання атрибута xmlns

xmlns:xsi="http://www. w3.org/2000/10/

XMLSchema-instance".

Для зв'язку екземпляра документа XML із схемою найчастіше використовуються два атрибути:

xsi:schemaLocation

xsi:noNamespaceSchemaLocation.

Ці атрибути дозволяють пов'язувати документ із стандартом XML Schema консорціуму W3C. Такий зв’язок не обов'язковий, але дуже корисний, оскільки дозволяє синтаксичним аналізаторам швидше знаходити потрібну схему.

У випадку, якщо використовується локальний файл, використовують атрибут

xsi:noNamespaceSchemaLocation.

Наприклад,

xsi:noNamespaceSchemaLocation=

’ім’я _файлу. xds’

З іншого боку, простір імен може бути оголошений разом з ім'ям файлу, тоді ідентифікатор URI для простору імен і ідентифікатор URI для схеми розділяються пропусками, утворюючи значення одного атрибута, як показано нижче:

xsi:schemaLocation=http://example. org/ns/

books/ ім’я_файлу. xsd.

ПРОСТІ ЕЛЕМЕНТИ

Концепція іменованих типів

На відміну від DTD і XDR схем існує концепція іменованих типів. Наприклад, при створенні визначень існує можливість привласнювати цьому визначенню ім'я, щоб повторно використовувати його в екземплярі XSD.

Наприклад, розглянемо фрагмент, що містить два прості елементи

<date> Листопад,14,2009 </date>

<note>Відвідати лекцію, дуже важливий матеріал </note>.

Як видно, типом вмісту обох елементів є рядки. Для повного визначення елементів згідно з XSD схемою необхідно вказати назву елемента і його тип

<xsd: element name=‘date’ type=’xsd:string’ />

<xsd: element name=‘note’ type=’xsd:string’ />.

Як видно, обидва елементи містять опис type=’xsd:string’, що дублюється. Щоб уникнути такого, звертаються до концепції іменованих типів або іменованих обмежень. Іменовані обмеження задають так:

<xsd:simpeType name=’ім’я_обмеження’ base=‘xsd: тип_даних’>.

Наприклад, якщо в схему ввести| іменоване обмеження

<xsd: simpeType name=’nt’ base=‘xsd: string’>.

Опис елементів виглядатиме так:

<xsd: element name= ‘date’ type=’nt’ />

<xsd: element name= ‘note’ type=’nt’ />.

Таким чином, у нашому прикладі, елемент типу string посилається на елемент типу simpeType.

Розглянемо приклад, в якому наведемо XML-документ, що містить прості елементи і XSD-схему, для XML-документа.

1) «голий» XML-документ

<?xml version=’1.0’>

<note>Відвідати лекцію, дуже важливий матеріал</note>

2) XSD-схема (example_11.xsd) для простого XML-документа

<?xml version=’1.0’>

<xsd:schema

xmlns:xsd=’http://www. w3.org/2000/10/

XMLSchema’>

<xsd:element name=’note’ type=’xsd:string’/>

</xsd:schema>

3) Підключаємо схему до XML-документа (example_11.xml)

<?xml version=’1.0’>

<note

xmlns:xsi=’http://www. w3.org/2000/10/XMLSchema-instance’

xsi:noNamespaceSchemaLocation=’example_11.xsd’>

Відвідати лекцію, дуже важливий матеріал

</note>.

ПРОСТІ ТИПИ ДАНИХ, ЩО ВИКОРИСТОВУЮТЬСЯ В СХЕМАХ XSD

У таблиці наведені типи даних, які відносяться і до типів даних, і до атрибутів.

Простий тип

Опис

string

Буквено-цифровий рядок

normalizedString

Рядок без пропусків

byte

1,126

unsignedByte

0,126

Integer

- -1, 0, 1, 126789

Positivelnteger

1, 126789

Negativefnteger

, -1

nonNegativelnteger

0, 1, 126789

nonPositivelnteger

, -1, 0

Int

-1,

Unsignedlnt

0,

Long

-1,


Продовження таблиці

unsignedLong

0,

float

double

Boolean

True, false, 1, 0

Time

13:20:00.000,

13:20:00.000-5:00

dateTime

T1313:20:00.000-5:00

date

gMonth

--11--

gYear

2007

gYearMonth

2007-11

gDay

---14

gMonthDay

--11-14

ЕЛЕМЕНТИ СКЛАДНИХ ТИПІВ

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9