Технология XSLT - страница 24
(ранее зарезервированные Unicode), называемые суррогатными парами (surrogate pairs). Младшие 10 бит каждого значения отводятся на кодировку символа, что в итоге дает 20 бит, достаточных для записи любого кода, не превышающего >#xFFFFF
(табл. 1.3).
Таблица 1.3. Формы кодирования символов в UTF-16
Диапазон | Кол-во байт | Форма кодирования | Кол-во бит |
---|---|---|---|
>#x0-#xD7FF | 2 | >xxxxxxxx xxxxxxxx | 16 |
>#xD800-#xDFFF | Зарезервированы | ||
>#xE000-#xFFFF | 2 | >xxxxxxxx xxxxxxxx | 16 |
>#x10000-#xFFFFF | 4 | >110110xxxxxxxxxx 110110xxxxxxxxxx | 20 |
Символ ">Э
" с кодом >#x42D
будет записан в UTF-16 в виде последовательности из двух байт — >#x042D
.
Для символа с кодом >#x153DC
(в двоичном представлении — >10101001111011100
) понадобится 4 байта. Он будет записан в виде
>1101100001010100 1101101111011100
или >#xD854DBDC
в шестнадцатеричном исчислении.
Полужирным шрифтом выделены управляющие биты UTF-16, курсивом — биты кода символа.
UTF-32 является самой простой формой кодирования — для каждого символа, вне зависимости от диапазона, используются 4 байта. Такой способ, несомненно, не является самым экономичным с точки зрения объема хранимой информации, но во многих случаях предоставляет определенные преимущества при обработке текста, так как символы не нужно декодировать.
Коды некоторых символов 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/.
Базовые продукции 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