Лекция 3 XML-технологии XPath-адресация

advertisement
XML-технологии
Лекция 3
XPath-адресация
Что такое XPath?

XPath - это синтаксис для адресации частей XML-документа

XPath использует пути для адресации элементов XML

XPath является важнейшей частью стандарта XSLT

XPath не является XML-форматом

XPath является стандартом W3C
XPath, XSLT, XPointer, XLink
Рекомендация от W3C

XPath —16 ноября 1999 года

Презентация:
XSLT —16 ноября 1999 года

Указание:
Xpointer

Связывание:
Xlink
Узлы в XPath
XPath представляет XML-документ в виде дерева узлов
Типы узлов в XPath

Корневой узел

Узел элемента

Узел атрибута

Текстовый узел
Узлы в XPath. Пример
узлы элементов
узлы атрибутов
текстовые узлы
Адресные выражения в XPath

Центральная конструкция XPath — выражение пути

Путь — последовательность шагов, разделенная знаком «/»

Основа — система адресации Uniformed Resource Identifier (URI):
http://someaddress/somepage
NodeX/NodeY/NodeX

Каждый шаг в выражении пути состоит из трех частей:
• ось
• проверка узла
• предикаты
Пример выражения пути XPath
Student/studID
Student/Group/Spec
Student/FIO/LName
Контекстные узлы в XPath

Контекстный узел — узел, от которого отсчитывается путь

Контекстный размер — число узлов в множестве

Контекстная позиция — порядковый номер (начиная с
единицы) контекстного узла в множестве контекстных
узлов
Типы адресации в XPath

Абсолютный путь — это путь, берущий начало из корня
дерева (контекстный узел — корень).

Относительный путь — это путь, берущий начало из
контекстных узлов. Выражение, задающее относительный
путь, не может начинаться с символа «/»
Типы адресации в XPath. Примеры

Абсолютная адресация:
Student/FIO/LName
Student/Group/spec

Относительная адресация
FIO/LName
(контекстный узел – Student)
spec (контекстный узел – Group)
Оси в XPath

Ось — это направление поиска XML-данных по отношению
к контекстному узлу

В XPath 13 основных осей
Оси в XPath
3
ancestor
ancestor-or-self
2
4
child
descendant
3
1
2
1
descendant-or-self
1
3
1
2
following
following-sibling
parent
1
1
2
4
3
5
6
7
1
4
2
3
1
2
preceding
preceding-sibling
3
1
2
1
self
1
2
4
5
6
Оси в XPath. Пример
/child::Student/child::studID/
/child::Student/child::rcb/
/child::Student/child::FIO/
child::LName/
/child::Student/child::Group/
child::spec/
Сокращения в осях XPath

attribute:: = «@»

child:: = пропустить

descendant:: = «.//»

parent:: = «..»

self:: = «.»
Сокращения в осях XPath. Пример
/child::Student/attribute::studID =
/Student/@studID
/child::Student/attribute::rcb =
/Student/@rcb
/child::Student/child::FIO/child::LName/ =
/Student/FIO/LName/
/child::Student/child::Group/child::spec/=
/Student/Group/spec/
Предикаты в XPath

Предикат — это выражение языка XPath, фильтрующее
набор узлов относительно оси и создающее новый набор
узлов.

Вычисление выражения предиката дает численное или
логическое значение.
Простые предикаты
Предикат с простым условием
предусматривает проверку значения
определенного элемента или атрибута

Students/Student[LName='Иванов']

Students/Student[@rcb='111111']

Students/Student[Group/num='10']
Числовые предикаты
Числовой предикат — это предикат с
предикативным выражением в виде
положительного целого числа

Students/Student[1] =
Students/Student[position()=1]

Students/Student[position()=last()]
Множественные предикаты

Students/Student[1][Group/spec='ПИЭ']
[Group/year='5'] [Group/num='10']

Students/Student[FIO/LName='Иванов']
[FIO/FName='Иван']
[FIO/MName='Иванович‘]
Функции в XPath
26 функций
8 категорий
 функции контекста;
 функция поиска узлов;
 логические функции;
 функции суммирования;
 функции преобразования типов данных;
 арифметические функции;
 строковые функции;
 функции имен.
Функции контекста
Функции контекста позволяют
учитывать позицию, которую занимает
обрабатываемый узел в множестве
контекстных узлов:

position( )
last( )

Students/Student[last( )]

Students/Student[position( )!=last( )]

Students/Student[last( ) - 1]

Функция поиска узлов
Функция поиска узлов позволяет
напрямую адресовать элемент
(множество элементов), по атрибутуидентификатору:
 id( )
id (/Students/Student/@studID[@rcb='111111'])
Логические функции
Логические функции возвращают
результат булева типа:
 true( )
 false( )
 not ( )

Students/Student[not(FIO/LName='Иванов')]

Students/Student[not(Group/spec='ПИЭ')]

Students/Student[not(Group/year='5')]
Предикаты всеобщности
Предикаты всеобщности — условия
типа «для каждого элемента
множества должно выполняться
некоторое условие»:
 not ( )

Students/Student[not(FIO/LName='Иванов')]

Students/Student[not(Group/spec='ПИЭ')]

Students/Student[not(Group/year='5')]
Предикаты всеобщности
Предикаты всеобщности — условия
типа «для каждого элемента
множества должно выполняться
некоторое условие»:
 not ( )

Students/Student[not(FIO/LName='Иванов')]

Students/Student[not(Group/spec='ПИЭ')]

Students/Student[not(Group/year='5')]
Функции суммирования
Функции суммирования позволяют
подсчитывать количество узлов и
сумму числовых значений в
множестве узлов, заданном в качестве
аргумента:
 count()
 sum()



count(//Student)
count(//Student[Group/spec='ПИЭ'])
count(//Student[Group/year='5'])
Строковые функции

contains( )

substring( )

concat( )

substring-before( )

substring-after( )

starts-with( )

string-length( )
Download