Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
metodicheskie_ukazania_po_KIS.rtf
Скачиваний:
4
Добавлен:
01.05.2025
Размер:
12 Мб
Скачать
☆

Xml файл:

Описание: Создаем три таблицы: client(клиенты), employee(сотрудники) и contract(контракт) (см. рисунок 1) и описываем их с помощью XML.

Рис. 1. Структура БД

<?xml version="1.0" encoding="utf-8"?>

<!DOCTYPE fitness SYSTEM "fit.dtd">

<list1>

<client>

<name>Ivan Vasil'evich Gagarin</name>

<birth>25.01.1980</birth>

<IDcard>011777</IDcard>

<telephone>8913123213</telephone>

</client>

<client>

<name>Pavel Sergeevich Kvasha</name>

<birth>13.08.1991</birth>

<IDcard>011888</IDcard>

<telephone>8913523814</telephone>

</client>

</list1>

<list2>

<employee>

<name>Gennadiy Vital'evich Kotov</name>

<position>administrator</position>

<telephone>89321312616</telephone>

<email>devilcat666@mail.ru</email>

</employee>

<employee>

<name>Alisa Dmitreevna Orehova</name>

<position>administrator</position>

<telephone>89609257643</telephone>

<email>orehova7643@mail.ru</email>

</employee>

</list2>

<list3>

<contract>

<IDcard>011777</IDcard>

<contract_date>01.09.2012</contract_date>

<term>30 days</term>

</contract>

<contract>

<IDcard>011888</IDcard>

<contract_date>24.11.2012</contract_date>

<term>90 days</term>

</contract>

</list3>

</fitness>

DTD файл:

Описание: посредством набора объявлений описываем схему документа для XML, его класс с точки зрения синтаксических ограничений и объявляем конструкцию. <?xml version="1.0"?>

<!DOCTYPE fitness [

<!ELEMENT fitness(list1, list2, list3)>

<!ELEMENT list1(client+)>

<!ELEMENT client(name, birth, IDcard, telephone)

<!ELEMENT name(#PCDATA)>

<!ELEMENT birth (#PCDATA)>

<!ELEMENT IDcard(#PCDATA)>

<!ELEMENT telephone(#PCDATA)>

<!ATTLIST client id_cl ID #REQUIRED>

<!ELEMENT list2(employee+)>

<!ELEMENT employee(name, place ,telephone, email)>

<!ELEMENT name (#PCDATA)>

<!ELEMENT position(#PCDATA)>

<!ELEMENT telephone (#PCDATA)>

<!ELEMENT email (#PCDATA)>

<!ATTLIST employee id-emp ID #REQUIRED>

<!ELEMENT list3(contract+)>

<!ELEMENT contract(IDcard, contract_date, term)>

<!ELEMENT IDcard(#PCDATA)>

<!ELEMENT contract_date(#PCDATA)>

<!ELEMENT term(#PCDATA)>

<!ATTLIST contract id-contr ID #REQUIRED>

]>

Лабораторная №2

Тема: «Изучение XML схем»

Задание: Описать структуру реляционной БД, состоящую не менее чем из 3 таблиц, с помощью XML Schema. И создать XML–файл с заполненной БД.

Цель: Изучить основы формата XML Schema

Теоретические основы:

Введение в XML Schema

XML Schema – это основанная на XML альтернатива DTD. Она предназначена для описания структуры XML документа.

XML Schema предназначена, подобно DTD, для определения строительных блоков XML документа. Она определяет:

  • представленные в документе элементы;

  • атрибуты, которые могут встречаться в документе;

  • какие элементы являются дочерними;

  • последовательность, в которой дочерние элементы представляются;

  • количество дочерних элементов;

  • являются ли документы пустыми или могут включать текст;

  • типы данных для элементов и атрибутов;

  • значение по умолчанию для элементов и атрибутов.

Определение комплексных типов, объявление элементов и атрибутов

В XML-схеме есть различие между комплексными типами элементов, которые могут иметь вложенные элементы и атрибуты, и простыми типами, которые не могут иметь вложенных элементов или атрибутов. Также имеется различие между определениями и объявлениями. Определения создают новые типы элементов (простые и комплексные). Объявления задают имена и содержимое элементов и атрибутов (простых и комплексных), которые могут использоваться в документах, соответствующих данной схеме. В этом разделе, мы сосредоточимся на определении комплексных типов и объявлении элементов и атрибутов, которые могут появиться внутри них.

Новые комплексные типы определяются с помощью оператора complexType. Такие определения обычно содержат набор из объявлений элементов, ссылок на элементы, и объявлений атрибутов. Объявления не задают самостоятельно типы. Скорее они создают ассоциации между именем элемента и ограничениями, которые управляют появлением этого имени в документах, соответствующих данной схеме. Элементы объявляются, с помощью оператора element. Атрибуты объявляются, с помощью оператора attribute. В качестве примера рассмотрим определение комплексного типа USAddress. Внутри определения USAddress мы видим пять объявлений элемента и одно объявление атрибута.

Определение типа USAddress:

<xsd:complexType name=”USAadress”>

<xsd:sequence>

<xsd:element name=”name” type=”xsd:string”/>

< xsd:element name=”street” type=”xsd:string”/>

< xsd:element name=”city” type=”xsd:string”/>

<xsd:element name=”state” type=”xsd:string”/>

< xsd:element name=”zip” type=”xsd:decimal”/>

</xsd:sequence>

<xsd:attribute name=”country”

type=”xsd:NMTOKEN” fixed=”US”/>

</xsd:complexType>

В результате этого определения любой элемент типа USAddress, появляющийся в документе (например, элемент shipTo в файле po.xml), должен состоять из пяти элементов и одного атрибута. Имена этих пяти элементов (name, street, city, state и zip) объявляются с помощью атрибута name оператора element, причем элементы должны появиться в той же самой последовательности, в которой они объявлены. Первые четыре из этих элементов будут содержать строковое значение, а пятый - десятичное число. Элемент, тип которого объявляют как USAddress, может появиться с атрибутом country, который должен содержать строковую константу US.

Определение USAddress содержит объявления, включающие только простые типы: string, decimal и NMTOKEN. Напротив, определение PurchaseOrderType содержит объявления элементов, имеющих комплексные типы. Например, USAddress. Хотя оба вида объявлений (простые и комплексные) используют тот же самый атрибут type.

Определение типа PurchaseOrderType:

<xsd:complexType name=” PurchaseOrderType”>

<xsd:sequence>

<xsd:element name=”ShipTo” type=”xsd: USAadress”/>

< xsd:element name=”BillTo” type=”xsd: USAadress”/>

< xsd:element name=”comment” minOccurs=”0”/>

<xsd:element name=”items” type=”Items”/>

</xsd:sequence>

<xsd:attribute name=”orderDate”

type=”xsd:date”/>

</xsd:complexType>

В определении PurchaseOrderType, объявления элементов shipTo и billTo, связывают различные имена элементов с одним и тем же комплексным типом, а именно с USAddress. Вследствие этого определения любой элемент типа PurchaseOrderType, появляющийся в документе (например, в po.xml), должен состоять из элементов shipTo и billTo. Каждый из этих элементов должен содержать пять подэлементов (name, street, city, state и zip), которые были объявлены в определении USAddress. Элементы shipTo и billTo могут иметь атрибут country, который был объявлен как часть определения USAddress.

Определение PurchaseOrderType содержит объявление атрибута orderDate, который, подобно объявлению атрибута country, задается с помощью простого типа. Фактически, все объявления атрибутов должны выполняться с помощью простых типов, потому что, в отличие от элементов, атрибуты не могут содержать другие элементы или другие атрибуты.

Объявления элементов, которые мы ранее описывали, представляют собой имя, связанное с заданным нами типом элемента. Иногда предпочтительно использовать ссылку на существующий тип элемента, а не объявлять новый, например:

< xsd:element ref="comment" minOccurs="0"/>

В этом объявлении приводится ссылка на существующий элемент comment, который объявлен где-то в другом месте схемы заказа на закупку. Значение атрибута ref должно рассматриваться, как ссылаться на глобальный элемент, который был объявлен в элементе schema, а не как часть определения комплексного типа. Вследствие этого элемент comment может появиться в документе внутри элемента PurchaseOrderType, причем его содержание должно быть совместимо с типом string.

Ограничение вхождений

Значение параметра minOccurs равное 0 у элемента comment говорит о том, что он не обязательно будет присутствовать в составе элемента PurchaseOrderType. Вообще, элемент является обязательным, если значение minOccurs больше или равно 1. Максимальное число появлений элемента определяется значением, задаваемым параметром maxOccurs. Это значение может быть положительным целым числом типа 41, или термом unbounded, что означает отсутствие ограничения максимального числа появлений. Значение по умолчанию для minOccurs и для maxOccurs равно 1. Таким образом, когда элемент типа comment объявлен без maxOccurs , то это означает, что элемент может появиться не более одного раза. Если Вы определяете значение только для minOccurs, то убедитесь что это значение меньше или равно значению по умолчанию maxOccurs. То есть это значение должно быть 0 или 1. Точно так же, если Вы определяете значение только для maxOccurs, то это значение должно быть больше или равно значению по умолчанию minOccurs, то есть 1 или больше. Если оба значения опущены, элемент должен появиться в документе точно один раз.

Атрибуты, в отличие от элементов, могут появиться только однажды или ни разу. Поэтому и синтаксис для определения появления атрибутов отличается от синтаксиса для определения числа появлений элементов. В частности атрибуты могут быть объявлены с параметром use. В зависимости от значения этого параметра атрибут обязателен (use="required"), необязателен (use="optional"), или запрещен (use="prohibited"). Например, объявление атрибута partNum в po.xsd.

Значения по умолчанию и атрибутов и элементов могут быть объявлены с использованием параметра default, хотя этот параметр в том или ином случае работает по разному. Атрибут со значением, определенным по умолчанию, может появляться или не появляться в документе. Если атрибут не появляется в документе, то обработчик схемы обеспечивает, атрибут со значением равным значению default. Обратите внимание, что значения по умолчанию для атрибутов имеют смысл, только если сами атрибуты являются необязательными, поэтому будет ошибкой определить значение по умолчанию вместе с параметром use отличным от use="optional".

Значение по умолчанию для элементов обрабатывается немного по-другому. Если элемент появляется в документе, но не содержит какого либо значения, то в качестве его значения подставляется значение по умолчанию. Однако если элемент не появляется в документе, то обработчик схемы не обеспечивает его значения вообще. В общем, различия между значениями по умолчанию элемента и атрибута в следующем: заданное по умолчанию значение атрибута применяется тогда, когда атрибут отсутствует, а заданное по умолчанию значение элемента применяются тогда, когда элемент присутствует в документе, но не имеет значения (пуст).

Атрибут fixed используется в объявлениях и атрибутов и элементов. Он используется, чтобы указать, что атрибут или элемент могут принимать фиксированные значения. Например, в po.xsd объявлен атрибут country, со значением равным US. Приведенное в примере объявление означает, что атрибут country является необязательным (по умолчанию значение параметра use равно optional), хотя, если атрибут появляется в документе, то его значением должно быть US. Если атрибут country, не появляется в документе, обработчик схемы обеспечит атрибут country со значением US. Обратите внимание, что понятия фиксированного значения и значения по умолчанию являются взаимоисключающими, поэтому объявление не может одновременно содержать атрибуты fixed и default.

Примеры использования указанных выше параметров в объявлениях элементов и атрибутов приведены в таблице 1.

Таблица 1 . Ограничения на появление элементов и атрибутов в документе

Элементы

(minOccurs, maxOccurs) fixed, default

Атрибуты

use, fixed, default

Примечание

(1, 1) -, -

required, -, -

элемент/атрибут должен появиться однажды, может иметь любое значение

(1, 1) 37, -

required, 37, -

элемент/атрибут должен появиться однажды, его значение должно быть 37

(2, unbounded)

37, - n/a

элемент должен появиться не менее 2 раз, его значение должно быть 37; minOccurs и maxOccurs могут быть положительными целыми числами. maxOccurs равный unbounded задает неограниченное появление элемента

(0, 1) -, -

optional, -, -

элемент/атрибут может появиться однажды, и может иметь любое значение

(0, 1) 37, -

optional, 37, -

элемент/атрибут может появиться однажды. Если он появится, то его значение должно быть 37. Если он не появится, то его значение будет 37

(0, 1) -, 37

optional, -, 37

элемент/атрибут может появиться однажды. Если элемент не задан, то его значение по умолчанию равно 37, иначе его допустимое значение равно заданному

(0, 2) -, 37

n/a

элемент может появиться однажды, или дважды, или ни разу. Если элемент не появится, то его значение не обеспечено; если появится, и его значение не задано, то по умолчанию его значение будет равно 37, иначе его допустимое значение равно заданному в документе. Вообще значениями, minOccurs и maxOccurs могут быть положительные целые числа. При этом значение maxOccurs может также принимать значение unbounded (не ограничено)

(0, 0) -, -

prohibited, -, -

элемент/атрибут не должен появиться в документе

Глобальные элементы и атрибуты

Глобальные элементы, и глобальные атрибуты, создаются с помощью объявлений, которые являются дочерними элементами элемента schema. Как было указано выше, на глобальный элемент или глобальный атрибут можно сослаться с помощью параметра ref в одном или более объявлениях.

Объявление, которое использует ссылку на глобальный элемент, позволяет элементу, на который указывает ссылка, появиться в документе в качестве содержимого данного объявления. Так, например, элемент comment появляется в po.xml на том же самом уровне, что и shipTo, billTo и элементы items, что связано с тем, что объявление comment находится в комплексном определении типа на том же самом уровне, что и объявления других трех элементов.

Объявление глобального элемента дает возможность элементу появиться в документе в качестве элемента верхнего уровня. Следовательно, purchaseOrder, который объявлен как глобальный элемент в po.xsd, может появиться как элемент верхнего уровня в po.xml. Обратите внимание, что объявление элемента comment как глобального позволяет ему появиться в документе po.xml как элементу верхнего уровня, а не только в качестве подэлемента элемента purchaseOrder.

Есть множество особенностей относительно использования глобальных элементов и атрибутов. Одна из них состоит в том, что глобальные объявления, не могут содержать ссылки: такие объявления должны задавать простые или сложные типы непосредственно. Говоря конкретно, глобальные объявления не могут содержать атрибута ref, они должны использовать атрибут type. Вторая особенность состоит в том, что в глобальных объявлениях нельзя использовать ограничение на количество вхождений элементов, хотя оно может быть помещено в локальные объявления, которые на них ссылаются. Другими словами, глобальные объявления не могут содержать атрибуты minOccurs, maxOccurs, или use.

Конфликты имен

Теперь разберем, как определить новые комплексные типы (см., PurchaseOrderType), объявить элементы (см., purchaseOrder) и объявить атрибуты (см., orderDate). Все эти действия манипулируют с именами, поэтому обычно возникает вопрос, что будет, если объявить два объекта с одинаковыми именами?

Рассмотрим несколько примеров. Если объявить два объекта с одинаковыми именами, но разными типами, то такое объявление создаст конфликтную ситуацию. Например, конфликт имен вызовут комплексный тип с именем USStates и простой тип с именем USStates. Однако если мы определяем комплексный тип с именем USAddress, и объявляем элемент или атрибут с именем USAddress, то конфликт не возникает. Конфликт также не возникает, если элементы с одинаковыми именами объявлены внутри определения различных типов. Например, если мы объявим один элемент как часть типа USAddress, а второй элемент с тем же именем как часть типа Item, то конфликт имен не возникнет. Такие объявления называют локальными. Наконец, если имеется два типа, один из которых определен вами (например, decimal), а второй встроен в язык XML-схемы, то конфликт имен также не возникает. Отсутствие конфликта связано с тем, что эти два типа принадлежат различным именным пространствам. Более подробно использование именных пространств в XML-схемах будет рассмотрено позже.

Простые типы

XML-схема содержит объявления нескольких элементов и атрибутов простого типа. Некоторые из этих простых типов, например string и decimal встроены в язык XML-схемы, в то время как другие определены специально для данного типа документа. Например, атрибут partNum имеет тип по имени SKU (Stock Keeping Unit), который получен из встроенного простого типа string. Встроенные простые типы, и их вариации могут использоваться в объявлениях элементов и атрибутов. В таблице 2 приводится список простых встроенных в язык XML-схемы типов.

Таблица 2. Список простых типов

Простой тип

Примеры (разграничены запятыми)

Примечания

string

Confirm this is electric

normalizedString

Confirm this is electric

см. 3)

token

Confirm this is electric

см. 4)

byte

-1, 126

см. 2)

unsignedByte

0, 126

см. 2)

base64Binary

GpM7

hexBinary

0FB7

integer

-126789, -1, 0, 1, 126789

см. 2)

positiveInteger

1, 126789

см. 2)

negativeInteger

-126789, -1

см. 2)

nonNegativeInteger

0, 1, 126789

см. 2)

nonPositiveInteger

-126789, -1, 0

см. 2)

int

-1, 126789675

см. 2)

unsignedInt

0, 1267896754

см. 2)

