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

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

Жанры

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

Шрифт:

• 

|
означает «или»;

• 

означает «не»;

• 

?
означает «не обязательно»;

Также примите во внимание, что когда элемент заключен в одиночные кавычки, как

'ancestor'
или '
::
', это значит, что элемент должен появиться в выражении буквально (как "
ancestor::PLANET
"), — такие элементы называются литералами,
literals
. Ниже приведено полное формальное определение выражения XPath (здесь оно называется
Expr
):

Expr ::= OrExpr

OrExpr ::= AndExpr | OrExpr 'or' AndExpr

AndExpr ::= EqualityExpr | AndExpr 'and' EqualityExpr

EqualityExpr ::= Relational Expr | EqualityExpr '=' Relational Expr

 | EqualityExpr '!=' RelationalExpr

RelationalExpr ::= AdditiveExpr | RelationalExpr '<' AdditiveExpr

 | RelationalExpr '>' AdditiveExpr | RelationalExpr '<=' AdditiveExpr

 | RelationalExpr '>=' AdditiveExpr

AdditiveExpr ::= MultiplicativeExpr | AdditiveExpr '+' MultiplicativeExpr

 | AdditiveExpr '-' MultiplicativeExpr

MultiplicativeExpr ::= UnaryExpr

 | MultiplicativeExpr

MultiplyOperator ::= UnaryExpr

| MultiplicativeExpr 'div' UnaryExpr | MultiplicativeExpr 'mod' UnaryExpr

UnaryExpr ::= UnionExpr | '-' UnaryExpr

MultiplyOperator ::= '*'

UnionExpr ::= PathExpr | UnionExpr '|' PathExpr

PathExpr ::= LocationPath | FilterExpr

 | FilterExpr '/' RelativeLocationPath | FilterExpr '//' RelativeLocationPath

LocationPath ::= RelativeLocationPath | AbsoluteLocationPath

AbsoluteLocationPath ::= '/' RelativeLocationPath? | AbbreviatedAbsoluteLocationPath

RelativeLocationPath ::= Step | RelativeLocationPath '/' Step

 | AbbreviatedRelativeLocationPath

AbbreviatedAbsoluteLocationPath ::= '//' RelativeLocationPath

AbbreviatedRelativeLocationPath ::= RelativeLocationPath '//' Step

Step ::= AxisSpecifier NodeTest Predicate* | AbbreviatedStep

AxisSpecifier ::= AxisName '::' | AbbreviatedAxisSpecifier

AxisName ::= 'ancestor' | 'ancestor-or-self' | 'attribute' | 'child' | 'descendant'

 | 'descendant-or-self' | 'following' | 'following-sibling' | 'namespace'

 | 'parent' | 'preceding' | 'preceding-sibling' | 'self'

AbbreviatedAxisSpecifier ::= '@'?

NodeTest ::= NameTest | NodeType '(' ')'

 | 'processing-instruction' '(' Literal ')'

NameTest ::= '*' | NCName '*' | QName

NodeType ::= 'comment' | 'text' | 'processing-instruction' | 'node'

Predicate ::= '[' PredicateExpr ']'

PredicateExpr ::= Expr

FilterExpr ::= PrimaryExpr | FilterExpr Predicate

PrimaryExpr ::= VariableReference | '(' Expr ')'

 | Literal | Number | FunctionCall

VariableReference ::= '$' QName

Number ::= Digits ('.' Digits?)? | Digits

Digits ::= [0-9]+

FunctionCall ::= FunctionName '(' ( Argument ( Argument )* )? ')'

FunctionName ::= QName - NodeType

Argument ::= Expr

AbbreviatedStep := '.' | '..'

Как

видите, спецификация весьма объемна, она включает и обращения к функциям XPath (с которыми мы познакомимся в следующей главе). Лучший способ понять, как работают выражения XPath, — рассмотреть их по возвращаемым типам данных.

Типы данных XPath

В XPath существует четыре типа данных, а не только тип набора узлов, который должны возвращать образцы выбора:

• наборы узлов;

• логические значения;

• числа;

• строки.

ФРАГМЕНТЫ РЕЗУЛЬТИРУЮЩЕГО ДЕРЕВА

В XSLT 1.0 к типам данных XPath добавляются фрагменты результирующего дерева. Как говорилось в главе 4, фрагменты результирующего дерева представляют собой просто фрагменты дерева, которые можно присваивать переменным XSLT. Их поддержка была удалена из рабочего проекта XSLT 1.1, поэтому, скорее всего, они не будут включены в XSLT 2.0. Фрагменты результирующего дерева можно рассматривать как типы данных при помощи <xsl:variable>, что мы и увидим в главе 9.

В следующих разделах мы по очереди рассмотрим эти типы данных.

Наборы узлов XPath

Как следует из имени, набор узлов (node set) является просто совокупностью узлов. Набор узлов может включать несколько узлов, единственный узел или быть пустым. Поскольку главная задача XPath — определять место разделов документов, постольку возвращающие наборы узлов выражения XPath являются наиболее популярными типами выражений. Например, выражение XPath

child::PLANET
возвращает набор узлов из всех элементов
<PLANET>
, дочерних для контекстного узла. Выражение
child::PLANET/child::NAME
возвращает набор узлов из всех элементов
<NAME>
, дочерних для элементов
<PLANET>
контекстного узла. Выражения XPath такого рода называются путями расположения, location path (W3C называет их «самой важной конструкцией» в XPath), и существенная часть этой главы будет посвящена разъяснению путей расположения.

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

Князь Андер Арес 3

Грехов Тимофей
3. Андер Арес
Фантастика:
рпг
аниме
фэнтези
5.00
рейтинг книги
Князь Андер Арес 3

Бестужев. Служба Государевой Безопасности. Книга третья

Измайлов Сергей
3. Граф Бестужев
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Бестужев. Служба Государевой Безопасности. Книга третья

Мастер решений

Земляной Андрей Борисович
3. Специалист по выживанию
Фантастика:
боевая фантастика
космическая фантастика
6.20
рейтинг книги
Мастер решений

Неучтенный элемент. Том 1

NikL
1. Антимаг. Вне системы
Фантастика:
городское фэнтези
фэнтези
5.00
рейтинг книги
Неучтенный элемент. Том 1

Возвращение

Кораблев Родион
5. Другая сторона
Фантастика:
боевая фантастика
6.23
рейтинг книги
Возвращение

Двойник Короля 2

Скабер Артемий
2. Двойник Короля
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Двойник Короля 2

1941, Великая Отечественная катастрофа: Итоги дискуссии

Коллектив авторов
Документальная литература:
военная документалистика
6.25
рейтинг книги
1941, Великая Отечественная катастрофа: Итоги дискуссии

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

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

Черная стрела

Стивенсон Роберт Льюис
Приключения:
исторические приключения
8.83
рейтинг книги
Черная стрела

Старый, но крепкий 7

Крынов Макс
7. Культивация без насилия
Фантастика:
рпг
уся
фэнтези
5.00
рейтинг книги
Старый, но крепкий 7

Последний Герой. Том 1

Дамиров Рафаэль
1. Последний герой
Фантастика:
попаданцы
альтернативная история
фантастика: прочее
5.00
рейтинг книги
Последний Герой. Том 1

Мастер...

Чащин Валерий
1. Мастер
Фантастика:
героическая фантастика
попаданцы
аниме
6.50
рейтинг книги
Мастер...

Сильнейший Столп Империи. Книга 2

Ермоленков Алексей
2. Сильнейший Столп Империи
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Сильнейший Столп Империи. Книга 2

Князь Целитель 2

Ткачев Андрей Юрьевич
2. Князь Целитель
Фантастика:
боевая фантастика
городское фэнтези
аниме
фэнтези
5.00
рейтинг книги
Князь Целитель 2