Технология преобразования документов XSLT
Московский
государственный технический университет имени Н.Э. Баумана
Домашнее
задание по курсу: “Технология XML”
Тема:
“Технология XSLT”
Выполнила: студентка Заварзина
В.В.
Проверил: Гапанюк Ю.Е.
Москва,
2010
Содержание
Введение
XSLT
как язык
Преобразования
Области
применения XSLTв архитектуре клиент-серверна стороне серверана стороне клиента
Пространство
имен в XSLTи другие языки
Введение
XSLT означает eXtensible
StyleSheet
Language
for Transformation,
что на русский язык традиционно переводится как “расширяемый язык стилей для
преобразований”. Работа над XSLT
была инициирована проектом XSL
- eXtensible
StyleSheet
Language (расширяемым
языком стилей).
Спецификация XSLT
гласит, что это язык для преобразования одних XML
- документов в другие XML
- документы. Но по мере развития язык перерос ее и теперь уместнее сказать, что
XSLT - это язык для
преобразования структуры документов.
XSLT
как язык
Любое преобразование можно условно поделить на 3
составляющие:
. Обращение к преобразуемому объекту;
. Создание результата преобразования;
. Логика, связывающая первые два действия
и направляющая процесс преобразования.
Вторая и третья условные части преобразования
являются прерогативой самого XSLT.
XSLT - это XML
- язык в полном смысле этого слова: программы на XSLT
являются хорошо оформленными XML
- документами. XSLT
также использует пространство имен; практически все имена, которые встречаются
в XSLT рассматриваются
как расширенные имена, характеризуемые локальной частью вкупе с URI
- уникальным идентификатором пространства имен.
В отличие от традиционных императивных языков
программирования, преобразование в XSLT
не является последовательностью действий, которую необходимо выполнить для
достижения результата. Преобразование - это набор шаблонных правил, каждое из
которых определяет процедуру обработки определенной части документа.
XSLT -
интерпретация “Hello?
World!”, когда мы
преобразуем документ:
Синтаксис XSLT,
являющийся чистым XML,
может показаться для языка программирования не совсем обычным, однако, вряд ли
какой другой синтаксис был бы более удобным.
Преобразования
В преобразовании в основном участвуют три
документа:
входящий документ, который подвергается
преобразованию;
документ, который описывает само преобразование;
выходящий документ, который является результатом
преобразования.
Схема XSLT
- преобразования
Процессор получает входящий документ и
преобразование, и, применяя правила преобразования, генерирует выходящий документ
- такова в общем внешняя схема картины. На самом деле процессор оперирует не
самими документами, а древовидными моделями их структур - именно структурными
преобразованиями занимается XSLT,
оставляя за кадром синтаксис, который эти структуры выражает.
Древовидные структуры XSLT
Хотя практически все процессоры выполняют каждый
из трех этапов, рабочей областью XSLT
является только второй этап, этап преобразования. XSLT
практически не контролирует парсинг входящего документа, как правило этим
занимается встроенный или внешний SAX-
или DOM- парсер.
Сериализация является процессом создания
физической интерпретации результирующего дерева, а если эта задача делегируется
XSLT - процессору, то
преобразованию под силу контролировать физический вывод генерируемого
документа.
Сериализация в 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 на стороне клиента
заключается в том, чтобы отдавать клиенту отдельно нужные ему данные и отдельно
преобразование, которое будет создавать для этих данных требуемое
представление. Четкое разделение данных и их представления предоставит клиенту
полную свободу распоряжаться полученной информацией. Преобразование в этом
случае всего лишь предлагает возможную трактовку этой информации, ни к чему не
обязывая.
Основным ограничением этого способа является
предложение, что программное обеспечение на стороне клиента сможет выполняться
преобразования. К сожалению, решение такого вида может применяться только в
очень ограниченном числе случаев - когда достоверно известно, что целевой
клиент поддерживает XSLT.
преобразование документ сервер стиль
Пространство имен в XSLT
Для того, чтобы выделить элементы и атрибуты,
которые принадлежат логической схеме XSLT, в этом языке применяется механизм
пространств имен. Это означает, что в документе, преобразования элементы,
относящиеся к XSLT, должны принадлежать его пространству имен.
Уникальный идентификатор ресурса
пространства имен XSLT имеет вид: <#"510572.files/image007.gif">
и другие языки
Несмотря на то, что XSLT является
вполне самостоятельным языком, его очень часто используют как составную часть в
проектах, которые пишутся на других языках программирования. Тому существует
множество причин. Попытаемся выделить главные из них:
· Традиционные императивные языки
программирования очень плохо подходят для обработки древовидно
структурированных данных. Программы, действия в которых непременно выполняются
последовательно одно за другим, в общем случае не могут эффективно (с точки
зрения компактности и понятности кода) обработать сложные иерархические
структуры.
· В некоторых случаях
XSLT-преобразования документов оказываются, наоборот, настолько сложны, что из
соображений эффективности и простоты бывает намного легче использовать
традиционные языки.
· Во многих проектах использование
XSLT может обеспечить лёгкую и гибкую интеграцию. Например, если одним из
этапов процедуры обмена XML-данными будет XSLT-преобразование, расширение
количества форматов, известных системе, будет производиться не дописыванием
исходного кода, а добавлением преобразований. А поскольку XSLT обеспечивает не
только синтаксические, но и семантические преобразования, то есть
преобразования на структурном уровне, роль этого языка в проектах интеграции,
основанных на использовании XML, может быть очень велика.
· Использование XSLT-преобразований
может коренным образом упростить создание web-ориентированных приложений. Надо
сказать, что во многих случаях XSLT-преобразования просто избавляют от
необходимости программировать что-либо на других языках; однако даже тогда,
когда без традиционных подходов не обойдёшься, XSLT служит хорошую службу,
обеспечивая простой, удобный и легко настраиваемый вывод фрагментов HTML.