KnigaRead.com/

Алексей Валиков - Технология XSLT

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн Алексей Валиков, "Технология XSLT" бесплатно, без регистрации.
Перейти на страницу:

□ Для остальных символов число байт определяется количеством ведущих единиц первого байта последовательности.

□ Два первые бита каждого последующего байта равны единице и нулю соответственно.

□ Все остальные биты используются для кодирования символа.

В табл. 1.2 для каждого интервала символов показано количество байт, нужных для кодирования символа, форма кодирования и количество бит, доступных для кода.


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

Диапазон Кол-во байт Форма кодирования Кол-во бит #x0-#x7F 1 0xxxxxxx 7 #x80-#x7FF 2 110xxxxx 10xxxxxx 11 #x800-#xFFFF 3 1110xxxx 10xxxxxx 10xxxxxx 16 #x10000- #x1FFFFF 4 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 21

К примеру, символу "Э" (заглавной русской букве "Э") Unicode присваивает код #x42D или 10000101101 в двоичном представлении. Это значение входит в интервал #x80-#x7ff, значит, для кодирования нужно использовать двух-байтовую форму вида 110xxxxx 10xxxxxx, где символы "x" обозначают 11 бит, доступных для кодировки. Таким образом, данному символу будет соответствовать следующий двоичный код:

11010000 10101101

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

Полужирным шрифтом выделены управляющие биты UTF-8 (110 означает, что символ закодирован двухбайтной последовательностью, 10 определяет второй байт последовательности), курсивом — биты кода символа.

Удобство UTF-8 заключается в том, что кодировка первых 127 символов совпадает с широко распространенной 7-битной кодировкой ASCII. Это делает возможным использование уже существующего программного обеспечения для обработки текста в UTF-8, например текстовых редакторов.

UTF-16

Для записи наиболее часто используемых символов с кодами, меньшими #xFFFF, UTF-16 использует двухбайтные последовательности, в которых каждый бит соответствует биту кода. Помимо этого, в UTF-16 могут быть также представлены символы с кодами в диапазоне #10000-#FFFFF. Для кодирования этих символов в UTF-16 применяются пары 16-битных значений в интервале #xD800-#xDFFF (ранее зарезервированные 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

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

                 | '.' | '-' | '_' | ':'

Имя начинается либо буквой, либо символами "_" или ":" и состоит из последовательности именных символов:

[5] Name ::= (Letter | '_' | ' :') (NameChar*)

В некоторых правилах XML используется последовательность имен, соответствующая продукции Names:

[6] Names ::= Name (S Name)*

Кроме того, техническая рекомендация определяет так называемый именной токен NmToken — строку, которая может состоять из одного или более именных символов и последовательности таких токенов, NmTokens.

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*