long

-1, 12678967543233

см. 2)

unsignedLong

0, 12678967543233

см. 2)

short

-1, 12678

см. 2)

unsignedShort

0, 12678

см. 2)

decimal

-1.23, 0, 123.4, 1000.00

см. 2)

float

-INF, -1E4, -0, 0, 12.78E-2, 12, INF, NaN

32-х битовое число однократной точности с плавающей запятой.

NaN - число не задано

cм. 2)

double

-INF, -1E4, -0, 0, 12.78E-2, 12, INF, NaN

64-х битовое число двойной точности с плавающей запятой

см. 2)

boolean

true, false 1, 0

time

13:20:00.000, 13:20:00.000-05:00

см. 2)

dateTime

1999-05-31T13:20:00.000-05:00

31 мая 1999 года 13 часов 20 минут Восточноевропейского стандартного времени, которое на 5 часов отстает от универсального времени.

cм, 2)

duration

P1Y2M3DT10H30M12.3S

1 год, 2 месяца, 3 дня, 10 часов, 30 минут, и 12.3 секунды

date

1999-05-31

см. 2)

gMonth

--05--

Май

см. 2) и 5)

gYear

1999

1999

см. 2) и 5)

gYearMonth

1999-02

Февраль 1999 года, не зависимо от номера дня

