Управление выводом в 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 > 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; просмотров: 916;