Java Advanced XML Path Language 1.0 (XPath 1.0)
2 СПбГУ ИТМО Georgiy KorneevJava Advanced / XPath 1.0 Содержание 1.Введение 2.Пути 3.Выражения 4.Функции 5.Заключение
Введение Часть 1
4Georgiy KorneevJava Advanced / XPath 1.0 XPath Язык выбора узлов XML-документов XPath рассматривает XML-документ в виде дерева Встраиваемый язык XSLT XPointer
5Georgiy KorneevJava Advanced / XPath 1.0 Контекст Предоставляется внешними средствами Текущий узел (current node) Набор переменных (variable bindings) Библиотека функций (function library) Набор префиксов пространств имен (set of namespace declarations)
6Georgiy KorneevJava Advanced / XPath 1.0 Типы данных node-set – набор узлов boolean – логический number – число с плавающей точкой string – строка (unicode)
7Georgiy KorneevJava Advanced / XPath 1.0 Основные конструкции Location path – пути Выбор набора узлов Expressions – выражения Вычисления над наборами узлов Functions – функции Произвольные функции
Location paths Часть 2
9Georgiy KorneevJava Advanced / XPath 1.0 Location Path Путь состоит из последовательности шагов Типы путей Абсолютный Относительный Абсолютный – вычисляется относительно корня документа (/ | //) step ((/ | //) step)* | / Относительный – вычисляется относительно текущего узла step ((/ | //) step)*
10Georgiy KorneevJava Advanced / XPath 1.0 Правила работы 1. Проинициализировать множество текущих узлов (МТУ) текущим узлом (для относительного пути) либо корнем (для абсолютного пути) 2. Для каждого узла из МТУ отложить один шаг и положить результат в множество следующих узлов (МСУ) 3. МТУ := МСУ 4. Если путь не кончился, перейти к шагу 2 5. Выдать МТУ в качестве результата
11Georgiy KorneevJava Advanced / XPath 1.0 Location step Основные части Axis (ось) – определяет какие узлы будут рассматриваться с точки зрения текущего узла Node test (проверка узла) – типы или имена узлов Predicates (предикаты) – условия на узлы (не обязательно) Синтаксис axis :: node-test ([ predicate ])* Пример child::p[position() = 1]
12Georgiy KorneevJava Advanced / XPath 1.0 Типы осей (1)
13Georgiy KorneevJava Advanced / XPath 1.0 Типы осей (2) attribute – ось атрибутов namespace – ось префиксов (не используется)
14Georgiy KorneevJava Advanced / XPath 1.0 Node tests Каждая ось имеет основной тип узла attribute – атрибут namespace – пространство имен Остальные – элемент Синтаксис node-name * ( text() | node() | processing-instruction() | comment()) processing-instruction( имя )
15Georgiy KorneevJava Advanced / XPath 1.0 Примеры child::p – дети, имеющие имя p ancestors::* – все предки attribute::href – атрибут href attribute::* – все атрибуты descendants::text() – все текстовые узлы
16Georgiy KorneevJava Advanced / XPath 1.0 Сокращенный синтаксис Ось по умолчанию – – префикс атрибута [n] – предикат, выбирающий n-й элемент. – текущий узел.. – родитель //step – потомки узла – сокращение для self::node()/descendant-or- self::node()/child::p/attribute::warning
17Georgiy KorneevJava Advanced / XPath 1.0 Predicates Предикат – произвольное условие на текущий узел Узел берется, если предикат выполняется Может быть несколько предикатов Примеры = help.html] = help.html][5] = help.html]
Выражения Часть 3
19Georgiy KorneevJava Advanced / XPath 1.0 Основные выражения $var – ссылка на переменную (expr) – выражение в скобках literal – строка -10 – число id(arg1, arg2, …) – вызов функции
20Georgiy KorneevJava Advanced / XPath 1.0 Выбор узлов | – объединение путей a | img /, // – конструирование путей a//img Фильтры Основное выражение Фильтр + предикаты
21Georgiy KorneevJava Advanced / XPath 1.0 Логические выражения Операции or – логическое или and – логическое и =, != – сравнение на равенство (неравенство), = – сравнения Наборы узлов Пустойfalse Не пустойtrue
22Georgiy KorneevJava Advanced / XPath 1.0 Сравнения При сравнении учитывается тип значений Строки – лексикографически Числа – по величине При сравнении двух наборов узлов выражение истинно, если найдется по элементу в первом множестве и втором множестве, связанные отношением Значение считается набором узлов из одного узла
23Georgiy KorneevJava Advanced / XPath 1.0 Численные выражения Операции +, - – сложение и вычитание *, div, mod – умножение, деление, взятие остатка - – унарный минус Основные выражения
Стандартные функции Часть 4
25Georgiy KorneevJava Advanced / XPath 1.0 Над множествами узлов (1) Местоположение position() – номер текущего узла в наборе last() – номер последнего узла в наборе count(node-set) – количество узлов
26Georgiy KorneevJava Advanced / XPath 1.0 Над множествами узлов (2) Имена name(node-set?) – имя текущего / первого в наборе узла local-name(node-set?) – локальное имя узла namespace-uri(node-set?) – имя пространства имен Выбор node-set id(object) – выбор элементов по идентификатору
27Georgiy KorneevJava Advanced / XPath 1.0 Функции над строками (1) string(object) – приведение к строке concat(str1, str2, …) – конкатенация строк starts-with(s1, s2) – s1 начинается с s2 contains(s1, s2) – s1 содержит s2 string-length(string?) – длина строки normalize-space(string?) – нормализация пробелов в строке
28Georgiy KorneevJava Advanced / XPath 1.0 Функции над строками (2) Подстроки substring-before(s1, s2) – часть s1 до первого вхождения s2 substring-after(s1, s2) – часть s1 после первого вхождения s2 substring(s, off, len?) – подстрока s, начиная с off, длиной len символов translate(s, from, to) – для каждого символа из s: если он содержится во from, то заменить его на соответствующий символ из to
29Georgiy KorneevJava Advanced / XPath 1.0 Логические функции boolean(object) – преобразование к логическому типу not(boolean) – логическое отрицание true() – истина false() – ложь lang(name) – проверка языка узла (атрибут xml:lang)
30Georgiy KorneevJava Advanced / XPath 1.0 Числовые функции number(object?) – преобразование к числу sum(node-set) – сумма наборов узлов round(number) – округление к ближайшему floor(number) – округление вниз ceiling(number) – округление вверх
Заключение Часть 5
32Georgiy KorneevJava Advanced / XPath 1.0 Ссылки XML Path Language (XPath) version 1.0 // Перевод спецификации на русский // Валиков А. Технология XSLT
33 СПбГУ ИТМО Georgiy KorneevJava Advanced / XPath 1.0 Вопросы