Алексей Валиков - Технология XSLT
- Название:Технология XSLT
- Автор:
- Жанр:
- Издательство:БХВ-Петербург
- Год:2002
- Город:Санкт-Петербург
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Алексей Валиков - Технология XSLT краткое содержание
Книга посвящена разработке приложений для преобразования XML-документов с использованием XSLT — расширяемого языка стилей для преобразований. Обсуждается применение языков XSLT и XPath в решении практических задач: выводу документов в формате HTML, использованию различных кодировок для интернационализации и, в частности, русификации приложений, вопросам эффективности существующих подходов для решения проблем преобразования. Для иллюстрации материала используется большое количество примеров.
Для начинающих и профессиональных программистов
Технология XSLT - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Вторая и третья условные части преобразования являются прерогативой самого XSLT. XSLT — это XML-язык в полном смысле этого слова: программы на XSLT (мы будем называть их преобразованиями сообразно их предназначению) являются хорошо оформленными (well-formed) XML-документами. XSLT также использует пространства имен; практически все имена, встречающиеся в XSLT, как-то: имена переменных, шаблонов, форматов и так далее — рассматриваются как расширенные имена, характеризуемые локальной частью вкупе с URI — уникальным идентификатором пространства имен.
В отличие от традиционных императивных языков программирования, преобразование в XSLT не является последовательностью действий, которую необходимо выполнить для достижения результата. Преобразование — это набор шаблонных правил, каждое из которых определяет процедуру обработки определенной части документа. Иными словами, преобразование в XSLT объявляет, декларирует правила преобразования — правила, применяя которые к входящему документу, XSLT-процессор в конечном итоге генерирует выходящий документ, который и является целью преобразования.
В качестве первого примера XSLT-преобразования, который будет приведен в этой книге, мы рассмотрим классическую программу "Hello, world!"
. Листинг 2.1 показывает XSLT-интерпретацию "Hello, world!"
, когда мы преобразуем документ
Hello, world!
в документ вида:
Hello, world!
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Исходный код, представленный выше, является хорошо оформленным 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
.
Телом шаблона является элемент message
. В терминах XSLT, этот элемент является литеральным элементом результата: он не принадлежит пространству имен XSLT и поэтому при обработке будет просто скопирован в результирующий документ. Содержимое этого элемента будет также обработано и включено в его сгенерированную копию.
Содержимым элемента message
является элемент xsl:value-of
, который, в отличие от message
принадлежит XSLT. Элемент xsl:value-of
вычисляет XPath-выражение, заданное в его атрибуте select
, и возвращает результат этого вычисления. XPath-выражение, "."
, указанное в select
, возвращает ту самую часть узла, которая обрабатывается в данный момент, иначе говоря — элемент msg
.
Переводя на русский язык все вышеперечисленное, можно сказать, что приведенное преобразование содержит единственное правило: если в документе встретится элемент msg
, создать в выходящем документе элемент message
и включить в него содержимое элемента msg
.
Синтаксис XSLT, являющийся чистым XML, может показаться для языка программирования не совсем обычным, однако, как показывает практика, вряд ли какой другой синтаксис был бы более удобным. В конце концов, XSLT — это, прежде всего преобразование XML-документов, и уж на чем, как не на XML описывать правила этого преобразования. Кроме того, XML- формат самого преобразования позволяет использовать для его представления те же модели данных, что и для преобразуемых документов.
Совсем иным является язык XPath, который представлен в нашем примере лаконичным выражением "."
. XPath не придерживается XML-синтаксиса, напротив, он скорее похож на синтаксис путей в операционных системах — в главе 4 мы покажем, насколько верно это сравнение.
В приведенном преобразовании участвовала и третья синтаксическая конструкция, которая называется в XSLT паттерном (от англ. pattern — образец). Паттерн msg
, заданный в атрибуте match
элемента xsl:template
указывает, какая именно часть XML-документа должна быть обработана этим правилом. Синтаксически паттерны являются XPath-выражениями (но не наоборот), однако смысл их различается. XPath-выражения вычисляются и возвращают результат, паттерны же просто устанавливают соответствие некоторому образцу. В нашем преобразовании паттерн msg
указывает, что шаблон должен обрабатывать только элементы msg
и никакие другие.
Каждое из шаблонных правил может вызывать другие шаблонные правила — в этом случае результат выполнения вызванных шаблонов включается в результат выполнения шаблона, который их вызывал. Для того чтобы продемонстрировать этот принцип мы немного перепишем шаблон "Hello, world!"
с тем, чтобы он возвращал результат в виде HTML-документа.
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Результат применения этого преобразования к документу
Hello, world!
иллюстрирует листинг 2.3.
Hello, world!
В это преобразование мы добавили еще одно шаблонное правило:
Это правило определяет обработку корневого узла — в атрибуте match
указан паттерн "/"
, что соответствует корню документа. Шаблон создает элементы html
, head
, title
, body
и в последний включает результат применения шаблонов к элементу msg
. Сравнивая тело этого шаблона с результатом выполнения преобразования, можно заметить, что процессор скопировал все элементы, не принадлежащие XSLT, не изменяя их, а элемент xsl:apply-templates
выполнил, применив шаблон к элементу msg
и включив в body
результат (он выделен в листинге полужирным шрифтом).
Продемонстрированная возможность вызова одних правил из других, а также наличие в XSLT таких управляющих конструкций, как xsl:if
, xsl:choose
и xsl:for-each
позволяет простым набором правил реализовывать очень сложную логику преобразования. В XSLT применяется один из основных принципов эффективной разработки: для того чтобы решить задачу, нужно разбить ее на более мелкие части и решить каждую из них по отдельности. Проблемой в данном случае является преобразование, и вместо того, чтобы описывать его целиком, XSLT позволяет определить простые правила обработки каждой из частей, связав эти правила логикой взаимных вызовов и управляющих конструкций.
Интервал:
Закладка: