Чтение онлайн

ЖАНРЫ

Технология XSLT

Валиков Алексей Н.

Шрифт:

Вместе с тем, было бы ошибкой считать, что XML пришел на замену HTML и SGML. Совсем нет — XML занимает те ниши, которые ранее были недоступны этим двум языкам. В информационном мире всегда будет место для каждого из них, хотя, вполне закономерно ожидать, что XML-технологии получат со временем гораздо более широкое распространение, чем HTML и SGML вместе взятые.

Глава 2

Введение в XSLT

Документ = Данные + Структура

В предыдущей главе мы подробно разобрали синтаксис XML, являющийся ключом к пониманию сути XML, которая состоит в том, что простых текстовых меток вполне достаточно,

чтобы явно выделить в документе сколь угодно сложную структуру.

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

Важность роли, которую играет структура данных в программировании, сложно переоценить. В классической цитате Н. Вирта "Алгоритмы + Структуры данных = Программы", датированной 1976 годом, спустя четверть века "плюс" следует скорее трактовать, как знак умножения, но принцип остался верен: структура данных имеет ничуть не меньшее значение, чем алгоритм, который ее обрабатывает.

Успех XML можно, пожалуй, объяснить другим уравнением:

Документ = Данные + Структура

В примитивной трактовке это означает, что для того, чтобы получить программу, к документам остается только дописать алгоритмы — данные и структура уже имеются. Если присмотреться более внимательно, можно заметить, что структура данных в равенстве Вирта и структура, которая является одной из составляющих документа, на самом деле могут быть (и, как правило, бывают) очень разными. Положение усугубляется еще и тем, что для одних и тех же данных можно выдумать великое множество типов структур, мало совместимых между собой. Таким образом, для того, чтобы эффективно использовать XML, во многих случаях необходимо уметь преобразовывать структуру XML-документов.

Как оказалось, традиционные процедурные языки программирования плохо подходят для решения этой задачи: слишком громоздкими были в них программы для преобразования структуры. Объяснить это легко — большинство языков оперировали данными и к арифметике структур документов были мало приспособлены. Проблема требовала более гибкого и мощного решения, и этим решением стал язык XSLT.

XSLT означает extensible Stylesheet Language for Transformations, что на русский язык традиционно переводится как "расширяемый язык стилей для преобразований". Название это скорее историческое, нежели смысловое — работа над XSLT была инициирована проектом XSL — extensible Stylesheet Language (расширяемым языком стилей).

Спецификация XSLT гласит, что это язык для преобразования одних XML-документов в другие XML-документы. Вне всякого сомнения, таковой и была изначальная идея XSLT. Очевидно, в процессе разработки язык перерос ее и теперь уместнее согласиться с редактором новой версии языка, Майклом Кеем (Michael Kay) в том, что XSLT — это язык для преобразования структуры документов.

XSLT как язык

По большому счету, любое преобразование можно условно поделить на три составляющие:

□ обращение к преобразуемому объекту;

□ создание результата преобразования;

□ логика, связывающая первые два действия и направляющая процесс преобразования.

Применительно к преобразованию XML-документов первая подзадача означает получение информации, которую этот документ содержит — в том числе и информации о структуре, которая является неотъемлемой его частью. Обращение в данном случае имеет несколько смыслов, в том числе — опрашивать, делать запросы, вычислять, выбирать; в общем смысле — задавать о документе вопросы и получать на них ответы. Для этой цели в XSLT служит язык, называемый XPath — язык путей в ХМL-документах (от англ. XML Path Language). Как мы увидим, XPath является лаконичным, но при этом

чрезвычайно мощным средством обращения к XML-документам (а также к их частям). Роль XPath в XSLT так велика, что их можно было бы считать единым целым, если бы только XPath не использовался также и в других языках, предназначенных для работы с XML.

Вторая и третья условные части преобразования являются прерогативой самого XSLT. XSLT — это XML-язык в полном смысле этого слова: программы на XSLT (мы будем называть их преобразованиями сообразно их предназначению) являются хорошо оформленными (well-formed) XML-документами. XSLT также использует пространства имен; практически все имена, встречающиеся в XSLT, как-то: имена переменных, шаблонов, форматов и так далее — рассматриваются как расширенные имена, характеризуемые локальной частью вкупе с URI — уникальным идентификатором пространства имен.

В отличие от традиционных императивных языков программирования, преобразование в XSLT не является последовательностью действий, которую необходимо выполнить для достижения результата. Преобразование — это набор шаблонных правил, каждое из которых определяет процедуру обработки определенной части документа. Иными словами, преобразование в XSLT объявляет, декларирует правила преобразования — правила, применяя которые к входящему документу, XSLT-процессор в конечном итоге генерирует выходящий документ, который и является целью преобразования.

В качестве первого примера XSLT-преобразования, который будет приведен в этой книге, мы рассмотрим классическую программу

"Hello, world!"
. Листинг 2.1 показывает XSLT-интерпретацию
"Hello, world!"
, когда мы преобразуем документ

<msg>Hello, world!</msg>

в документ вида:

<message>Hello, world!</message>

Листинг 2.1. Преобразование "Hello, world!"

<xsl:stylesheet

 version="1.0"

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

 <xsl:template match="msg">

<message>

<xsl:value-of select="."/>

</message>

 </xsl:template>

</xsl:stylesheet>

Исходный код, представленный выше, является хорошо оформленным XML-документом. Корневым его элементом является элемент

xsl:stylesheet
, который и обозначает преобразование. Атрибут
version
указывает на версию языка XSLT, в соответствии с которой был построен этот документ; помимо этого в элементе
xsl:stylesheet
объявляется пространство имен с префиксом
xsl
, которому соответствует URI
"http://www.w3.org/1999/XSL/Transform"
. Все элементы преобразования, принадлежащие пространству имен с этим URI, будут восприняты процессором, как принадлежащие языку XSLT.

Элемент

xsl:stylesheet
имеет один-единственный дочерний элемент
xsl:template
, который и задает правило преобразования. Атрибут
match
указывает, что это правило должно обрабатывать элемент
msg
. Содержимое
xsl:template
является телом шаблона. Оно выполняется тогда, когда сам шаблон применяется к некоторой части документа. В данном случае тело шаблона будет выполнено, когда само правило будет применяться к элементу
msg
.

Поделиться с друзьями: