Алексей Валиков - Технология 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), используемые во внешнем преобразовании, отсчитываются от его базового адреса. Преобразование не может прямо или косвенно импортировать само себя.
Интервал:
Закладка: