Управление выводом в XSLT

5.3.6.1. Элемент xsl:output

Элемент-объявление верхнего уровня xsl:output позволяет задать вид сериализации результирующей иерархической структуры. Этот элемент имеет следующий синтаксис:

<xsl:output

name="имя"

method="xml" | "html" | "xhtml" | "text" | "имя"

version="версия"

encoding="строка"

byte-order-mark="yes" | "no"

omit-xml-declaration="yes" | "no"

escape-uri-attributes="yes" | "no"

include-content-type="yes" | "no"

undeclare-prefixes="yes" | "no"

normalization-form="NFC" | "NFD" | "NFKC" | "NFKD" |

"fully-normalized" | "none" | "имя"

standalone="yes" | "no" | "omit"

doctype-public="строка"

doctype-system="строка"

cdata-section-elements="имена"

indent="yes" | "no"

media-type="строка"

use-character-maps="имена"

/>

 

Все атрибуты элемента xsl:output являются необязательными.

Атрибут name задает имя элемента xsl:output. Если этот атрибут задан, элемент xsl:output называется именованным, в противном случае – неименованным элементом. Документ XSLT может содержать несколько именованных и неименованных элементов xsl:output. Элементы xsl:output с одинаковыми именами группируются в именованное определение вывода с заданным именем. Все неименованные элементы xsl:output также собираются в одно неименованное определение вывода.

Главным атрибутом элемента является атрибут method, который определяет, какой метод должен использоваться для вывода документа. Зна­чением этого атрибута может быть любое имя, но при этом спецификация XSLT определяет только четыре стандартных метода вывода: "xml", "html", "xhtml" и "text". Процессор XSLT может поддерживать и другие, нестан­дартные, методы вывода, например, формат PDF.

Если в преобразовании не определен элемент xsl:output или в нем не ука­зан атрибут method, метод преобразования выбирается по умолчанию исходя из следующих условий:

· если корневой элемент выходящего документа имеет дочерний элемент с локаль­ным именем "html" (в нижнем регистре символов) и с URI "http://www.w3.org/1999/xhtml", которому предшеству­ют только пробельные символы, методом вывода по умолчанию стано­вится "xhtml";

· если корневой элемент выходящего документа имеет дочерний элемент с локаль­ным именем "html" (в любом регистре символов) без указания URI, которому предшеству­ют только пробельные символы, методом вывода по умолчанию стано­вится "html";

· во всех остальных случаях методом вывода по умолчанию является "xml".

Использование остальных атрибутов элемента xsl:output зависит от того, какой из методов выбран для вывода преобразованного документа.

5.3.6.2. Метод вывода "xml"

Для того чтобы вывести результирующее дерево в виде документа XML, следует использовать в атрибуте method элемента xsl:output задать значение "xml". Ниже рассматриваются особенности задания других атрибутов для вывода документа XML.

Атрибут version

Этот атрибут определяет версию языка XML, которая должна использоваться для вывода результирующего документа ("1.0" или "1.1"). В случае если процессор не поддерживает заданную версию или задано неверное значение версии, выдается сообщение об ошибке.

Атрибут encoding

Атрибут encoding указывает на то, какая кодировка должна использоваться для выходного документа. Набор кодировок зависит от используемого процессора, однако обязательными для реализации являются кодировки UTF-8 и UTF-16.

Значение атрибута encoding не зависит от регистра симво­лов, то есть значения encoding="utf-8" и encoding="UtF-8" будут эквивалентны.

В случае если процессор не поддерживает кодировку, указанную в атрибуте encoding, процессор может либо выдать ошибку, либо использовать UTF-8 или UTF-16.

Если атрибут encoding опущен, процессор должен по умолчанию использо­вать UTF-8 или UTF-16. На практике большинство процессоров используют по умолчанию кодировку UTF-8. Если вывод документа содержит русский или украинский текст, следует указать соответствующую кодировку, например "Windows-1251".

При выводе содержимого выходного документа может возникнуть ситуа­ция, когда в выходящем потоке будут находиться символы, которые невоз­можно будет отобразить при используемой кодировке. В этом случае непе­чатаемые символы должны быть заменены символьными сущностями, либо выдано сообщение об ошибке.

