Коды многих других символов можно найти на Web-сайте Unicode Consortium в разделе Code Charts: http://www.unicode.org/charts/.
Базовые продукции XML
Теперь, когда мы разобрали модель символов Unicode, которая используется в XML, можно дать EBNF-определения основных базовых конструкций языка — символов, имен, именных токенов и их последовательностей.
В XML можно использовать любые символы Unicode, кроме суррогатных блоков и символов с кодами #xFFFE
и #xFFFF
:
[2] Char ::= #x9 | #xA | #xD | [#x20 - #xD7FF]
| [#хЕ000 - #xFFFD) | [#х10000 - #x10FFFF]
Для удобства все множество символов разделено на несколько категорий.
□ Буквы, которые соответствуют продукции Letter
, в свою очередь, делятся на основные (BaseChar
) и идеографические (Ideographic
). Буквы относятся к алфавитам, из которых состоят слова различных языков. Продукции букв чрезвычайно просты, но громоздки, поскольку перечисляют символы различных алфавитов. Читатель может легко найти их в технической рекомендации XML по адресу http://www.w3.org/TR/REC-xml.html под номерами [84] (Letter
), [85] (BaseChar
) и [86] (Ideographic
).
□ Цифры, которые составляют в различных культурах числа. Цифры определяются продукцией Digit
с номером [88].
□ Модифицирующие символы (CombiningChar
), которые изменяют написание или звучание символов, как, например, #x308 — двойная точка сверху символа, которая используется для обозначения умляута в немецком и для замены e
на ё
в русском языке. Продукция CombiningChar
имеет номер [87].
□ Символы расширения (Extender
). Продукция Extender
имеет порядковый номер [89].
Следующей простейшей символьной конструкцией является пробельное пространство 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
— литерал, определяющий публичный идентификатор ресурса (см. раздел "Определение сущности" данной главы):
[9] EntityValue ::= '"' ([^%&"] | PEReference | Reference)* '"'
| "'" ([^%&'] | PEReference | Reference)* "'"
[10] AttValue ::= '"' ([^<&"] | Reference)* '"'
| ([^<&"] | Reference)* "'"
[11] SystemLiteral ::= ('"' [^"]* '"')
| ("'" [^']* "'")
[12] PubidLiteral ::= '"' PubidChar* '"'
| "'" (PubidChar - "'")*
[13] PubidChar ::= #x20 | #xD | #xA
| [a-zA-Z0-9] | [-'()+,./:=?;!*#@$_%]
В литералах EntityValue
и AttValue
допустимо использовать продукции сущностей (PEReference
, Reference
). Это означает, что при определении значений сущностей и атрибутов можно использовать ссылки на сущности, например, в элементе заданном как:
<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
), инструкций, комментариев и пробельных символов: