Введение
Для кого эта книга?
Зачем второе издание?
Что охватывает книга?
Как устроена книга?
Другие ресурсы по XSLT
Что может дать эта книга?
Условные обозначения
Поддержка читателей
Сообщите нам свое мнение

Глава 1. Общее представление об XSLT
Что такое XSLT?
Зачем преобразовывать XML?
Как XSLT преобразовывает XML?
XSLT и SQL: Сходство
XSLT-процессоры
Пример таблицы стилей
Место XSLT в технологиях XML
XSLT и XSL
XSLT и XPath
XSLT и Internet Explorer 5
XSLT и XML
Пространства имен XML
Информационное множество XML
XSL и CSS
История развития XSL
Предыстория
Первый проект XSL
XSLT как язык
Использование синтаксиса XML
Отсутствие побочных эффектов
Основан на правилах
Пример: Отображение поэмы
За рамками XSLT 1.0
XSLT 1.1
XSLT 2.0 и XPath 2.0
Когда использовать XSLT
Приложения для преобразования данных
Публикация
Когда выполнять преобразование?
Резюме

Глава 2. Модель обработки данных в XSLT
XSLT: Обзор системы
Упрощенный обзор
Деревья, а не документы
Различные выходные форматы
Множественные документы ввода и вывода
Модель дерева
XML в виде дерева
Пример: XML-дерево
Пример: Сбалансированный фрагмент XML
Узлы в модели дерева
Имя узла
Строковое значение узла
Базовый URI узла
Потомки узла
Родитель узла
Пространства имен узла
Завершение UML-диаграммы классов
Имена и пространства имен
ID
Символы
Что не учитывает дерево?
Управление сериализацией
Невидимые различия
Информация из DTD
Процесс преобразования
Шаблонные правила
Содержимое тела шаблона
Вложенные тела шаблонов
Форсированная обработка
Пример: Форсированная обработка
Ввод
Таблица стилей
Вывод
Выбор узлов для обработки
Пример: Управление последовательностью обработки
Пример: Выбор узлов явным образом
Режимы
Встроенные шаблонные правила
Политика разрешения противоречий
Переменные, выражения и типы данных
Переменные
Выражения
Контекст
Типы данных
Значения данных булевского типа
Числовые значения
Строковые значения
Значения наборов узлов
Временные деревья
Пример: Временные деревья
Резюме

Глава 3. Структура таблицы стилей
Модульное строение таблицы стилей
Пример: Использование
Исходный документ
Таблицы стилей
principal.xsl
date.xsl
copyright.xsl
Вывод
Пример: Использование
Исходный документ
Таблица стилей
Вывод
Элемент
Инструкция обработки
Вложенные таблицы стилей
Пример: Вложенные таблицы стилей
Исходный документ
Вывод
Элементы верхнего уровня
Элементы верхнего уровня, определенные в языке XSLT
Элементы верхнего уровня, определяемые производителем
Элементы верхнего уровня, определяемые пользователем
Упрощенные таблицы стилей
Пример: Упрощенная таблица стилей
Тела шаблонов
Инструкции XSLT
Элементы расширения
Конечные литеральные элементы
Формат
Расположение
Атрибуты
Примечание
Содержимое
Использование
Атрибуты конечного литерального элемента
Пространства имен для конечного литерального элемента
Префиксы пространств имен
Использование псевдонимов для пространства имен
Шаблоны значений атрибутов
Расширяемость
Функции расширения
Элементы расширения
Совместимость снизу вверх
Пробельные символы
Узлы пробельных символов в таблице стилей
Роль удаления узлов пробельных символов
Решение проблем с пробельными символами
Резюме

