Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

XSLT. Сборник рецептов

Покупка
Артикул: 615962.02.99
Доступ онлайн
519 ₽
В корзину
Язык XSLT (Extensible Stylesheet Language Transformation) стал основным инструментом обработки XML-документов, но многие разработчики все еще не освоили его в полной мере и потому считают, что проще модифицировать имеющийся код, чем писать новый с нуля. В версии 2.0 многие проблемы решены, но появился ряд новых возможностей, которые еще надо изучить. К тому же она пока недостаточно поддержана. Во втором издании настоящей книги приведены сотни решений задач, с которыми регулярно сталкиваются программисты. Даются варианты для обеих версий XSLT. Диапазон рецептов чрезвычайно широк: от операций со строками и математических вычислений до таких сложных тем, как расширение XSLT, тестирование и отладка таблиц стилей и создание графики в форме SVG. В каждом рецепте обосновывается выбор решения и объясняется примененная техника. Для многих задач приводятся альтернативные решения с замечаниями по поводу удобства пользования и производительности. Предлагая рецепты, рассчитанные на разные уровни квалификации, эта книга станет идеальным спутником программиста, который любит учиться на примерах. Неважно, примериваетесь вы к XSLT впервые или уже знакомы с этим языком и хотите иметь подборку готовых рецептов для решения сложных задач, в ней вы найдете самые разные способы применения XSLT.
Мангано, С. XSLT. Сборник рецептов : практическое руководство / С. Мангано ; пер. с англ. А. А. Слинкина. - 2-е изд. - Москва : ДМК Пресс ; Санкт-Петербург : БХВ-Петербург, 2022. - 862 с. - ISBN 978-5-89818-251-9. - Текст : электронный. - URL: https://znanium.ru/catalog/product/2012581 (дата обращения: 29.11.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов
Сэл Мангано

XSLT
СБОРНИК РЕЦЕПТОВ

Москва, СанктПетербург
2022

2-е издание, электронное

УДК 004.438
ББК 32.973.26-018.2
М23

М23
Мангано, Сэл.

XSLT. Сборник рецептов / С. Мангано ; пер. с англ. А. А. Слинкина. — 2-е изд., 
эл. — 1 файл pdf : 863 с. — Москва : ДМК Пресс ; СПб : БХВ-Петербург, 2022. — 
Систем. требования: Adobe Reader XI либо Adobe Digital Editions 4.5 ; экран 
10". — Текст : электронный.

ISBN 978-5-89818-251-9

Язык XSLT (Extensible Stylesheet Language Transformation) стал основным инструментом обработки XML-документов, но многие разработчики все еще не освоили его в 
полной мере и потому считают, что проще модифицировать имеющийся код, чем писать 
новый с нуля. В версии 2.0 многие проблемы решены, но появился ряд новых возможностей, которые еще надо изучить. К тому же она пока недостаточно поддержана.
Во втором издании настоящей книги приведены сотни решений задач, с которыми 
регулярно сталкиваются программисты. Даются варианты для обеих версий XSLT. Диапазон рецептов чрезвычайно широк: от операций со строками и математических вычислений до таких сложных тем, как расширение XSLT, тестирование и отладка таблиц стилей и создание графики в форме SVG. В каждом рецепте обосновывается выбор решения 
и объясняется примененная техника. Для многих задач приводятся альтернативные решения с замечаниями по поводу удобства пользования и производительности.
Предлагая рецепты, рассчитанные на разные уровни квалификации, эта книга станет 
идеальным спутником программиста, который любит учиться на примерах. Неважно, 
примериваетесь вы к XSLT впервые или уже знакомы с этим языком и хотите иметь подборку готовых рецептов для решения сложных задач, в ней вы найдете самые разные 
способы применения XSLT.

УДК 004.438 
ББК 32.973.26-018.2

В соответствии со ст. 1299 и 1301 ГК РФ при устранении ограничений, установленных техническими средствами защиты 
авторских прав, правообладатель вправе требовать от нарушителя возмещения убытков или выплаты компенсации.

ISBN 978-5-89818-251-9
© Оформление, ДМК Пресс
© Издание, БХВПетербург

Содержание

Предисловие .................................................................................. 9
О структуре книги ....................................................................... 11
Типографские соглашения ......................................................... 13
О примерах кода ........................................................................ 14
Благодарности ........................................................................... 15

Глава 1. Язык XPath................................................................... 17
1.1. Применение осей ................................................................ 18
1.2. Фильтрация узлов ............................................................... 24
1.3. Работа с последовательностями ......................................... 27
1.4. Включение условий в выражения if ...................................... 29
1.5. Исключение рекурсии с помощью выражений for ............... 32
1.6. Упрощение сложной логики с помощью кванторов ............. 34
1.7. Операции над множествами ............................................... 36
1.8. Сравнение узлов ................................................................. 37
1.9. Как ужиться с расширенной системой типов в XPath 2.0 ..... 38
1.10. Как воспользоваться расширенной системой типов
в XPath 2.0 .......................................................................... 41

Глава 2. Строки .......................................................................... 43
2.0. Введение............................................................................. 43
2.1. Завершается ли данная строка указанной подстрокой?...... 44
2.2. Нахождение позиции начала подстроки .............................. 44
2.3. Удаление заданных символов из строки ............................. 45
2.4. Поиск подстроки с конца строки ......................................... 49
2.5. Повторение строки N раз .................................................... 53
2.6. Обращение строки .............................................................. 57
2.7. Замена текста ..................................................................... 61
2.8. Преобразование регистра .................................................. 67
2.9. Разбиение строки на лексемы ............................................. 70
2.10. Как обойтись без регулярных выражений .......................... 73
2.11. Использование регулярных выражений ............................. 74
2.12. Расширения EXSLT для работы со строками ...................... 76

Глава 3. Математические операции над числами ............. 80
3.0. Введение............................................................................. 80
3.1. Форматирование чисел....................................................... 81
3.2. Округление чисел с заданной точностью ............................ 90

Содержание
Содержание
Содержание
Содержание
Содержание

3.3. Преобразование римских числительных в числа................. 93
3.4. Преобразование из одной системы счисления в другую ..... 96
3.5. Реализация стандартных математических функций .......... 100
3.6. Вычисление сумм и произведений .................................... 114
3.7. Нахождение минимума и максимума ................................ 120
3.8. Вычисление статистических функций ............................... 128
3.9. Вычисление комбинаторных функций ............................... 132
3.10. Проверка битов................................................................ 134

Глава 4. Даты и время ............................................................ 141
4.0. Введение........................................................................... 141
4.1. Вычисление дня недели .................................................... 143
4.2. Вычисление последнего дня месяца ................................. 145
4.3. Получение названий дней и месяцев ................................ 146
4.4. Вычисление юлианского и абсолютного дня,
соответствующих заданной дате....................................... 151
4.5. Вычисление номера недели, соответствующего
заданной дате ................................................................... 156
4.6. Юлианский календарь ....................................................... 157
4.7. Календарь ISO ................................................................... 158
4.8. Исламский календарь ....................................................... 161
4.9. Еврейский календарь ........................................................ 164
4.10. Форматирование даты и времени .................................... 174
4.11. Определение светских и церковных праздников ............. 187

Глава 5. Отбор и обход ........................................................... 191
5.0. Введение ........................................................................... 192
5.1. Игнорирование элементовдубликатов ............................. 194
5.2. Отбор всех элементов, кроме одного ................................ 200
5.3. Отбор узлов по контексту .................................................. 201
5.4. Выполнение обхода в прямом порядке .............................. 203
5.5. Выполнение обхода в обратном порядке ........................... 208
5.6. Выполнение обхода во внутреннем порядке...................... 210
5.7. Выполнение обхода по уровням ........................................ 214
5.8. Обработка узлов по позиции ............................................. 221

Глава 6. XSLT 2.0...................................................................... 229
6.0. Введение........................................................................... 229
6.1. Преобразование простых именованных шаблонов
в функции XSLT ................................................................. 229
6.2. Для группировки пользуйтесь командой foreachgroup,
а не методом Мюнха.......................................................... 231

Содержание
Содержание
Содержание
Содержание
Содержание

