Выбрать главу

Псевдоатрибут version содержит информацию о версии XML, в соответствии с которой был создан этот документ. Текущей версией языка XML является 1.0, поэтому в большинстве случаев указывается version="1.0".

Пример

<?xml version="1.0"?>

Псевдоатрибут encoding сообщает, в какой кодировке создан данный документ. По умолчанию выбрана Unicode-кодировка UTF-8 (подробнее см. "Использование Unicode"), но точно так же может быть использована и любая другая кодировка, лишь бы только ее поддерживало программное обеспечение, обрабатывающее документ.

Пример

Большинство документов, созданных на русском языке, используют кириллические кодировки windows-1251 и KOI8-R; XML-декларации для этих документов будут иметь вид:

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

и

<?xml version="1.0" encoding="KOI8-R"?>

соответственно.

Для документов, в которых использовались только нижние 127 символов ASCII, то есть, символы с кодами, не превышающими #x7F, псевдоатрибут encoding указывать необязательно. В этой области символов кодировка UTF-8 совпадает с ASCII.

Псевдоатрибут standalone говорит о том, использует ли этот документ какие-либо внешние объявления или нет. Как мы узнаем чуть позже, XML-документы могут использовать информацию, которая находится во внешних документах. Опция standalone, имеющая значение "yes", означает, что документ не содержит таких объявлений, и, значит, может быть обработан без обращения к внешним источникам.

Декларации XML соответствует продукция XMLDecl, которая, в свою очередь, использует несколько дочерних правил:

[23] XMLDecl ::= '<?xml' VersionInfo EncodingDecl?

                  SDDecl? S? '?>'

Продукция VersionInfo определяет синтаксис псевдоатрибута version:

[24] VersionInfo ::= S? 'version' Eq

                     ("'" VersionNum "'"

                     | "" VersionNum "")

Значение версии документа может состоять из латинских букв и цифр, а также символов "_", ".", ":" и "-":

[26] VersionNum ::= ([a-zA-Z0-9_.:] | '-')+

Кодировка объявляется продукцией EncodingDecl, которая синтаксически похожа на VersionInfo:

[80] EncodingDecl ::= S? 'encoding' Eq

                      ("'" EncName "'"

                      | '"' EncName '"')

Имя кодировки, EncName, может состоять только из латинских букв, цифр и символов ".", "_" и "-", причем первым символом названия кодировки всегда должна быть буква:

[81] EncName [A-Za-z] ([A-Za-z0-9.-] | '-')*

Используемое в документе название кодировки должно быть известно программному обеспечению, которое этот документ обрабатывает. В противном случае могут возникнуть ошибки и несоответствия. В спецификации рекомендуется использовать названия кодировок, одобренные IANA (Internet Assigned Numbers Authority — Комитет присвоенных кодов Интернет). Кириллице, которая используется в русском языке, в списках IANA присваивается около десятка кодировок. Самыми распространенными из них являются следующие:

□ Windows-1251;

□ KOI8-R;

□ Cp866;

□ ISO-8859-5.

Техническая рекомендация XML оговаривает, что. в тех случаях, когда имя использованной кодировки не является стандартным, оно должно указываться с префиксом "x-", например:

<?xml version="1.0" encoding="x-BK-CYR"?>

Псевдоатрибуту standalone соответствует EBNF-правило SDDecl:

[32] SDDecl ::= S 'standalone' Eq

                (("'" ('yes' | 'no') "'")

                | ( '"' ('yes' | 'no') '"' ) )

Расшифровывается это правило очень просто: псевдоатрибут standalone может иметь значение yes или no, заключенное в одинарные или двойные кавычки.

Секции СDATA

Секции CDATA выделяют части документа, внутри которых текст не должен восприниматься как разметка. CDATA означает буквально "character data" — символьные данные. Секции CDATA задаются следующим образом:

<![CDATA[содержимое]]>

Поскольку синтаксис разметки документов в XML имеет текстовую форму, часто бывает, что само содержимое документа может быть воспринято как разметка. В том случае, когда этого желательно избежать, самым простым выходом будет поместить такие данные внутрь секции CDATA.

Пример

Следующий текст в документе

<slogan>Покупайте наших слонов!</slogan>

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

<![СDАТА[<slogan>Покупайте наших слонов!</slogan>]]>

Такая конструкция уже будет воспринята как символьные данные. Другим примером может быть использование символов "<" и "&":

<![CDATA[ if ( а < b && b < с ) {...} ]]>

Секции символьных данных задаются четырьмя довольно простыми правилами:

[18] CDSect  ::= CDStart CData CDEnd

[19] CDStart ::= '<![CDATA['

[20] CData   ::= Char* - (Char* ']]>' Char*))

[21] CDEnd   ::= ']]>'

Содержимое секции символьных данных, отвечающее продукции CData, может состоять из любых символов, в том числе "<" и "&", которые не будут восприниматься как разметка. Единственное, чего секции CDATA не могут включать — это последовательность "]]>", которая завершает символьную секцию.

Комментарии (comments)

XML-документ может содержать комментарии, которые записываются следующим образом:

<!-- текст комментария -->

Текст комментария может состоять из любых символов, кроме двух минусов

подряд ("--"). Кроме этого, комментарий не должен заканчиваться символом "-" .

Пример комментария:

...

<!-- product title="Слон">

 Покупайте наших слонов!

</product-->

...

Продукция комментария называется в XML Comment и имеет следующий вид:

[15] Comment ::= '<!--' ((Char - '-') | ('-' (Char- '-')))* '-->'

Выражение ((Char - '-') | ('-' (Char - '-')))* означает, что содержимое комментария не должно оканчиваться на знак "-" или содержать два таких знака последовательно.

Пространства имён

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

За время существования XML была создана разметка для большого числа задач. На таких Web-сайтах, как http://www.xml.org, http://www.schema.net и http://www.ebxml.org можно с большой вероятностью найти определения структуры документов для огромного количества предметных областей. Во многих случаях уже созданные схемы помогут сократить этап концептуального моделирования документов.