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

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

Жанры

Технология XSLT

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

Шрифт:

Продукция

NodeType
, использованная в тесте узла (см. раздел "Тесты узлов" данной главы, продукция
[XP7]
), определяет типы узлов, которые можно проверить при тесте —
comment
(комментарий),
text
(текстовый узел),
processing-instruction
(узел инструкции по обработке) и
node
(узел любого типа).
NodeType
записывается следующим образом:

[XP38] NodeType ::= 'comment'

| 'text'

| 'processing-instruction'

| 'node'

Другая

конструкция,
NameTest
, которая также используется в тесте узла, проверяет узлы базового типа оси на соответствие определенному имени. EBNF-правило
NameTest
имеет следующий синтаксис:

[ХР37] NameTest ::= '*' | NCName ':' '*' | QName

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

FunctionName
имеет вид:

[XP35] FunctionName ::= QName - NodeType

В целях удобочитаемости, в выражениях можно использовать пробельное пространство. Ему соответствует EBNF-правило

ExprWhiteSpace
:

[XP39] ExprWhitespace ::= S

Разбор XPath-выражений

Хотя синтаксис языка XPath укладывается в тридцать с небольшим синтаксических правил, реализация интерпретатора XPath-выражений может быть довольно непростой задачей. Для того чтобы хоть как-то упростить ее, в XPath определяются так называемые токены выражения (англ. expression token). Токены — это единицы, из которых состоит выражение. Будучи сами очень простыми, они выстраиваются в более сложные конструкции, образуя, в итоге, выражения.

Примером токенов являются операторы, которым соответствуют продукции

Operator
и
OperatorName
:

[XP33] OperatorName ::= 'and' | 'or' | 'mod* | 'div'

[XP32] Operator ::= OperatorName

| MultiplyOperator

| '/' | '//' | '|' | '+' | '-'

| '=' | '!=' | '<' | '>' | '<=' | '>='

Продукция самого токена выражения имеет вид:

[ХР28] ExprToken ::= '(' | ')' | '[' | ']'

| ' . ' | ' .. ' | '@' | ' | ':: '

| NameTest

| NodeType

| Operator

| FunctionName

| AxisName

| Literal

| Number

| VariableReference

При разборе XPath-выражения оно сначала разбивается на отдельные токены, а затем из них организуются более сложные структуры. При разбивке выражения на отдельные токены, следует всегда выбирать токен с самым длинным строковым представлением.

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

□ Если текущему токену предшествует другой токен,

причем этот предшествующий токен не является символом
@
,
::
,
(
,
[
или нетерминалом
Operator
, то текущий токен, являющийся символом
*
, должен восприниматься как знак умножения, а токен, являющийся
NCName
, — как нетерминал
OperatorName
.

□ Если за текущим токеном вида

NCName
следует открывающая круглая скобка (символ "
(
"), токен должен восприниматься или как имя функции (
FunctionName
), или как тип узла (
NodeType
).

□ Если за текущим токеном вида

NCName
следуют символы "
::
", токен должен восприниматься как имя оси навигации (
AxisName
).

□ Если ничего из вышеперечисленного не выполняется, токен не должен восприниматься, как

MultiplyOperator
,
OperatorName
,
NodeType
,
FunctionName
или
AxisName
.

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

□ Символ

*
является знаком умножения (
MultiplyOperator
) тогда и только тогда, когда ему предшествует токен, но этот токен не является токеном
@
,
::
,
(
,
[
или
Operator
.

□ Токен

NCName
представляет имя оператора (
OperatorName
) тогда и только тогда, когда ему предшествует токен, но этот токен не является токеном
::
,
(
,
[
или
Operator
.

□ Токен

NCName
является именем функции (
FunctionName
) или типом узла (
NodeType
) тогда и только тогда, когда за ним следует символ "
(
".

□ Токен

NCName
является именем оси навигации (
AxisName
) тогда и только тогда, когда за ним следуют символы "
::
".

Глава 7

Основные элементы XSLT

Основные и дополнительные элементы

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

Таким образом, множество основных элементов будет включать в себя следующее:

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

Ну, здравствуй, перестройка!

Иванов Дмитрий
4. Девяностые
Фантастика:
попаданцы
альтернативная история
6.83
рейтинг книги
Ну, здравствуй, перестройка!

Нечто чудесное

Макнот Джудит
2. Романтическая серия
Любовные романы:
исторические любовные романы
9.43
рейтинг книги
Нечто чудесное

Ученик. Книга вторая

Первухин Андрей Евгеньевич
2. Ученик
Фантастика:
фэнтези
5.40
рейтинг книги
Ученик. Книга вторая

Обгоняя время

Иванов Дмитрий
13. Девяностые
Фантастика:
попаданцы
5.00
рейтинг книги
Обгоняя время

Дочь моего друга

Тоцка Тала
2. Айдаровы
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Дочь моего друга

Кротовский, может, хватит?

Парсиев Дмитрий
3. РОС: Изнанка Империи
Фантастика:
попаданцы
альтернативная история
аниме
7.50
рейтинг книги
Кротовский, может, хватит?

Плохая невеста

Шторм Елена
Любовные романы:
любовно-фантастические романы
7.71
рейтинг книги
Плохая невеста

Законы Рода. Том 3

Flow Ascold
3. Граф Берестьев
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Законы Рода. Том 3

Измена. Ты меня не найдешь

Леманн Анастасия
2. Измены
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. Ты меня не найдешь

На границе империй. Том 7. Часть 2

INDIGO
8. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
6.13
рейтинг книги
На границе империй. Том 7. Часть 2

Убивать чтобы жить 8

Бор Жорж
8. УЧЖ
Фантастика:
боевая фантастика
космическая фантастика
рпг
5.00
рейтинг книги
Убивать чтобы жить 8

Мужчина моей судьбы

Ардова Алиса
2. Мужчина не моей мечты
Любовные романы:
любовно-фантастические романы
8.03
рейтинг книги
Мужчина моей судьбы

Николай I Освободитель. Книга 5

Савинков Андрей Николаевич
5. Николай I
Фантастика:
альтернативная история
5.00
рейтинг книги
Николай I Освободитель. Книга 5

Шведский стол

Ланцов Михаил Алексеевич
3. Сын Петра
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Шведский стол