Глава 4. Элементы XSLT
xsl:apply-imports
Определен в
Формат
Расположение
Атрибуты
Содержимое
Действие
Использование и примеры
xsl:apply-templates
Определен в
Формат
Расположение
Атрибуты
Содержимое
Действие
Атрибут select
Сортировка
Выбор шаблонного правила
Параметры
Адресат вывода
Использование
Сопоставление и
Режимы
Пример: Использование режимов
Исходный документ
Таблица стилей
Вывод
Примеры
xsl:attribute
Определен в
Формат
Расположение
Атрибуты
Содержимое
Действие
Имя атрибута
Атрибут namespace
Значение атрибута
Использование
Примеры
Пример: Генерирование атрибута при условии
Исходный документ
Таблица стилей
Вывод
Пример: Выбор имени атрибута во время выполнения
Исходный документ
Таблица стилей
Вывод
xsl:attribute-set
Определен в
Формат
Расположение
Атрибуты
Содержимое
Действие
Использование
Пример: Использование набора атрибутов для нумерования
Исходный документ
Таблица стилей
Вывод
Примеры
xsl:call-template
Определен в
Формат
Расположение
Атрибуты
Содержимое
Действие
Имя шаблона
Параметры
Контекст
Использование и примеры
Адресат вывода
Выбор узла, отличного от текущего
Рекурсия: Обработка списка значений
Пример: Использование рекурсии для обработки набора узлов
Исходный документ
Таблица стилей
Вывод
Пример: Использование рекурсии для обработки разделенных строковых данных
Исходный документ
Таблица стилей
Вывод
xsl:choose
Определен в
Формат
Расположение
Атрибуты
Содержимое
Действие
Использование
Примеры
xsl:comment
Определен в
Формат
Расположение
Атрибуты
Содержимое
Действие
Использование
Примеры
xsl:copy
Определен в
Формат
Расположение
Атрибуты
Содержимое
Действие
Использование
Примеры
xsl:copy-of
Определен в
Формат
Расположение
Атрибуты
Содержимое
Действие
Использование и примеры
Повторяющиеся фрагменты вывода
Пример: Использование для повторяющегося вывода
Исходный документ
Таблица стилей
Вывод
Глубокое копирование
xsl:decimal-format
Определен в
Формат
Расположение
Атрибуты
Содержимое
Действие
Использование
Примеры
xsl:document
Определен в
Формат
Расположение
Атрибуты
Содержимое
Действие
Использование
Примеры
Пример: Создание множественных выходных файлов
Исходный документ
Таблица стилей
Вывод
xsl:element
Определен в
Формат
Расположение
Атрибуты
Содержимое
Действие
Имя элемента
Пространство имен элемента
Генерирование атрибутов
Содержимое элемента
Использование
Пример: Преобразование атрибутов в дочерние элементы
Исходный документ
Таблица стилей
Вывод
xsl:fallback
Определен в
Формат
Расположение
Атрибуты
Содержимое
Действие
Использование
Примеры
Пример 1: Совместимость XSLT снизу вверх
Пример 2: Переносимость расширений поставщика
Пример 3: Временные деревья
xsl:for-each
Определен в
Формат
Расположение
Атрибуты
Содержимое
Действие
Атрибут select
Сортировка
Использование и примеры
Перебор набора узлов в цикле
Пример: Показ родительских элементов узла
Исходный документ
Таблица стилей
Вывод
Смена текущего узла
xsl:if
Определен в
Формат
Расположение
Атрибуты
Содержимое
Действие
Использование
Примеры
Пример: Форматирование списка имен
Исходный документ
Таблица стилей
Вывод
xsl:import
Определен в
Формат
Расположение
Атрибуты
Содержимое
Действие
Преимущество по импорту
Влияние преимущества по импорту
Использование
Примеры
Пример 1: Приоритет переменных
Исходный документ
Таблица стилей
Вывод
Пример 2: Приоритет шаблонных правил
Исходный документ
Таблица стилей A
Вывод A
Таблица стилей B
Вывод B
xsl:include
Определен в
Формат
Расположение
Атрибуты
Содержимое
Действие
Использование
Примеры
Пример: Использование с именованными наборами атрибутов
Исходный документ
Таблица стилей
Вывод
xsl:key
Определен в
Формат
Расположение
Атрибуты
Содержимое
Действие
Использование и примеры
Использование простого ключа
Многозначные ключи
Пример: Многозначные неуникальные ключи
Исходный документ
Таблица стилей
Вывод
Множественные именованные ключи
Множественные определения одного и того же ключа
xsl:message
Определен в
Формат
Расположение
Атрибуты
Содержимое
Действие
Использование
Примеры
Локализованные сообщения
xsl:namespace-alias
Определен в
Формат
Расположение
Атрибуты
Содержимое
Действие
Использование и примеры
Пример
Исходный документ
Таблица стилей
Вывод
xsl:number
Определен в
Формат
Расположение
Атрибуты
Содержимое
Действие
Определение порядкового номера
Разбиение форматирующей строки
Форматирование частей порядкового номера
Вывод номера
Использование и примеры
level="single"
level="any"
Пример: Нумерование строк поэмы
Исходный документ
Таблица стилей
Вывод
level="multiple"
xsl:otherwise
Определен в
Формат
Расположение
Атрибуты
Содержимое
Действие
Использование и примеры
xsl:output
Определен в
Формат
Расположение
Атрибуты
Содержимое
Действие
Правила для вывода XML
Правила для вывода HTML
Правила для текстового вывода
Использование
Примеры
xsl:param
Определен в
Формат
Расположение
Атрибуты
Содержимое
Действие
Значение параметра
Имя параметра
Использование
Примеры
Пример: Использование в значении по умолчанию
Исходный документ
Таблица стилей
Вывод
xsl:preserve-space
Определен в
Формат
Расположение
Атрибуты
Содержимое
Действие
Использование
Примеры
xsl:processing-instruction
Определен в
Формат
Расположение
Атрибуты
Содержимое
Действие
Использование
Примеры
xsl:script
Определен в
Формат
Расположение
Атрибуты
Содержимое
Действие
Использование и примеры
xsl:sort
Определен в
Формат
Расположение
Атрибуты
Содержимое
Действие
Использование
Примеры
Пример: Сортировка по результатам вычисления
Исходный документ
Таблица стилей
Вывод
xsl:strip-space
Определен в
Формат
Расположение
Атрибуты
Содержимое
Действие, использование и примеры
xsl:stylesheet
Определен в
Формат
Расположение
Объявления пространств имен
Атрибуты
Содержимое
Действие
Атрибут id
Атрибут version
Атрибут extension-element-prefixes
Атрибут exclude-result-prefixes
Использование и примеры
Атрибут id
Атрибут version
Атрибут extension-element-prefixes
Атрибут exclude-result-prefixes
xsl:template
Определен в
Формат
Расположение
Атрибуты
Содержимое
Действие
Атрибут match
Атрибут name
Атрибут priority
Атрибут mode
Применение шаблона
Использование и примеры
Использование шаблонных правил
Пример: Шаблонные правила
Исходный документ
Таблица стилей
Вывод
Использование режимов
Пример: Использование режимов
Исходный документ
Таблица стилей
Вывод
Использование именованных шаблонов
xsl:text
Определен в
Формат
Расположение
Атрибуты
Содержимое
Действие
Использование
Управление пробельными символами
Управление экранированием символов в выводе
Примеры
xsl:transform
Формат
Определен в
xsl:value-of
Определен в
Формат
Расположение
Атрибуты
Содержимое
Действие
Использование
Использование disable-output-escaping
Примеры
xsl:variable
Определен в
Формат
Расположение
Атрибуты
Содержимое
Действие
Значение переменной
Имя переменной
Использование
Примеры
Переменные для удобства
Переменные для фиксирования контекстно-зависимых значений
Пример: Использование переменной для фиксирования
контекстно-зависимых значений
Исходный документ
Таблица стилей
Вывод
Временные деревья
Пример: Сохранение результата в переменной
Исходный документ
Таблица стилей
Вывод
xsl:when
Определен в
Формат
Расположение
Атрибуты
Содержимое
Действие
Использование и примеры
xsl:with-param
Определен в
Формат
Расположение
Атрибуты
Содержимое
Действие
Использование и примеры
Резюме

Глава 5. Выражения
Система обозначений
С чего начать
Синтаксическое дерево
AbbreviatedAbsoluteLocationPath
Определен в
Использование
Примеры
AbbreviatedAxisSpecifier
Определен в
Использование
Примеры в контексте
AbbreviatedRelativeLocationPath
Определен в
Использование
Примеры
AbbreviatedStep
Определен в
Использование
Примеры в контексте
AbsoluteLocationPath
Определен в
Использование
Примеры
AdditiveExpr
Определен в
Использование
Примеры в контексте
AndExpr
Определен в
Использование
Примеры
Argument
Определен в
Использование
Примеры в контексте
AxisName
Определен в
Использование
Примеры в контексте
AxisSpecifier
Определен в
Использование
Примеры
Digits
Определен в
Использование
Примеры в контексте
EqualityExpr
Определен в
Использование
Сравнение простых значений
Сравнения с наборами узлов
Сравнения с деревьями
Примеры
Expr
Определен в
Используется в
Использование
Примеры
ExprToken
Определен в
Использование
Примеры
ExprWhitespace
Определен в
Использование
Примеры
FilterExpr
Определен в
Использование
Примеры
FunctionCall
Определен в
Использование
Примеры
FunctionName
Определен в
Использование
Примеры
Literal
Определен в
Использование
Примеры
LocationPath
Определен в
Использование
Примеры
MultiplicativeExpr
Определен в
Синтаксис
Использование
Примеры
MultiplyOperator
Определен в
Использование
Примеры
NameTest
Определен в
Использование
Примеры
NCName и NCNameChar
Определен в
Использование
Примеры
NodeTest 43
Определен в
Использование
Примеры
NodeType
Определен в
Использование
Примеры в контексте
Number
Определен в
Использование и примеры
Operator
Определен в
Использование
Примеры
OperatorName
Определен в
Использование
Примеры в контексте
OrExpr
Определен в
Использование
Примеры
PathExpr
Определен в
Использование
Примеры
Predicate
Определен в
Использование
Примеры в контексте
PredicateExpr
Определен в
Использование
Примеры в контексте
PrimaryExpr
Определен в
Использование
Примеры
QName
Определен в
Использование
Примеры
RelationalExpr
Определен в
Использование
Примеры
RelativeLocationPath
Определен в
Исаользование
Примеры
Step
Определен в
Использование
Примеры
UnaryExpr
Определен в
Использование
Примеры
UnionExpr
Определен в
Использование
Примеры
VariableReference
Определен в
Использование
Примеры
Резюме

