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

на главную - закладки

Жанры

Технология XSLT

Валиков Алексей Н.

Шрифт:

[XP19] PathExpr ::= LocationPath

| FilterExpr

| FilterExpr '/' RelativeLocationPath

| FilterExpr '//' RelativeLocationPath

Объединение множеств

Множества могут быть объединены при помощи оператора "

|
". В объединение будут входить узлы, которые присутствуют хотя бы в одном из множеств, причем результат не содержит повторений. Объединять можно любые выражения, результатом
вычисления которых являются множества узлов.

Пример

Множество всех элементов

а
,
b
и
с
документа может быть задано выражением
//a|//b|//c
.

Выражению объединения соответствует продукция

UnionExpr
:

[XP18] UnionExpr ::= PathExpr | UnionExpr '|' PathExpr

Старшинство операций

Теперь, когда мы изучили все типы операций XPath, можно дать синтаксическое определение выражению и выстроить все операции в порядке старшинства.

Выражению, как самой общей конструкции XPath, соответствует продукция

Expr
, которая определяется следующим образом:

[XP14] Expr ::= OrExpr

То есть, фактически, выражение в XPath определяется через логическое выражение. Естественно, выражения не обязаны быть логическими. Просто в иерархии синтаксических правил логическое выражение "или" находится выше всего. Верхние правила определяются через более примитивные правила и так далее. В итоге иерархия выражений выстраивается следующим образом (в скобках приведены названия EBNF-правил):

□ выражения (

Expr
);

□ логические выражения "или" (

OrExpr
);

□ логические выражения "и" (

AndExpr
);

□ выражения равенства и неравенства (

EqualityExpr
);

□ выражения сравнения (

RelationalExpr
);

□ выражения сложения и вычитания (

AdditiveExpr
);

□ выражения умножения и деления (

MultiplicativeExpr
);

□ унарные выражения (

UnaryExpr
);

□ выражения объединения множеств (

UnionExpr
);

□ выражения путей выборки (

PathExpr
);

□ пути выборки (

LocationPath
), фильтрация множеств (
FilterExpr
), относительные пути выборки (
RelativeLocationPath
).

По этой схеме несложно выяснить старшинство операций — чем ниже выражение находится в этой иерархии, тем выше его приоритет. Для полной ясности, перечислим операции в порядке старшинства от старших, с большим приоритетом, к младшим, с меньшим приоритетом выполнения:

□ операции с путями выборки;

□ операция объединения множеств (

|
);

□ унарная операция отрицания (

);

□ умножение, деление и вычисление остатка от деления (

*
,
div
и
mod
);

□ операции сложения и вычитания (

+
и
);

□ операции сравнения (

<
,
>
,
<=
,
=>
);

□ операции проверки равенства и неравенства (

=
и
!=
);

□ операция "и" (

and
);

□ операция "или" (

or
).

Операции одного порядка имеют левую ассоциативность, как это было показано на примере с операциями сравнения (

3 > 2 > 1
равносильно
(3 > 2) >1
).

Функции

Кроме операций, которые обеспечивают примитивные базовые действия, в XPath можно использовать функции. Спецификация языка XPath определяет базовую библиотеку функций, которую должны поддерживать все XSLT-процессоры. В XSLT эта библиотека дополняется еще несколькими полезными функциями. Кроме этого, большинство процессоров реализуют механизм расширений, при помощи которого можно использовать в XSLT собственные функции.

В этой главе мы будем рассматривать только функции базовой библиотеки XPath. Функции, которые добавляются в XSLT, будут разбираться чуть позже, а функции-расширения и их создание вообще является достаточно сложной темой, вынесенной в отдельную главу.

Прежде, чем разбирать функции, рассмотрим синтаксис их вызова. Он описывается правилом

FunctionCall
:

[XP16] FunctionCall ::= FunctionName

'(' ( Argument ( ',' Argument )* )? ')'

Таким образом, вызов функции состоит из имени и перечисленных в круглых скобках аргументов, которых может в принципе и не быть. С точки зрения синтаксиса аргументом функции может быть любое выражение, однако на практике функции предъявляют к своим аргументам определенные требования. Мы будем записывать правила вызова той или иной функции прототипом вида

тип1 функция(тип2, тип3, тип4?)

где

тип1
— тип возвращаемого значения,
тип2
,
тип3
,
тип4
— типы передаваемых параметров, символ "
?
" обозначает аргумент, который может быть опущен. Также может быть использован символ
*
для обозначения аргумента, который может повторяться несколько раз. Например,

string concat(string, string, string*)

Поделиться:
Популярные книги

Девочка-лед

Джолос Анна
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Девочка-лед

Держать удар

Иванов Дмитрий
11. Девяностые
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Держать удар

Возвышение Меркурия. Книга 4

Кронос Александр
4. Меркурий
Фантастика:
героическая фантастика
боевая фантастика
попаданцы
5.00
рейтинг книги
Возвышение Меркурия. Книга 4

Предатель. Цена ошибки

Кучер Ая
Измена
Любовные романы:
современные любовные романы
5.75
рейтинг книги
Предатель. Цена ошибки

Брак по принуждению

Кроу Лана
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Брак по принуждению

Стеллар. Заклинатель

Прокофьев Роман Юрьевич
3. Стеллар
Фантастика:
боевая фантастика
8.40
рейтинг книги
Стеллар. Заклинатель

Вернуть невесту. Ловушка для попаданки 2

Ардова Алиса
2. Вернуть невесту
Любовные романы:
любовно-фантастические романы
7.88
рейтинг книги
Вернуть невесту. Ловушка для попаданки 2

Мое ускорение

Иванов Дмитрий
5. Девяностые
Фантастика:
попаданцы
альтернативная история
6.33
рейтинг книги
Мое ускорение

Чужая дочь

Зика Натаэль
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Чужая дочь

Страж Кодекса. Книга V

Романов Илья Николаевич
5. КО: Страж Кодекса
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Страж Кодекса. Книга V

Неудержимый. Книга XII

Боярский Андрей
12. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга XII

Попаданка в Измену или замуж за дракона

Жарова Анита
Любовные романы:
любовно-фантастические романы
6.25
рейтинг книги
Попаданка в Измену или замуж за дракона

Измена. Верни мне мою жизнь

Томченко Анна
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. Верни мне мою жизнь

Титан империи

Артемов Александр Александрович
1. Титан Империи
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Титан империи