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