Спонсор: Microsoft
Опубликован: 08.08.2007 | Доступ: свободный | Студентов: 1490 / 136 | Оценка: 3.86 / 3.76 | Длительность: 11:46:00
Специальности: Программист
Лекция 10:

Трансформация документа XML

< Лекция 9 || Лекция 10: 12345 || Лекция 11 >
Аннотация: В данном разделе рассматриваются причины и способы трансформации XML. Описываются основные характеристики XSLT.

Причины трансформации XML

Документ XML, сохраненный в текстовом файле или сгенерированный программой, содержится в фиксированном формате. Хотя XML не зависит от платформы и может передаваться между различными частями приложения в некоторых случаях требуется информация из других структур. Кроме того, может потребоваться трансформировать динамически структуру документа в интерактивный документ, например для того, чтобы привести ее в соответствие запросам пользователя. В общем случае трансформации относятся к одной из трех категорий:

Структурные трансформации - трансформация одного словаря XML в другой по аналогии с переводом.

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

Трансформации в язык формирования изображения - подготовка документа для визуального представления в какой-либо форме браузера пользователя, например в Wireless Application Protocol ( WAP ), HTML, VOXML или в формате масштабируемой векторной графики.

Теперь рассмотрим эти три категории по очереди.

Трансляция между различными словарями

Рассмотрим книжный каталог, размеченный на языке XML. Данные этого каталога можно использовать различными способами. Например, используя определение DTD, компания Wrox может разместить каталог на своем Web-сайте и в корпоративной сети Интранет. Книжные магазины требуют практически такую же информацию, что делает язык XML идеальным кандидатом для ее передачи. Однако, если разные книжные магазины используют для описания одних и тех же данных разные DTD, необходим способ трансформации наших данных в совместимую с ними версию.

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

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

Динамические трансформации

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

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

Такие трансформации можно осуществлять и без помощи XSL, используя языки сценариев и модель DOM, а модель DOM можно применять в браузерах благодаря ее совместимости с языками JavaScript, Java, C++, Perl, Visual Basic или Python. Поэтому часто при осуществлении трансформаций обходятся только моделью DOM и языками сценариев (без XSL ).

Различные браузеры

Многие Web-разработчики затратили огромные усилия и получили головную боль, пытаясь создать параллельные сайты или части сайтов для несовместимых версий браузеров. Мысль о том, что XML применим только в браузерах, понимающих этот язык, предполагает появление еще одной области несовместимости. Однако, разработав содержание сайта на языке XML, можно затем трансформировать его в другие языки разметки, чтобы из одного центрального содержания XML создать несколько версий документов HTML.

XSL

Расширяемый язык таблиц стилей( XSL ) основан на XML и предназначен для трансформации документа XML в другой документ XML или в объекты визуализации. Первоначальный язык XSL распался на три отдельных языка:

  • Язык трансформаций ( XSLT )
  • Язык визуализации ( XSLF ; он может использовать также и XSLT )
  • Язык обращений к структуре, на которой основаны документы XML ( XPath )

Язык XSL основан на каскадных таблицах стилей ( Cascading Style Sheets, CSS ) и на языке DSSSL ( Document Style Semantics and Specification Language - язык спецификации и семантики стиля документа). По мере развития XSL его аспекты моделирования (работы со стилями) все ближе к CSS и отходят от DSSSL.

XSLT

XSLT является языком, для трансформации документов XML в другие документы XML. Для этого необходим процессор XSLT.

Язык XSLT написан на XML. Это означает, что обеспечивающая трансформацию документа XML таблица стилей XSLT является правильно оформленным документом XML. Прежде всего следует уяснить что обработчики XSLT работают не с документами, а со структурами.

Чтобы процессор XSLT смог трансформировать документ XML, последний должен сначала быть преобразован в структуру или во внутреннюю модель. Эта внутренняя модель представляет собой дерево и не зависит от используемых для доступа к ней интерфейсов API. В мире SGML такая абстрактная модель называется рощей. Поскольку язык XML является подмножеством SGML, он наследует его основные концепции. Итак, роща представляет собой просто абстрактную древовидную структуру, не зависящую от интерфейсов API, используемых для доступа к объектам этой структуры или для манипуляции ими. Например, для доступа к роще консорциум W3C рекомендовал модель DOM. Поэтому DOM представляет собой API, а роща - абстрактную структуру. У рощи может быть несколько интерфейсов API или для разных языков могут быть разработаны различные интерфейсы.

Каким образом процессор XSL трансформирует исходный документ

Как уже отмечалось, язык XSLT работает не с синтаксисом документа, а с его моделью. Исходный формат и формат назначения являются приложениями XML и подлежащая структура в обоих случаях представляет собой дерево. Кроме того таблица стилей XSL - это документ XML, и потому она также может быть представлена в виде дерева. Итак, процессоры XSLT работают с тремя деревьями.

Язык XSLT является декларативным, т.е. вы определяете, как должен выглядеть результат, а не как он должен быть трансформирован; именно для выполнения этой работы нужен процессор XSL. Таблица стилей XSL состоит из шаблонов (templates), определяющих, каким образом каждый узел исходного дерева должен быть представлен в дереве результата. Процессор проходит по роще источника, начиная с корня, и ищет соответствующие шаблоны в дереве таблицы стилей. Обнаружив шаблон, он с помощью содержащихся в нем правил записывает абстрактное представление результата в дерево результата. Так он перемещается по документу узел за узлом (это определяется инструкцией XSLT <xsl:apply-template> ) и ищет соответствия в таблице стилей. Если соответствующего шаблона не обнаруживается, он переходит к следующему. Можно сказать, что в таком случае он выполняет шаблон по умолчанию, который не приводит к результату на выходе. По завершении работы процессора дерево результата можно транслировать в документ XML, текст, документ HTML или в другую желаемую форму.

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

< Лекция 9 || Лекция 10: 12345 || Лекция 11 >
Станислав Мешавкин
Станислав Мешавкин
Россия, г. Заречный