см. 2) и 5)

gDay

---31

31 день

см. 2) и 5)

gMonthDay

--05-31

31 мая

см. 2) и 5)

Name

shipTo

XML 1.0 тип Name

QName

po:USAddress

XML Namespace QName

NCName

USAddress

XML Namespace NCName, то есть QName без префикса и двоеточия

anyURI

http://www.example.com/, http://www.example.com/ doc.html#ID5

language

en-GB, en-US, fr

Значения допустимые для xml:lang как определено в XML 1.0

ID

XML 1.0 атрибут типа ID

см. 1)

IDREF

XML 1.0 атрибут типа IDREF см. 1)

IDREFS

XML 1.0 атрибут типа IDREFS

см. 1)

ENTITY

XML 1.0 атрибут типа ENTITY

см. 1)

ENTITIES

XML 1.0 атрибут типа ENTITIES

см. 1)

NOTATION

XML 1.0 атрибут типа NOTATION

см. 1)

NMTOKEN

US, Bresil

XML 1.0 атрибут типа NMTOKEN

см. 1)

NMTOKENS

US UK, Bresil Canada Mexique

XML 1.0 атрибут типа NMTOKENS, то есть список NMTOKEN разделенных пробелами

см. 1)

Примечания:

1) Для обеспечения совместимости XML-схем и XML 1.0 DTD, простые идентификаторы типов ( IDREF, IDREFS, ENTITY, ENTITIES, NOTATION, NMTOKEN, NMTOKENS), должны использоваться только в атрибутах.

