Главная » XSLT

Генерация Web-сайтов из тематических карт

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

Задача

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

Решение

В основу решения положен каркас Cogitative Topic Maps Web Site (CTW), представленный публике в сборнике статей XML Topic Maps под редакцией Джека Парка (Jack Park) (Addison Wesley, 2002). Оригинальная работа была выполнена в компании Extreme Markup Languages в 2000 году.

Читать »

Преобразование регистра

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

Задача

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

Решение XSLT 1.0

Воспользуйтесь функцией translate(). Так, следующий код преобразует заглавные буквы в строчные:

translate($input, ‘ABCDEFGHIJKLMNOPQRSTUVWXYZ’, ‘abcdefghijklmnopqrstuvwxyz’)

Читать »

Пустое пространство

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

Задача

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

Решение

Рассмотрим следующий аннотированный пример XML-документа. Символы ( I (новая строка), ^ (табуляция) и ? (пробел) обозначают текстовые узлы, содер­жащие только пустое пространство, на которые часто не обращают внимания, хотя они тоже могут копироваться в выходной документ:

Читать »

Избегайте подводных камней при переносе с XSLT 1.0 на 2.0

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

Задача

Не каждая таблица стилей, созданная для версии 1.0, будет без изменений ра­ботать и в 2.0.

Решение

При переносе таблиц стилей из версии 1.0 в 2.0 нужно помнить о нескольких подводных камнях. Часть из них можно обойти, включив режим совместимости с XSLT 1.0; для этого нужно задать атрибут version="1.0" в элементе stylesheet: <xsl: stylesheet version= " 1. 0 " >. Но уж раз вы начали перенос старых программ в версию 2.0, то есть и другие способы справиться с несовместимостями.

Читать »

Реорганизация иерархии XML

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

Задача

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

Решение XSLT 1.0

Снова рассмотрим документ SalesBySalesPerson.xml из главы 4:

<salesBySalesperson>

Читать »

Сравнение узлов

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

Задача

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

Решение

XPath 1.0

В следующих примерах предполагается, что $x и $y содержат по одному узлу из одного и того же документа. Напомним также, что порядок документа – это тот

Читать »

Экспорт XML в файл с разделителями полей

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

Задача

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

Решение

Многие приложения умеют импортировать данные с разделителями полей. Самый распространенный формат такого рода называется CSV (Comma Separated Values – значения, разделенные запятыми). Большинство электронных таблиц и баз данных могут обрабатывать этот формат и подобные ему. Отобразить XML на файл с разделителями полей может быть и очень просто, и довольно сложно; все зависит от структуры исходного документа. В этом разделе мы начнем с про­стых случаев и постепенно перейдем к более сложным.

Читать »

Новые возможности старых конструкций XSLT 1.0

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

Задача

В XSLT 2.0 появилось немало мелких усовершенствований, и отыскать их все сразу довольно трудно.

Решение

Многие средства XSLT 2.0 стали развитием уже имевшихся в XSLT 1.0 ко­манд и функций. И уловить различия не так просто, как в случае совсем новых средств. В этом разделе мы перечислим все такие нюансы.

Читать »

Работа с XSLT в программах на языке Perl

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

Задача

Имеется задача, для решения которой больше подходит Perl, но какие-то части проще реализовать с использованием XSLT.

Решение

Существует несколько способов воспользоваться XSLT из Perl. Модули XML::LibXSLT и XML::LibXML предоставляют интерфейс к библиотекам GNOME, реализующим процессоры SAX и XSLT. В следующем примере, заимствованном из книги Erik T. Ray и Jason McIntosh Perl and XML (O’Reilly, 2002), приведена Perl- программа для пакетной обработки нескольких XML-файлов одним и тем же XSLT-сценарием, который компилируется только один раз:

Читать »

Обработка неструктурированного текста с помощью регулярных выражений

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

Задача

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

Решение

Для работы с регулярными выражениями в XSLT 2.0 есть три функции: match(), replace() и tokenize(). Мы рассматривали их в главе 1. Появилась также новая команда xsl:analyze-string(), которая позволяет обрабатывать текст еще более интересными способами.

Читать »

Функции расширения в Saxon

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

XSLT 1.0 (Saxon версия 6.5.4)

Saxon позволяет обращаться к функциям расширения, написанным на Java, следуя интерфейсу, который был определен в проекте стандарта XSLT 1.1.

В настоящее время Saxon в качестве языка расширения поддерживает только Java, поэтому функции расширения объявляются, как в следующем примере:

Читать »

Еврейский календарь

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

Задача

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

Решение

Для эффективной работы с еврейским календарем понадобятся несколько вспомогательных шаблонов. В еврейском календаре обычный год состоит из 12 месяцев, а високосный – из 13. Високосными считаются 3, 6, 8, 11, 14, 17 и 19 года метонова цикла (см. ниже раздел «Обсуждение»). Точная формулировка условия високосности такова: 7y + 1 mod 19 < 7. Это позволяет написать шаблон для опре­деления последнего месяца года по еврейскому календарю:

Читать »

Создание графического представления деревьев

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

Задача

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

Решение

В этом разделе мы рассмотрим два разных алгоритма рисования дерева. Есть и более сложные, но эти дают вполне приемлемые результаты.

Если бы дерево было сбалансированным, то нарисовать его было бы просто; надо лишь разделить имеющее горизонтальное пространство на количество узлов на каждом уровне, а вертикальное – на число уровней1. К сожалению, реальные деревья не всегда симметричны. Поэтому алгоритм должен учитывать ширину каждой ветви.

Читать »

Замена текста

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

Задача

Требуется заменить все вхождения заданной подстроки другой строкой.

Решение XSLT 1.0

Следующий рекурсивный шаблон заменяет все вхождения искомой строки на строку замены.

<xsl:template name="search-and-replace"> <xsl:param name="input"/> <xsl:param name="search-string"/> <xsl:param name="replace-string"/> <xsl:choose>

Читать »

Округление чисел с заданной точностью

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

Задача

Требуется округлить число до заданного числа десятичных знаков после за­пятой. Однако функции XSLT round, ceiling и floor всегда возвращают це­лое число.

10.00   =    1 •

3.50   =        Г.

4.44   =          t.

77.78   =   V V

Читать »