Чтение онлайн

на главную

Жанры

Технология XSLT

Валиков Алексей Н.

Шрифт:

Использование

Прежде всего, как C-библиотеку, libxslt можно подключать к собственным модулям посредством документированного API, а также при помощи разработанных врапперов использовать в Perl и Python-программах. Поскольку по степени совместимости и разработанности libxslt явно превосходит Sablotron, думается, что в скором времени он станет гораздо более популярным.

В libxslt также включена утилита

xsltproc
, которая обеспечивает для libxslt интерфейс командной строки:

xsltproc -о result.xml stylesheet.xsl source.xml

В языках Perl и Python libxslt используется при помощи модулей

XML::LibXSLT
и
libxsltmod
соответственно.

Расширения

Другим преимуществом libxslt по сравнению с Sablotron является возможность использования расширений, причем как в виде функций, так и в виде элементов. Функции и элементы расширения в libxslt оформляются в виде C-функций, затем регистрируются в процессоре перед вызовом и используются в преобразованиях так же, как и в случае с Java — посредством пространств имен.

В дополнение к этому, в libxslt по умолчанию также реализовано множество общепринятых расширений — в частности, многие из функций, предложенных в процессоре Saxon и инициативе EXSLT.

Приложение 2

Краткий справочник элементов и атрибутов XSLT

Обозначения

Ниже перечислены обозначения, используемые в данной книге.

□ 

attribute

Обязательный атрибут.

□ 

attribute

Необязательный атрибут.

□ 

attribute="строка"

Атрибут со строковым параметром.

□ 

attribute="{строка}"

Атрибут со строковым параметром, значение которого является шаблоном значения атрибута.

□ 

attribute="yes" | "no"

Атрибут с вариантами значений.

□ 

attribute={ "yes" | "no" }

Атрибут с вариантами значений, которые могут быть заданы шаблонами значений атрибутов.

□ 

<!-- Содержимое: шаблон -->

Содержимым элемента является шаблон.

□ 

<!-- Содержимое: несколько элементов xsl:import ...
– ->

Элемент

содержит последовательность из нуля или более элементов
xsl:import
.

□ 

<!-- Содержимое: один или более элемент xsl:when ...
– ->

Элемент содержит последовательность из одного или более элементов

xsl:when
.

□ 

<!-- Содержимое: ... опциональный элемент xsl:otherwise -->

Элемент содержит элемент

xsl:otherwise
, который может быть пропущен.

Элементы

В табл. П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?)

Здесь тип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)
Округляет аргумент до ближайшего целого значения
Поделиться:
Популярные книги

Live-rpg. эволюция-3

Кронос Александр
3. Эволюция. Live-RPG
Фантастика:
боевая фантастика
6.59
рейтинг книги
Live-rpg. эволюция-3

Я – Орк

Лисицин Евгений
1. Я — Орк
Фантастика:
юмористическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Я – Орк

Беглец

Бубела Олег Николаевич
1. Совсем не герой
Фантастика:
фэнтези
попаданцы
8.94
рейтинг книги
Беглец

Корпулентные достоинства, или Знатный переполох. Дилогия

Цвик Катерина Александровна
Фантастика:
юмористическая фантастика
7.53
рейтинг книги
Корпулентные достоинства, или Знатный переполох. Дилогия

Князь Мещерский

Дроздов Анатолий Федорович
3. Зауряд-врач
Фантастика:
альтернативная история
8.35
рейтинг книги
Князь Мещерский

Генерал-адмирал. Тетралогия

Злотников Роман Валерьевич
Генерал-адмирал
Фантастика:
альтернативная история
8.71
рейтинг книги
Генерал-адмирал. Тетралогия

Идеальный мир для Лекаря 3

Сапфир Олег
3. Лекарь
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 3

Делегат

Астахов Евгений Евгеньевич
6. Сопряжение
Фантастика:
боевая фантастика
постапокалипсис
рпг
5.00
рейтинг книги
Делегат

Болотник 2

Панченко Андрей Алексеевич
2. Болотник
Фантастика:
попаданцы
альтернативная история
6.25
рейтинг книги
Болотник 2

Возвышение Меркурия. Книга 17

Кронос Александр
17. Меркурий
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 17

Курсант: Назад в СССР 11

Дамиров Рафаэль
11. Курсант
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Курсант: Назад в СССР 11

Я – Орк. Том 4

Лисицин Евгений
4. Я — Орк
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я – Орк. Том 4

Восход. Солнцев. Книга XI

Скабер Артемий
11. Голос Бога
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Восход. Солнцев. Книга XI

Мимик нового Мира 4

Северный Лис
3. Мимик!
Фантастика:
юмористическая фантастика
постапокалипсис
рпг
5.00
рейтинг книги
Мимик нового Мира 4