Технология XSLT
Шрифт:
Использование
Прежде всего, как C-библиотеку, libxslt можно подключать к собственным модулям посредством документированного API, а также при помощи разработанных врапперов использовать в Perl и Python-программах. Поскольку по степени совместимости и разработанности libxslt явно превосходит Sablotron, думается, что в скором времени он станет гораздо более популярным.
В libxslt также включена утилита
В языках Perl и Python libxslt используется при помощи модулей
Расширения
Другим преимуществом libxslt по сравнению с Sablotron является возможность использования расширений, причем как в виде функций, так и в виде элементов. Функции и элементы расширения в libxslt оформляются в виде C-функций, затем регистрируются в процессоре перед вызовом и используются в преобразованиях так же, как и в случае с Java — посредством пространств имен.
В дополнение к этому, в libxslt по умолчанию также реализовано множество общепринятых расширений — в частности, многие из функций, предложенных в процессоре Saxon и инициативе EXSLT.
Приложение 2
Краткий справочник элементов и атрибутов XSLT
Обозначения
Ниже перечислены обозначения, используемые в данной книге.
□
Обязательный атрибут.
□
Необязательный атрибут.
□
Атрибут со строковым параметром.
□
Атрибут со строковым параметром, значение которого является шаблоном значения атрибута.
□
Атрибут с вариантами значений.
□
Атрибут с вариантами значений, которые могут быть заданы шаблонами значений атрибутов.
□
Содержимым элемента является шаблон.
□
– ->
Элемент
□
– ->
Элемент содержит последовательность из одного или более элементов
□
Элемент содержит элемент
Элементы
В табл. П2.1 приведены описания основных элементов XSLT.
Таблица П2.1. Описание основных элементов XSLT
Элемент | Описание |
---|---|
<xsl:apply-imports/> | Инструкция. Применяет шаблонные правила, которые содержатся в импортированных преобразованиях |
<xsl:apply-templates select="выражение" mode="режим"> <!-- Содержимое: несколько элементов xsl:sort или xsl:with-param --> </xsl:apply-templates> | Инструкция. Применяет шаблонные правила к множеству узлов, возвращаемому выражением, записанным в атрибуте select . • select — содержит выражение, возвращающее множество узлов для обработки; • mode — указывает режим, в котором должны применяться шаблоны |
<xsl:attribute name="{имя}" | Инструкция. Создает в выходящем документе узел атрибута. • name — определяет имя атрибута; • namespace — URI пространства имен создаваемого атрибута |
namespace="{пространство имен}"> <!-- Содержимое: шаблон --> </xsl:attribute> | |
<xsl:attribute-set name="имя" use-attribute-sets="имена"> <!-- Содержимое: несколько элементов xsl:attribute --> </xsl:attribute-set> | Элемент верхнего уровня. Определяет именованный набор атрибутов. • name — содержит имя набора атрибутов; • use-attribute-sets — перечисляет через пробелы имена наборов атрибутов, которые следует включить в определяемый набор |
<xsl:call-template name="имя"> <!-- Содержимое: несколько элементов xsl:with-param --> </xsl:call-template> | Инструкция. Вызов именованного шаблона. • name — имя вызываемого шаблона |
<xsl:choose> <!-- Содержимое: один или более элемент xsl:when, опциональный элемент xsl:otherwise --> </xsl:choose> | Инструкция. Выполняет содержимое одного из субэлементов в зависимости от условий |
<xsl:comment> <!-- Содержимое: шаблон --> </xsl:comment> | Инструкция. Создает в выходящем документе узел комментария |
<xsl:copy use-attribute-sets="имена"> <!-- Содержимое: шаблон --> </xsl:copy> | Инструкция. Создает в выходящем документе копию текущего узла. Копии дочерних узлов не создаются. • use-attribute-sets — перечисляет именованные наборы атрибутов, которые следует добавить в создаваемый узел |
<xsl:copy-of select="выражение"/> | Инструкция. Копирует в выходящий документ результат вычисления выражения. • select — содержит выражение, результат которого нужно скопировать |
<xsl:decimal-format name="имя" decimal-separator="символ" grouping-separator="символ" infinity="строка" minus-sign="символ" NaN="строка" percent="символ" per-mille="символ" zero-digit="символ" digit="символ" pattern-separator="символ"/> | Элемент верхнего уровня. Определяет именованный набор параметров для формата числа. • name — имя. Если name отсутствует, формат числа определяется по умолчанию; • decimal-separator — символ, разделяющий целую и дробную часть; • grouping-separator — символ, разделяющий группы цифр целой части числа; • infinity — строка, соответствующая бесконечности; • minus-sign — символ отрицания; • NaN — строка, соответствующая нечислу; • percent — символ процента; • per-mille — символ промилле; • zero-digit — символ нуля; • digit — символ, помечающий позицию необязательной цифры; • pattern-separator — символ, разделяющий положительный и отрицательный образцы форматирования |
<xsl:element name="{имя}" namespace="{пространство имен}" use-attribute-sets="имена"> <!-- Содержимое: шаблон --> </xsl:element> | Инструкция. Создает в выходящем документе элемент. • name — имя элемента; • namespace — URI пространства имен создаваемого элемента; • use-attribute-sets — перечисляет имена наборов атрибутов, которые надо включить в создаваемый элемент |
<xsl:fallback> <!-- Содержимое: шаблон --> </xsl:fallback> | Инструкция. Выполняется при невозможности выполнить родительскую инструкцию |
<xsl:for-each select="выражение"> <!-- Содержимое: несколько элементов xsl:sort, шаблон --> </xsl:for-each> | Инструкция. Выполняет содержащийся шаблон для каждого из узлов множества. • select — содержит выражение, возвращающее перебираемое множество узлов |
<xsl:if test="выражение" > <!-- Содержимое: шаблон --> </xsl:if> | Инструкция. Выполняет или не выполняет дочерний шаблон в зависимости от заданного условия. • test — содержит выражение проверяемого условия |
<xsl:import href="URI"/> | Элемент верхнего уровня. Импортирует указанный шаблон. • href — URI импортируемого шаблона |
<xsl:include href="URI"/> | Элемент верхнего уровня. Включает указанный шаблон. • href — URI включаемого шаблона |
<xsl:key name="имя" match="паттерн" use="выражение"/ > | Элемент верхнего уровня. Определяет именованный ключ. • name — имя ключа; • match — выбирает узлы, для которых будут определяться значения ключа; • use — выражение, значение которого будет значением ключа для каждого из узлов |
<xsl:message terminate="yes" | "no"> <!-- Содержимое: шаблон --> </xsl:message> | Инструкция. Указывает процессору на то, что нужно вывести сообщение. • terminate — определяет, следует ли прервать обработку после вывода сообщения или нет |
<xsl:namespace-alias stylesheet-prefix="префикс" | "#default" result-prefix="префикс" | "#default"/> | Элемент верхнего уровня. Определяет псевдоним для префикса. • stylesheet-prefix — префикс в преобразовании; • result-prefix — префикс в результирующем документе |
<xsl:number level="single" | "multiple" | "any" count="паттерн" from="паттерн" value="выражение" format="{строка}" lang="{токен}" letter-value={ "alphabetic" | "traditional" } grouping-separator="{символ}" grouping-size="{число}"/> | Инструкция. Выводит номер в соответствии с заданными критериями. • level — на каких уровнях нумеровать узлы; • count — какие узлы учитывать при нумерации; • from — в какой части документа нумеровать узлы; • value — выражение, вычисляющее номер. • format — форматирующая строка номера; • lang — язык для алфавитных последовательностей; • letter-value — алфавитная или традиционная нумерация; • grouping-separator — разделяющий символ групп цифр номера; • grouping-size — количество цифр в группах цифр номера |
<xsl:otherwise> <!-- Содержимое: шаблон --> </xsl:otherwise> | Субэлемент элемента xsl:choose . Выполняется в элементе xsl:choose , если ни одно из других условий не верно. |
<xsl:output method="xml" | "html" | "text" | " префикс:имя" version="токен" encodings="строка" omit-xml-declaration="yes" | "no" standalone="yes" | "no" doctype-public="строка" doctype-system="строка" cdata-section-elements="имена" indent="yes" | "no" media-type="строка"/> | Элемент верхнего уровня. Определяет параметры вывода результирующего документа. • method — метод сериализации; • version —
encoding — кодировка выходящего документа; • omit-xml-declaration — опустить декларацию XML; • standalone — самостоятельный или несамостоятельный документ; • doctype-public — публичный идентификатор типа документа; • doctype-system — системный идентификатор типа документа; • cdata-section-elements — элементы, содержимое которых следует выводить как секции CDATA; • indent — индентация (вывод отступов); • media-type — медиа-тип |
<xsl:param name="имя" select="выражение"> <!-- Содержимое: шаблон --> </xsl:param> | Инструкция, элемент верхнего уровня. Определяет параметр преобразования или шаблонного правила. • name — имя параметра; • select — выражение, задающее значение параметра |
<xsl:preserve-space elements="токены"/> | Элемент верхнего уровня. Определяет элементы входящего документа, в которых следует сохранять текстовые узлы, содержащие только пробельные символы. • elements — перечисляет элементы, в которых пробельные символы должны быть сохранены |
<xsl:processing-instruction name="{имя}"> <!-- Содержимое: шаблон --> </xsl:processing-instruction> | Инструкция. Создает узел инструкции по обработке. • name — определяет имя целевого приложения создаваемой инструкции |
<xsl:sort select="выражение" lang="{токен}" data-type={ "text" | "number" | "префикс:имя" } order={ "ascending" | "descending" } case-order={ "upper-first" | "lower-first"}/> | Субэлемент элементов xsl:apply-templates и xsl:for-each . • select — выражения для сортировки; • lang — язык сортировки; • data-type — тип данных сортировки; • order — порядок сортировки; • case-order — упорядоченность строчных и прописных букв |
<xsl:strip-space elements="токены"/> | Элемент верхнего уровня. Определяет элементы входящего документа, в которых следует удалять текстовые узлы, содержащие только пробельные символы. • elements — перечисляет элементы, в которых пробельные символы должны быть удалены |
<xsl:stylesheet id="идентификатор" extension-element-prefixes="префиксы" exclude-result-prefixes="префиксы" version="число"> <!-- Содержимое: несколько элементов xsl:import, элементы верхнего уровня --> </xsl:stylesheet> | Корневой элемент преобразования. • id — идентификатор преобразования; • extension-element-prefixes — префиксы элементов расширения; • exclude-result-prefixes — префиксы, не включаемые в выходящий документ; • version — версия языка XSLT |
<xsl:template match="паттерн" namе="имя" priority="число" modе="имя"> <!-- Содержимое: несколько элементов xsl:param, шаблон --> </xsl:template> | Элемент верхнего уровня. Определяет шаблонное правило. • match — содержит паттерн, которому должны удовлетворять узлы, обрабатываемые данным шаблоном; • name — имя шаблона; • priority — приоритет шаблона; • mode — режим шаблона |
<xsl:text disable-output-escaping="yes" | "no"> <!-- Содержимое: символьные данные --> </xsl:text> | Инструкция. Создает в выходящем документе текстовый узел. Пробельные символы, находящиеся внутри xsl:text , не удаляются. • disable-output-escaping — определяет, должны ли в выходящем документе особые символы этого текстового узла заменяться на сущности |
<xsl:transform id="идентификатор" extension-element-prefixes="префиксы" exclude-result-prefixes="префиксы" version="число"> <!-- Содержимое: несколько элементов xsl:import, элементы верхнего уровня --> </xsl:transform> | Корневой документ преобразования. Псевдоним элемента xsl:stylesheet |
<xsl:value-of select="выражение" disable-output-escaping="yes" | "no"/> | Инструкция. Создает в выходящем документе текстовый узел, содержащий результат вычисления выражения, приведенный к строке. • select — содержит вычисляемое выражение; • disable-output-escaping — определяет, должны ли в выходящем документе особые символы этого текстового узла заменяться на сущности |
<xsl:variable name="имя" select="выражение" > <!-- Содержимое: шаблон --> </xsl:variable> | Инструкция, элемент верхнего уровня. Создает глобальную или локальную переменную. Значение переменной не может быть изменено. • name — задает имя определяемой переменной; • select — задает значение определяемой переменной |
<xsl:when test="выражение"> <!-- Содержимое: шаблон --> </xsl:when> | Субэлемент элемента xsl:choose . Выполняется один из вариантов в блоке xsl:choose в зависимости от условия. • test — задает выражение логического условия |
<xsl:with-param name="имя" select="выражение"> <!-- Содержимое: шаблон --> </xsl:with-param> | Субэлемент элементов xsl:apply- templates , xsl:call-template . Задает значение одного параметра при вызове параметризованного шаблона. • name — имя параметра; • select — выражение, значение которого должно быть передано как параметр. В случае, если атрибут select не определен, значением передаваемого параметра является дерево, полученное в результате выполнения содержимого xsl:with-param . Если элемент при этом пуст, значением параметра является пустая строка |
Атрибуты
Сведения об атрибутах XSLT представлены в табл. П2.2.
Таблица П2.2. Атрибуты XSLT
Атрибут | Назначение |
---|---|
xsl:version | Указывает версию языка в случае использования упрощенного синтаксиса записи преобразований |
xsl:exclude-result-prefixes | Перечисляет префиксы пространств имен, которые должны быть исключены в данном элементе |
xsl:extension-elements-prefixes | Перечисляет префиксы пространств имен, которые используются в элементах расширения |
xsl:use-attribute-sets | Перечисляет названия именованных наборов атрибутов, которые следует включить в данный элемент на выходе |
Приложение 3
Краткий справочник функций XSLT и XPath
Обозначения
Прототип функции имеет следующий синтаксис:
Здесь тип1 — тип возвращаемого значения, тип2, тип3, тип4 — типы передаваемых параметров.
При этом символ "
Функции
В табл. П3.1–П3.5 представлено описание наиболее часто используемых функций.
Таблица П3.1. Булевые функции
Функция | Описание |
---|---|
boolean boolean(object) | Явным образом преобразует объект, который ей передается в булевый тип |
boolean not(boolean) | Выполняет логическое отрицание |
boolean true | Возвращает true , "истину" |
boolean false | Возвращает false , "ложь" |
boolean lang(string) | Возвращает "истину", если идентификатор языка, который передан ей в виде строкового параметра, соответствует языковому контексту контекстного узла |
Таблица П3.2. Числовые функции
Функция | Описание |
---|---|
number number(object?) | Явным образом конвертирует свой аргумент в числовой тип. Если аргумент опущен, то выполняется с множеством, состоящим из контекстного узла |
number sum(node-set) | Суммирует значения узлов из переданного ей множества |
number floor(number) | Округляет аргумент до ближайшего не большего целого |
number ceiling(number) | Округляет аргумент до ближайшего не меньшего целого |
number round(number) | Округляет аргумент до ближайшего целого значения |