Листинг 14.1. Пример XML - документа

<?xml version=”1.0" encoding="Windows-1251?>

<!DOCTYPE notebook SYSTEM “ntb.dtd">

<notebook>

<person>

<name>

<first-name>Иван</first-name>

<second-name>Петрович</second-name>

<surname>Сидоров</surname>

</name>

<birthday>25.03.1977</birthday>

<address>

<street>Садовая, 23-15</street>

<city>Урюпинск</city>

<zip>123456</zip>

</address>

<phone-list>

<work-phone>2654321</work-phone>

<work-phone>2654023</work-phone>

<home-phone>3456781</home-phone>

</phone-list>

</person>

<person>

<name>

<first-name>Мария< /first-name>

<second-name>Петровна</second-name>

<surname>Сидорова</surname>

</name>

<birthday>17 .05.1969</birthday>

<address>

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

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

< zip>23456К/zip>

</address>

<phone-list>

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

</phone-list>

</person>

</notebook>

Документ XML начинается с необязательного пролога, состоящего из двух частей.

В первой части пролога — объявлении ХМL (XML declaration), — записанной в первой строке листинга 14.1, указывается версия языка XML и необязательная кодировка документа. По умолчанию принимается кодировка UTF-8.

Все элементы документа XML обязательно должны содержаться в корневом элементе (root element), в листинге 14.1 это — элемент <notebook>. Имя корневого элемента считается именем всего документа и указывается во второй части пролога, называемой объявлением типа документа (Document Туре Declaration). (Не путайте с определением типа документа DTD!) Имя документа записывается после слова DOCTYPE Объявление типа документа записано во второй строке листинга 14.1. В этой части пролога после слова DOCTYPE и имени документа в квадратных скобках идет описание DTD:

<! DOCYPE notebook. [сюда заносится описание DTD]>

Очень часто описание DTD составляется сразу для нескольких документов XML. В таком случае его удобно записать отдельно от документа. Если описание DTD отделено от документа, то во второй части пролога вместо квадратных скобок записывается одно из слов SYSTEM или PUBLIC. За словом SYSTEM идет URI (Universal Resource Identifier, универсальный идентификатор ресурсов) файла с описанием DTD, а за словом PUBLIC, кроме того, можно записать дополнительную информацию.

ХМL-документ состоит из элементов. Элемент начинается открывающим тегом, потом идет необязательное тело элемента и в заключении — закрывающий тег:

<Открывающий тег>Тело элемента</3акрывающий тег>

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

Язык XML, в отличие от языка HTML, требует обязательно записывать закрывающие теги. Если у элемента нет тела и закрывающего тега (empty — пустой элемент), то его открывающий тег должен заканчиваться символами “/>”, например:

<br />

Сразу надо сказать, что язык XML. в отличие от HTML, различает регистры букв.

Из листинга 14.1 видно, что элементы документа XML могут быть вложены друг в друга. Надо следить за тем, чтобы элементы не пересекались, а полностью вкладывались друг в друга. Как уже говорилось выше, все элементы, составляющие документ, вложены в корневой элемент этого документа. Тем самым документ наделяется структурой дерева вложенных элементов.

У открывающих тегов XML могут быть атрибуты. Например, имя, отчество и фамилию можно записать как атрибуты first, second и surname тега <name>:

<name first="Иван" second="Петрович” surname=”Сидоров" />

В отличие от языка HTML в языке XML значения атрибутов обязательно надо заключать в кавычки или апострофы.

Атрибуты удобны для описания простых значений. У каждого гражданина России, уважающего паспортный режим, обязательно есть одно имя, одно отчество и одна фамилия. Их удобно записывать атрибутами. Но у гражданина России может быть несколько телефонов, поэтому их номера удобнее оформить как элементы <work-phone> и <home-phone>, вложенные в элемент <phone-list>, а не атрибуты открывающего тега <phone-list>. Заметьте, что элемент <name> с атрибутами пустой, у него нет тела, следова­тельно, не нужен закрывающий тег. Поэтому тег <name> с атрибутами за­вершается символами “/>”. В листинге 14.2 приведена измененная адресная книжка.