
- •Лекция 4-07
- •Тема 5.3. Языки xslt и xsl
- •Тема 5.3. Языки xslTиXsl
- •5.3.1. Связывание документовXmLс таблицами стилей
- •5.3.2. Язык xsLи его компоненты
- •5.3.3. Преобразование документа с помощьюXslt
- •5.3.3.1. Технология преобразования
- •5.3.3.2. Процессоры xslt
- •5.3.4. Структура документаXslt
- •5.3.4.1. Пространство именXslt
- •5.3.4.2. Корневые элементы и элементы верхнего уровня документаXslt
- •5.3.4.3. Условное включение элемента
- •5.3.4.4. Модульная структура преобразованийXslt
- •5.3.4.4.1. Включение внешних файлов
- •5.3.4.4.2. Импорт внешних файлов
- •5.3.4.4.3. Использование сущностей
- •5.3.4.4.4. Импорт схем
- •5.3.5. Совместное использование преобразований и документовXml
- •5.3.6. Управление выводом вXslt
- •5.3.6.1. Элементxsl:output
- •5.3.6.2. Метод вывода "xml"
- •5.3.6.3. Метод вывода "xhtml"
- •5.3.6.4. Метод вывода "html"
- •5.3.6.5. Метод вывода "text"
- •5.3.7. Правила шаблона вXslt
- •5.3.7.1. Образцы и шаблоны
- •5.3.7.2. Объявлениешаблона
- •5.3.7.3. Вызов неименованных правил шаблона
- •5.3.7.4. Упрощенные преобразования
- •5.3.8. Создание узлов элементов и атрибутов вXslt
- •5.3.8.1. Элементxsl:element
- •5.3.8.2. Элементxsl:attribute
- •5.3.8.3. Элементxsl:attribute-set
5.3.6. Управление выводом в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-systemXSLTпозволяет создавать ссылки на внешние определения системных типов. Если этот атрибут задан, его значение выводится выходном документе в декларации<!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–UNICODENORMALIZATIONFORMS(Формы нормализации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.