Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЭУМК_ИТИРОД(Часть 1).docx
Скачиваний:
35
Добавлен:
11.05.2015
Размер:
1.17 Mб
Скачать

Глава 1. Обработка документов xml 77

<surname>CMflopoBa</surname>

</name>

<birthday>17.05.1969</birthday>

<address>

<street>HroflHaH, 17</street>

<city>Жмepинкa</city>

<zip>23456K/zip>

</address>

<phone-list>

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

</phone-list>

</person>

</notebook>

Документ XML начинается с необязательного пролога, состоящего из двух частей. В первой части пролога — объявлении XML (XML declaration), — записанной в первой строке листинга 1.1, указывается версия языка XML, необязательная кодировка документа и отмечается, зависит ли этот документ от других документов XML (standaione="yes"/"no"). По умолчанию принимается кодировка UTF-8.

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

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

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

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

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

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

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

<br />

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

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

work-phone home-phone

Рис. 19. Дерево элементов документа XML

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

<name first="HBaH" зесопс!="Петрович" зигпате="Сидоров" />

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

Атрибуты удобны для описания простых значений. У каждого гражданина России, уважающего паспортный режим, обязательно есть одно имя, одно отчество и одна фамилия. Их удобно записывать атрибутами. Но у гражданина России может быть несколько телефонов, поэтому их номера удобнее оформить как элементы <work-phone> и <home-phone>, вложенные в эле-

мент <phone-iist>, а не атрибуты открывающего тега <phone-iist>. Заметьте, что элемент <name> с атрибутами пустой, у него нет тела, следовательно, не нужен закрывающий тег. Поэтому тег <name> с атрибутами завершается символами "/>". В листинге 28 приведена измененная адресная книжка.

Листинг 28. Пример XML-документа с атрибутами в открывающем теге

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

<!DOCTYPE notebook SYSTEM "ntb.dtd">

<notebook>

<person>

<name first="MBaH" эесогк1="Петрович" зигпате="Сидоров"

<birthday>25.03.1977</birthday>

<address>

<street>CaflOBaH, 23-15</street>

<city>ypronMHCK</city>

<zip>123456</zip>

</address>

<phone-list>

<work-phone>265432K/work-phone>

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

<home-phone>34 5 67 81</home-phone>

</phone-list>

</person>

<person>

20 Разработка Web-служб средствами Java

<name first="MapnH" зесопс!="Петровна" зигпате="Сидорова" />

<birthday>17.05.1969</birthday>

<address>

<street>HroflHaH, 17</street>

<city>Жмepинкa</city>

<zip>23456K/zip>

</address>

<phone-list>

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

</phone-list>

</person>

</notebook>

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

<city type="ropofl">MocKBa</city>

Для описания адресной книжки нам понадобились открывающие теги <notebook>, <person>, <name>, <address>, <street>, <city>, <zip>, <phoneiist>, <work-phone>, <home-phone> и соответствующие им закрывающие теги, помеченные наклонной чертой. Теперь необходимо дать их описание.

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

• Элемент <notebook> может содержать в себе только нуль или больше элементов <person>.

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

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

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

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

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

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

• У открывающего тега <city> есть один необязательный атрибут type,

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

•Необязательный элемент <phone-iist> содержит нуль или более элементов <work-phone> И <home-phone>.

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

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