Вопрос 2. Элементы и атрибуты XML-документа

Элементы XML-документа

XML - файл состоит из текста и разметки. Текст размещается в элементе, который начинается и заканчивается тегами.

Элемент имеет имя (это тип элемента), заключённое в угловые скобки <>, которое определяет начальный и конечный тэг (дискриптор). Имена (типы элементов) чувствительны к регистру символа. Имя элемента может начинаться с буквы, знака подчёркивания (_) или двоеточия (:) и не могут начинаться с буквосочетания “xml”.

Конечный тэг (дискриптор) дополнительно имеет косую черту.

Элемент может содержать один тэг (дискриптор) с пробелом и замыкающей косой чертой в конце:

 

<author = "Леонтьев" />

 

Элемент, состоящий из одного тэга (дискриптора) называется пустым элементом, а из двух тэгов и содержащий в себе любые данные – непустым.

Угловая скобка в начале дискриптора (<) в языках разметки называется MDO (Markup Declaration Open – открытие декларации разметки), а в конце дискриптора (>) - называется MDC (Markup Declaration Close – закрытие декларации разметки).

Хорошо оформленный XML документ обязательно должен иметь корневой элемент (root element). Внутри корневого элемента кроме текста могут находиться вложенные элементы:

 

<tutorial>

<title>"Учебное пособие по XМL"</title>

<author>Леонтьев Алексей Георгиевич</author>

</tutorial>

 

В XML - файле должен присутствовать только один корневой элемент. В примере это <tutorial>.

Вложенные элементы называются дочерними элементами, а элементы, которые их окружают – родительскими элементами.

Такое требование возникло потому, что один документ XML можно вложить в другой. При этом корневой элемент вложенного документа станет просто одним из элементов документа, в который он вложен. Такое вложение не нарушит структуру документа.

 

Начинается XML-файл обычно с объявления, которое ещё называют пролог (prolog). Пролог состоит из двух частей.

Первая часть пролога включает декларацию XML (XML Declaration). Декларация заключена между символами <?...?>, содержит пометку xml и номер версии спецификации XML. Она может включатьуказания на кодировку символов в которой написан данный текст. В объявление можно поместить еще параметр standalone со значениями "yes" или "no". Значение "no" показывает, что документ использует определения элементов, сделанные в другом, внешнем, документе. По умолчанию принимается значение "yes". Итак, полное объявление XML может выглядеть следующим образом:

 

<?xml version="1.0" encoding="WINDOWS-1251" standalone="yes"?>

 

Вторая часть пролога — объявление типа документа, DTD (Document Type Declaration) — может занимать одну или несколько строк. В этой части объявляются теги, использованные в документе, или приводится ссылка на файл, в котором записаны такие объявления. Объявление типа документа начинается с символов <!DOCTYPE, а заканчивается угловой скобкой — знаком "больше" >. Его содержимое зависит от способа объявления тегов.

Все это вместе выглядит так:

 

<?xml version="1.0" encoding="WINDOWS-1251" standalone="yes"?>

<!DOCTYPE tutorial SYSTEM "filename.dtd">

 

В примере рассматривается первая версия XML и русская кодировка символов для операционных систем Windows. Для операционных систем UNIX русская кодировка – "KOI8-R". Можно использовать универсальную кодировку "UTF-8" для Unicode.

Правила описания элементов XML-файла tutorial находится в каталоге SYSTEM, а не в общем каталоге PUBLIC в файле filename.dtd.

В примере, в соответствии с правилами, имя XML документа tutorial совпадает с именем корневого элемента.

 

Атрибуты XML-документа

 

Атрибуты состоят из имени и значения, где значение берется в двойные кавычки ("). Атрибуты позволяют сохранять вместе с элементом дополнительные параметры. Атрибут (или несколько атрибутов) указывается внутри начального тега элемента. При добавлении нескольких атрибутов они разделяются пробелами:

 

<author name="Леонтьев" surname="Алексей">

 

Имена атрибутов могут содержать такие же символы, что и имена элементов, с теми же правилами исключения пробелов и начала имени с буквы.

Значение атрибутов может заключаться как в одинарные (апострафы), так и в двойные кавычки. Кроме того возможно также использование одних кавычек внутри других:

 

<myElement attribute='"value"'></myElement>

 

Если значение атрибута содержит в себе кавычки, то его нужно заключить в апострофы, если значение содержит апострофы, то его заключают в кавычки. Если же кавычки и апострофы уже использованы для ограничения значений атрибутов, то внутри значения кавычку можно заменить ссылкой на сущность &quot;, а апостроф – ссылкой &apos;. Вместо ссылок на сущности можно записать коды кавычки и апострофа– &#34; и &#39;. В шестнадцатеричной форме коды кавычки и апострофа выглядят так: &#х22;и &#х27;.

Во время обдумывания разметки документа и создания тегов всегда возникает вопрос о том, куда поместить ту или иную информацию: в содержимое элемента или в его атрибуты? Ответ неоднозначен, он зависит и от самой информации, и от целей ее разметки, а часто это просто дело вкуса.

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

 

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

<!DOCTYPE notebook SYSTEM "ntb.dtd">

<notebook>

<person>

<name first="Ивaн" sесоnd="Петрович" surname="Сидоров" />

<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>2654 023</work-phone>

<home-phone>34567 81</home-phone>

</phone-list>

</person>

<person>

<name first="Mapия" sесоnd ="Петровна" surname="Сидорова" />

<birthday>17.05.1969</birthday>

<address>

<street>Малиновская, 17</street>

<city>Пушкин</city>

<zip>234561</zip>

</address>

<phone-list>

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

</phone-list>

</person>

</notebook>

 

В этом примере первые две строки – пролог (декларации, определения).

Элемент <name first="Ивaн" sесоnd="Петрович" surname="Сидоров" />- пустой и содержит три атрибута.

Элемент <person> повторяется дважды и является родительским для элементов: <name />, <birthday>, <address>, <phone-list>. Некоторые из этих элементов в свою очередь являются родительскими.

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

 

<city type="город">Mocквa</city>

 

Как видите, значения атрибутов можно записывать не только латинскими, но и русскими буквами. Спецификация XML допускает для записи значений атрибутов и содержимого элементов практически все символы Unicode.