Псевдоатрибут 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 можно с большой вероятностью найти определения структуры документов для огромного количества предметных областей. Во многих случаях уже созданные схемы помогут сократить этап концептуального моделирования документов.