Вход/Регистрация
Технология XSLT
вернуться

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

Шрифт:

Выражению, как самой общей конструкции 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*)

  • Читать дальше
  • 1
  • ...
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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