Глава 6. Образцы
Формальное определение
Образцы с предикатами
Неформальное определение
Разрешение конфликтов
Как читать эту главу
Pattern
Синтаксис
Использование
Примеры
LocationPathPattern
Синтаксис
Использование
Примеры
RelativePathPattern
Синтаксис
Использование
Примеры
StepPattern
Синтаксис
Использование
Спецификатор оси AxisSpecifier
Критерий узла
Предикаты
Примеры
ChildOrAttributeAxisSpecifier
Синтаксис
Использование
Примеры
IdKeyPattern
Синтаксис
Использование
Примеры
Исходный документ
Таблица стилей
Конечный документ
Резюме

Глава 7. Функции
boolean
Определен в
Формат
Правила
Использование
Примеры
ceiling
concat
contains
count
current
document
element-available
false
floor
format-number
function-available
generate-id
id
key
lang
last
local-name
name
namespace-uri
normalize-space
not
number
position
round
starts-with
string
string-length
substring
substring-after
substring-before
sum
system-property
translate
true
unparsed-entity-uri
Резюме

Глава 8. Разработка функций расширения
Когда необходимо применять функции расширения?
Вызов функций расширения
Какой язык выбрать?
Привязка функций расширения
Деревья XPath и объектная модель документа
Привязки для языка Java
Определение класса Java
Выбор метода Java
Таблица преобразования
Правила преобразования аргументов
Преобразование из логического типа XPath
Преобразование из числового типа XPath
Преобразование из строкового типа XPath
Преобразование набора узлов XPath
Преобразование внешнего объекта
Обработка возвращаемого значения
Использование функций расширения Java
Вызов статических методов
Вызов конструкторов и методов экземпляров
Вызов внешних функций в цикле.
Исходный документ
Таблица стилей
Конечный документ
Функции с неуправляемыми побочными эффектами
Исходный документ
Таблица стилей
Конечный документ
Объект XSLTContext
Пример
Привязки для языка JavaScript
Пример JavaScript
Выбор запускаемой функции
Преобразование аргументов функций
Получение контекстной информации XSLT и XPath
Преобразование возвращаемого значения
Функция function-available()
Резюме

Глава 9. Образцы проектирования таблиц стилей
Таблица стилей для заполнения бланков
Пример: Таблица стилей "Заполнение бланков"
Ввод
Таблица стилей
Вывод
Навигационные таблицы стилей
Пример: Навигационная таблица стилей
Ввод
Таблица стилей
Вывод
Таблицы стилей, основанные на правилах
Пример: Таблица стилей, основанная на правилах
Ввод
Таблица стилей
Вывод
Вычислительные таблицы стилей
Программирование без выражений присваивания
Почему же их называют переменными?
Уловка
Отказ от выражений присваивания
Условная инициализация
Не итерируйте, рекурсируйте
Пример: Суммирование списка чисел
Ввод
Таблица стилей
Вывод
Пример: Определение суммы продаж
Ввод
Таблица стилей
Вывод
Рекурсия: Резюме
Не гонитесь сразу за двумя зайцами
Группирование
Пример: Разбиение данных на группы
Ввод
Таблица стилей
Вывод
Повышение эффективности
Мюнчевская методика группирования
Пример: Группирование по Мюнчу
Ввод
Таблица стилей
Вывод
Резюме

Глава 10. Действующие примеры
Форматирование спецификации XML
Пролог
Создание общей структуры HTML
Форматирование заголовка документа
Оглавление
Создание заголовков разделов
Форматирование текста
Установка правил вывода
Создание перекрестных ссылок
Отфильтровывание ненужного
Заготовки текстов
Список составителей
Варианты таблиц стилей для спецификаций XSLT и XPath
Резюме
Генеалогическое дерево
Модель данных и ее представление в XML
Отображение данных генеалогического дерева
Таблица стилей
Соберем все вместе
Опубликование статического HTML
Создание HTML-страниц с помощью сервлета
Формирование HTML с помощью ASP-страниц
Формирование HTML в броузере
Преобразование файлов GEDCOM в XML
Резюме
Таблица стилей для маршрута коня
Алгоритм
Корневой шаблон
Установка шахматной доски
Отображение конечного состояния шахматной доски
Определение маршрута
Выполнение таблицы стилей
Наблюдения
Резюме

Приложение А. Microsoft MSXML3
Версии MSXML
Таблицы стилей MSXML3
Расширяемость
Пример: Использование VBScript в таблице стилей MSXML3
Исходный документ
Таблица стилей
Результат
Функция msxsl:node-set()
Системные свойства
Ограничения
Установка MSXML3
Идентификаторы ProgID и ClassID в MSXML
Запуск MSXML в режиме замещения
Использование таблицы стилей по умолчанию
Присвоение документу таблицы стилей XSLT
Отладка таблиц стилей
Управление обработкой XSLT при помощи сценария на стороне клиента
Создание экземпляра документа MSXML
Загрузка XML и XSLT документов
Проверка на наличие ошибок загрузки, правильное построение
и действительность документа
Асинхронная загрузка документов
XSLT преобразование XML-документов при помощи сценария
Метод transformNode
Метод transformNodeToObject
Пример: Использование JScript на стороне клиента для преобразования документа
Исходный XML-документ
Таблица стилей
HTML-страница
Результат
Использование объекта XSLTemplate
Использование и островков данных XML
Создание экземпляров документа с помощью элемента
Использование островков данных XML
Динамическое изменение XML-документов
Динамическое изменение таблиц стилей XSLT
Пример: Изменение порядка сортировки
Исходный XML-документ
Таблица стилей
Страница HTML
Результат
Использование XPath в DOM
Использование MSXML3-анализатора на стороне сервера
Использование MSXML3 с ASP 27
Пример: XSLT-преобразование на стороне сервера
Исходный XML-документ
Таблица стилей
ASP-страница
Результат
Установка соответствующего заголовка типа содержимого
Установка параметров
Создание ссылок на другие ASP-страницы
Решаем где осуществлять XSLT-преобразование
Выполнение крупных преобразований
Краткий справочник по MSXML3
Объекты
IXMLDOMDocument и IXMLDOMDocument2
Дополнительные методы
abort() Ю (Ничего не возвращает)
Дополнительные свойства
IXMLDOMNode
Методы
Свойства
IXMLDOMNodeList
Методы
Свойства
IXMLDOMParseError
Properties
IXMLDOMSelection
Методы
Свойства
IXSLProcessor
Методы
Свойства
IXSLTemplate
Методы
Свойства
Резюме