2) Значение этого типа может быть представлено больше чем одним лексическим форматом. Например, 100 и 1.0E2 - оба значения представлены в формате с плавающей точкой, и значением равным "сто". Однако, для этого типа были установлены правила, которые определяют канонический лексический формат.

3) Символы перевода строки, табуляции, и перевода каретки в типе normalizedString перед обработкой схемы преобразуются в пробелы.

4) Как и в normalizedString, смежные пробелы сокращены до единственного пробела, предшествующие и завершающие пробелы удаляются.

5) Префикс "g", задает время по Григорианскому календарю.

Новые простые типы можно определить, получая их от существующих простых типов (встроенных или ранее определенных). В частности мы можем получить новый простой тип, ограничивая существующий простой тип. Другими словами, для нового типа мы можем установить собственный диапазон значений как подмножество диапазона значений существующего типа. Для определения имени и типа собственного простого типа используют оператор simpleType. При этом c помощью оператора restriction указывают прототип, и идентифицируют фасеты (параметры), которые ограничивают диапазон значений базового типа.

Предположим, что мы хотим создать новый тип целого числа, названного myInteger, чей диапазон значений должен находиться между 10000 и 99999 (включительно). Мы базируем наше определение на встроенном простом типе integer, чей диапазон значений включает так же и целые числа как меньше чем 10000, так и больше чем 99999. Чтобы определить тип myInteger, мы ограничиваем диапазон базового типа integer, используя два фасета, названные minInclusive и maxInclusive.

