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( )