Главная » XSLT

Генерация тематических карт из UML-модели с помощью XMI

Добавлено Дата: 22 January, 2011 категория: XSLT

Задача

Вы хотели бы воспользоваться своим любимым инструментом UML-моде- лирования с поддержкой XMI для создания описаний тематических карт на языке XTM.

Решение

Читателям, не знакомым с тематическими картами, возможно, стоит сначала прочитать раздел «Обсуждение».

Читать »

Разбиение строки на лексемы

Добавлено Дата: 22 January, 2011 категория: XSLT

Задача

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

Решение XSLT 1.0

Само решение принадлежит Джени Теннисон (мои лишь комментарии). Каж­дая лексема возвращается в виде узла, состоящего из элемента token, содержа­щего текст. Если строка разделителей пуста, то по умолчанию исходная строка разбивается на отдельные символы.

Читать »

Реализация элемента расширения на языке Java

Добавлено Дата: 21 January, 2011 категория: XSLT

<xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

xmlns:xalan="http://xml.apache.org/xslt"

xmlns:MyExt="xalan://com.AcmeX.MyExtensionElement">

Читать »

Вычисление номера недели, соответствующего заданной дате

Добавлено Дата: 21 January, 2011 категория: XSLT

Задача

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

Решение XSLT 1.0

Номер недели изменяется в диапазоне от 1 до 53. В большинстве годов коли­чество недель равно 52, но в тех, которые содержат 53 четверга, недель тоже 53. Для решения воспользуемся шаблоном вычисления юлианского дня:

Читать »

Встраивание тестовых данных в служебные таблицы стилей

Добавлено Дата: 20 January, 2011 категория: XSLT

Задача

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

Решение

Предполагается, что следующая таблица будет использоваться как служеб­ная. Но ее можно протестировать автономно, указав в качестве тестовых входных данных ее саму:

Читать »

Исключение рекурсии с помощью выражений for

Добавлено Дата: 20 January, 2011 категория: XSLT

Задача

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

Решение

Читать »

Вывод текста с нумерацией

Добавлено Дата: 19 January, 2011 категория: XSLT

Задача

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

Решение

Так как нумеровать можно по-разному, я в этом примере приведу ряд посте­пенно усложняющихся примеров, которые покрывают большую часть обычных (и ряд не столь обычных) потребностей в нумерации.

Читать »

Математические операции над числами – Введение

Добавлено Дата: 19 January, 2011 категория: XSLT

В главе 2 мы сетовали на отсутствие развитых средств обработки строк в XSLT 1.0. А уж что касается математических вычислений, XSLT и вовсе ничем не лучше Микки Мауса! В XSLT 1.0 имеются средства для выполнения основных арифме­тических операций, подсчета и суммирования значений и форматирования чисел. Вся остальная математика – на откуп вашей изобретательности. К счастью, как и в случае строк, рекурсия позволяет совершать подвиги на ниве математики с относительно небольшими усилиями.

Читать »

Генерация CGI-сценария для обработки тестовых данных

Добавлено Дата: 19 January, 2011 категория: XSLT

Задача

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

Решение

Этот генератор сервера является дополнением к генератору клиента из рецеп­та 12.6. Сейчас мы приведем лишь часть решения, а детали отложим до раздела «Обсуждение».

Читать »

Отбор всех элементов, кроме одного

Добавлено Дата: 17 January, 2011 категория: XSLT

Задача

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

Решение

Самый лучший способ отобрать все элементы, кроме одного, такой:

<xsl:apply-templates select="*[not(self::element-to-ignore)]"/>

Читать »

Реализация элемента расширения на сценарном языке

Добавлено Дата: 17 January, 2011 категория: XSLT

Расширения на сценарных языках очень напоминают Java-расширения с тем отличием, что расширение реализуется внутри элемента xalan:script:

<xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xalan="http://xml.apache.org/xslt" xmlns:MyExt="xalan://com.AcmeX.MyExtensionElement"> extension-element-prefixes="MyExt">

Читать »

Трассировка потока обработки документа таблицей стилеи

Добавлено Дата: 16 January, 2011 категория: XSLT

Задача

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

Решение XSLT 1.0

Прежде всего следует выяснить, какие возможности трассировки предостав­ляет используемый процессор XSLT. В Saxon есть флаг -t, который выводит хронометраж различных стадий обработки, и флаг -T, включающий вывод трасси­ровочной информации. В Xalan есть флаг -TT, который трассирует вызов каждого шаблона; флаг -TG трассирует каждой событие генерации; флаг -TS трассирует каждое событие отбора, а флаг -TTC – вызов дочерних шаблонов.

Читать »

Обобщенное и функциональное программирование – Введение

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

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

Читать »

Генерация функций форматированной печати

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

Задача

Необходимы инструменты для отладки приложения. В частности, хотелось бы иметь возможность распечатывать двоичные сообщения в форме, понятной человеку.

Решение

При разработке приложений, обрабатывающих сообщения, программисты ча­сто вручную пишут функции для их распечатки, поскольку это заметно упрощает отладку. Однако при наличии репозитория сообщений такой код можно сгенери­ровать автоматически. В этом решении показано, как можно повторно использо­вать генератор предложения switch из рецепта 12.2.

Читать »

Поиск подстроки с конца строки

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

Задача

В XSLT нет функций для поиска в строке, начиная с конца.

Решение

XSLT 1.0

С помощью рекурсии можно эмулировать поиск последнего вхождения подстро­ки substr. Эта техника позволяет написать шаблоны substring-before-last (выделение строки, предшествующей последнему вхождению) и substring-after- last (выделение строки, следующей за последним вхождению):

Читать »