Листинг 14.3. Схема документа XML

<?xml version="1.0"?>

<xsd:schema xmlns:xsd="http://www.w3.org/200l/XMLSchema>

<xsd:element name=”notebook" type="notebookType" />

<xsd:complexType name= " notebookType">

<xsd:element name="perscn" type= "personType"

min0ccurs=”0" maxOccurs="unbounded" />

</xsd:complexType>

<xsd: complexType name="personType">

<xsd:sequence>

<xsd: element. name="name">

<xsd: complexType>

<xsd:attribute name=first" type="xsd:string”

use= "optional" />

<xsd:attribute name="second" type="xsd:string" use="optional" />

<xsd:attribute name= "surname" type="xsd:string"

use="required" />

</xsd: complexType>

</xsd:element>

<xsd:element name=,”birthday“ type="ruDate" min0ccurs="0“ />

<xsd:element name="address” type="addressType"

min0ccurs="0" maxOccurs="unbounded" />

<xsd: element name= "phone-list" type= "phone-listType" minOccurs="0"/>

</xsd:sequence>

</xsd:complexType>

<xsd:complexType name= "addressType" >

<xsd:sequence>

<xsd;element name="street" type="xsd:string" />

<xsd: element name="city" type=”cityType" />

<xsd:element name="zip" type="xsd:positiveInteger" />

</xsd:sequence>

</xsd:complexType>

<xsd:complexType name='cityType' >

<xsd: simpleContent>

<xsd;extension base='xsd:string' >

<xsd:attribute name= 'type' type='placeType’ default='город’ />

</xsd:extension>

</xsd:simpleContent>

</xsd:complexType>

<xsd:simpleType name=”placeType”>

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

<xsd:enumeration value="город" />

<xsd:enumeration value="пoceлoк,” />

<xsd: enumeration value="«деревня" />

</xsd: restriction>

</xsd: simpleType>

<xsd:complexType name=”phone-listType">

<xsd:element name="work-phone” type=”xsd:string" min0ccurs=”0" maxOccurs=”unbounded" />

<xsd;element name="home-phone" type="xsd:string” min0ccurs=”0" maxOccurs=”unbounded" />

</xsd:complexType>

<xsd:simpleType name="ruDate>

<xsd:restriction. Base="xsd: string">

<xsd:pattern value=" [0-9] {2}. (0-9) {2}. [0-9] {4}” />

</xsd:restriction

</xsd:simpleType>

</xsd:schema>

Листинг 14.3, как обычный документ XML, начинается с пролога, показывающего версию XML и определяющего стандартное пространство имен схемы XML с идентификатором http://www.w3.org/2001/XMLSchema. Этому идентификатору дан префикс xsd. Конечно, префикс может быть другим, часто пишут префикс xs.

Все описание схемы нашей адресной книжки заключено в одной третьей строке, в которой указано, что адресная книга состоит из одного элемента с именем notebook, имеющего сложный тип notebookType. Этот элемент должен появиться в документе ровно один раз. Остаток листинга 14.3 посвящен описанию типа этого элемента и других типов.

Описание сложного типа notebookType несложно (простите за каламбур). Оно занимает три строки листинга, не считая открывающего и закрывающего тега, и просто говорит о том, что данный тип составляют несколько элементов person типа personType.

Описание типа personType немногим сложнее. Оно говорит, что этот тип составляют четыре элемента name, birthday, address и phone-list. Для элемента name сразу же определены необязательные атрибуты first и second простого типа string, определенного в пространстве имен xsd. Тип обязательного атрибута surname — тоже string.

Далее в листинге 14.3 определяются оставшиеся типы addressType, phone- listType и ruDate. Необходимость определения простого типа ruDate возникает потому, что встроенный в схему XML тип date предписывает запи­сывать дату в виде 2003-02-22, а в России принят формат 22.02.2003. Тип ruDate определяется как сужение (restriction) типа string с помощью шаблона. Шаблон (pattern) для записи даты в виде ДД.ММ.ГГГГ задается регулярным выражением.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: