Чтение онлайн

ЖАНРЫ

Холзнер Стивен

Шрифт:

• 

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

• 

//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>

</output>

XPath 2.0

XPath

находится в стадии обновления, и в него включаются средства поддержки XSLT 2.0 (см. www.w3.org/TR/xpath20req). Задачи XPath 2.0 следующие:

• упрощение операций с содержимым типов, поддерживаемых схемой XML;

• упрощение операций со строковым содержимым;

• поддержка соответствующих стандартов XML;

• улучшение удобства использования;

• улучшение функциональной совместимости;

• улучшение поддержки международных языковых средств;

• сохранение обратной совместимости;

• повышенная эффективность процессора.

Следующий список дает обзор требований XPath. Главные пункты — поддержка схемы XML и регулярных выражений, что дает средства работы со строками и поиска в строках. (Дополнительную информацию о регулярных выражениях можно почерпнуть по адресу В соответствии с 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, которая использует научную нотацию;

Поделиться с друзьями: