Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
db-shpora.doc
Скачиваний:
14
Добавлен:
08.11.2018
Размер:
1.44 Mб
Скачать
  1. Материализация хмl-документов с помощью xslt.

В XML-документе из листинга 1 определены структура и содержимое. Однако ничто в документе не указывает на то, как его следует материализовывать. Разработчики XML обеспечили четкое разделение структуры, содержимого и формата. Наиболее популярный способ материализации XML заключается в использовании XSLT (Extensible Style Language for Transformations, расширяемый язык стилей для преобразований). XSLT — это мощный и надежный язык преобразований. Его можно использовать для материализации XML-документов в HTML, а также для множества других целей. Одно из популярных применений XSLT — преобразование XML-документа из одного формата в другой. Например, с помощью XSLT компания может преобразовать накладную, представляющую собой XML-документ в некотором внутреннем формате, в эквивалентный XML-документ в формате клиента.

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

Листинг 3 содержит DTD документа, представляющего собой список клиентов, а листинг 4 – XML-документ, соответствующий этому DTD. Оператор DOCTYPE в листинге 4 указывает на файл, содержащий DTD (см. листинг 3). Следующий оператор в XML-документе указывает местоположение еще одного документа, называемого таблицей стилей (stylesheet). Таблица стилей изображена в листинге 5. Таблицы стилей указывают программе-обработчику XSLT правила, по которым элементы XML-документа должны преобразовываться в другой формат; в данном случае исходный документ будет преобразован в HTML-документ, пригодный для отображения в браузере.

Программа-обработчик XSLT копирует элементы таблицы стилей, пока не встретит команду в формате {шаблон, действие}. Обнаружив такую команду, программа ищет в документе фрагменты, удовлетворяющие заданному шаблону, и для каждого из найденных фрагментов осуществляет указанное действие. Так, первый оператор xsl

<xsl : for-each select="customerlist/customer"/>

инициирует поиск в документе элемента, обозначенного как customerlist. Найдя такой элемент, программа ищет внутри него элемент с именем customer. Если он найдется, будут выполнены действия, указанные в цикле, завершающемся оператором </xsl:for-each> (третий снизу оператор в таблице стилей).

В этом цикле всем элементам документа customerlist присваиваются стили. Результат применения таблицы стилей из листинга 5 к исходному XML-документу из листинга 4 показан в листинге 6. Проанализируйте документ и таблицу стилей и поймите, как получаются результаты.

Программы-обработчики XSLT являются контекстно-ориентированными – каждый оператор выполняется в контексте найденного соответствия шаблону поиска. Так, оператор

<xsl :value-of select="name/lastname"/>

действует в контексте вхождения шаблона customerlist/customer, найденного в документе. Нет необходимости писать

<xsl:select-"customerlist/customer/name/lastname"/>

поскольку контекст customerlist/customer уже задан. На самом деле, если бы оператор select был записан так, то ничего бы не было найдено. Аналогичным образом, поиск <xsl:select="lastname"/> ничего бы не обнаружил, поскольку элемент lastname появляется только в контексте customerlist/customer/name, но не в контексте customerlist/customer.

Эта ориентация на контекст объясняет необходимость в операторе

<xsl:value-of select="node()"/>

(в середине таблицы стилей). Этот оператор находится в контексте customerlist/customer/address/street. Таким образом, текущим узлом (node) является элемент street, и данное выражение предписывает выдать значение этого элемента.

Обратите также внимание на то, что таблицей стилей было произведено небольшое преобразование. В исходном документе элемент lastname следовал за firstname, а в выходном потоке они расположены в обратном порядке.

Большинство современных браузеров имеют встроенный обработчик XSLT. Таким образом, достаточно предоставить браузеру документ и таблицу стилей, а он уже сам выполнит преобразование с использованием этой таблицы и автоматически отобразит результаты, как на рис. 1.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]