6.3. Модульность и режимы ..................................................... 235
6.4. Применение типов в целях безопасности и точности
выражения намерений ...................................................... 236
6.5. Избегайте подводных камней при переносе
с XSLT 1.0 на 2.0 ................................................................ 238
6.6. Эмуляция объектноориентированных методик
повторного использования и паттернов
проектирования ................................................................ 240
6.7. Обработка неструктурированного текста
с помощью регулярных выражений ................................... 245
6.8. Решение трудных задач сериализации
с помощью таблиц символов............................................. 249
6.9. Вывод нескольких документов .......................................... 251
6.10. Обработка строковых литералов, содержащих кавычки ..... 253
6.11. Новые возможности старых конструкций XSLT 1.0 .......... 253

Глава 7. Преобразование XML в текст ................................ 260
7.0. Введение........................................................................... 260
7.1. Пустое пространство......................................................... 261
7.2. Экспорт XML в файл с разделителями полей..................... 267
7.3. Создание отчета с несколькими колонками ...................... 287
7.4. Отображение иерархии ..................................................... 299
7.5. Вывод текста с нумерацией .............................................. 308
7.6. Вывод текста в области заданной ширины
с заданным выравниванием .............................................. 319

Глава 8. Преобразование XML в XML .................................. 323
8.0. Введение........................................................................... 323
8.1. Преобразование атрибутов в элементы ............................ 324
8.2. Преобразование элементов в атрибуты ............................ 327
8.3. Переименование элементов или атрибутов ...................... 332
8.4. Объединение документов с одной и той же схемой .......... 339
8.5. Объединение документов с различными схемами ............ 345
8.6. Расщепление документов ................................................. 351
8.7. Уплощение иерархии XML ................................................. 353
8.8. Углубление иерархии XML ................................................. 357
8.9. Реорганизация иерархии XML ........................................... 363

Глава 9. Опрос XMLдокумента ............................................ 368
9.0. Введение........................................................................... 369
9.1. Выполнение теоретикомножественных операций
над наборами узлов .......................................................... 370

Содержание
Содержание
Содержание
Содержание
Содержание

9.2. Выполнение теоретикомножественных операций
над наборами узлов с использованием семантики
значений ........................................................................... 373
9.3. Сравнение наборов узлов на равенство по значению ....... 385
9.4. Выполнение запросов, сохраняющих структуру................ 390
9.5. Соединения....................................................................... 393
9.6. Реализация на XSLT сценариев, приведенных
в спецификации W3C XML Query ....................................... 398

Глава 10. Преобразование XML в HTML ............................. 433
10.0. Введение ......................................................................... 433
10.1. Использование XSLT в качестве языка стилизации .......... 434
10.2. Создание документов, связанных гиперссылками ........... 443
10.3. Создание HTMLтаблиц ................................................... 446
10.4. Создание фреймов .......................................................... 455
10.5. Создание таблиц стилей, управляемых данными............. 461
10.6. Создание замкнутого преобразования ............................ 468
10.7. Заполнение формы .......................................................... 473

Глава 11. Преобразование XML в SVG ................................ 480
11.0. Введение ......................................................................... 480
11.1. Преобразование имеющейся заготовки SVG ................... 482
11.2. Создание повторно используемых
утилит генерации SVG для графиков и диаграмм............. 490
11.3. Создание графического представления деревьев ........... 532
11.4. Создание интерактивных Webстраниц,
включающих SVG ............................................................. 543

Глава 12. Генерация кода ................................................ 554
12.0. Введение ......................................................................... 555
12.1. Генерация определений констант .................................... 565
12.2. Генерация предложения switch ........................................ 570
12.3. Генерация кода заглушки обработчика сообщения ......... 575
12.4. Генерация оберток для данных ........................................ 579
12.5. Генерация функций форматированной печати ................ 584
12.6. Генерация Webклиента для тестирования
ввода данных ................................................................... 593
12.7. Генерация CGIсценария для обработки
тестовых данных .............................................................. 595
12.8. Генерация кода из UMLмоделей,
описанных на языке XMI ................................................... 601
12.9. Генерация XSLT из XSLT................................................... 620

Содержание
Содержание
Содержание
Содержание
Содержание

Глава 13. Рецепты применения XSLT
в вертикальных приложениях .......................................... 625
13.0. Введение ......................................................................... 625
13.1. Преобразование документов из формата Visio VDX
в формат SVG ........................................................................... 626
13.2. Работа с электронными таблицами в формате Excel XML ..... 641
13.3. Генерация тематических карт из UMLмодели
с помощью XMI ......................................................................... 653
13.4. Генерация Webсайтов из тематических карт .................. 673
13.5. Генерация документации о SOAP из WSDLдокумента .... 689

Глава 14. Расширение и встраивание XSLT ...................... 706
14.0. Введение ......................................................................... 706
14.1. Функции расширения в Saxon .......................................... 707
14.2. Элементы расширения в Saxon ........................................ 708
14.3. Функции расширения в XalanJava 2 ................................ 709
14.4. Описание Javaфункций расширения в формате класса ..... 709
14.5. Описание Javaфункций расширения в формате пакета ..... 710
14.6. Описание Javaфункций расширения в формате Java ..... 710
14.7. Функции расширения на языке сценариев
с использованием встроенного сценария ........................ 711
14.8. Элементы расширения в XalanJava 2 .............................. 711
14.9. Реализация элемента расширения на языке Java ............ 711
14.10.Реализация элемента расширения на сценарном языке..... 712
14.11.Функции расширения в MSXML ...................................... 713
14.12.Использование встроенных расширений Saxon и Xalan .... 714
14.13.Расширение XSLT с помощью JavaScript ........................ 730
14.14.Реализация функций расширения
на языке Java .................................................................. 736
14.15.Реализация элементов расширения
на языке Java .................................................................. 744
14.16.Работа с XSLT в программах
на языке Perl ................................................................... 760
14.17.Работа с XSLT в программах
на языке Java .................................................................. 763

Глава 15. Тестирование и отладка ...................................... 767
15.0. Введение ......................................................................... 767
15.1. Эффективное использование xsl:message ....................... 768
15.2. Трассировка потока обработки документа
таблицей стилей .............................................................. 771

Содержание
Содержание
Содержание
Содержание
Содержание

15.3. Автоматизация вставки отладочной печати ..................... 778
15.4. Встраивание тестовых данных в служебные
таблицы стилей ........................................................................ 786
15.5. Организация автономных тестов ..................................... 791
15.6. Тестирование граничных условий и ошибочных данных ..... 794

Глава 16. Обобщенное
и функциональное программирование .............................. 798
16.0. Введение ......................................................................... 798
16.1. Создание полиморфного XSLTкода ................................ 805
16.2. Создание обобщенных функций
агрегирования элементов ................................................ 814
16.3. Создание обобщенных функций
ограниченного агрегирования ......................................... 828
16.4. Создание обобщенных функций
отображения .................................................................... 836
16.5. Создание обобщенных генераторов
наборов узлов .................................................................. 846

Алфавитный указатель ........................................................... 853

Предисловие

XSLT (Extensible Stylesheet Language Transformations) – это технология преобразования XMLдокументов в другие форматы. Некоторые считают, что освоить ее трудно. Однако тот факт, что в основе технологии лежат шаблоны, делают
ее прекрасным кандидатом для изучения на примерах, особенно, если учесть что
имеющийся образец зачастую легко приспособить для других целей. Благодаря
спецификации XSLT 2.0 выразительность и элегантность XSLT заметно возросли,
но язык при этом стал сложнее.
Когда я только начинал работать с XSLT (и позднее, когда приступил к изучению XSLT 2.0), мне очень не хватало сборника рецептов, из которого я мог бы
черпать готовые решения стоящих передо мной задач. Первой книгой такого рода,
которая попалась мне на глаза, была Perl Cookbook, выпущенная издательством
O’Reilly. Она заставила меня сначала преодолеть нежелание изучать язык Perl,
а затем и полюбить его, в чем оригинальная книга Ларри Уолла (Programming Perl –
знаменитая «книга с верблюдом») не преуспела. Мне кажется, что такие сборники
рецептов нужны, поскольку многим разработчикам недостаточно просто заставить программу работать; они хотели бы в совершенстве овладеть технологией
и применять хорошо зарекомендовавшие себя приемы. При этом получить необходимую информацию желательно быстро. А нет лучшего способа глубоко изучить
предмет, чем воспользоваться опытом тех, кто уже нашел удачный подход к проблеме.
Острое желание иметь подобную книгу вскоре переросло в желание самому
написать ее, тем более что у меня уже подобралось несколько полезных рецептов;
чтото придумали другие, а чтото – я сам. Однако я не хотел просто переписывать
учебник по XSLT, подругому сгруппировав материал. Я поставил целью создать
полезный ресурс, в котором освещались бы некоторые неочевидные способы применения этой технологии. Заодно я надеялся привлечь внимание тех разработчиков, которые еще не заинтересовались XSLT и тем самым, на мой взгляд, упустили
из виду один из наиболее эффективных инструментов работы с XMLдокументами. Если вы принадлежите к их числу, прошу вас прочитать хотя бы еще несколько абзацев, где я расскажу, чем ценен XSLT и как эта книга поможет вам осознать
его потенциал.
XSLT – это язык, который находится одновременно в центре и на обочине магистрального пути развития технологий разработки программного обеспечения.
Когда я работал над первым изданием этой книги, мне часто приходилось объяснять знакомым, что такое XSLT и почему так важно тратить время на написание
целой книги о нем. Мои знакомые были наслышаны о Java, Perl и даже XML, но
ничего не знали об XSLT. Я также видел, как растет потребность в консультациях

