Коды некоторых символов Unicode
В таблицах символов Unicode кодируются не только символы и знаки различных языков, но также и некоторые управляющие символы, например, неразрываемый пробел (no-break space), табуляция, перенос строки и так далее. Коды некоторых из этих символов, часто использующихся в XML-технологиях, мы приводим в табл. 1.4.
Таблица 1.4. Unicode-коды некоторых символов
| Код |
Обозначение |
Описание |
#х9 |
[НТ] |
Горизонтальная табуляция (horizontal tabulation) |
#xA |
[LF] |
Перевод строки (line feed) |
#xD |
[CR] |
Возврат каретки (carriage return) |
#x20 |
[SP] |
Пробел (space) |
#x21 |
! |
Восклицательный знак (exclamation sign) |
#x22 |
" |
Двойные кавычки (quotation mark) |
#x26 |
& |
Амперсант (ampersand) |
#x27 |
' |
Апостроф или одинарные кавычки (apostrophe) |
#x3C |
< |
Знак "меньше" или левая угловая скобка (less-than sign) |
#x3F |
? |
Вопросительный знак (question mark) |
#xA0 |
[NBSP] |
Неразрываемый пробел (no-break space) |
Коды многих других символов можно найти на Web-сайте Unicode Consortium в разделе Code Charts: http://www.unicode.org/charts/.
Теперь, когда мы разобрали модель символов 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
Читать дальше