Большинство документов, созданных на русском языке, используют кириллические кодировки 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='Слон'>
