контекстного узла;•
..
возвращает родителя контекстного узла;•
../@UNITS
возвращает атрибут UNITS
родителя контекстного узла;•
.//..
возвращает всех родителей потомка контекстного узла и родителя контекстного узла;•
PLANET[NAME]
возвращает детей
контекстного узла, у которых есть дети
;•
PLANET[NAME="Venus"]
возвращает детей
контекстного узла, у которых есть дети
с текстом, равным «Venus»;•
PLANET[@UNITS="days"]
возвращает всех детей
контекстного узла, у которых есть атрибут UNITS
со значением «days
»;•
PLANET[6][@UNITS="days"]
возвращает шестого ребенка
контекстного узла, только если у этого ребенка есть атрибут UNITS
со значением «days». Можно также написать PLANET[@UNITS="days"][6]
;•
PLANET[@COLOR and @UNITS]
возвращает всех детей
контекстного узла, у которых есть атрибут COLOR
и атрибут UNITS
;• "
//PLANET[not(.=preceding::PLANET)]
" выбирает все элементы
, значение которых отлично от значения любого предшествующего элемента
;•
*[1][self::NAME]
выбирает любой элемент
, который является первым ребенком своего родителя;•
*[position() < 5][@UNITS]
выбирает первых пятерых детей контекстного узла, у которых есть атрибут UNITS
.Проверка выражений XPath
В пакет Xalan входит удобная программа-пример, ApplyXPath.java, позволяющая применить выражение XPath к документу и посмотреть на результат, что очень помогает при тестировании. Для запуска этого примера вам нужно будет скомпилировать
ApplyXPath.java
в ApplyXPath.class
при помощи утилиты java.exe, входящей в поставку Java.В качестве примера я применю выражение XPath «
PLANET/NAME
» к planets.xml
при помощи ApplyXPath.class
. Ниже показан результат, отображающий все элементы
, дочерние по отношению к элементам
(теги
добавлены программой ApplyXPath):%java ApplyXPath planets.xml PLANET/NAME
Mercury Venus Earth
XPath 2.0
XPath находится в стадии обновления, и в него включаются средства поддержки XSLT 2.0 (см. www.w3.org/TR/xpath20req). Задачи XPath 2.0 следующие:
• упрощение операций с содержимым типов, поддерживаемых схемой XML;
• упрощение операций со строковым содержимым;
• поддержка соответствующих стандартов XML;
• улучшение удобства использования;
• улучшение функциональной совместимости;
• улучшение поддержки международных языковых средств;
• сохранение обратной совместимости;
• повышенная эффективность процессора.
Следующий список дает обзор требований XPath. Главные пункты — поддержка схемы XML и регулярных выражений, что дает средства работы со строками и поиска в строках. (Дополнительную информацию о регулярных выражениях можно почерпнуть по адресу http://www.perldoc.com/perl5.6/pod/perlre.html.) В соответствии с W3C, XPath 2.0:
• должен поддерживать архитектуру XML W3C, хорошо взаимодействуя с другими стандартами в семействе XML;
• должен выражать свою модель данных в терминах информационного множества (infoset) XML;
• должен предоставлять общий ключевой синтаксис для XSLT 2.0 и XML Query language 1.0;
• должен поддерживать явное сравнение «
for any
» или «for all
» и синтаксис равенства;• должен расширять множество функций агрегации (например, пользователи XSLT часто требовали добавить функции
min()
и max()
);• должен сохранять обратную совместимость с XPath 1.0;
• должен предоставлять функции пересечения и разности то есть — XPath 1.0 поддерживает объединение двух наборов узлов, и к этому должны быть добавлены функции пересечения и разности;
• должен поддерживать операцию унарного плюса (поскольку в схеме XML у десятичных чисел может присутствовать лидирующий плюс);
• должен улучшать удобство использования;
• должен снизить ограничения на шаги расположения;
• должен реализовывать условную операцию, оперирующую тремя выражениями — выражением 1 (логическая операция), выражением 2 и выражением 3. Если выражение 1 принимает значение «истина», должно вычисляться выражение 2, а если выражение 1 принимает значение «ложь», должно вычисляться выражение 3;
• должен определять последовательный синтаксис для подвыражений, обрабатывающих коллекции элементов;
• должен поддерживать дополнительные строковые функции. Например, W3C рассматривает вопрос добавления средств для замены в строках, заполнения символами и преобразований регистра;
• должен поддерживать функции агрегации при применении к коллекциям. Например, некоторым пользователям XPath 1.0 требовалось применить такую функцию агрегации, как
sum
, к значениям выражений, примененных к наборам узлов;• должен поддерживать регулярные выражения для поиска в строках с использованием нотации регулярных выражений, установленной в схеме XML;
• должен поддерживать элементарные типы данных схемы XML. То есть в дополнение к типам, поддерживаемым моделью данных XPath 1.0, — строке, числу, логическому значению и набору узлов — модель данных XPath 2.0 должна поддерживать элементарные типы данных схемы XML;
• должен поддерживать представления чисел с плавающей точкой одинарной и двойной точности, поддерживаемые схемой XML, которая использует научную нотацию;
• должен определять подходящий набор функций для работы пользователя с элементарными типами данных схемы XML;
• должен добавлять в XPath тип данных «список» (поскольку схема XML позволяет определять простые типы, унаследованные от списка);
• должен поддерживать доступ к значениям простых типов элементов и атрибутов. Поскольку схемы XML представляют много новых типов, XPath 2.0 должен поддерживать доступ к собственному, простого типа, значению элемента или атрибута;
• должен определять поведение операторов для нулевых аргументов;
• должен иметь средства для выбора элементов или атрибутов на основе явного типа схемы XML;
• должен иметь средства для выбора элементов или атрибутов на основе иерархии типов схемы XML;
• должен иметь средства для выбора элементов на основе групп подстановки схемы XML;
• должен поддерживать средства поиска, основанные на уникальных ограничениях и ключах схемы.
Хотя мы подошли к концу главы, о XPath сказано еще не все. Тема будет продолжена в следующей главе, в которой мы более внимательно рассмотрим доступные в XPath функции и функции, уже встроенные в XSLT.
Глава 8Работа с функциями XSLT и XPath
В этой главе мы изучим доступные вам в XSLT функции — как встроенные в XSLT, так и функции XPath. Вы уже встречались с этими функциями выборочно (например, с
id
, generate-id
, position
, count
и т.д). В этой главе мы рассмотрим их все.Некоторые функции входят в XSLT, некоторые пришли из XPath. И XSLT, и XPath обновляются до версии 2.0, и в конце главы я приведу список новых, готовящихся к выпуску функций. (Пока что никаких новых функций версии 2.0 еще не опубликовано.)
В XSLT встроены следующие функции:
•
element-available()
;•
function-available()
;•
current()
;•
document()
;•
key()
;•
format-number()