10
10
10
10

по XSLT, в списках рассылки и большем внимании индустрии к этой технологии,
которое выражалось бы в книгах, статьях и развитых инструментах поддержки.
Хотя число пользователей XSLT возрастает с каждым днем, многие профессионалы все еще не понимают, что это такое и с чем его едят. Я надеюсь, что по мере
появления реализаций XSLT 2.0 эта технология распространится шире, однако
уверенности в этом нет, в частности изза конкуренции со стороны XQuery 1.0
и других способов манипулирования XMLдокументами. Но одно можно сказать
точно: изучение XSLT 2.0 не станет потерянным впустую временем, поскольку
область его применения будет расширяться, хотя, быть может, и не лавинообразно. К тому же знакомство с XSLT углубит ваши представления о том, как можно
обрабатывать XML, даже если в конечном итоге вы остановитесь на другой технологии.
Хотя XSLT 1.0 – вполне зрелый язык и спецификация XSLT 2.0 была принята
не так уж давно, у меня есть ощущение, что больше половины людей и компаний,
работающих с XML, не используют XSLT. Сравнительно недавно один мой знакомый, который в курсе всех новейших технологий, говорил мне, что XSLT – это
просто еще один язык стилизации. Такое недопонимание простительно, поскольку об XSLT судят по первым трем буквам аббревиатуры (XSL – расширенный
язык таблиц стилей) и по директиве, с которой начинаются большинство XSLTпрограмм (xsl:stylesheet). Но самой важной является как раз последняя буква T,
означающая Transformations (преобразования). Именно это делает язык таким
ценным, и по этой причине я им и заинтересовался. При написании этой книги я,
в частности, намеревался показать, что XSLT применим к решению самых разных
задач. Кроме того, я хотел, чтобы эта книга стала для пользователей начального
и среднего уровня тем местом, где можно найти большинство распространенных
приемов работы с XSLT. И, наконец, я хотел продемонстрировать, что вообще
можно делать с XSLT и тем самым побудить тех, кто уже знает этот язык, к более
глубокому изучению, а остальных – присоединиться к компании «преобразователей XML».
Мне доводилось слышать самые разные мнения о том, что такое информатика.
Высказывания типа «любое вычисление – это просто более или менее хитроумное
манипулирование битами», «компьютеры – не более чем очень усложненные перемалыватели чисел» или «все, что может делать компьютер, возможно выразить
в терминах манипулирования символами» в какойто степени верны. Но я бы хотел предложить и свое собственное обобщение: «Любая задача, решаемая с помощью программы, может быть описана в терминах преобразований». Тот, кто овладел искусством преобразований, овладел и информатикой. Преобразованиями
занимается процессор, преобразования лежат в основе алгоритмов, преобразования – это суть работы программистов. И именно преобразования составляют
смысл языка XSLT, по крайней мере, когда на вход подается XMLдокумент
(а иногда и нечто иное). Разумеется, XSLT – не единственный язык преобразований, и, как и для тысяч предшествовавших ему языков, неясно, будет ли он развиваться независимо или окажется поглощенной следующей «потрясающей инновацией». Очевидно лишь, что лежащие в основе XSLT идеи никуда не денутся,

Доступ онлайн
519 ₽
В корзину