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

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

<address>

<stгeet>Ягодная, 17</street>

<с^у>Жмеринка</ city>

<zip>234561</zip>

</address>

<phone-list>

<home-phone>2334455</home-phone>

</phone-list>

</person>

</notebook>

Атрибуты открывающего тега удобны и для указания типа элемента. Например, мы не уточняем, в городе живет наш родственник, в поселке или в деревне. Можно ввести в тег <city> атрибут type, принимающий одно из значений: город, поселок, деревня. Например:

<city type="город">Москва</city>

Для описания адресной книжки нам понадобились открывающие теги <notebook>,

<person>, <name>, <address>, <street>, <city>, <zip>, <phone-list>, <work-phone>, <home-phone> и

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

□ Элемент <notebook> может содержать ни одного, один или более одного элемента <person> и больше ничего.

□ Элемент <person> содержит ровно один элемент <name>, ни одного, один или несколько элементов <address> и ни одного или только один элемент <phone-list>.

□ Элемент <name> пустой.

□ В открывающем теге <name> три атрибута: first, second, surname, значения которых — строки символов.

□ Элемент <address> содержит по одному элементу <street>, <city> и <zip>.

□ Элементы <street> и <city> имеют по одной текстовой строке.

□ Элемент <zip> содержит одно целое число.

□ У открывающего тега <city> есть один необязательный атрибут type, принимающий одно из трех значений: город, поселок или деревня. Значение по умолчанию — город.

□ Необязательный элемент <phone-list> содержит ни одного, один или несколько элементов <work-phone> и <home-phone>.

□ Элементы <work-phone> и <home-phone> содержат по одной строке, состоящей только из цифр.

Это словесное описание, называемое схемой документа XML, формализуется несколькими способами. Наиболее распространены два способа: можно сделать описание DTD, пришедшее в XML из SGML, или описать схему на языке XSD (XML Schema Definition Language).

Описание DTD

Описание DTD нашей адресной книжки записано в листинге 28.3.

Листинг 28.3. Описание DTD документа XML

<!ELEMENT notebook (person)*>

<!ELEMENT person (name, birthday?, address*, phone-list?)> <!ELEMENT name EMPTY>

<!ATTLIST name

first CDATA #IMPLIED second CDATA #IMPLIED surname CDATA #REQUIRED>

<!ELEMENT birthday (#PCDATA)> <!ELEMENT address (street, city, zip)?>

<!ELEMENT street (#PCDATA)>

<! ELEMENT city (#PCDATA)>

<!ATTLIST city

type (город | поселок | деревня) "город">

<!ELEMENT zip (#PCDATA)>

<!ELEMENT phone-list (work-phone*, home-phone*)>

<!ELEMENT work-phone (#PCDATA)>

<!ELEMENT home-phone (#PCDATA)>

Как видите, описание DTD почти очевидно. Оно повторяет приведенное ранее словесное описание. Первое слово element означает, что элемент может содержать тело с вложенными элементами. Вложенные элементы перечисляются в круглых скобках. Порядок перечисления вложенных элементов в скобках должен соответствовать порядку их появления в документе. Слово empty в третьей строке листинга 28.3 означает пустой элемент.