XSLT | Страница 1 | Онлайн-библиотека


Выбрать главу

Стивен Холзнер

XSLT

Библиотека программиста 

Об авторе

Стивен Холзнер (Steven Holzner) — широко известный автор, пишущий на темы XML, в том числе и XSLT, с момента появления этих технологий. Его перу принадлежат 67 книг по программированию; всего их было продано более миллиона экземпляров. Эти книги переведены на 16 языков мира, среди них немало бестселлеров. Стивен ранее работал редактором журнала PC Magazine; он окончил Массачусетский технологический институт (MIT) и получил степень доктора философии (Ph.D.) в институте Корнелла (Cornell), работал на факультетах Массачусетского технологического института и института Корнелла, а в настоящее время ведет семинары на предприятиях по всей стране.

О технических редакторах

Огромный опыт технических редакторов был неоценим на протяжении всего периода работы над книгой. По мере написания книги ими велась высокопрофессиональная работа над техническим содержанием, организацией и компоновкой текста. Их отзывы были необходимым условием того, что книга будет соответствовать потребностям читателей в технической информации самого высокого качества.

Джейсон А. Басс (Jason A. Buss) — программист-аналитик, разработчик собственных программных решений для лидирующего производителя авиационного оборудования на Среднем Западе. Он женат, у него четверо детей. В свободное время любит играть с детьми, модернизировать домашний компьютер и работать на нем (сейчас он совершенствует свои знания во FreeBSD), читать, играть на гитаре и слушать живую музыку. Связаться с ним можно по адресу: jabuss@worldnet.att.net.

Дарин Бишоп (Darin Bishop) работает консультантом в компании Levi, Ray and Shoup, Inc., расположенной на Среднем Западе. Сейчас он занят в роли архитектора продукта в крупном проекте, использующем технологии XML. В компетенцию этой должности входят управление проектированием, выбор и исследование технологий, а также технические аспекты работы над проектом. Ранее Дарин занимался разработкой web-приложений для агентства недвижимости, приложений для программ пенсионного обеспечения и другими проектами. Главная область его интересов — связывание отдельных систем при помощи HTTP и XML.

Благодарности

Книга подобного рода — плод работы многих людей, а не одного только автора. Работа сотрудников издательства New Riders была выше всяких похвал, и я хотел бы поблагодарить замечательного исполнительного редактора Стефани Уолл (Stephanie Wall), редакторов Лори Лайонс (Lori Lyons) и Марго Кэтс (Margo Catts) и, наконец, технических редакторов Джейсона Басса и Дарина Бишопа, проверивших весь материал. Спасибо всем за ваш нелегкий труд.

Введение

Добро пожаловать в XSLT, книгу, посвященную языку преобразований расширенной таблицы стилей (Extensible Stylesheet Language Transformations). Книга писалась так, чтобы быть настолько исчерпывающей (и доступной), насколько это возможно для единственной книги по XSLT. XSLT представляет собой средство преобразования документов XML в другие документы XML или в документы совершенно другого типа; сейчас эта тематика очень популярна. Я постарался написать наиболее полную книгу по XSLT, и я считаю, что мне это удалось.

Многие книги по XSLT описывают только преобразования XML-HTML, но здесь мы собираемся пойти гораздо дальше. Все большее значение приобретают преобразования XML-XML, и в скором времени с ростом числа приложений на различных диалектах XML они станут более важны, чем преобразования XML-HTML.

В этой книге мы рассмотрим преобразования на языке XSLT из XML в XML, в HTML, в XHTML, в RTF (Rich Text Format, документы форматированного текста), в простой текст, в сценарии JavaScript, в написанные на SQL базы данных и в XSL-FO (Extensible Stylesheet Language Formatting Object, документы форматированных объектов языка расширенной таблицы стилей).

Чтобы полностью раскрыть тему XSLT, в книге описываются все возможные элементы XSLT один за другим, а также их приложения. Кроме того, мы рассмотрим все функции XSLT и XPath, которые могут быть использованы в таблицах стилей XSLT.

И вам предстоит познакомиться с сотнями работающих примеров. Без сомнений, это лучший способ разобраться в том, как работает XSLT. Если мне не удастся объяснить что-либо в тексте, вы всегда сможете посмотреть соответствующий пример, поскольку буквально для каждой подтемы в книге приводится завершенный работающий код.

Все примеры приводятся для того, чтобы их запускать. Я использовал самые популярные процессоры XSLT, их все можно бесплатно загрузить из Интернета: Xalan, XT, Saxon, процессор XSLT фирмы Oracle и даже процессор, встроенный в Microsoft Internet Explorer. В книге по мере изложения будет указываться, где в Интернете можно найти все это программное обеспечение и как с ним работать.

Аналогично написанию кода XML, написание кода XSLT не обычная и не монотонная задача: этот процесс требует искусства, страстной увлеченности и оригинальности мышления, не говоря уже о том, что он часто вызывает разочарование и раздражение. Я постараюсь вести изложение в таком духе и приложу все усилия, чтобы передать в книге мощь и замечательные возможности XSLT.

Материал книги

Книга призвана дать вам столько материала, посвященного XSLT, сколько может содержать одна книга. Мы не только рассмотрим весь синтаксис XSLT от основ до всех специальных аспектов, но и подробно изучим различные современные способы использования XSLT.

Как я уже говорил, в книге рассмотрены сотни практических примеров, таких как осуществление преобразований XSLT на web-серверах, подключение к базам данных и использование браузеров для осуществления преобразований на лету.

Ниже перечислен ряд тем книги. Заметьте, что каждая тема включает в себя несколько подтем (слишком многочисленных, чтобы приводить их здесь):

• рекомендации по работе с XSLT 1.0;

• рабочий проект XSLT 1.1;

• требования XSLT 2.0;

• рекомендации по работе с ХРАТН 1.0;

• требования XPath 2.0;

• рекомендации по работе с пробной версией XSL 1.0;

• работа с процессорами Xalan, Saxon, XT и Oracle;

• создание выходных данных в форматах XML, HTML, RTF и простого текста;

• рекурсивная обработка шаблонов;

• правила шаблона по умолчанию;

• обработка пустого пространства;

• отключение вывода;

• выбор применяемого шаблона;

• создание шаблонов совпадений;

• использование предикатов в шаблонах совпадений;

• поиск совпадений элементов, дочерних и производных элементов, атрибутов и т.д.;

• поиск по идентификатору;

• синтаксис, связанный с XPath;

• условия if;

• конструкции for-each;

• реализация конструкций условного выбора;

• простая сортировка элементов;

• обработка множественного выделения;

• вложенные шаблоны;

• параметры таблицы стилей;

• упрощенные таблицы стилей;

• написание таблиц стилей для Internet Explorer;

• создание правил таблицы стилей;

• использование элементов расширения;

• использование функций расширения;

• создание элементов с результатом в виде литерала;

• использование шаблонов со значениями атрибутов;

• удаление пустого пространства;

• создание новых элементов, атрибутов, комментариев и т.д.;

• режимы XSLT (форматирование по контексту);

• фрагменты дерева результатов;

• форматы данных XPath;

• выражения XPath;

• все функции XSLT и XPath;

• создание наборов атрибутов;

• вызов именованных шаблонов;

• единственные и множественные ключи;

• создание документов с множественным выводом;

• использование процессоров Oracle, Saxon, XML4Java, XT в коде Java при помощи вызовов API;

• использование JavaScript для XSLT в Internet Explorer;

• Formatting Objects (форматирующие объекты) XSL-FO;

• Formatting Properties (форматирующие свойства) XSL-FO;

• преобразования XSLT на стороне сервера при помощи Java Server Pages (JSP), Active Server Pages (ASP) и сервлетов Java.

В книге полностью описаны официальные спецификации XSLT, установленные консорциумом World Wide Web Consortium (W3C: рекомендации по работе с XSLT 1.0, рабочий проект XSLT 1.1 и требования XSLT 2.0. Объяснение этих терминов приводятся в главе 1). Как мы рассмотрим в главе 1, консорциум W3C объявил, что рабочий проект (working draft) XSLT 1.1 не будет иметь статуса официальных рекомендаций, поскольку к выпуску готовится XSLT 2.0. Сейчас XSLT 2.0 имеет статус требований (requirements), который предшествует статусу рабочего проекта. Тем не менее, поскольку содержание рабочего проекта XSLT 1.1 будет включено в XSLT 2.0 и поскольку во многих процессорах XSLT будет реализована поддержка XSLT 1.1, я полностью описываю в этой книге и рабочий проект XSLT 1.1, специально отмечая относящийся к этому материал.

1
Стивен Холзнер: XSLT: Библиотека программиста  1
Об авторе 1
О технических редакторах 1
Благодарности 1
Введение 1
Материал книги 1
Для кого предназначена эта книга 2
На каком уровне написана книга 2
Используемые соглашения 2
От издательства 2
Глава 1: Основы XSLT 2
XSL = XSLT + XSL-FO 2
Краткая историческая справка 2
Преобразования XSLT-XSL 3
XSL-FO: форматирующие объекты XSL 3
Спецификации W3C 3
Версии XSLT 3
Документы XML 4
Хорошо сформированные документы XML 4
Допустимые документы XML 4
Как XML выглядит в браузере? 5
XSLT-преобразования 5
Что нужно для XSLT-преобразования 5
Использование отдельных процессоров XSLT 5
Использование процессора XSLT на Java 6
XT Джеймса Кларка 6
Saxon 7
Oracle XSLT 7
Xalan 7
Преобразование документов XML при помощи браузеров 7
Работа с XSLT и JavaScript в Internet Explorer 8
XSLT-преобразования на web-серверах 8
Преобразования из XML в XML 9
Преобразования из XML в XHTML 9
Ресурсы XSLT 10
Спецификации, руководства и примеры XSLT 10
Редакторы XSLT 10
Утилиты XSLT 11
Форматирующие объекты XSL: XSL-FO 11
Ресурсы XSL-FO 11
Форматирование документа XML 11
Таблица стилей XSLT 11
Преобразование документа в представление с форматирующими объектами 12
Создание форматированного документа 12
Глава 2: Создание и применение таблиц стилей 13
Деревья и узлы 13
Символ-разделитель 13
Модель информационного множества против модели дерева XSLT 14
Работа с элементами XSLT 15
Инструкция обработки <?xsl:stylesheet?> 15
Элемент <xsl:stylesheet> 15
Пространство имен XSL 16
Элементы таблиц стилей высокого уровня 16
Элемент <xsl:template> 16
Тела шаблонов 16
Инструкции XSLT 16
Элементы расширения 16
Элементы буквального результата 16
Совпадающие элементы в шаблонах 17
Элемент <xsl:apply-templates> 17
Доступ к значениям узлов 18
Поддержка XML Base 19
Выбор методов вывода 19
Метод вывода: HTML 19
Метод вывода: XML 20
Метод вывода: текст 20
Упрощенные таблицы стилей 20
Встроенные таблицы стилей 21
Элемент <xsl:include> 21
Элемент <xsl:import> 22
Элемент <xsl:apply-imports> 22
Преобразование документов XML при помощи Internet Explorer 22
Глава 3: Создание и применение шаблонов 23
Создание шаблона 23
Обработка дочерних узлов 23
Доступ к значениям узлов 24
Создание образцов выбора 24
Выбор применяемого шаблона 24
Чтение значений атрибутов 25
Элемент <xsl:text> 25
Отключение вывода эскейп-последовательностей 26
Написание значений атрибутов 26
Шаблоны значений атрибутов 26
Обработка символов-разделителей 27
Элементы <xsl:strip-space> и <xsl:preserve-space> 27
Автоматическое выравнивание 28
Правила по умолчанию в шаблоне 28
Удаление содержимого 29
Разрешение конфликтов шаблонов 29
Элемент <xsl:copy> 30
Элемент <xsl:copy-of> 30
Элемент <xsl:message> 30
Глава 4: Создание образцов выбора 31
Выбор корневого узла 31
Выбор элементов 31
Выбор дочерних элементов 31
Выбор потомков элемента 31
Выбор атрибутов 32
Формальное определение образцов выбора 32
Образцы шага, часть 1: оси образца 33
Сокращенный синтаксис 33
Образцы шага, часть 2: условия узла 33
Выбор комментариев 33
Выбор узлов при помощи node() 34
Выбор текстовых узлов при помощи text() 34
Выбор инструкций обработки 34
Образцы шага, часть 3: предикаты 34
Создание предикатов 35
Предикаты: наборы узлов 35
Предикаты: логические значения 35
Предикаты: числа 36
Строки 36
Предикаты: фрагменты результирующего дерева 37
Сокращенный синтаксис предикатов 37
Выбор по ID 37
Выбор по ключу 37
Применение операции Or 37
Примеры образцов 38
Глава 5: Принятие решений и сортировка данных 40
Элемент <xsl:if> 40
Элементы <xsl:choose>, <xsl:when> и <xsl:otherwise> 41
Элемент <xsl:for-each> 42
Сортирующие элементы 43
Сортировка по нескольким критериям 44
Элемент <xsl:number> 44
Одноуровневая нумерация 44
Нумерация на произвольных уровнях 45
Многоуровневая нумерация 45
Расширяемость XSLT 45
Функции расширения 46
Элемент <xsl:script> 46
Применение функции function-available 47
Внешние объекты 47
Элементы расширения 47
Применение функции element-available 48
Элемент <xsl:fallback> 48
Глава 6: Преобразование в XML, HTML, XHTML, RTF 48
Элемент <xsl:output> 49
Метод вывода: HTML 49
Метод вывода: XML 50
Метод вывода: текст 51
Вывод в формате XHTML 51
Изменение структуры документа на основе входных данных 52
Элемент <xsl:element>: создание новых элементов на этапе выполнения 52
Элемент <xsl:attribute>: создание новых атрибутов 53
Элемент <xsl:comment>: создание комментариев 53
Элемент <xsl:processing-instruction>: создание инструкций обработки 53
Элемент <xsl:document>: создание нескольких выходных документов 54
Элемент <xsl:namespace>: создание объявлений пространств имен 54
Элемент <xsl:attribute-set>: создание наборов атрибутов 54
Пропуск объявления XML и создание фрагментов XML 55
Создание уникальных идентификаторов при помощи generate-id 55
Создание разделов CDATA 56
Установка кодировки символов 56
Режимы: форматирование в зависимости от контекста 56
Глава 7 : Работа с XPath 58
Изучаем XPath 58
Типы данных XPath 59
Наборы узлов XPath 59
Числа XPath 59
Строки XPath 60
Логические значения XPath 60
Создание путей расположения XPath 61
Шаги расположения XPath, часть 1: оси 61
Шаги расположения XPath, часть 2: условия узлов 61
Шаги расположения XPath, часть 3: предикаты 61
Применение осей XPath 61
Применение оси ancestor 61
Применение оси ancestor-or-self 62
Применение оси descendant 62
Применение оси descendant-or-self 62
Применение оси following 62
Применение оси following-sibling 63
Применение оси namespace 63
Применение оси parent 63
Применение оси preceding 63
Применение оси preceding-sibling 64
Применение оси self 64
Примеры путей расположения 64
Сокращенный синтаксис XPath 64
Проверка выражений XPath 65
XPath 2.0 65
Глава 8: Работа с функциями XSLT и XPath 65
Функции XSLT 66
current() 66
document() 66
element-available() 67
format-number() 67
function-available() 67
generate-id() 67
key() 68
system-property() 68
unparsed-entity-uri() 68
Функции XPath для работы с наборами узлов 69
count() 69
id() 69
last()  70
local-name() 70
name()  70
namespace-uri() 70
position() 70
Функции XPath для работы со строками 70
concat() 70
contains() 71
normalize-space() 71
starts-with() 71
string() 72
string-length() 72
substring() 72
substring-after() 72
substring-before() 73
translate() 73
Функции XPath для работы с числами 73
ceiling() 73
floor() 73
number() 73
round() 73
sum() 73
Логические функции XPath 73
boolean() 73
false() 73
lang()  73
not() 74
true() 74
Элемент <xsl:decimal-format>: создание числовых форматов 74
Новые функции в XSLT 2.0 и XPath 2.0 75
Глава 9: Именованные шаблоны, параметры и переменные 75
Элемент <xsl:variable>: создание переменных 75
Область видимости переменной 76
Работа с переменными 76
Элемент <xsl:call-template>: применение именованных шаблонов 77
Элементы <xsl:param> и <xsl:with-param>: создание параметров 78
Рекурсивный вызов шаблонов 79
Шаблон: значение по умолчанию 79
Как задавать значения шаблона в командной строке 80
Элемент <xsl:key>: выбор по ключу  80
Элемент <xsl:document>: создание нескольких результирующих документов 81
Элемент <xsl:namespace-alias>: генерация таблиц стилей 82
Глава 10: Работа с API процессоров XSLT 82
XSLT и JavaScript в Internet Explorer 82
Обработка ошибок разбора 83
Internet Explorer и динамические стили 83
Internet Explorer и участки данных XML 84
Вызов Java непосредственно из процессоров XSLT 85
Работа с API XSLT для Java 85
Взаимодействие Xalan с Java 85
Взаимодействие Saxon с Java 86
Взаимодействие процессора XSLT Oracle с Java 87
Взаимодействие XT с Java 87
Преобразование XML в реляционную базу данных 88
Применение XSLT с активными серверными страницами 89
Применение XSLT с Java Server Pages 89
Применение XSLT с сервлетами Java 89
Глава 11: Применение XSLT для создания документов XSL-FO 90
Форматирование XSL 90
Форматирующие объекты XSL-FO 90
Форматирующие свойства XSL-FO 91
Форматирование документа XML 93
Преобразование в XSL-FO при помощи таблицы стилей XSLT 93
Создание корня документа: <fo:root> 94
Создание схемы набора шаблонов: <fo:layout-master-set> 95
Создание шаблона страницы: <fo:simple-page-master> 95
Создание областей 95
Создание последовательностей страниц: <fo:page-sequence> 95
Создание объектов потока: <fo:flows> 96
Создание содержимого уровня блока: <fo:block> 96
Создание таблиц 97
Создание таблиц: <fo:table> 98
Создание столбцов таблицы: <fo:table-column> 98
Создание тел таблицы: <fo:table-body> 98
Создание строк таблицы: <fo:table-row> 99
Создание ячеек таблицы: <fo:table-cell> 99
Глава 12: Документы XSL-FO 99
Создание списков XSL-FO 99
Создание списка: <fo:list-block> 100
Создание элементов списка: <fo:list-item> 100
Создание меток элемента списка: <fo:list-item-label> 101
Создание тел элементов списка: <fo:list-item-body> 101
Размещение текста при помощи контейнеров блоков: <fo:block-container> 101
Встроенные форматирующие объекты 102
Создание встроенных областей: <fo:inline> 102
Обработка отдельных символов: <fo:character> 103
Создание номеров страниц: <fo:page-number> 103
Вставка графики: <fo:external-graphic> 103
Форматирование первых строк: <fo:initial-property-set> 104
Создание сносок: <fo:footnote> и <fo:footnote-body> 104
Создание ссылок: <fo:basic-link> 104
Создание колонок 105
Последовательности страниц и нумерация страниц 105
Приложение A: DTD XSLT 107
Фрагмент DTD для таблиц стилей XSLT 107
Приложение Б: Форматирующие свойства XSL-FO 109