Table Of ContentПо договору между издательством «Символ(cid:20)Плюс» и Интернет(cid:20)магазином
«Books.Ru – Книги России» единственный легальный способ получения
данного файла с книгой ISBN 978(cid:20)5(cid:20)93286(cid:20)150(cid:20)9, название «XSLT, 2(cid:20)е из(cid:20)
дание» – покупка в Интернет(cid:20)магазине «Books.Ru – Книги России». Если
Вы получили данный файл каким(cid:20)либо другим образом, Вы нарушили
международное законодательство и законодательство Российской Феде(cid:20)
рации об охране авторского права. Вам необходимо удалить данный
файл, а также сообщить издательству «Символ(cid:20)Плюс» (piracy@sym(cid:20)
bol.ru), где именно Вы получили данный файл.
XSLT
Second Edition
Doug Tidwell
XSLT
Второе издание
Дуг Тидуэлл
Санкт(cid:7)Петербург–Москва
2010
Дуг Тидуэлл
XSLT, 2(cid:2)е издание
Перевод Е. Матвеева
Главный редактор А.Галунов
Зав. редакцией Н.Макарова
Редактор О.Меркулова
Корректор О.Макарова
Верстка Д.Орлова
ТидуэллД.
XSLT, 2(cid:22)е издание.– Пер. с англ. – СПб.: Символ(cid:22)Плюс, 2010.– 960с., ил.
ISBN: 978(cid:22)5(cid:22)93286(cid:22)150(cid:22)9
Цель книги «XSLT», 2(cid:22)е издание – научить читателя эффективно использо(cid:22)
вать XSLT. Рассматриваются как XSLT1.0, так и XSLT2.0, а также версии 1.0
и 2.0 языка XPath. В спецификации XSLT2.0 язык был дополнен рядом важ(cid:22)
ных возможностей, многие из которых связаны с изменениями в XPath2.0.
Эти два языка проектировались в расчете на совместное использование: XPath
определяет преобразуемые части документа XML, а XSLT указывает, как долж(cid:22)
но быть выполнено преобразование.
В начальных главах рассматриваются основы XSLT, в том числе простые таб(cid:22)
лицы стилей и настройка процессоров, особое внимание уделяется преобразо(cid:22)
ваниям на базе шаблонов, обсуждаютя основные концепции XPath1.0 и 2.0.
Вы узнаете, как в XSLT 2.0 интегрирована поддержка XML Schema, научитесь
определять элементы и типы данных и использовать их в своих таблицах сти(cid:22)
лей. В завершающих главах рассматриваются примеры, в которых задейство(cid:22)
ваны все возможности XSLT и XPath. Вы увидите, как одна и та же задача ре(cid:22)
шается в XSLT1.0 и 2.0, что поможет решить, какая версия лучше всего подхо(cid:22)
дит для вашего проекта. Вторая часть книги содержит приложения, в которых
приводятся сотни таблиц стилей, в том числе примеры для каждого элемента,
функции и оператора, определяемых в XSLT и XPath.
Во всех главах представлены решения стандартных задач, в которых XSLT
проявляет свои чрезвычайно мощные и полезные возможности. Применение
XSLT2.0 во многих случаях существенно упрощает жизнь программиста.
Книга написана как учебник для тех, кто начинает изучать XSLT, а опытные
специалисты смогут использовать ее как справочник по функциям и различ(cid:22)
ным аспектам языка.
ISBN: 978(cid:2)5(cid:2)93286(cid:2)150(cid:2)9
ISBN: 978(cid:2)0(cid:2)596(cid:2)52721(cid:2)1 (англ)
© Издательство Символ(cid:22)Плюс, 2010
Authorized translation of the English edition © 2008 O’Reilly Media, Inc. This trans(cid:22)
lation is published and sold by permission of O’Reilly Media, Inc., the owner of all
rights to publish and sell the same.
Все права на данное издание защищены Законодательством РФ, включая право на полное или час(cid:22)
тичное воспроизведение в любой форме. Все товарные знаки или зарегистрированные товарные зна(cid:22)
ки, упоминаемые в настоящем издании, являются собственностью соответствующих фирм.
Издательство«Символ(cid:22)Плюс».199034,Санкт(cid:22)Петербург,16линия,7,
тел.(812) 380(cid:22)5007, www.symbol.ru. Лицензия ЛП N 000054 от 25.12.98.
Подписано в печать 25.09.2009. Формат 70×1001 /16. Печать офсетная.
Объем 60 печ.л. Тираж 1200 экз. Заказ №
Отпечатано с готовых диапозитивов в ГУП «Типография «Наука»
199034, Санкт(cid:22)Петербург, 9 линия, 12.
Посвящается моей семье– моей замечательной жене Шери Кастл
и изумительной дочери Лили – за их любовь, поддержку и понимание.
Все, что я делаю, становится возможным и обретает смысл
только благодаря им.
…и моя особая благодарность нашей собаке Домино,
которая частенько самоотверженно просовывает
свою мохнатую голову между моими руками и клавиатурой,
защищая меня от запястно-лучевого синдрома. Хороший пес!
Оглавление
Предисловие. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1. Первые шаги. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Архитектура XSLT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Основы XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Установка процессоров XSLT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Итоги. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
2. Обязательный пример «Hello World» . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Преобразование Hello World. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Как обрабатываются таблицы стилей . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Структура таблицы стилей. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Галерея преобразований . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Итоги. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
3. XPath: описание иголки в стоге сена . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
Модель данных в XPath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Пути доступа . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
Шаблоны значений атрибутов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
Типы данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
Операторы XPath. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
[2.0] Комментарии в выражениях XPath. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .129
[2.0] Типы процессоров XSLT 2.0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .131
Представление документа XML в XPath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .132
Итоги. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .140
4. Создание выходных данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .141
Построение текста . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .141
Нумерация . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .147
Форматирование чисел . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .156
[2.0] Форматирование даты и времени. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .159
Элементы <xsl:copy> и <xsl:copy(cid:22)of> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .162
Обработка пропусков. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .169
Итоги. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .174
8 Оглавление
5. Программная логика иуправляющиеэлементы . . . . . . . . . . . . . . . . . . .175
Элементы программной логики в XSLT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .176
Вызов шаблонов по имени. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .181
Параметры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .183
Переменные . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .199
Рекурсия. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .201
Имитация цикла for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .206
Итоги. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .211
6. Связывание и перекрестные ссылки. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .212
Типы данных XML ID, IDREF и IDREFS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .212
Функция key() и элемент <xsl:key>. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .225
Генерирование ссылок в неструктурированных документах. . . . . . . . . . . . . . . .230
Итоги. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .236
7. Сортировка и группировка элементов . . . . . . . . . . . . . . . . . . . . . . . . . . . . .237
Сортировка данных при помощи элемента<xsl:sort> . . . . . . . . . . . . . . . . . . . . .237
[2.0] Элемент <xsl:perform(cid:22)sort> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .248
Группировка узлов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .252
[2.0] Новый синтаксис группировки в XSLT2.0. . . . . . . . . . . . . . . . . . . . . . . . . .261
Итоги. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .278
8. Объединение документов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .279
Функция document() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .279
Функция document() и сортировка. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .288
Реализация таблиц отображения. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .290
Группировка по нескольким документам . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .293
[2.0] Упрощение таблиц стилей в XSLT2.0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .295
[2.0] Функции doc() и doc(cid:22)available() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .305
[2.0] Функция collection() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .307
[2.0] Функции unparsed(cid:22)text() иunparsed(cid:22)text(cid:22)available(). . . . . . . . . . . . . . . . . .309
Итоги. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .312
9. Расширение XSTL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .313
Механизм расширения XSLT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .314
[2.0] Создание новых функций с помощью элемента <xsl:function> . . . . . . . . .316
Пример: построение нескольких выходныхфайлов. . . . . . . . . . . . . . . . . . . . . . .318
Создание пользовательских схем упорядочения. . . . . . . . . . . . . . . . . . . . . . . . . .323
Генерирование замаскированной графики . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .330
Пример: построение круговых диаграмм в формате SVG. . . . . . . . . . . . . . . . . . .340
Написание расширений на других языках . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .365
Использование функций расширения избиблиотеки EXSLT . . . . . . . . . . . . . . .369
Обращение к базе данных из элемента расширения. . . . . . . . . . . . . . . . . . . . . . .372
Создание фотоальбома с помощью элементов расширения . . . . . . . . . . . . . . . . .379
Итоги. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .399
Оглавление 9
A. Справочник по элементам XSLT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .400
B. Справочник по XPath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .574
C. Справочник по функциям XSLT,XPathиXQuery . . . . . . . . . . . . . . . . . . . .591
D. Краткий обзор XML Schema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .878
E. [2.0] Регулярные выражения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .903
F. Форматные коды XSLT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .921
G. Руководство по переходу на XSLT2.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .927
Глоссарий. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .933
Алфавитный указатель . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .945