• //PLANET/NAME возвращает все элементы <NAME>, у которых есть родитель <PLANET>;

• . возвращает сам контекстный узел;

• .//PLANET возвращает элементы-потомки <PLANET> контекстного узла;

• .. возвращает родителя контекстного узла;

• ../@UNITS возвращает атрибут UNITS родителя контекстного узла;

• .//.. возвращает всех родителей потомка контекстного узла и родителя контекстного узла;

• PLANET[NAME] возвращает детей <PLANET> контекстного узла, у которых есть дети <NAME>;

• PLANET[NAME='Venus'] возвращает детей <PLANET> контекстного узла, у которых есть дети <NAME> с текстом, равным «Venus»;

• PLANET[@UNITS='days'] возвращает всех детей <PLANET> контекстного узла, у которых есть атрибут UNITS со значением «days»;

• PLANET[6][@UNITS='days'] возвращает шестого ребенка <PLANET> контекстного узла, только если у этого ребенка есть атрибут UNITS со значением «days». Можно также написать PLANET[@UNITS='days'][6] ;

• PLANET[@COLOR and @UNITS] возвращает всех детей <PLANET> контекстного узла, у которых есть атрибут COLOR и атрибут UNITS;

• '//PLANET[not(.=preceding::PLANET)]' выбирает все элементы <PLANET>, значение которых отлично от значения любого предшествующего элемента <PLANET>;

• *[1][self::NAME] выбирает любой элемент <NAME>, который является первым ребенком своего родителя;

• *[position() &lt; 5][@UNITS] выбирает первых пятерых детей контекстного узла, у которых есть атрибут UNITS.

Проверка выражений XPath

В пакет Xalan входит удобная программа-пример, ApplyXPath.java, позволяющая применить выражение XPath к документу и посмотреть на результат, что очень помогает при тестировании. Для запуска этого примера вам нужно будет скомпилировать ApplyXPath.java в ApplyXPath.class при помощи утилиты java.exe, входящей в поставку Java.

В качестве примера я применю выражение XPath «PLANET/NAME» к planets.xml при помощи ApplyXPath.class. Ниже показан результат, отображающий все элементы <NAME>, дочерние по отношению к элементам <PLANET> (теги <output> добавлены программой ApplyXPath):

%java ApplyXPath planets.xml PLANET/NAME

<output>

 <NAME>Mercury</NAME><NAME>Venus</NAME><NAME>Earth</NAME& gt;

</output>

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;

Вы читаете XSLT
Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату