Элементы 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 >
Если значение атрибута содержит в себе кавычки, то его нужно заключить в апострофы, если значение содержит апострофы, то его заключают в кавычки. Если же кавычки и апострофы уже использованы для ограничения значений атрибутов, то внутри значения кавычку можно заменить ссылкой на сущность ", а апостроф – ссылкой '. Вместо ссылок на сущности можно записать коды кавычки и апострофа– " и '. В шестнадцатеричной форме коды кавычки и апострофа выглядят так: &#х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.