Технология XSLT - страница 24

стр.

(ранее зарезервированные Unicode), называемые суррогатными парами (surrogate pairs). Младшие 10 бит каждого значения отводятся на кодировку символа, что в итоге дает 20 бит, достаточных для записи любого кода, не превышающего >#xFFFFF (табл. 1.3).


Таблица 1.3. Формы кодирования символов в UTF-16

ДиапазонКол-во байтФорма кодированияКол-во бит
>#x0-#xD7FF2>xxxxxxxx xxxxxxxx16
>#xD800-#xDFFFЗарезервированы
>#xE000-#xFFFF2>xxxxxxxx xxxxxxxx16
>#x10000-#xFFFFF4>110110xxxxxxxxxx 110110xxxxxxxxxx20
Примеры

Символ "" с кодом >#x42D будет записан в UTF-16 в виде последовательности из двух байт — >#x042D.

Для символа с кодом >#x153DC (в двоичном представлении — >10101001111011100) понадобится 4 байта. Он будет записан в виде

>1101100001010100 1101101111011100

или >#xD854DBDC в шестнадцатеричном исчислении.

Полужирным шрифтом выделены управляющие биты UTF-16, курсивом — биты кода символа.

UTF-32

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