Парсим просторы XML

Никита Кислицин

Xakep, номер #061, стр. 061-094-3


Теперь перейдем к описанию непосредственно синтаксиса XML. Каждый документ должен начинаться со строки, которую принято называть "объявлением XML". Она имеет следующий вид: <?xml version="n.n"?>, где n.n - версия языка созданного документа. В настоящий момент последней версией является 1.1, но 1.0 по-прежнему широко используется. Кроме того, различия между версиями весьма несущественны.

Элементы в XML по виду аналогичны элементам HTML: они также заключаются в теги. Начальные и конечные теги одного элемента должны иметь одно и то же имя - следует обращать внимание на регистр букв: теги <tag> и <Tag> - различные элементы. Как и в HTML, компоненты документа могут иметь атрибуты, значения которых являются частью содержимого элемента, но анализатору не передаются.

Использование так называемых "сущностей" позволяет разработчику многократно подставлять длинные куски текста, используя более короткие псевдонимы. Так, длиннющую строку можно обозначить сущностью &var;, после чего вставлять в различных местах XML-документа. Сущности объявляются в блоке, где задается тип элементов – это так называемые DTD документа. Различают внутренние и внешние сущности. Первые объявляются непосредственно в документе, а последние связаны с содержимым внешнего файла.

Объявление типа документа (DTD, Document Type Definition) накладывает некоторые ограничения на содержимое элементов XML-документа. DTD задает элементы и атрибуты, которые можно использовать в документе. Вот его синтаксис:

<!DOCTYPE rootelement [ ]>

Rootelement - имя корневого элемента. В квадратные скобки помещается объявление различных элементов, их атрибутов и т.д.

Документ XML может иметь и внешнее DTD, объявление которого имеет следующий вид:

<!DOCTYPE rootelement SYSTEM "http://url_to_dtd"]>

При помощи объявления типа элемента становится возможным явно указать, может ли элемент содержать текст или какие-нибудь другие данные. Оно также указывает, являются ли элементы обязательными и сколько раз они могут встречаться. Тип элемента определяется следующим образом:

<!ELEMENT name type>

Где name - это имя элемента, а type - его тип. Тип может принимать три различных значения: (#PCDATA) - символьные данные; EMPTY - указывает на то, что элемент не может содержать данных; ANY - элемент может содержать в себе все что угодно.

При помощи строки <!ATTLIST elementname Attrname datatype flag> можно указать список возможных атрибутов элемента elementname, их типов и возможности их обработки. Поле flag может принимать одно из трех значений: #REQUIRED - означает, что это обязательный параметр; #IMPLIED - приложение может использовать значение по умолчанию, если параметр явно не определен; #FIXED - данный атрибут имеет только одно значение для всех экземпляров этого элемента.

Определение внутренних сущностей имеет следующий формат:

<!ENTITY name "value">

Такое определение создаст сущность &name; со значением value. Как только анализатор XML встретит в документе упоминание этой сущности, оно будет заменено значением value. Как я уже упоминал выше, значение сущности может находиться и во внешнем файле. В этом случае ее определение будет иметь следующий формат:

Назад на стр. 061-094-2  Содержание  Вперед на стр. 061-094-4