Читать «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> содержат по одной строке, состоящей только из цифр.
Это словесное описание, называемое
Описание 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 означает пустой элемент.