Атрибут indent

Если этот атрибут имеет значение "yes", процессор может добавить один или несколько про­бельных символов или символов перевода строки (в зависимости от реализации). Как правило, каждый дочерний элемент помещают на новой строке, добавляя впереди два пробела на каждый уровень вложенности.

 

Атрибут cdata-section-elements

Этот атрибут определяет список разделенных пробелами элементов, текстовое содержимое которых должно быть выведено с использованием секций CDATA.

В соответствии с синтаксисом XML, секции CDATA не могут содержать последовательности символов "]]>". Потому, встретив такую комбинацию в тексте элемента, имя которого включено в cdata-section-elements, про­цессор заменит ее двумя секциями CDATA. Одна будет содержать "]]", вто­рая – ">".

 

Атрибуты doctype-system и doctype-public

Атрибут doctype-system XSLT позволяет создавать ссылки на внешние определения системных типов. Если этот атрибут задан, его значение выводится выходном документе в декларации <!DOCTYPE …> перед первым элементом вывода. Если же задан и атрибут doctype-public, то декларация дополняется общедоступным идентификатором, заданным в значении атрибута. Атрибут doctype-public, заданный без атрибута doctype-system, игнорируется.

 

Атрибут media-type

Атрибут media-type позволяет задавать MIME-тип содержимого выходного документа. Для метода вывода "xml" значением media-type по умолчанию является "text/xml".

Атрибут omit-xml-declaration

Если значение этого атрибута равно "yes", пролог документа XML не выводится (по умолчанию значение атрибута равно "no").

Атрибут standalone

Если значение этого атрибута равно "yes" или "no", в пролог документа XML будет включен параметр standalone с соответствующим значением "yes" или "no". Если же значение атрибута равно "omit" или атрибут не задан, параметр standalone не будет включен в пролог документа XML.

 

Атрибут undeclare-prefixes

В пространстве имен в соответствии со спецификацией XML 1.1 допустима ситуация когда пространство имен дочернего элемента не связано с пространством имен родительского элемента (такая ситуация задается в XML 1.1 с помощью префиксов отмены). Атрибут undeclare-prefixes задает включение префиксов отмены в выходной документ ("yes") или отмену включения ("no") (по умолчанию значение этого атрибута равно "no").

 

Атрибут normalization-form

Для выполнения операций над строками, например, сравнения строк, необходимо привести строки к эквивалентному виду (так, например, в русском языке строки "ежик" и "ёжик" являются эквивалентными). В стандарте Unicode процесс приведения называется нормализацией. Существует несколько форм нормализации: NFC, NFD, NFKC, NFKD, а также полная нормализация. Эти формы описаны в приложении №15 стандарта Unicode – UNICODE NORMALIZATION FORMS (Формы нормализации Unicode) по адресу:

http://www.unicode.org/reports/tr15/tr15-25.html.

В атрибуте normalization-form можно задать одну из форм нормализации, которая будет использоваться в выходном документе. Значение этого атрибута по умолчанию равно "none", т.е. нормализация данных не производится.

 

Атрибут byte-order-mark

Этот атрибут определяет вывод метки порядка байт: если значение "yes", то метка порядка байт выводится, если "no", то не выводится (по умолчанию значение этого атрибута для кодировки UTF-16 равно "yes", а для остальных кодировок равно "no")

 

Атрибут use-character-maps

Этот атрибут задает список именованных отображений символов (character-maps).

Каждое отображение задается с помощью элемента-объявления xsl:character-map, который имеет следующий синтаксис:

<xsl:character-map

name="имя"

use-character-maps="имена"

>

<!--

Содержимое: элементы xsl:output-character

-->

</xsl:character-map>

 

Обязательный атрибут name задает имя отображения, которое задается в списке атрибута use-character-maps.

Соответствие между символом и заменяющей его строкой может быть задано либо во вложенных элементах xsl:output-character, либо в списке ссылок на другие элементы в необязательном атрибуте use-character-maps.

 

Элемент xsl:output-character имеет следующий синтаксис:

<xsl:output-character

character="символ"

string="строка"

/>

 

Атрибут string задает строку, которая в выходном документе заменит символ, заданный в атрибуте character.

5.3.6.3. Метод вывода "xhtml"

Метод вы­вода "xhtml" используется для того, чтобы выводить документы в Web-браузере в соответствии со спецификацией XHTML.

Атрибуты version, encoding, indent, cdata-section-elements, omit-xml-declaration, standalone, doctype-system, doctype-public, undeclare-prefixes, normalization-form, media-type, byte-order-mark и use-character-maps действуют также, как и для метода "xml".

 

Атрибут escape-uri-attributes

Этот атрибут определяет, выводить ли атрибуты с URI в выходном документе ("no") или нет ("yes") (по умолчанию значение этого атрибута равно "yes");

 

Атрибут include-content-type

Этот атрибут включает в документ XHTML в элемент head (если этот элемент задан) первым дочерним элементом элемент meta, который определяет кодировку, используемую в Web-странице (по умолчанию или заданную в атрибуте encoding).

5.3.6.4. Метод вывода "html"

Метод вы­вода "html" используется для того, чтобы выводить документы в Web-браузере.

Одно из основных различий HTML и XML состоит в том, что в XML пус­тые элементы имеют формат <имя/>, в то время как в HTML тот же элемент был бы выведен, как <имя>. Метод вывода "html" учитывает эти различия и выводит теги пустых элементов HTML без косой черты после имени. В соответствии со спецификацией языка HTML 4.01, пустыми элементами являются area, base, basefont, br, col, frame, hr, img, input, isindex, link, meta и param.

Документы, которые преобразуются в HTML, могут также иметь сценарии, определенные внутри элемента script или стили, заданные внутри элемента style. В случае если внутри этих элементов оказываются символы, считающиеся в XML специальными, например, "<" или "&", про­цессор не должен заменять их символьными или встроенными сущностями.

 

Пример вывода сценария при преобразовании:

Предположим, что в преобразуемом документе элемент script определен с использованием специальных символов, которые заменены сущностями:

<script>if (a &gt; b) swap(a, b)</script>

или с использованием секций символьных данных:

<script><![CDATA[ if (a>b) swap(a, b) ]]></script>.

При использовании метода вывода "html" или "xhtml" оба варианта будут выведены, как

<script>if (a>b) swap(a, b)</script>.

 

В соответствии со спецификацией, некоторые атрибуты в HTML могут и не иметь значений (например, атрибут selected элемента option). Для того, чтобы получить в выходящем документе <option selected>, следует в преобразовании указывать

<option selected="selected">,

то есть присваивать булевому атрибуту значение, равное собственному име­ни.

Атрибуты encoding, indent, normalization-form, byte-order-mark и use-character-maps действуют так же, как и для метода "xml". Атрибуты escape-uri-attributes и include-content-type действуют так же, как и для метода "xhtml".

Атрибут version

Атрибут version элемента xsl:output в методе "html" обозначает версию языка HTML, которая должна использоваться в выходном документе. По умолчанию значением этого атрибута является "4.0" (последней версией языка является версия 4.01).

Атрибуты doctype-system и doctype-public

Декларация типа документа с внешними системными или общедоступными идентификаторами может быть использована в HTML точно так же, как в XML. Поскольку в объявлении типа документа после <!DOCTYPE должно стоять имя корневого элемента, при методе вывода "html" этим именем бу­дет "HTML" или "html" в зависимости от регистра символов имени корневого элемента документа.

Атрибут media-type

Для HTML-документов значением media-type по умолчанию будет "text/html".

5.3.6.5. Метод вывода "text"

При значении атрибута method, равном "text", результатом преобразования будет строковое сложение всех текстовых узлов исходного документа.

Атрибуты encoding, normalization-form, byte-order-mark и use-character-maps действуют также, как и для метода "xml".

Атрибут media-type

По умолчанию в качестве значения атрибута media-type, используемого для простого текста, указывается "text/plain". Значение атрибута media-type может быть использовано сервером, преобразующим документ в качестве MIME-типа.

 

Примеры вывода для различных значений атрибута method будут приведены далее.








Дата добавления: 2015-03-20; просмотров: 857;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.024 сек.