Extensible Stylesheet Language Transformations, сокращенно XSLT — это язык описания преобразований документов в формате XML. Спецификация XSLT является рекомендацией комитета W3C. Существуют реализации стандарта для различных платформ. В частности, реализация XSLT 1.0 входит в состав .NET Framework.
XSLT-преобразователь принимает на вход документ в формате XML и XSLT-шаблон. В шаблоне описывается ряд правил преобразования. В описании правил, для указания элементов документа используется язык запросов XPath. Исходный XML-документ рассматривается как дерево XML-тегов, к которому применяются указанные правила. Результирующее дерево может рассматриваться как новый XML-документ либо как обычный текст.
Таким образом, с помощью XSLT можно из XML-документа получать новый XML-документ или просто текст. В частности (в предположении, что исходный XML — это некоторые осмысленные данные, записанные известным нам образом), это позволяет:
выполнить какую-либо обработку данных, например, отсортировать их, выполнить группировку, подсчитать сводные данные, получить кросс-таблицу из линейных данных
получить представление этих данных в заданном языке разметки, например, в HTML или XSL-FO
отделить сами данные и их получение (XML-документ) от представления этих данных (XSLT-шаблон).
В умелых руках XSLT становится мощным инструментом создания отчетов. Посмотрим, как эта возможность реализуется в рамках C-Gator.
Формирование XML
Для формирования отчета через XSLT нам прежде всего нужны данные, которые мы будем представлять в отчете. Причем данные должны быть переданы нам в формате XML.
Существует, по крайней мере, два способа сформировать такой XML: используя хранимую процедуру в базе данных и средствами C-Gator, в ресурсе типа «текстовая страница».
Получение XML ресурсом «текстовая страница»
Наиболее простой способ реализовать получение XML с данными для отчета — создать на сайте ресурс типа «текстовая страница», и, используя декораторы, получить данные и представить их в виде XML.
Пример такой страницы:
Для получения списка здесь используется декоратор ItemList, который получает данные по ресурсу /clients/clients/ (атрибут uri) запросом с заданным кодом (QueryId); атрибут PageInfo задает дополнительные параметры запроса.
Примечание: У данной страницы нужно установить флаг «не включать html тэги», с тем чтобы содержимое страницы не окружалось стандартными тэгами <html> и <body>. Это же относится и к другим страницам, формирующим XML или XSLT.
Полученный в результате XML:
Получение XML через хранимую процедуру
Другой способ получения XML с данными — через хранимую процедуру в базе данных домена C-Gator. Такая процедура будет возвращать XML, используя оператор SELECT .. FOR XML. Если отчет сложен, объем возвращаемых данных велик, или получение данных через текстовую страницу стало подтормаживать — стоит подумать о переходе на хранимую процедуру. Этот способ более сложен, но он имеет значительное преимущество — скорость и производительность. Основной недостаток — требуется хорошее знание языка запросов T-SQL, а также структуры базы данных домена C-Gator.
Обработка XML в C-Gator
Данные мы получили. Теперь нужно обработать полученный XML для представления данных в нужном формате.
Основной инструмент C-Gator по обработке XML — это декоратор XMLTransform. Он выполняет XSLT-преобразование, используя заданные ресурсы в качестве источника данных и шаблона преобразования.
При получении XML-данных через текстовую страницу, декоратор XmlTransform выглядит так:
Атрибутом XMLURI задается ресурс, получающий данные. Атрибут XSLT указывает ресурс с XSLT-шаблоном. В результате, на место декоратора подставляется результат XSLT-преобразования.
Использование XmlTransform для хранимой процедуры:
Создание отчетов
Итак, у нас есть необходимы инструменты: мы знаем как получать данные, и как их преобразовать в нужный нам вид. Рассмотрим различне типы отчетов и то, как они получаются. Точнее, какое XSLT-преобразование при этом используется.
HTML
Проще всего получить HTML-представление: выбираем нужные нам данные и окружаем их HTML-тэгами.
Пример для списка клиентов, структура XML для которого была показана выше в пункте Получение XML ресурсом «текстовая страница»:
Примечание: Редактировать XSLT-шаблон можно непосредственно в редакторе ресурса C-Gator, либо воспользоваться каким-либо внешним XML-редактором.
Документ Excel
Допустим, что наш отчет, помимо HTML-версии, должен быть представлен и в виде документа Excel.
Как известно, страница документа Excel — это таблица. Excel версии 2000 и выше может работать с таблицами, представленными в формате HTML. Такой HTML-документ содержит в себе таблицу, занимающую все содержимое тега <body>.
Создаем еще один ресурс типа «текстовая страница» с примерно таким содержанием:
Кодовая вставка вначале нужна для того, чтобы указать браузеру имя файла (newclients.xls), которое будет предложено пользователю при сохранении документа.
XSLT-шаблон для преобразования выглядит так:
Ресурс /common/excel-header, упоминаемый в начале страницы, содержит XSLT-шаблон, формирующий заголовок документа Excel. Это нужно для того, чтобы документ выглядел в точности как обычный документ, созданный в самом Excel. Кроме того, заголовок задает шрифт, используемый в документе по умолчанию.