Определение myInteger. Диапазон 10000-99999:

<xsd:SimpleType name=”myInteger”>

<xsd:restriction base=”xsd:integer”>

<xsd:minInclusive value=”10000”>

<xsd:maxInclusive value=”99999”>

</xsd:restruction>

</xsd:SimpleType >

Приведенный пример показывает использование одной из возможных комбинаций базового типа, и двух фасетов, которые были применены для определения myInteger. Но возможно использование и других комбинаций встроенных простых типов и фасетов (см. таблицы 4.1 и 4.2). Рассмотрим более сложный пример определения простого типа. Тип по имени SKU получен из простого типа string. Мы ограничиваем значения SKU путем использования фасета pattern, который содержит регулярное выражение, определяющее допустимый формат строки "\d{3}-[A-Z]{2}". Это выражение читается следующим образом: "строка начинается с трех цифр, за которыми следует дефис, за дефисом следует два ASCII-символами верхнего регистра".

Определение простого типа SKU:

<xsd:SimpleType name=”SKU”>

<xsd:restriction base=”xsd:string”>

<xsd:pattern value=”\d{3}-[A-Z]{2}”/>

</xsd:restruction>

</xsd:SimpleType >

Язык XML-схем определяет 12 фасетов, которые перечислены в таблице 3.

Таблица 3. Фасеты

Фасет

Влияние на значение типа данных

enumeration

Значение типа данных ограничивается определенным набором значений

maxExclusive

Числовое значение типа данных меньше, чем указанное значение

minExclusive

Числовое значение типа данных больше, чем указанное значение

maxInclusive

Числовое значение типа данных меньше или равно указанному значению

minInclusive

Числовое значение типа данных больше или равно указанному значению

maxLength

Определяет максимальное число символов или элементов списка, допускаемых для этого значения

minLength

Определяет минимальное число символов или элементов списка, допускаемых для этого значения

pattern

Значение типа данных ограничено определенной последовательностью символов, представленной в виде регулярных выражений

length

Определяет точное число символов или элементов списка, допускаемых для этого значения

whiteSpace

Определяет способ обработки пробелов. Допустимые значения для этого атрибута: сохранить (preserve), заменить (replace) и свернуть (collapse)

fractionDigits

Ограничение максимально допустимого количества разрядов десятичной дроби в значении

totalDigits

Ограничение максимально допустимого количества разрядов в значении

Таблица 4.1. Простые типы и соответствующие им фасеты

Простые типы

Фасеты

lenght

minLenght

maxLenght

pattern

numeration

whiteSpace

string

+

+

+

+

+

+

normalizedString

+

+

+

+

+

+

token

+

+

+

+

+

+

byte

+

+

+

unsignedByte

+

+

+

base64Binary

+

+

+

+

+

+

hexBinary

+

+

+

+

+

+

integer

+

+

+

positiveInteger

+

+

+

negativeInteger

+

+

+

nonNegativeInteger

+

+

+

nonPositiveInteger

+

+

+

int

+

+

+

unsignedInt

+

+

+

long

+

+

+

unsignedLong

+

+

+

short

+

+

+

unsignedShort

+

+

+

decimal

+

+

+

float

+

+

+

double

+

+

+

boolean

+

+

time

+

+

+

dateTime

+

+

+

duration

+

+

+

date

+

+

+

gMonth

+

+

+

gYear

+

+

+

gYearMonth

+

+

+

gDay

+

+

+

gMonthDay

+

+

+

Name

+

+

+

+

+

+

QName

+

+

+

+

+

+

NCName

+

+

+

+

+

+

anyURI

+

+

+

+

+

+

language

+

+

+

+

+

+

ID

+

+

+

+

+

+

IDREF

+

+

+

+

+

+

IDREFS

+

+

+

+

+

ENTITY

+

+

+

+

+

+

ENTITIES

+

+

+

+

+

NOTATION

+

+

+

+

+

+

NMTOKEN

+

+

+

+

+

+

NMTOKENS

+

+

+

+

+

Таблица 4.2. Простые типы и соответствующие им фасеты

Простые типы

Фасеты

maxInclusive

minInclusive

maxExclusive

minExclusive

totalDigit

fractionDigits

byte

+

+

+

+

+

+

unsignedByte

+

+

+

+

+

+

integer

+

+

+

+

+

+

positiveInteger

+

+

+

+

+

+

negativeInteger

+

+

+

+

+

+

nonNegativeInteger

+

+

+

+

+

+

nonPositiveInteger

+

+

+

+

+

+

int

+

+

+

+

+

+

unsignedInt

+

+

+

+

+

+

long

+

+

+

+

+

+

unsignedLong

+

+

+

+

+

+

short

+

+

+

+

+

+

unsignedShort

+

+

+

+

+

+

decimal

+

+

+

+

+

+

float

+

+

+

+

double

+

+

+

+

time

+

+

+

+

dateTime

+

+

+

+

duration

+

+

+

+

date

+

+

+

+

gMonth

+

+

+

+

gYear

+

+

+

+

gYearMonth

+

+

+

+

gDay

+

+

+

+

gMonthDay

+

+

+

+

Среди них особенно полезен фасет enumeration. Его можно использовать для ограничения значения почти каждого простого типа, кроме boolean. Фасет enumeration ограничивает простой тип набором явных значений. Например, мы можем использовать enumeration, чтобы определить новый простой тип по имени USState, полученный из типа string, значение которого должно быть одним из стандартных сокращений наименования штатов США.

Использование фасета enumeration:

<xsd:SimpleType name=”USState”>

<xsd:restriction base=”xsd:string”>

<xsd:enumeration value=”AK”/>

<xsd:enumeration value=”AL”/>

<xsd:enumeration value=”AR”/>

</xsd:restruction>

</xsd:SimpleType >

Использование типа USState является хорошей заменой типа string, при использовании в элементе state (содержит наименование штата). За счет такой замены мы можем ограничить значения элемента state в подэлементах billTo и shipTo. При этом эти значения ограничены следующим перечнем: AK, АL, AR, и т.д. Обратите внимание, что перечисляемые значения, указанные для данного типа должны быть уникальны.

Тип List

В дополнение к так называемым атомарным типам, которые составляют большинство, XML-схема имеет понятие списка. Перечень атомарных типов перечислен в таблице 2. Атомарные типы, списочные типы, и типы объединения, описанные в следующем разделе, все вместе называются простыми типами. Использование атомарных типов индивидуализирует используемые значения. Например, NMTOKEN индивидуализирует значение US, делая его неделимым в том смысле, что никакая часть US, типа символа "S", не имеет значения отдельно от целого. Списочные типы состоят из последовательностей атомарных типов, и, следовательно, допустимыми значениями могут быть только "атомы" из этой последовательности. Например, списочный тип NMTOKENS состоит из значений типа NMTOKEN, разделенных пробелами. Например, "US UK FR". Язык XML-схем имеет три встроенных списочных типа: NMTOKENS, IDREFS и ENTITIES.

В дополнение к встроенным списочным типам Вы можете создать новые списочные типы из существующих атомарных типов. Невозможно создать списочные типы из существующих списочных типов или из комплексных типов. Например, рассмотрим списочный тип listOfMyIntType, состоящий из значений myInteger:

<xsd:SimpleType name=”listOfMyIntType”>

<xsd:list ItemType=”myInteger”>

</xsd:SimpleType >

Элемент в документе, содержимое которого соответствует типу listOfMyIntType, может выглядеть следующим образом:

<listOfMyInt> 20003 15037 95977 95945 </ listOfMyInt >

Для создания списочного типа могут быть применены следующие фасеты: length, minLength, maxLength, и enumeration. Например, чтобы определить список точно из шести штатов США (SixUSStates), мы сначала определяем новый списочный тип (полученный из типа USState) с именем USStateList, а затем создаем тип SixUSStates, ограничивая USStateList только шестью элементами.

Списочный тип SixUSStates:

<xsd:SimpleType name=”USStateList”>

<xsd:list ItemType=”USState”/>

<xsd:SimpleType>

<xsd: SimpleType name=”SixUSStates”/>

< xsd:restruction base=” USStateList”>

<xsd:lenght value=”6”/>

</xsd:restruction>

</xsd:SimpleType >

Элементы, тип которых - SixUSStates, должны содержать шесть элементов, и каждый из этих шести элементов должен быть одним из атомарных значений перечислимого типа USState, например:

<sixStates>PA NY CA NY LA AK </sixStates>

Обратите внимание, что мы получили списочный тип из элементов атомарного типа string. Однако, тип string может содержать пробелы, а пробелы разграничивают элементы в списочном типе. Поэтому Вы должны быть внимательным, используя списочные типы, исходный тип которых - string. Например, мы определили новый списочный тип на основе базового типа string и фасета length равным 3. Тогда следующие три элемента списка являются законными: Asie Europe Afrique.

Но следующие три элемента списка незаконны: Asie Europe Amerique Latine.

Даже учитывая что "Amerique Latine" может существовать вне списка как отдельная строка, когда это значение включено в список, то пробел между Amerique и Latine фактически создает четвертый элемент списка. Поэтому последний пример не будет соответствовать списочному типу с тремя элементами.

Задачи:

1. Изучить область применения XML–схем

2. Изучить структуру XML–схем

3. Изучить требования для создания корректного документа схемы

4. Знать достоинства и недостатки XML–схем по сравнению с DTD

5. Выучить виды элементов и атрибутов

6. Изучить назначение, способы создания и применения схем

7. Выучить виды базовых типов и способы создания пользовательских 8. Изучить виды ограничений, использующиеся в схемах

8. Изучить и научиться применять определения ключевых полей

9. Выучить виды и способы применения регулярных выражений в XML схемах

Структура отчёта:

1. Титульный

2. Содержание

3. Описание целей и задач

4. Описание системы

5. Структура нормализованной БД (IDEF1x) с описанием всех ограничений

6. XML и XSD файлы

Пример лабораторной работы №2:

XML файл: остается без изменений, только добавляется строчка пространства имен с указанием расположения схемы.

<fitness xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:NoNamespaceSchemaLocation="Schema.xsd">

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]