Кодировки в XSLT-преобразованиях
Кодировки в XSLT-преобразованиях
Несмотря на то, что в логических деревьях, которыми манипулирует XSLT, текстовые узлы представляются в кодировке Unicode, очень часто в обрабатываемых документах бывает необходимо использовать также другие кодировки. К примеру, большинство русскоязычных документов хранятся в кодировках Windows-1251 и KOI8-R.
Если внимательно присмотреться к преобразованиям, можно заметить, что, как правило, в них участвуют минимум три документа — входящий (преобразовываемый) документ, документ преобразования (преобразующий) и выходящий (преобразованный документ). Соответственно, каждый из них может иметь собственную кодировку.
Кодировка входящего документа указывается в его xml-декларации. Например, документы в кодировке Windows-1251 должны иметь xml-декларацию вида
<?xml version="1.0" encoding="windows-1251"?>
Возможно, небольшим сюрпризом окажется то, что в соответствии со стандартом XML, имена тегов вовсе не обязаны состоять исключительно из латинских букв. В имени элемента можно использовать весь кириллический алфавит, а также множество других символов. Совершенно корректным будет документ
<?xml version="1.0" encoding="windows-1251"?>
<страница>
<содержимое/>
</страница>
Аналогичным образом кириллицу, а также другие наборы символов и алфавиты можно использовать и в самих преобразованиях, поскольку те в свою очередь также являются XML-документами.
Пример
Листинг 8.57. Входящий документ
<?xml version="1.0" encoding="windows-1251"?>
<каждый>
<охотник>
<желает>
<знать>
<где>
<сидит>
<фазан/>
</сидит>
</где>
</знать>
</желает>
</охотник>
</каждый>
Листинг 8.58. Преобразование
<?xml version="1.0" encoding="windows-1251"?>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes" encoding="windows-1251"/>
<xsl:template match="каждый">
<редкий>
<xsl:apply-templates/>
</редкий>
</xsl:template>
<xsl:template match="охотник">
<рыболов>
<xsl:apply-templates/>
</рыболов>
</xsl:template>
<xsl:template match="желает/знать">
<может>
<забыть>
<xsl:apply-templates/>
</забыть>
</может>
</xsl:template>
<xsl:template match="где">
<как>
<xsl:apply-templates/>
</как>
</xsl:template>
<xsl:template match="сидит">
<плавает>
<xsl:apply-templates/>
</плавает>
</xsl:template>
<xsl:template match="фазан">
<щука>
<xsl:apply-templates/>
</щука>
</xsl:template>
</xsl:stylesheet>
Листинг 8.59. Выходящий документ
<?xml version="1.0" encoding="windows-1251"?>
<редкий>
<рыболов>
<может>
<забыть>
<как>
<плавает>
<щука/>
</плавает>
</как>
</забыть>
</может>
</рыболов>
</редкий>
Напомним, что кодировка выходящего документа определяется атрибутом encoding элемента xsl:output и не зависит от кодировок преобразования и обрабатываемых документов. Например, можно легко создать преобразование, которое будет изменять кодировку входящего документа. Это будет идентичное преобразование с элементом xsl:output, определяющим целевой набор символов.
Листинг 8.60. Преобразование, изменяющее кодировку документа на KOI8-R
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output encoding="KOI8-R"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Как можно видеть, XSLT довольно гибко поддерживает кодировки — входящие и выходящие документы, а также сами преобразования могут иметь разные наборы символов. Единственным ограничением является множество кодировок, поддерживаемое самим процессором, вернее парсером, который он использует для разбора входящих документов, и сериализатором, который служит для создания физического экземпляра выходящего документа.
Практически во всех процессорах поддерживаются кодировки UTF-8, US- ASCII и ISO-8859-1, но далеко не все могут работать с Windows-1251 или KOI8-R. Поэтому, создавая документы и преобразования в нестандартных кодировках, мы заведомо ограничиваем переносимость решений. В случаях, когда XML/XSLT приложения создаются под конкретный процессор с заведомо известными возможностями, это не является большой проблемой, однако в тех случаях, когда требуется универсальность или точно не известно, каким процессором будет производиться обработка, единственным выходом будет использовать UTF-8 — как во входящих документах, так и в самих преобразованиях.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Преобразование символов из кодировки ASCII в Unicode
Преобразование символов из кодировки ASCII в Unicode Измерения выполнялись для восьми программ, каждая из которых преобразовывала файл размером 12,8 Мбайт в файл размером 25,6 Мбайт. Соответствующие результаты представлены в табл. В.2.1. Программа atou (программа 2.4) сопоставима с
XSL = XSLT + XSL-FO
XSL = XSLT + XSL-FO Сам XSLT в действительности является частью более крупной спецификации — расширенного языка таблиц стилей, Extensible Stylesheet Language, или XSL. XSL предназначен для задания точного, до миллиметра, формата документов. Форматирующая часть XSL, представляющая гораздо более
Расширяемость XSLT
Расширяемость XSLT Несмотря на кажущуюся сложность XSLT, он во многих отношениях ограничен по сравнению с языками программирования, и в процессорах XSLT сразу же начали появляться расширения XSLT. Например, Saxon представил элемент <saxon:while>, реализуя в XSLT стандартный для
Установка кодировки символов
Установка кодировки символов Для значительных переработок исходных документов важно знать, что можно устанавливать кодировку символов в результирующих документах при помощи атрибута encoding элемента <xsl:output>. Однако нет гарантии, что ваш процессор XSLT будет
Приложение A DTD XSLT
Приложение A DTD XSLT В данном приложении приводится фрагмент определений DTD для таблиц стилей XSLT 1.0, раздел С рекомендации W3C XSLT 1.0 по адресу www.w3.org/TR/xslt. Здесь для справки перечислены элементы XSLT 1.0 и их
9.3.2. Таблицы кодировки символов
9.3.2. Таблицы кодировки символов В человеческом мире информация представляется последовательностями символов. Каждый символ имеет каноническое изображение, которое позволяет однозначно идентифицировать данный символ. Шрифты задают разные варианты начертания
Изменение размера шрифта и кодировки
Изменение размера шрифта и кодировки Для начала изучим две очень полезные команды, которые находятся в меню Вид и называются Размер шрифта и Кодировка.С первой проще. Проведя несложные манипуляции мышью (рис. 7.1), вы можете выбрать размер экранных шрифтов в зависимости от
Поддержка кодировки UNICODE
Поддержка кодировки UNICODE Microsoft ODBC 3.5 определяет два типа драйверов - ANSI и UNICODE. Gemini ODBC-драйвер является по этой классификации драйвером UNICODE. Это дает возможность приложениям, использующим версию UNICODE интерфейса ODBC, обрабатывать данные различных национальных наборов
4.2. Кодировки в пост-ASCII мире
4.2. Кодировки в пост-ASCII мире «Век ASCII» прошел, хотя не все еще осознали этот факт. Многие допущения, которые программисты делали в прошлом, уже несправедливы. Нам необходимо новое мышление.Есть две идеи, которые, на мой взгляд, являются основополагающими, почти аксиомами.
XSLT в Web-решениях
XSLT в Web-решениях Попытаемся теперь взглянуть на приложения архитектуры клиент-сервер под несколько иным углом и в более узкой области Web-решений.Примем за основу наиболее реалистичную схему, в которой преобразования выполняются на стороне сервера. Типовой процесс
Отличия XSLT 1.1 от XSLT 1.0
Отличия XSLT 1.1 от XSLT 1.0 Отсутствие result tree fragment Главное и наиболее существенное отличие XSLT 1.1 от XSLT 1.0 состоит в том, что тип данных, известный в XSLT 1.0 как result tree fragment (результирующий фрагмент дерева) в XSLT 1.1. отсутствует. Вместо него в версии 1.1 используется множество узлов,
Отличия XSLT 2.0 от XSLT 1.1
Отличия XSLT 2.0 от XSLT 1.1 Прежде чем приступить к описанию отличий второй версии XSLT от версии 1.1 (и, соответственно, 1.0), следует сделать одно существенное замечание. Лицензионные соглашения Консорциума W3 не позволяют раскрывать широкой общественности внутренние материалы