Приложение В. Oracle
Набор разработчика XML от Oracle
Анализаторы
Поддержка XML-схем
Страницы XSQL
Утилита OracleXML
Генераторы классов XML
Java процессор XSLT
Интерфейс командной строки
API для преобразований
Расширения
Функция расширения oracle:node-set()
Пример: Применение функции oracle:node-set()
Исходный документ
Таблица стилей
Результат
Элемент расширения oracle:output
Пример: Применение элемента расширения oracle:output
Исходный файл
Таблица стилей
Результат
Расширяемость
Примеры
Поддержка XPath
Кодировки символов
Заключение

Приложение С. Saxon
Установка
Запуск процессора Saxon
Работа с Saxon из командной строки
Использование Saxon в Java-приложениях
Saxon и DOM
Использование выражений XPath в Saxon
Расширяемость
Написание функций расширения
Написание элементов расширения
Написание фильтров
Внедрение последовательностей сортировки и нумерации
Встроенные в Saxon расширения
Функции расширения
Использование saxon:evaluate()
Пример: Использование saxon:evaluate() для применения бизнес-правил
Исходный файл
Таблица стилей
Результат
Элементы расширения Saxon
Использование
Пример: Использование saxon:function для сортировки
Исходный файл
Таблица стилей
Результат
Последовательный вывод в Saxon
Заключение

Приложение D. Xalan
Xalan-Java 2
Установка
Запуск Xalan-Java из командной строки
Запуск Xalan из Java-приложений
Xalan и DOM
Применение выражений XPath в Xalan
Функционирование Xalan-Java в качестве аплета
Функционирование Xalan-Java из сервлета
Расширяемость
Упрощенный синтаксис для вызова методов Java
Элемент
Формат
Расположение
Атрибуты
Содержимое
Использование
Элемент
Формат
Расположение
Атрибуты
Содержимое
Использование: Java
Использование: JavaScript
Пример: Использование функций расширения JavaScript в Xalan
Исходный файл
Таблица стилей
Результат
Использование: Реализация элементов расширения
Расширения
Встроенные функции расширения
Функции расширения SQL
Несколько выходных файлов
Пример: Создание нескольких выходных файлов
Исходный файл
Таблица стилей
Результат
Последовательный преобразователь Xalan
Xalan-C++
Интерфейс командной строки
Поддержка Unicode
Расширяемость
Заключение

Приложение E. Другие продукты
4XSLT
Cocoon
EZ/X
iXSLT
jd:xslt
Sablotron
Stylus Studio
TransforMiix
Unicorn
Доступ к базам данных
Формирование отчетов
Считывание форматированных текстовых файлов
XESALT
XML Spy
XSL Composer
XSLTC
xt
Запуск процессора xt
Расширяемость
Расширения
Вывод нескольких документов
Вывод не в формате XML
Пример: Формирование текстового вывода в xt
Исходный документ
Таблица стилей
Результат
Пользовательские обработчики вывода
Функции расширения
Заключение

Приложение F. TrAX: API для XML- преобразований
Обозначения
API анализатора JAXP 1.1
Поддержка SAX в JAXP
javax.xml.parsers.SAXParserFactory
javax.xml.parsers.SAXParser
Поддержка DOM в JAXP
javax.xml.parsers.DocumentBuilderFactory
javax.xml.parsers.DocumentBuilder
API для преобразований JAXP 1.1
javax.xml.transform.dom.DOMLocator
javax.xml.transform.dom.DOMResult
javax.xml.transform.dom.DOMSource
javax.xml.transform.ErrorListener
javax.xml.transform.OutputKeys
javax.xml.transform.Result
javax.xml.transform.sax.SAXResult
javax.xml.transform.sax.SAXSource
javax.xml.transform.sax.SAXTransformerFactory
javax.xml.transform.Source
javax.xml.transform.SourceLocator
javax.xml.transform.stream.StreamSource
javax.xml.transform.stream.StreamResult
javax.xml.transform.Templates
javax.xml.transform.sax.TemplatesHandler
javax.xml.transform. TransformerFactoryConfigurationError
javax.xml.transform.Transformer
javax.xml.transform.TransformerConfigurationException
javax.xml.transform.TransformerException
javax.xml.transform.TransformerFactory
javax.xml.transform.sax.TransformerHandler
javax.xml.transform.URIResolver

Примеры
Пример 1: Преобразование с использованием файлов
Пример 2: Передача параметров и выходных свойств
Пример 3: Хранение документов в памяти
Пример 4: Использование инструкции обработки
Пример 5: Конвейер SAX
Резюме

Глоссарий