Алексей Валиков - Технология XSLT
- Название:Технология XSLT
- Автор:
- Жанр:
- Издательство:БХВ-Петербург
- Год:2002
- Город:Санкт-Петербург
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Алексей Валиков - Технология XSLT краткое содержание
Книга посвящена разработке приложений для преобразования XML-документов с использованием XSLT — расширяемого языка стилей для преобразований. Обсуждается применение языков XSLT и XPath в решении практических задач: выводу документов в формате HTML, использованию различных кодировок для интернационализации и, в частности, русификации приложений, вопросам эффективности существующих подходов для решения проблем преобразования. Для иллюстрации материала используется большое количество примеров.
Для начинающих и профессиональных программистов
Технология XSLT - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Главной деталью LocationPath
является относительный путь выборки, продукция которого также может быть переписана в раскрытом и упрощенном виде:
RelativeLocationPath ::= Step
| RelativeLocationPath '/' Step
| RelativeLocationPath '//' Step
В соответствии с этой продукцией, относительный путь выборки состоит из одного или нескольких шагов выборки, разделенных '/'
или '//'
. Как уже отмечалось ранее, конструкция '//'
есть сокращенный вариант от '/descendant-or-self::node()/'
. Таким образом, главным элементом пути выборки является шаг выборки.
□ /
— выберет корневой узел документа;
□ /а
— выберет элемент а
, находящийся в корне документа;
□ //а
— выберет множество всех элементов а
текущего документа.
Шаги выборки
Любой путь — это последовательность шагов, путь выборки — это последовательности шагов выборки, которые нужно совершить, чтобы получить искомый результат. Каждый шаг выборки состоит из трех частей.
□ Первая часть называется осью навигации — она показывает направление, в котором будет производиться выбор на данном шаге. Например, можно выбирать дочерние узлы, узлы-атрибуты или родительские узлы контекстного узла ( см. также раздел "Оси навигации" данной главы ).
□ Второй частью шага выборки является тест узла . Тест узла показывает, узлы какого типа или с какими именами должны быть выбраны на данном шаге.
□ Третья часть шага выборки — это один или несколько предикатов , логических выражений, которые фильтруют множество узлов, выбранных на данном шаге.
Проще говоря, ось навигации отвечает на вопрос "куда двигаемся?", тест узла — на вопрос "какие узлы ищем?", а предикаты — на вопрос "какими свойствами должны обладать выбираемые узлы?".
Шаг выборки attribute::href[. = 'http://www.xsltdev.ru']
состоит из оси навигации attribute
, которая выбирает атрибуты данного узла, теста узла href
, который выбирает узлы с именем href
и нулевым пространством имен, и предиката [. = 'http://www.xsitdev.ru']
, который оставляет в выбираемом множестве те узлы, текстовое значение которых равно "http://www.xsltdev.ru"
. Таким образом, на этом шаге будут выбраны все атрибуты href
текущего узла, имеющие значение "http://www.xsltdev.ru"
.
Шаг выборки соответствует EBNF-продукции Step
, а первая его часть, ось навигации — продукции AxisSpecifier
:
[XP4] Step ::= AxisSpecifier NodeTest Predicate*
| AbbreviatedStep
[XP5] AxisSpecifier ::= AxisName '::'
| AbbreviatedAxisSpecifier
Продукцию Step
можно значительно упростить и записать в следующем виде:
Step ::= '.'
| '..'
| NodeTest Predicate*
| '@' NodeTest Predicate*
| AxisName '::' NodeTest Predicate*
В первых четырех случаях шаг выборки записан при помощи сокращенного синтаксиса, а именно:
□ шаг выборки '.'
эквивалентен шагу self::node()
, который выбирает контекстный узел;
□ шаг выборки '..'
эквивалентен шагу parent::node()
, который выбирает родительский узел контекстного узла;
□ шаг выборки вида NodeTest Predicate*
эквивалентен шагу выборки вида 'child::' NodeTest Predicate*
, который выбирает узлы из множества дочерних узлов контекстного узла;
□ шаг выборки вида '@' NodeTest Predicate*
эквивалентен шагу выборки вида 'attribute::' NodeTest Predicate*
, который выбирает узлы из множества атрибутов контекстного узла.
Последний случай, AxisName ' ::' NodeTest Predicate*
представляет полный синтаксис шага выборки: сначала идет наименование оси и тест узла, разделенные двумя двоеточиями ( "::"
), затем несколько предикатов.
Оси навигации
Важной особенностью путей выборки является то, что шаги в них могут совершаться не в двух направлениях (вглубь и на верхний уровень), как в случае с файловыми системами, а во многих других. При выполнении шага выборки из некоторого контекстного узла направление движения по логическому дереву документа задается первой частью этого шага, осью навигации. В XPath имеется 13 осей навигации, а именно:
□ self
— эта ось навигации содержит только сам контекстный узел;
□ child
— содержит все дочерние узлы контекстного узла; не содержит узлов атрибутов и пространств имен;
□ parent
— содержит родительский узел контекстного узла, если он есть;
□ descendant
— содержит все узлы-потомки контекстного узла; не содержит узлов атрибутов и пространств имен;
□ descendant-or-self
— содержит контекстный узел, а также всех его потомков; не содержит узлов атрибутов и пространств имен;
□ ancestor
— содержит узлы, которые являются предками контекстного узла;
□ ancestor-or-self
— содержит контекстный узел, а также всех его предков;
□ following
— содержит узлы, следующие за контекстным узлом, в порядке просмотра документа; не содержит его потомков; не содержит узлов атрибутов и пространств имен;
□ following-sibling
— содержит братские узлы контекстного узла, которые следуют за ним в порядке просмотра документа; если контекстный узел является атрибутом или узлом пространства имен, то following-sibling
не будет содержать никаких узлов;
□ preceding
— содержит узлы, предшествующие контекстному узлу в порядке просмотра документа; не содержит его предков; не содержит узлов атрибутов и пространств имен;
□ preceding-sibling
— содержит братские узлы контекстного узла, которые предшествуют ему в порядке просмотра документа; в случае, если контекстный узел является узлом атрибута или пространства имен, preceding-sibling
не будет содержать никаких узлов;
□ attribute
— содержит атрибуты контекстного узла, если он является элементом; в противном случае не содержит ничего;
□ namespace
— содержит узлы пространств имен контекстного узла, если он является элементом; в противном случае не содержит ничего.
Шаг выборки вида ось ::node()
будет содержать все узлы, принадлежащие этой оси. Например, attribute::node()
(или, сокращенно @node()
) будет содержать все атрибуты текущего узла.
Для того чтобы понять, как оси навигации расположены в дереве документа, обратимся к рис. 6.9.

Рис. 6.9. Расположение в документе осей навигации
На этом рисунке не показано расположение осей атрибутов и пространств имен вследствие того, что эти оси не имеют в документе физического направления.
Каждая ось имеет базовый тип узла — это тип узла, который считается "главным" в этом направлении навигации. Этот тип устанавливается следующим образом: если ось может содержать узлы элементов, ее базовым типом является элемент, в противном случае базовым типом оси навигации является тип узлов, которые она может содержать.
Читать дальшеИнтервал:
Закладка: