Читать «Java 7 (Наиболее полное руководство)» онлайн - страница 466

Ильдар Шаукатович Хабибуллин

</xsd:element>

<xsd:element name="birthday" type="ntb:ruDate" minOccurs="0" />

<xsd:element name="address" type="ntb:addressType" minOccurs="0" maxOccurs="unbounded" />

<xsd:element name="phone-list" type="ntb: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="ntb: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='ntb:placeType' default=’город’ /> </xsd:extension>

</xsd:simpleContent>

</xsd:complexType>

<xsd:simpleType name="placeType">

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

<xsd:enumeration уа1ие="город" />

<xsd:enumeration уа1ие="поселок" />

<xsd:enumeration value^^epeBHH" />

</xsd:restriction>

</xsd:simpleType>

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

<xsd:element name="work-phone" type="xsd:string"

minOccurs="0" maxOccurs="unbounded" />

<xsd:element name="home-phone" type="xsd:string"

minOccurs="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>

Листинг 28.4, как обычный документ XML, начинается с пролога, показывающего версию XML и определяющего стандартное пространство имен схемы XML с идентификатором . Этому идентификатору дан префикс xsd. Конечно, префикс может быть другим, часто пишут префикс xs.

Еще не встречавшийся нам атрибут targetNamespace определяет идентификатор пространства имен, в которое попадут определяемые в этом документе имена типов, элементов и атрибутов, так называемое целевое пространство имен (target namespace). Этот идентификатор сразу же связывается с префиксом ntb, который тут же используется для уточнения только что определенных имен в ссылках на них.

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

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

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