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): 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
Оси в 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 = /child::Student/attribute::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[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 категорий функции контекста; функция поиска узлов; логические функции; функции суммирования; функции преобразования типов данных; арифметические функции; строковые функции; функции имен.
Функции контекста Функции контекста позволяют учитывать позицию, которую занимает обрабатываемый узел в множестве контекстных узлов : Students/Student[last( )] Students/Student[position( )!=last( )] Students/Student[last( ) - 1] position( ) last( )
Функция поиска узлов Функция поиска узлов позволяет напрямую адресовать элемент ( множество элементов ), по атрибуту - идентификатору : id id( )
Логические функции Логические функции возвращают результат булева типа : Students/Student[not(FIO/LName='Иванов')] Students/Student[not(Group/spec='ПИЭ')] Students/Student[not(Group/year='5')] 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 ( )
Функции суммирования Функции суммирования позволяют подсчитывать количество узлов и сумму числовых значений в множестве узлов, заданном в качестве аргумента : count(//Student) count(//Student[Group/spec='ПИЭ']) count(//Student[Group/year='5']) count() sum()
Строковые функции contains( ) substring( ) concat( ) substring-before( ) substring-after( ) starts-with( ) string-length ( )