Следующей простейшей символьной конструкцией является пробельное пространство
S
. Приведем еще раз его продукцию:
[3] S ::= (#х9 | #хА | #xD | #x20)+
Во многих продукциях XML-языков используются имена. Например, имена даются элементам, атрибутам, переменным XPath и так далее. В основе определения имени лежат именные символы
NameChar
:
[4] NameChar ::= Letter | Digit | CombiningChar | Extender
| '.' | '-' | '_' | ':'
Имя
начинается либо буквой, либо символами "
_
" или "
:
" и состоит из последовательности именных символов:
[5] Name ::= (Letter | '_' | ' :') (NameChar*)
В некоторых правилах XML используется последовательность имен, соответствующая продукции
Names
:
[6] Names ::= Name (S Name)*
Кроме того, техническая рекомендация определяет так называемый именной токен
NmToken
— строку, которая может состоять из одного или более именных символов и последовательности таких токенов,
NmTokens
.
[7] NmToken ::= (NameChar)+
[8] NmTokens ::= NmToken (S NmToken)*
Символьные данные могут заключаться в кавычки для того, чтобы формировать литералы. В XML определены следующие литералы: значение сущности (
EntityValue
), значение атрибута (
AttValue
), системный литерал (
SystemLiteral
), а также
PubidLiteral
— литерал, определяющий публичный идентификатор ресурса (см. раздел "Определение сущности" данной главы):
). Это означает, что при определении значений сущностей и атрибутов можно использовать ссылки на сущности, например, в элементе заданном как:
<song title="Крейсер "Aвpopa" "/>
атрибут
title
имеет значение крейсер
"Аврора"
.
Двойные кавычки были определены посредством встроенных сущностей.
Символьные данные, которые задаются продукцией
CharData
, могут состоять из любых символов, кроме символов "
<
" и "
&
", которые используются в XML в качестве управляющих.
CharData
главным образом используется в секциях
CDATA
, и, соответственно, не может содержать терминирующую последовательность "
]]>
".
[14] CharData ::= [^<&]* - ([^<&]* ']]>' [^<&]*)
XML-документы с точки зрения спецификации
Теперь, когда мы разобрали практически все структурные единицы XML, осталось определить стандартным образом синтаксис для самих XML-документов. Им соответствует продукция
document
:
[1] document ::= prolog element Misc
Итак, XML-документ состоит из пролога, единственного корневого элемента и дополнительного нетерминала
Misc
, который может включать инструкции по обработке, комментарии и пробельные символы:
[27] Misc ::= Comment | PI | S
Остановимся отдельно на прологе XML-документа. Пролог состоит из необязательной декларации XML (
XMLDecl
), необязательной декларации типа документа (
doctypedecl
), инструкций, комментариев и пробельных символов:
В зависимости от того, насколько строго документы соответствуют спецификации XML и собственным DTD-объявлениям, они могут быть хорошо оформленными (well-formed) и правильными (valid).
Хорошо оформленный документ соответствует всем синтаксическим правилам XML и некоторым дополнительным ограничениям, например:
□ имя открывающего тега элемента должно совпадать с именем его закрывающего тега;
□ имена атрибутов элемента не должны повторяться;
□ в значении атрибута нельзя использовать символ "
<
". Этот символ должен обязательным образом заменяться на сущность;
□ сущности должны быть определены до использования;
□ сущности-параметры могут быть использованы только в блоках DTD;
□ документ должен иметь единственный корневой элемент, содержащий все остальные элементы и символьные данные этого документа. Вне корневого документа допускаются только комментарии, инструкции по обработке, декларация XML и блок DTD.
Правильные документы должны быть хорошо оформленными, и при этом их логическая структура должна удовлетворять объявлениям, которые содержатся в декларации типа документа (DTD).