Лабораторная работа: Технология преобразования документов XSLT
- выходящий документ, который является результатом преобразования.
Схема XSLT – преобразования
Процессор получает входящий документ и преобразование, и, применяя правила преобразования, генерирует выходящий документ – такова в общем внешняя схема картины. На самом деле процессор оперирует не самими документами, а древовидными моделями их структур – именно структурными преобразованиями занимается XSLT, оставляя за кадром синтаксис, который эти структуры выражает.
Древовидные структуры XSLT
Хотя практически все процессоры выполняют каждый из трех этапов, рабочей областью XSLT является только второй этап, этап преобразования. XSLT практически не контролирует парсинг входящего документа, как правило этим занимается встроенный или внешний SAX- или DOM- парсер.
Сериализация является процессом создания физической интерпретации результирующего дерева, а если эта задача делегируется XSLT – процессору, то преобразованию под силу контролировать физический вывод генерируемого документа.
Сериализация в XSLT
Области применения XSLT
В отличие от языка XML, предметную область XSLT задать очень легко. XSLT следует применять там, где необходимо преобразование одного документа в другой.
Естественно, XSLT имеет также и некоторые ограничения:
- XSLT не подходит для описания преобразований с очень сложной логикой;
- XSLT не подходит для преобразований, которые требуют сложных вычислений.
Первое ограничение связано с тем, что преобразование XSLT – это всего лишь набор элементарных правил. В подавляющем большинстве случаев этого достаточно для описания преобразования, однако встречаются также и такие задачи, для которых данного набора правил будет недостаточно. Например, древовидные структуры могут описываться математическими выражениями, но при этом преобразование для упрощения или вычисления этого дерева выражений может быть чересчур сложным для XSLT.
Второе ограничение является следствием простоты языка XPath, который используется в XSLT для вычислений. XPath предоставляет только самые простейшие вычислительные конструкции, которых явно недостаточно для сложных задач. Кроме того, функциональный стиль XSLT и отсутствие изменяемых переменных делают очень затруднительными многошаговые и циклические вычисления.
XSLT в архитектуре клиент-сервер
Многие из систем, применяющих XSLT, так или иначе, сводятся к клиент-серверной архитектуре, в которой клиент делает запрос, а сервер в качестве ответа возвращает некоторые данные. XSLT в таких решениях может использоваться для приведения структуры данных из внутреннего формата сервера к некоторому внешнему формату, понятному клиенту. Примером подобной системы может быть Web-сервер, предоставляющий клиентам информацию, которая динамически генерируется из базы данных.
Классическим и широко применяемым решением для такого рода задачи являются серверные компоненты, сервлеты и различные скриптовые языки, которые преобразуют запросы клиента в запросы к базе данных, а затем оформляют результаты выполнения в виде HTML и отсылают клиенту.
Минус этого решения в том, что оно слишком сильно зависит от презентации данных. Новая презентация или сравнительно серьезное исправление старой заставляют, чуть ли не полностью переписывать Web-приложение.
В подобных системах достаточно эффективно используется связка XML+XSLT. Вместо того чтобы генерировать по данным HTML-презентацию, можно создать XML-документ, и, применяя преобразования, возвращать клиенту именно тот результат, которого он ожидает.
Схема взаимодействия XML и XSLT в архитектуре клиент-сервер
На этой схеме нет четкой границы, которая отделяла бы клиент от сервера. Дело в том, что существует два принципиально различных способа использования XSLT в подобной архитектуре: преобразования могут выполняться как на стороне сервера, так и на стороне клиента.
XSLT на стороне сервера
Применение XSLT на стороне сервера совершенно незаметно для клиента – он, как и раньше, в ответ на свой вопрос получает HTML или документ в другом требуемом формате. В данном случае связка XML+XSLT является дополнительным звеном, дополнительным уровнем абстракции, который позволяет отделять данные от презентации, добиваясь простоты и универсальности. Создание преобразований для генерации HTML по имеющимся XML-документам – задача совершенно иного плана, чем написание серверных приложений и программ, которые непосредственно работают с результатами выполнения запросов к базе данных.
Минусом этого способа является то, что мы все равно возвращаем клиенту представление данных, а не сами данные. Естественно, используя XSLT, множество доступных представлений расширить очень легко, но это множество в любом случае будет ограничено. Для большинства Web- систем этого более чем достаточно, но существующие Web-технологии больше ориентированы на представление данных, чем на сами данные – они стараются предвосхитить вопросы на заранее процедуры ответов.
XSLT на стороне сервера