Главная » XSLT

Отображение иерархии

Добавлено Дата: 15 December, 2010 категория: XSLT

Задача

Требуется вывести текст с отступами или аннотациями, чтобы показать иерархическую структуру исходного XML-документа.

Решение

Самый очевидный способ представить иерархию – сформировать с помощью пробелов отступы различной ширины. В примерах 7.29 и 7.30 приведена обобщенная таблица стилей, в которой приняты разумные допущения о преобразовании инфор­мации, хранящейся во входном документе, в иерархически организованный текст.

Читать »

Выполнение теоретико-множественных операций над наборами узлов с использованием семантики значений

Добавлено Дата: 14 December, 2010 категория: XSLT

Задача

Требуется найти объединение, пересечение, разность или симметрическую разность двух наборов узлов. Однако теперь равенство определено не как иден­тичность наборов узлов, а как функция от значений узлов.

Решение XSLT 1.0

Потребность в этом решении может возникнуть при работе с несколькими документами. Рассмотрим два документа с одной и той же DTD-схемой, в ко­торых не может быть элементов с одинаковыми значениями. С точки зрения XSLT, элементы, взятые из разных документов, различаются, даже если у них одинаковые пространства имен, атрибуты и текстовые значения. См. примеры 9.1 – 9.4.

Читать »

Применение типов в целях безопасности и точности выражения намерений

Добавлено Дата: 14 December, 2010 категория: XSLT

Задача

Ограниченные средства контроля типов в XSLT 1.0 не дают написать по-на­стоящему устойчивый к ошибкам шаблон.

Решение

Пользуйтесь расширенной системой типов в XSLT 2.0 для создания безопас­ных относительно типов функций и шаблонов.

Читать »

Преобразование XML в SVG – Введение

Добавлено Дата: 13 December, 2010 категория: XSLT

Scalable Vector Graphics (SVG) – это формат векторной графики, записывае­мый в синтаксисе XML. У него есть все возможности революционно изменить способ доставки графического контента через Интернет. Одна из самых убеди­тельных причин кодировать графику в виде XML заключается в том, что ренде­ринг данных оказывается частным случаем преобразования. Поэтому язык XSLT, в который не включены никакие графические возможности, способен генериро­вать сложные образы, так как большая часть работы делегируется интерпретато­ру SVG, работающему внутри браузера.

Читать »

Создание полиморфного XSLT-кода

Добавлено Дата: 12 December, 2010 категория: XSLT

Задача

Требуется написать XSLT-код, который выполняет одну и ту же функцию над несопоставимыми данными.

Решение

В XSLT есть два вида полиморфного поведения. Первый напоминает пере­грузку, второй – переопределение.

В некоторых современных языках, особенно в C++, можно создавать перегру­женные функции, то есть функции с одинаковым именем, но с разным числом или типами аргументов. Компилятор определяет, какой вариант функции вызвать, анализируя переданные ей в момент вызова параметры. В XSLT прямого аналога этого механизма нет, но давайте рассмотрим следующую таблицу стилей:

Читать »

Модульность и режимы

Добавлено Дата: 12 December, 2010 категория: XSLT

Задача

Имеющиеся в XSLT 1.0 ограничения на использование режимов (атрибута mode) часто приводят к дублированию кода или лишней работе.

Решение

Пользуйтесь новыми, появившимися в XSLT 2.0 возможностями атрибута mode для устранения дублирования кода. Рассмотрим простую таблицу стилей, в которой один и тот же документ обрабатывается в два прохода с разными режи­мами. На каждом проходе по умолчанию текстовые узлы должны игнорировать­ся. В XSLT 1.0 пришлось бы написать что-то вроде:

Читать »

Упрощение сложной логики с помощью кванторов

Добавлено Дата: 12 December, 2010 категория: XSLT

Задача

Требуется проверить выполнение некоторого условия для некоторых или всех элементов последовательности.

Решение

XPath 1.0

Если условие сводится к проверке на равенство, то достаточно семантики опе­раторов = и != в XPath 1.0 и 2.0.

Читать »

Преобразование из одной системы счисления в другую

Добавлено Дата: 9 December, 2010 категория: XSLT

Задача

Требуется преобразовать строку, представляющую число в системе с одним основанием, в число, записанное в системе с другим основанием.

Решение

В следующем примере приведено общее решение для преобразования из сис­темы с любым основанием от 2 до 36 в систему с другим основанием из того же диапазона. Здесь используются две глобальные переменные для кодирования всех символов в системе с основанием 36 в виде смещений от начала строки, одной для кодирования заглавных букв и другой – для прописных.

Читать »

Вывод нескольких документов

Добавлено Дата: 9 December, 2010 категория: XSLT

Задача

Необходима переносимая таблица стилей для вывода нескольких документов.

Решение

Хотя в большинстве реализаций XSLT 1.0 имеются расширения, помогающие обрабатывать несколько документов, все они немного различаются между собой. А в XSLT 2.0 есть команда xsl:result-document.

Читать »

Организация автономных тестов

Добавлено Дата: 8 December, 2010 категория: XSLT

Задача

Требуется организовать тесты, чтобы упростить процедуру тестирования.

Решение

Посмотрите, как в рецепте 15.4 мы внедрили тестовые данные в таблицу сти­лей. В каждом тестовом элементе имеется атрибут num, а правильный результат за­писывается в атрибут ans. Затем управляющая программа извлекает тестовые эле­менты, выполняет тест и сравнивает ожидаемый результат с получившимся. Важно то, что управляющая программа ничего не выводит, если тест прошел успешно.

Читать »

Опрос XML-документа – Введение

Добавлено Дата: 8 December, 2010 категория: XSLT

Эта глава посвящена рецептам использования XSLT как языка запросов для XML. Под запросом к XML понимается извлечение информации из одного или нескольких XML-документов, которая отвечает на вопросы о хранящихся в этих документах фактах и существующих между ними отношениях. Можно провести аналогию между запросом к XML на языке XSLT и запросом к реляционной базе данных на языке SQL.

Читать »