Алексей Валиков - Технология XSLT
- Название:Технология XSLT
- Автор:
- Жанр:
- Издательство:БХВ-Петербург
- Год:2002
- Город:Санкт-Петербург
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Алексей Валиков - Технология XSLT краткое содержание
Книга посвящена разработке приложений для преобразования XML-документов с использованием XSLT — расширяемого языка стилей для преобразований. Обсуждается применение языков XSLT и XPath в решении практических задач: выводу документов в формате HTML, использованию различных кодировок для интернационализации и, в частности, русификации приложений, вопросам эффективности существующих подходов для решения проблем преобразования. Для иллюстрации материала используется большое количество примеров.
Для начинающих и профессиональных программистов
Технология XSLT - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Приведем еще один простой пример упрощенной записи преобразования, генерирующего простейшую HTML-страницу.
Следующий листинг приводит полную версию этого же преобразования.
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Модульная организация преобразования
Как и любой, достаточно развитый язык программирования, XSLT обладает средствами для организации модульной структуры преобразований. Существуют два основных способа использования в преобразованиях внешних модулей — включение и импорт. Кроме того, поскольку преобразования в XSLT также являются XML-документами, для разбиения их на модули можно применять сущности.
Включение преобразований
Подобно тому, как мы бы использовали в языке С директиву #includeдля включения внешних файлов, преобразования в XSLT могут использовать для той же самой цели элемент xsl:include. Правда, в отличие от языка С, условное включение в XSLT невозможно.
Элемент xsl:include
href= " URI "/>
Обязательный атрибут hrefэлемента xsl:includeсодержит URI внешнего модуля, который должен быть включен в текущее преобразование. Внешний модуль обязан быть корректным XSLT-преобразованием.
Включение внешнего преобразования является включением в прямом смысле этого слова: преобразование, включающее внешний модуль, ведет себя так, как если бы на месте элемента xsl:includeбыло содержимое этого внешнего модуля.
Рассмотрим простое преобразование a.xsl, которое определяет значение переменной date.
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Включим a.xslв преобразование b.xsl.
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Today is
.
Включение в преобразование b.xslпреобразования a.xslэквивалентно замене в b.xslсоответствующего элемента xsl:includeна содержимое преобразования a.xsl. В нашем случае будет включено только определение переменной date. Преобразование b.xslможно переписать в следующем виде: .
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Today is
.
При включении внешних преобразований при помощи xsl:includeследует учитывать некоторые особенности использования этого элемента.
Все ссылки и относительные идентификаторы ресурсов (URI), используемые во включаемом преобразовании, вычисляются относительно его базового адреса.
Предположим, что URI нашего преобразования имеет вид:
http://www.xsltdev.ru/examples/a.xsl
В этом случае элемент
будет включать преобразование с URI
http://www.xsltdev.ru/examples/b.xsl
Нет никаких проблем и с включением преобразований по абсолютным идентификаторам. Например, если преобразование identity.xslнаходится по адресу
http://www.xsltdev.ru/stylesheets/identity.xsl
то включить его можно элементом
Естественно, включаемые модули должны быть доступны процессору во время выполнения преобразования, поэтому если они находятся на других серверах, то всегда будет существовать возможность невыполнения преобразования.
В XSLT элементы xsl:import всегда должны быть первыми дочерними элементами головного элемента xsl:stylesheet. Поэтому элементы xsl:importвнешнего преобразования включаются сразу после элементов xsl:importосновного преобразования. Если в основном преобразовании элементов xsl:importнет, то включаемые элементы xsl:importстановятся первыми дочерними элементами xsl:stylesheetосновного преобразования.
Предположим, что в основное преобразование мы импортируем файл a.xslи включаем файл b.xsl.
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Тогда основное преобразование может быть переписано следующим образом.
Элемент xsl:includeможно использовать и для включения преобразований с упрощенным синтаксисом. Преобразования такого рода будут включаться как эквивалентные им преобразования стандартного синтаксиса — то есть с корневым элементом xsl:stylesheetи единственным шаблоном, соответствующим корневому узлу.
Предположим, что мы используем преобразование упрощенного синтаксиса simple.xsl.
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Включим simple.xslв основное преобразование.
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Тогда основное преобразование может быть переписано в следующем виде.
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Полужирным шрифтом на листинге 4.13 выделен шаблон, который соответствует преобразованию simple.xsl.
Следует отметить, что разные процессоры по-разному обрабатывают включение упрощенных преобразований. К сожалению, большинство из них не поддерживают эту особенность, хотя она четко определена в спецификации, поэтому, если требуется высокая надежность и переносимость, таких включений лучше избегать.
Включаемые модули являются полноценными и самостоятельными преобразованиями. К примеру, они также могут включать другие преобразования при помощи тех же элементов xsl:include. При этом преобразование не должно прямо или косвенно включать само себя — такая ситуация породит бесконечный цикл включений.
Импорт преобразований
Другим способом использования внешних модулей в XSLT является импорт преобразований, который обеспечивается элементом xsl:import. Импорт преобразований более сложен, чем их простое включение — последовательность импорта модулей может влиять на то, как будет выполняться преобразование. Равно как и в случае с xsl:include, условное импортирование преобразований не разрешено.
Элемент xsl:import
href=" URI "/>
Синтаксис импорта преобразования практически полностью аналогичен включению: обязательный атрибут hrefсодержит URI внешнего модуля, который должен быть импортирован в текущее преобразование. Так же, как и в случае с xsl:include, элемент xsl:importлогически заменяется содержимым внешнего модуля, и относительные идентификаторы ресурсов (URI), используемые во внешнем преобразовании, отсчитываются от его базового адреса. Преобразование не может прямо или косвенно импортировать само себя.
Интервал:
Закладка: