□ cdata-section-elements
— определяет список элементов, текстовое содержимое которых должно быть выведено с использованием секций CDATA.
Использование этих атрибутов зависит от того, какой из методов выбран для вывода преобразованного документа.
Для того чтобы вывести результирующее дерево в виде XML-документа, следует использовать в элементе xsl:output
метод "xml"
. Ниже мы подробно опишем, каким образом на выход должны влиять другие атрибуты этого элемента.
Атрибут version
Этот атрибут определяет версию языка XML, которая должна использоваться для вывода результирующего документа. В случае если процессор не поддерживает указанную версию, он может либо выдать ошибку, либо использовать одну из поддерживаемых версий. На данный момент единственной действующей версией языка является версия 1.0 и потому, если в атрибуте в version
будет указано другое значение, единственным эффектом от этого будет измененный параметр version
в декларации XML.
Пример
Предположим, что в преобразовании версия выходящего документа задана как 1.2:
Тогда процессор может вывести декларацию XML в следующем виде:
Значением атрибута version по умолчанию является "1.0"
, то есть, для того, чтобы получить декларацию XML вида
и т. д. ?>
достаточно опустить определение атрибута version
:
Атрибут encoding
Атрибут encoding
указывает на то, какая кодировка предпочтительна для выходящего документа. Множество кодировок зависит от используемого процессора, но при этом в соответствии с технической рекомендацией все они обязаны поддерживать Unicode-формы кодировок UTF-8 и UTF-16.
В случае если процессор не поддерживает кодировку, указанную в атрибуте encoding
, процессор может либо выдать ошибку, либо использовать UTF-8 или UTF-16.
Если атрибут encoding
опущен, процессор должен по умолчанию использовать UTF-8 или UTF-16. На практике абсолютное большинство процессоров используют по умолчанию кодировку UTF-8.
При выводе содержимого выходящего документа может возникнуть ситуация, когда в выходящем потоке будут находиться символы, которые невозможно будет отобразить при используемой кодировке. В этом случае непечатаемые символы должны быть заменены символьными сущностями.
Пример
Представим себе входящий документ в кодировке UTF-8, содержащий символ кириллицы " Э
" с Unicode-кодом #x42d
(или #1069
в десятичной системе счисления):
Э
Если преобразование будет использовать для вывода кодировку, которая не может отображать символы кириллического алфавита, например ISO-8859-1, то символ " Э
" в выходящем документе должен быть заменен символьной сущностью.
Листинг 8.36. Преобразование
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
method="xml"
encoding="ISO-8859-1"
indent="yes"/>
Листинг 8.37. Выходящий документ
Э
Вместе с тем синтаксис XML не разрешает использовать символьные сущности в именах элементов и атрибутов, и наличие в них символов, не отображаемых кодировкой вывода, будет являться ошибкой. Если в предыдущем примере документ будет иметь вид
<���страница>Э</страница>
то вывести результирующее дерево в кодировке ISO-8859-1 будет невозможно.
Атрибут indent
Индентацией называют форматирование исходного текста, не влияющее на семантику, но облегчающее читаемость. К примеру, один и тот же XML-документ можно написать как
<���В><���С/></В><���С><���В></В></С></А>
или
Очевидно, что второй случай гораздо легче для понимания, поскольку в нем легко можно видеть принадлежность элементов одного другому. Подобное форматирование можно использовать и при выводе преобразованного документа при помощи атрибута indent
элемента xsl:output
. Если этот атрибут имеет значение "yes"
, процессор может добавить один или несколько пробельных символов или символов перевода строки — в зависимости от реализации. Как правило, каждый дочерний элемент помещают на новой строке, добавляя впереди два пробела на каждый уровень вложенности.
Пример
Листинг 8.38. Входящий документ
</В>
Листинг 8.39. Преобразование
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Листинг 8.40. Выходящий документ
Следует быть осторожными при использовании indent="yes"
там, где в содержимом документа могут встречаться значащие пробелы. Индентация позволяет процессору при выводе документа добавлять пробельные символы по собственному усмотрению. В случаях, когда при последующей обработке преобразованного документа пробельные символы могут быть восприняты неадекватно, лучше индентацию не использовать.
Читать дальше