XPath, або XML Path Language — це мова запитів, для вибору вузлів з XML документів, або для обчислення величин (наприклад, рядкових, числових або булевих) на основі вмісту XML документа. XPath був розроблений World Wide Web Consortium (W3C).
XPath | |
---|---|
Парадигма | Мова запитів |
Дата появи | 1999 |
Розробник | W3C |
Останній реліз | 3.0 (2014-04-08) |
Основні реалізації | C#, Java, JavaScript |
Під впливом від | XSLT, XPointer |
Вплинула на | XML Schema, XForms |
|
Огляд
Мова XPath основана на представленні XML документа у вигляді дерева, і надає можливість навігації по дереву, та вибору його вузлів за різними критеріями. Популярно (проте не в офіційній специфікації) XPath-вирази називають просто «XPath».
На початку покликаний надати загальний синтаксис і модель поведінки між XPointer та XSLT, XPath швидко здобув визнання розробників як , і його підмножини використовуються в інших W3C специфікаціях. Це, наприклад, XML Schema, XForms і [en].
Версії
На сьогоднішній день є три версії мови XPath. Остання — версія 3.0 (10.04.2014), але XPath 1.0 все ще є найбільш вживаною.
- XPath 1.0 стала рекомендацією 16 листопада 1999 року і широко впроваджена і використовується сама по собі (на зразок таких мов, як Java, C#, Python, JavaScript) або ж входить до інших мов (наприклад, XSLT, , XML Schema, XForms).
- XPath 2.0 стала рекомендацією 23 січня 2007 року, була впроваджена значною мірою, але все ж не настільки широко використовувалася, як XPath 1.0. Специфікація цієї версії набагато більша ніж в XPath 1.0, змінено деякі фундаментальні концепції мови, як наприклад, система типізації.
- Найбільш помітною зміною є те, що XPath 2.0 побудована на основі [en], що має значно багатшу систему типізації. Кожне значення тепер є послідовністю (одне атомарне значення або вузол розглядаються як послідовність одиничної довжини). Множини вузлів, характерні для XPath 1.0, замінено послідовностями вузлів, що можуть бути в будь-якому порядку.
- Щоб підтримати більші набори типів, XPath 2.0 пропонує неймовірно поширену сукупність функції та операторів.
- XPath 2.0 є насправді підмножиною XQuery 1.0. Вони використовують однакову модель даних (). Це дозволяє виразу
for
, що є урізаною версією «FLWOR» виразів в XQuery. Можливо описати мову, перераховуючи частини XQuery, що не включає: головні приклади, які є прологами запиту, елемент та атрибут конструкторів, іншу частину «FLWOR» синтаксису, і виразtypeswitch
.
- XPath 3.0 стала рекомендацією 8 квітня 2014 року. Найбільш значним нововведенням є підтримка функцій як значень першого класу. Щоб дізнатись більше про XPath 3.0, дивись. XPath 3.0 є підмножиною XQuery 3.0, а також найсучаснішою реалізацією, що існує, як частина рушія XQuery станом на квітень 2014 року.
Синтаксис і семантика (XPath 1.0)
Найбільш важливий тип виразу в XPath є шлях до файлу. Шлях до файлу складається з послідовності каталогів. Кожен каталог містить три компоненти:
- вісь
- визначення вузла
- предикати (може бути декілька, або не бути взагалі).
Вираз XPath обчислюється по відношенню до контекстного вузла. Осі, такий як 'child' або 'descendant', описують шлях для навігації від контекстного вузла. Визначення вузла і предикати використовуються для фільтрування вузлів, означених віссю. Наприклад, визначення вузла 'A' вимагають від інших напрямлених вузлів мати позначку 'A'. Предикат може використовуватися з метою зазначити, що вибрані вузли мають певні властивості (самовизначені XPath виразами).
Синтаксис XPath поставляється в двох варіантах: скорочений синтаксис (що є більш компактним і дозволяє XPath виразам бути легко написаними і прочитаними, використовуючи інтуїтивні і в багатьох випадках звичні характеристики і конструктори. Розширений синтаксис є менш компактний, але дозволяє описати більше опцій, є більш наочний.
Скорочений синтаксис
Компактне позначення дозволяє багато за замовчуванням і скорочень для загальних випадків. Для даного XML документу
<A> <B> <C/> </B> </A>
найпростіший XPath вираз
/A/B/C
обирає ті елементи C, що є дітьми B, що в свою чергу є дітьми A, що є найбільш віддаленим елементом (в даному разі коренем) цього XML документу. Синтаксис XPath є розроблений, щоб імітувати URI і синтаксис шляху до файлу.
Більш складні вирази можуть бути сконструйовані вибором осі, відмінної від 'child' ('child' — вісь за замовчуванням), даних вузла (не просто імені) чи предикатів, що можуть бути записані в квадратних дужках на кожному кроці. Наприклад, вираз
A//B/*[1]
вибирає першу дитину ('*[1]
'), не зважаючи на ім'я, кожного елемента B, що в свою чергу є або дитиною, або більш дальнім нащадком ('//
') елемента A, що є дитиною поточного контекстного вузла (вираз не починається з '/
'). Зверніть увагу, що предикат [1]
пов'язує більш щільно, ніж оператор /
. Щоб вибрати перший вузол, вибраний виразом A//B/*
, напишіть (A//B/*)[1]
. Зверніть також увагу на те, що значення індексу в предикатах XPath (технічно, «позиції» близькість від XPath наборів вузлів) починається з 1, а не з 0, як прийнято в таких мовах, як C і Java.
Розширений синтаксис
У повному нескороченому синтаксисі два вищеописаних приклади буде записано
/child::A/child::B/child::C
child::A/descendant-or-self::node()/child::B/child::*[position()=1]
Тут на кожному кроці вісь(наприклад, child
or descendant-or-self
) вказується явно, потім пишуть ::
і потім визначення вузла, так як A
або node()
в розглянутих прикладах.
Осі
Осі вказують на напрям навігації по дереві XML документа. Є такі осі:
Розширений синтаксис | Скорочений синтаксис | Пояснення |
---|---|---|
ancestor | Вибирає всіх предків (батька, прабатька і т. д.) поточного вузла | |
ancestor-or-self | Вибирає всіх предків (батька, прабатька і т. д.) поточного вузла і його самого | |
attribute | @ | Вибирає всі атрибути поточного вузла |
child | Вибирає всіх дітей поточного вузла | |
descendant | Вибирає всіх нащадків (дітей, внуків і т. д.) поточного вузла | |
descendant-or-self | // | Вибирає всіх нащадків (дітей, внуків і т. д.) поточного вузла і його самого |
following | Вибирає все в документі після закриваючого тегу поточного вузла | |
following-sibling | Вибирає всіх «братів» після поточного вузла | |
namespace | Вибирає всі вузли простору імен поточного вузла | |
parent | .. | Вибирає всіх батьків поточного вузла |
preceding | Вибирає всі вузли, що з'являлись перед поточним вузлом у документі, крім предків, вузлів з атрибутами і вузлів простору імен | |
preceding-sibling | Вибирає всіх «братів» перед поточним вузлом | |
self | . | Вибирає поточний вузол |
Розглянемо приклад використання осі following-sibling на наступному XML документі:
<items> <item>1</item> <item>2</item> <item>3</item> <item>4</item> </items>
XPath вираз
items/item/following-sibling::item[position()='2']
поверне '34' — значення третього і четвертого вузлів <item>, тобто тих, що йдуть після <item> на другій позиції.
Для демонстрації роботи descendant використаємо наступний XML документ:
<items> <item> <page>page1</page> <page>page2</page> <page>page3</page> </item> <item>2</item> <item>3</item> <item>4</item> </items>
Написавши наступне
descendant::items/item[position()='1']
отримаємо 'page1 page2 page3', тобто значення всіх нащадків <item>, що стоїть на першій позиції.
Як приклад використання осі attribute в скороченому синтаксисі, //a/@href
вибирає атрибути з назвою href
в усіх a
елементах, що зустрічаються в документі. Вираз . (скорочений запис від self::node()) найчастіше використовується в предикаті, щоб звернутись до поточного вузла. Наприклад, h3[.='See also']
вибирає елемент в поточному контексті з назвою h3
із значенням See also
.
Визначення вузла
Визначення вузла може складатися з конкретних імен вузлів або більш загальних виразів. У разі, якщо в XML документі був визначений префікс простору імен gs
, //gs:enquiry
знайде всі enquiry
елементи в цьому просторі імен, і //gs:*
знайде всі елементи, незалежно від локальної назви, в цьому просторі імен.
Іншими форматами визначення вузла є:
- comment()
- знаходить XML вузол з коментарем (наприклад,
<!-- Comment -->
) - text()
- знаходить вузол з відповідним текстом (наприклад,
hello world
в<k>hello<m> world</m></k>
) - processing-instruction()
- знаходить інструкції з обробки XML документа, такі як
<?php echo $a; ?>
. В цьому випадкуprocessing-instruction('php')
збігатимуться. - node()
- знаходить будь-який вузол загалом
Предикати
Предикати, записані у вигляді виразів у квадратних дужках, можуть бути використані для обмеження набору вузлів, для вибору тільки тих вузлів, для яких виконується деяка умова. Наприклад, a[@href='help.php']
вибере ті a
елементи (з-поміж дітей контекстного вузла), що містять атрибут href
із значенням help.php
.
Нема обмеження на кількість предикатів, застосованих на одному кроці, і вони не повинні бути обмежені до останнього кроку в XPath виразі. Також вони можуть бути вкладені на будь-яку глибину. Шлях, визначений предикатами, починається в контексті поточного кроку і не змінює цей контекст. Всі умови повинні виконатися, щоб відбулась дія.
Коли значенням предиката є цифра, вона інтерпретується як тест на позицію (номер) вузла. Таким чином p[1]
вибирає перший p
елемент-дитину, в той час, як p[last()]
вибирає останню.
В іншим випадках значення предиката є автоматично конвертовані до булевих. Коли предикат оцінює множину вузлів, результат є true коли множина вузлів не є порожньою. Отже, p[@x]
вибирає ті p
елементи, котрі мають атрибут x
.
Більш складний приклад:
a[/html/@lang='en'][@href='help.php'][1]/@target
вибирає значення атрибута target
першого a
елемента з-поміж дітей контекстного вузла, що має свій власний атрибут href
із значенням help.php
, за умови, що елемент верхнього рівня html
також має атрибут lang
із значенням en
. Посилання на атрибут елемента верхнього рівня в першому предикаті не впливає ні на контекст інших предикатів, ні на місцезнаходження його самого на даному кроці.
Порядок предикатів є важливий, якщо предикати перевіряються позицію вузла. Кожен предикат «фільтрує» місцезнаходження вибраного набору вузлів на даному кроці по черзі. Отже, a[1][@href='help.php']
знайде відповідність, лише якщо перша a
дитина контекстного вузла відповідає умові @href='help.php'
, в той час, як a[@href='help.php'][1]
знайде першу a
дитину, що задовільняє умові.
Функції та оператори
XPath 1.0 визначає чотири типи даних: множини вузлів, рядки, числа, логічні типи.
Доступними є наступні оператори:
- «/», «//» і «[…]» оператори, що використовуються у XPath виразах, як це було описано раніше
- оператор об'єднання "|", що об'єднує дві множини вузлів
- булеві оператори «and» і «or», і функція «not()»
- арифметичні оператори «+», «-», «*», «div» (ділення), і «mod» (ділення за модулем)
- Оператори порівняння «=», «!=», «<», «>», «<=», «>=»
Бібліотека включає стандартні функції (більше 100):
- для маніпулювання рядками: concat(), substring(), contains(), substring-before(), substring-after(), translate(), normalize-space(), string-length()
- для маніпулювання числами: sum(), round(), floor(), ceiling()
- для отримання властивостей вузлів: name(), local-name(), namespace-uri()
- для отримання інформації про контекст обробки: position(), last()
- для конвертування: string(), number(), boolean()
Системні функції
- node-set document(object, node-set?)
- Повертає документ, вказаний у параметрі object.
- string format-number(number, string, string?)
- Форматує число згідно зразку, заданому в другому параметрі, третій параметр вказує на іменний формат числа, що повинен бути врахований.
- string generate-id(node-set?)
- Повертає рядок, який є унікальним ідентифікатором.
- node-set key(string, object)
- Повертає множину з вказаним ключем (аналогічно функції id для ідентифікатора).
- string unparsed-entity-uri(string)
- Повертає непроаналізований URI, а якщо такого немає, то повертає пустий рядок.
- boolean element-available(string)
- Перевіряє, чи вказаний в параметрі елемент, чи набір елементів є доступним (параметр розглядається, як XPath вираз).
- boolean function-available(string)
- Перевіряє, чи доступна функція, вказана в параметрі (параметр розглядається, як XPath вираз).
- object system-property(string)
- Параметри, що повертають системні змінні, можуть бути:
- * xsl: version — повертає версію XSLT процесора.
- * xsl: vendor — повертає виробника XSLT процесора.
- * xsl: vendor-url — повертає URL, що ідентифікує виробника.
- Якщо використовується невідомий параметр, то функція повертає пустий рядок.
- boolean lang(string)
- Повертає true, якщо або в даний тег, або його батько мають атрибут xml: lang, і в ньому вказаний відповідний рядку символ.
Функції над множиною вузлів
- node-set node()
- Повертає всі вузли (використовують замість '*' у випадках, коли стоїть завдання повернути і текстові вузли).
- string text()
- Повертає набір текстових вузлів
- node-set current()
- Повертає множину з одного елемента, який є поточним (якщо робимо обробку множини з умовами, то єдиним способом дотягнутись з цієї умови до поточного елемента є дана функція).
- number position()
- Повертає позицію елемента в множині (працює в циклі
<xsl:for-each/>
). - number last()
- Повертає позицію останнього елемента в множині (працює в циклі
<xsl:for-each/>
). - number count(node-set)
- Повертає кількість елементів у множині.
- string name(node-set?)
- Повертає повне ім'я першого тегу в множині.
- string namespace-uri(node-set?)
- Повертає посилання на URL, що визначає простір імен.
- string local-name(node-set?)
- Повертає ім'я першого тегу в множині (без простору імен).
- node-set id(object)
- Находить елемент з унікальним ідентифікатором
Функції над рядками
- string string(object?)
- Повертає текстовий зміст елемента (насправді повертає об'єднану множину текстових елементів на один рівень нижче).
- string concat(string, string, string*)
- Об'єднує два і більше рядки.
- number string-length(string?)
- Повертає довжину рядка
- boolean contains(string, string)
- Повертає true, якщо перший рядок містить другий, в іншому випадку — false.
- string substring(string, number, number?)
- Повертає рядок, вирізаний із рядка, починаючи з вказаного номера і, якщо вказаний другий номер — кількість символів.
- string substring-before(string, string)
- Якщо другий рядок знайдений в першому, то повертає перший рядок до першого входження другого.
- string substring-after(string, string)
- Якщо другий рядок знайдений в першому, то повертає перший рядок після першого входження другого.
- boolean starts-with(string, string)
- Повертає true, якщо другий рядок входить в початок першого, інакше — false.
- boolean ends-with(string, string)
- Повертає true, якщо другий рядок входить в кінець першого, інакше — false.
- string normalize-space(string?)
- Забирає зайві пробіли, а так само керуючі символи, заміняючи їх пробілами.
- string translate(string, string, string)
- Замінює символи першого рядка, які зустрічаються в другому, на відповідні позиції символами із другого рядка символи третього(наприклад,
translate(«bar», «abc», «ABC»
) повернеBAr
.
Логічні функції
- boolean boolean(object)
- Приведе об'єкт до логічного типу.
- boolean true()
- Повертає true.
- boolean false()
- Повертає false.
- boolean not(boolean)
- Заперечення (поверне true, якщо аргумент false і навпаки).
Числові функції
- number number(object?)
- Переводить об'єкт в число.
- number sum(node-set)
- Верне суму множини (кожен тег буде перетворений в рядок і з нього вийде число).
- number floor(number)
- Повертає найбільше число, але не більше, ніж аргумент.
- number ceiling(number)
- Повертає найменше число, але не менше, ніж аргумент.
- number round(number)
- Заокруглює число за математичними правилами.
Приклади використання
Вирази можуть створюватися всередині предикатів з використанням операторів: =, !=, <=, <, >=
і >
. Булеві вирази можуть комбінуватися з дужками ()
і булеві оператори and
і or
, як і функція not()
(описані вище). Числові розрахунки можуть використовувати *, +, -, div
і mod
. Рядки можуть складатися з будь-яких [Юнікод|Unicode]] характеристик.
Наприклад, вираз
//item[@price > 2*@discount]
вибирає <item>, атрибут price яких є більший числового значення їх атрибуту discount, помноженому на два.
Безліч вузлів можна 'об'єднати ', використовуючи вертикальну риску |. Множини вузлів, що задовольняють одному або більше з декількох умов можуть бути знайдені шляхом об'єднання умов всередині предиката з використанням 'or
'
Наступний вираз
v[x or y] | w[z]
повернеться один набір вузлів, що складається з усіхv
елементів, таких що маютьx
абоy
дітей-елементів, так само, як і зі всіхw
елементів, що маютьz
дітей-елементів, що були знайдені в даному контексті.
Приклади
Даний простий XML документ:
<?xml version="1.0" encoding="utf-8"?> <wikimedia> <projects> <project name="Wikipedia" launch="2001-01-05"> <editions> <edition language="English">en.wikipedia.org</edition> <edition language="German">de.wikipedia.org</edition> <edition language="French">fr.wikipedia.org</edition> <edition language="Polish">pl.wikipedia.org</edition> <edition language="Spanish">es.wikipedia.org</edition> </editions> </project> <project name="Wiktionary" launch="2002-12-12"> <editions> <edition language="English">en.wiktionary.org</edition> <edition language="French">fr.wiktionary.org</edition> <edition language="Vietnamese">vi.wiktionary.org</edition> <edition language="Turkish">tr.wiktionary.org</edition> <edition language="Spanish">es.wiktionary.org</edition> </editions> </project> </projects> </wikimedia>
XPath вирази:
/wikimedia/projects/project/@name
повертає атрибут name для всіх <project>;
/wikimedia//editions
вибирає всі <edition> всіх <project>;
/wikimedia/projects/project/editions/edition[@language="English"]/text()
вибирає адреси всіх <project> з англійської Вікіпедії (текст всіх edition елементів, де значення атрибута language є English);
/wikimedia/projects/project[@name="Wikipedia"]/editions/edition/text()
вибирає адреси всіх Вікіпедій (текст всіх edition елементів, що існують під project елементом із значенням Wikipedia атрибута name).
Реалізації
- Інструменти командного рядка
- XMLStarlet
- xmllint (libxml2)
- RaptorXML Server від Altova, що підтримує XPath 1.0, 2.0, і 3.0
- C/
- libxml2
- Sedna XML Database
- VTD-XML
- Xalan
- XQilla [ 18 травня 2015 у Wayback Machine.]
- XPath є включений в бібліотеку за замовчуванням
- Реалізації для двигунів баз даних
- Virtuoso Universal Server|OpenLink Virtuoso
- Saxon XSLT підтримує XPath 1.0, XPath 2.0 і XPath 3.0 (так само, як і XSLT 2.0, XQuery 3.0)
- BaseX (також підтримує XPath 2.0 and XQuery)
- VTD-XML
- Sedna XML Database (XML: DB і патентований).
- QuiXPath [ 10 березня 2014 у Wayback Machine.] реалізація потокової політики відкритого коду (Innovimax)
Пакет Java був частиною Java стандартної версії, починаючи з Java 5. Технічно це XPath API, а не реалізація XPath, і це дозволяє програмісту можливість вибрати конкретну реалізацію, що відповідає інтерфейсу.
- jQuery XPath плагін [ 9 липня 2014 у Wayback Machine.], заснована на політиці відкритого коду реалізації XPath 2.0 в JavaScript [ 11 червня 2018 у Wayback Machine.]
- В просторах імен System.Xml і System.Xml.XPath
- Sedna XML Database
- XML::LibXML (libxml2)
- Sedna XML Database
- ElementTree XML API [ 15 березня 2015 у Wayback Machine.] в Python Standard Library включає обмежену підтримку [ 15 березня 2015 у Wayback Machine.] для XPath виразів
- libxml2
- Amara
- Sedna XML Database
- lxml
- libxml2
- Nokogiri
- Sedna XML Database
- MySQL підтримує частину XPath з версії 5.1.5 і далі
- PostgreSQL підтримує XPath і XSLT з версії 8.4 і далі
- забезпечує "дуже повне, сумісне і швидке впровадження XPath в C
Використання в мовах схем
XPath все частіше використовується, щоб виражати обмеження, що накладаються мовами схем для XML.
- (В даний момент стандарт ІСО) мова схем Schematron започаткувала підхід.
- Потокова підмножина XPath використовується в XML Schema (W3C) 1.0 для вираження унікальності та ключових обмежень. У XSD 1.1 використання XPath є розширеним для підтримки умовного присвоювання типу на основі значень атрибутів, і дозволу довільним логічним твердженням бути оціненими на основі вмісту елементів.
- XForms використовує XPath, щоб пов'язати типи із значеннями.
- Підхід навіть знайшов застосування в не-XML-додатках, таких як аналізатор вихідного коду для Java, названий PMD: спочатку Java код перетворюється в DOM-дерево розбору, а потім XPath правила визначаються над деревом.
Примітки
- (PDF). 4 лютого 2012. Архів оригіналу (PDF) за 24 квітня 2013. Процитовано 13 травня 2015.
- Bergeron, Randy (31 жовтня 2000). . SQL Server Magazine. Архів оригіналу за 26 липня 2010. Процитовано 13 травня 2015.
- (October 2012). (PDF). Архів оригіналу (PDF) за 14 квітня 2021. Процитовано 13 травня 2015.
- XPath 2.0 підтримує атомні типи, визначені в XML Schema як вбудовані, і також може імпортувати типи зі схеми, визначені користувачем.
- . Архів оригіналу за 9 травня 2015. Процитовано 13 травня 2015.
- What's new in 3.0 (XSLT/XPath/XQuery) (plus XML Schema 1.1) [ 3 квітня 2013 у Wayback Machine.] by Michael Kay, Saxonica
- . Архів оригіналу за 17 квітня 2008. Процитовано 21 травня 2015.
- . Архів оригіналу за 4 листопада 2018. Процитовано 7 листопада 2018.
{{}}
: Обслуговування CS1: Сторінки з текстом «archived copy» як значення параметру title () - . Архів оригіналу за 23 травня 2015. Процитовано 21 травня 2015.
{{}}
: Обслуговування CS1: Сторінки з текстом «archived copy» як значення параметру title () - . Архів оригіналу за 19 березня 2015. Процитовано 21 травня 2015.
Див. також
Посилання
- Російський переклад специфікації XML Path (XPath) версії 1.0 [ 26 вересня 2007 у Wayback Machine.]
- Специфікація XPath 2.0 [ 2 листопада 2007 у Wayback Machine.]
- Що нового в XPath 2.0 [ 9 жовтня 2007 у Wayback Machine.]
- Парсер сайтів на Xpath. Урок 1 [ 3 листопада 2012 у Wayback Machine.] (Українська)
- Втілення XPath у JavaScript [ 11 жовтня 2007 у Wayback Machine.]
- Підручник з численними прикладами [ 2 листопада 2007 у Wayback Machine.]
- TinyXpath- Втілення XPath на c++ [ 13 жовтня 2007 у Wayback Machine.]
- XPath Підручник [ 10 серпня 2011 у Wayback Machine.] (Німецька)
- (Німецька)
- [недоступне посилання з червня 2019 XPath Achsen Diagramme][недоступне посилання з жовтня 2019] (Німецька)
- XPath в JavaScript [ 27 травня 2015 у Wayback Machine.] (Російська)
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
XPath abo XML Path Language ce mova zapitiv dlya viboru vuzliv z XML dokumentiv abo dlya obchislennya velichin napriklad ryadkovih chislovih abo bulevih na osnovi vmistu XML dokumenta XPath buv rozroblenij World Wide Web Consortium W3C XPathParadigma Mova zapitivData poyavi 1999Rozrobnik W3COstannij reliz 3 0 2014 04 08 Osnovni realizaciyi C Java JavaScriptPid vplivom vid XSLT XPointerVplinula na XML Schema XForms Mediafajli u VikishovishiOglyadMova XPath osnovana na predstavlenni XML dokumenta u viglyadi dereva i nadaye mozhlivist navigaciyi po derevu ta viboru jogo vuzliv za riznimi kriteriyami Populyarno prote ne v oficijnij specifikaciyi XPath virazi nazivayut prosto XPath Na pochatku poklikanij nadati zagalnij sintaksis i model povedinki mizh XPointer ta XSLT XPath shvidko zdobuv viznannya rozrobnikiv yak i jogo pidmnozhini vikoristovuyutsya v inshih W3C specifikaciyah Ce napriklad XML Schema XForms i en Versiyi Na sogodnishnij den ye tri versiyi movi XPath Ostannya versiya 3 0 10 04 2014 ale XPath 1 0 vse she ye najbilsh vzhivanoyu XPath 1 0 stala rekomendaciyeyu 16 listopada 1999 roku i shiroko vprovadzhena i vikoristovuyetsya sama po sobi na zrazok takih mov yak Java C Python JavaScript abo zh vhodit do inshih mov napriklad XSLT XML Schema XForms XPath 2 0 stala rekomendaciyeyu 23 sichnya 2007 roku bula vprovadzhena znachnoyu miroyu ale vse zh ne nastilki shiroko vikoristovuvalasya yak XPath 1 0 Specifikaciya ciyeyi versiyi nabagato bilsha nizh v XPath 1 0 zmineno deyaki fundamentalni koncepciyi movi yak napriklad sistema tipizaciyi Najbilsh pomitnoyu zminoyu ye te sho XPath 2 0 pobudovana na osnovi en sho maye znachno bagatshu sistemu tipizaciyi Kozhne znachennya teper ye poslidovnistyu odne atomarne znachennya abo vuzol rozglyadayutsya yak poslidovnist odinichnoyi dovzhini Mnozhini vuzliv harakterni dlya XPath 1 0 zamineno poslidovnostyami vuzliv sho mozhut buti v bud yakomu poryadku Shob pidtrimati bilshi nabori tipiv XPath 2 0 proponuye nejmovirno poshirenu sukupnist funkciyi ta operatoriv XPath 2 0 ye naspravdi pidmnozhinoyu XQuery 1 0 Voni vikoristovuyut odnakovu model danih Ce dozvolyaye virazu for sho ye urizanoyu versiyeyu FLWOR viraziv v XQuery Mozhlivo opisati movu pererahovuyuchi chastini XQuery sho ne vklyuchaye golovni prikladi yaki ye prologami zapitu element ta atribut konstruktoriv inshu chastinu FLWOR sintaksisu i viraz typeswitch XPath 3 0 stala rekomendaciyeyu 8 kvitnya 2014 roku Najbilsh znachnim novovvedennyam ye pidtrimka funkcij yak znachen pershogo klasu Shob diznatis bilshe pro XPath 3 0 divis XPath 3 0 ye pidmnozhinoyu XQuery 3 0 a takozh najsuchasnishoyu realizaciyeyu sho isnuye yak chastina rushiya XQuery stanom na kviten 2014 roku XPath viraz zastosovanij v XML dokumentiSintaksis i semantika XPath 1 0 Najbilsh vazhlivij tip virazu v XPath ye shlyah do fajlu Shlyah do fajlu skladayetsya z poslidovnosti katalogiv Kozhen katalog mistit tri komponenti vis viznachennya vuzla predikati mozhe buti dekilka abo ne buti vzagali Viraz XPath obchislyuyetsya po vidnoshennyu do kontekstnogo vuzla Osi takij yak child abo descendant opisuyut shlyah dlya navigaciyi vid kontekstnogo vuzla Viznachennya vuzla i predikati vikoristovuyutsya dlya filtruvannya vuzliv oznachenih vissyu Napriklad viznachennya vuzla A vimagayut vid inshih napryamlenih vuzliv mati poznachku A Predikat mozhe vikoristovuvatisya z metoyu zaznachiti sho vibrani vuzli mayut pevni vlastivosti samoviznacheni XPath virazami Sintaksis XPath postavlyayetsya v dvoh variantah skorochenij sintaksis sho ye bilsh kompaktnim i dozvolyaye XPath virazam buti legko napisanimi i prochitanimi vikoristovuyuchi intuyitivni i v bagatoh vipadkah zvichni harakteristiki i konstruktori Rozshirenij sintaksis ye mensh kompaktnij ale dozvolyaye opisati bilshe opcij ye bilsh naochnij Skorochenij sintaksis Kompaktne poznachennya dozvolyaye bagato za zamovchuvannyam i skorochen dlya zagalnih vipadkiv Dlya danogo XML dokumentu lt A gt lt B gt lt C gt lt B gt lt A gt najprostishij XPath viraz A B C obiraye ti elementi C sho ye ditmi B sho v svoyu chergu ye ditmi A sho ye najbilsh viddalenim elementom v danomu razi korenem cogo XML dokumentu Sintaksis XPath ye rozroblenij shob imituvati URI i sintaksis shlyahu do fajlu Bilsh skladni virazi mozhut buti skonstrujovani viborom osi vidminnoyi vid child child vis za zamovchuvannyam danih vuzla ne prosto imeni chi predikativ sho mozhut buti zapisani v kvadratnih duzhkah na kozhnomu kroci Napriklad viraz A B 1 vibiraye pershu ditinu 1 ne zvazhayuchi na im ya kozhnogo elementa B sho v svoyu chergu ye abo ditinoyu abo bilsh dalnim nashadkom elementa A sho ye ditinoyu potochnogo kontekstnogo vuzla viraz ne pochinayetsya z Zvernit uvagu sho predikat 1 pov yazuye bilsh shilno nizh operator Shob vibrati pershij vuzol vibranij virazom A B napishit A B 1 Zvernit takozh uvagu na te sho znachennya indeksu v predikatah XPath tehnichno poziciyi blizkist vid XPath naboriv vuzliv pochinayetsya z 1 a ne z 0 yak prijnyato v takih movah yak C i Java Rozshirenij sintaksis U povnomu neskorochenomu sintaksisi dva visheopisanih prikladi bude zapisano child A child B child C child A descendant or self node child B child position 1 Tut na kozhnomu kroci vis napriklad child or descendant or self vkazuyetsya yavno potim pishut i potim viznachennya vuzla tak yak A abo node v rozglyanutih prikladah Osi Osi vkazuyut na napryam navigaciyi po derevi XML dokumenta Ye taki osi Rozshirenij sintaksis Skorochenij sintaksis Poyasnennya ancestor Vibiraye vsih predkiv batka prabatka i t d potochnogo vuzla ancestor or self Vibiraye vsih predkiv batka prabatka i t d potochnogo vuzla i jogo samogo attribute Vibiraye vsi atributi potochnogo vuzla child Vibiraye vsih ditej potochnogo vuzla descendant Vibiraye vsih nashadkiv ditej vnukiv i t d potochnogo vuzla descendant or self Vibiraye vsih nashadkiv ditej vnukiv i t d potochnogo vuzla i jogo samogo following Vibiraye vse v dokumenti pislya zakrivayuchogo tegu potochnogo vuzla following sibling Vibiraye vsih brativ pislya potochnogo vuzla namespace Vibiraye vsi vuzli prostoru imen potochnogo vuzla parent Vibiraye vsih batkiv potochnogo vuzla preceding Vibiraye vsi vuzli sho z yavlyalis pered potochnim vuzlom u dokumenti krim predkiv vuzliv z atributami i vuzliv prostoru imen preceding sibling Vibiraye vsih brativ pered potochnim vuzlom self Vibiraye potochnij vuzol Rozglyanemo priklad vikoristannya osi following sibling na nastupnomu XML dokumenti lt items gt lt item gt 1 lt item gt lt item gt 2 lt item gt lt item gt 3 lt item gt lt item gt 4 lt item gt lt items gt XPath viraz items item following sibling item position 2 poverne 34 znachennya tretogo i chetvertogo vuzliv lt item gt tobto tih sho jdut pislya lt item gt na drugij poziciyi Dlya demonstraciyi roboti descendant vikoristayemo nastupnij XML dokument lt items gt lt item gt lt page gt page1 lt page gt lt page gt page2 lt page gt lt page gt page3 lt page gt lt item gt lt item gt 2 lt item gt lt item gt 3 lt item gt lt item gt 4 lt item gt lt items gt Napisavshi nastupne descendant items item position 1 otrimayemo page1 page2 page3 tobto znachennya vsih nashadkiv lt item gt sho stoyit na pershij poziciyi Yak priklad vikoristannya osi attribute v skorochenomu sintaksisi a href vibiraye atributi z nazvoyu href v usih a elementah sho zustrichayutsya v dokumenti Viraz skorochenij zapis vid self node najchastishe vikoristovuyetsya v predikati shob zvernutis do potochnogo vuzla Napriklad h3 See also vibiraye element v potochnomu konteksti z nazvoyu h3 iz znachennyam See also Viznachennya vuzla Viznachennya vuzla mozhe skladatisya z konkretnih imen vuzliv abo bilsh zagalnih viraziv U razi yaksho v XML dokumenti buv viznachenij prefiks prostoru imen gs gs enquiry znajde vsi enquiry elementi v comu prostori imen i gs znajde vsi elementi nezalezhno vid lokalnoyi nazvi v comu prostori imen Inshimi formatami viznachennya vuzla ye comment znahodit XML vuzol z komentarem napriklad lt Comment gt text znahodit vuzol z vidpovidnim tekstom napriklad hello world v lt k gt hello lt m gt world lt m gt lt k gt processing instruction znahodit instrukciyi z obrobki XML dokumenta taki yak lt php echo a gt V comu vipadku processing instruction php zbigatimutsya node znahodit bud yakij vuzol zagalom Predikati Predikati zapisani u viglyadi viraziv u kvadratnih duzhkah mozhut buti vikoristani dlya obmezhennya naboru vuzliv dlya viboru tilki tih vuzliv dlya yakih vikonuyetsya deyaka umova Napriklad a href help php vibere ti a elementi z pomizh ditej kontekstnogo vuzla sho mistyat atribut href iz znachennyam help php Nema obmezhennya na kilkist predikativ zastosovanih na odnomu kroci i voni ne povinni buti obmezheni do ostannogo kroku v XPath virazi Takozh voni mozhut buti vkladeni na bud yaku glibinu Shlyah viznachenij predikatami pochinayetsya v konteksti potochnogo kroku i ne zminyuye cej kontekst Vsi umovi povinni vikonatisya shob vidbulas diya Koli znachennyam predikata ye cifra vona interpretuyetsya yak test na poziciyu nomer vuzla Takim chinom p 1 vibiraye pershij p element ditinu v toj chas yak p last vibiraye ostannyu V inshim vipadkah znachennya predikata ye avtomatichno konvertovani do bulevih Koli predikat ocinyuye mnozhinu vuzliv rezultat ye true koli mnozhina vuzliv ne ye porozhnoyu Otzhe p x vibiraye ti p elementi kotri mayut atribut x Bilsh skladnij priklad a html lang en href help php 1 target vibiraye znachennya atributa target pershogo a elementa z pomizh ditej kontekstnogo vuzla sho maye svij vlasnij atribut href iz znachennyam help php za umovi sho element verhnogo rivnya html takozh maye atribut lang iz znachennyam en Posilannya na atribut elementa verhnogo rivnya v pershomu predikati ne vplivaye ni na kontekst inshih predikativ ni na misceznahodzhennya jogo samogo na danomu kroci Poryadok predikativ ye vazhlivij yaksho predikati pereviryayutsya poziciyu vuzla Kozhen predikat filtruye misceznahodzhennya vibranogo naboru vuzliv na danomu kroci po cherzi Otzhe a 1 href help php znajde vidpovidnist lishe yaksho persha a ditina kontekstnogo vuzla vidpovidaye umovi href help php v toj chas yak a href help php 1 znajde pershu a ditinu sho zadovilnyaye umovi Funkciyi ta operatori XPath 1 0 viznachaye chotiri tipi danih mnozhini vuzliv ryadki chisla logichni tipi Dostupnimi ye nastupni operatori i operatori sho vikoristovuyutsya u XPath virazah yak ce bulo opisano ranishe operator ob yednannya sho ob yednuye dvi mnozhini vuzliv bulevi operatori and i or i funkciya not arifmetichni operatori div dilennya i mod dilennya za modulem Operatori porivnyannya lt gt lt gt Biblioteka vklyuchaye standartni funkciyi bilshe 100 dlya manipulyuvannya ryadkami concat substring contains substring before substring after translate normalize space string length dlya manipulyuvannya chislami sum round floor ceiling dlya otrimannya vlastivostej vuzliv name local name namespace uri dlya otrimannya informaciyi pro kontekst obrobki position last dlya konvertuvannya string number boolean Sistemni funkciyi node set document object node set Povertaye dokument vkazanij u parametri object string format number number string string Formatuye chislo zgidno zrazku zadanomu v drugomu parametri tretij parametr vkazuye na imennij format chisla sho povinen buti vrahovanij string generate id node set Povertaye ryadok yakij ye unikalnim identifikatorom node set key string object Povertaye mnozhinu z vkazanim klyuchem analogichno funkciyi id dlya identifikatora string unparsed entity uri string Povertaye neproanalizovanij URI a yaksho takogo nemaye to povertaye pustij ryadok boolean element available string Pereviryaye chi vkazanij v parametri element chi nabir elementiv ye dostupnim parametr rozglyadayetsya yak XPath viraz boolean function available string Pereviryaye chi dostupna funkciya vkazana v parametri parametr rozglyadayetsya yak XPath viraz object system property string Parametri sho povertayut sistemni zminni mozhut buti xsl version povertaye versiyu XSLT procesora xsl vendor povertaye virobnika XSLT procesora xsl vendor url povertaye URL sho identifikuye virobnika Yaksho vikoristovuyetsya nevidomij parametr to funkciya povertaye pustij ryadok boolean lang string Povertaye true yaksho abo v danij teg abo jogo batko mayut atribut xml lang i v nomu vkazanij vidpovidnij ryadku simvol Funkciyi nad mnozhinoyu vuzliv node set node Povertaye vsi vuzli vikoristovuyut zamist u vipadkah koli stoyit zavdannya povernuti i tekstovi vuzli string text Povertaye nabir tekstovih vuzliv node set current Povertaye mnozhinu z odnogo elementa yakij ye potochnim yaksho robimo obrobku mnozhini z umovami to yedinim sposobom dotyagnutis z ciyeyi umovi do potochnogo elementa ye dana funkciya number position Povertaye poziciyu elementa v mnozhini pracyuye v cikli lt xsl for each gt number last Povertaye poziciyu ostannogo elementa v mnozhini pracyuye v cikli lt xsl for each gt number count node set Povertaye kilkist elementiv u mnozhini string name node set Povertaye povne im ya pershogo tegu v mnozhini string namespace uri node set Povertaye posilannya na URL sho viznachaye prostir imen string local name node set Povertaye im ya pershogo tegu v mnozhini bez prostoru imen node set id object Nahodit element z unikalnim identifikatorom Funkciyi nad ryadkami string string object Povertaye tekstovij zmist elementa naspravdi povertaye ob yednanu mnozhinu tekstovih elementiv na odin riven nizhche string concat string string string Ob yednuye dva i bilshe ryadki number string length string Povertaye dovzhinu ryadka boolean contains string string Povertaye true yaksho pershij ryadok mistit drugij v inshomu vipadku false string substring string number number Povertaye ryadok virizanij iz ryadka pochinayuchi z vkazanogo nomera i yaksho vkazanij drugij nomer kilkist simvoliv string substring before string string Yaksho drugij ryadok znajdenij v pershomu to povertaye pershij ryadok do pershogo vhodzhennya drugogo string substring after string string Yaksho drugij ryadok znajdenij v pershomu to povertaye pershij ryadok pislya pershogo vhodzhennya drugogo boolean starts with string string Povertaye true yaksho drugij ryadok vhodit v pochatok pershogo inakshe false boolean ends with string string Povertaye true yaksho drugij ryadok vhodit v kinec pershogo inakshe false string normalize space string Zabiraye zajvi probili a tak samo keruyuchi simvoli zaminyayuchi yih probilami string translate string string string Zaminyuye simvoli pershogo ryadka yaki zustrichayutsya v drugomu na vidpovidni poziciyi simvolami iz drugogo ryadka simvoli tretogo napriklad translate bar abc ABC poverne BAr Logichni funkciyi boolean boolean object Privede ob yekt do logichnogo tipu boolean true Povertaye true boolean false Povertaye false boolean not boolean Zaperechennya poverne true yaksho argument false i navpaki Chislovi funkciyi number number object Perevodit ob yekt v chislo number sum node set Verne sumu mnozhini kozhen teg bude peretvorenij v ryadok i z nogo vijde chislo number floor number Povertaye najbilshe chislo ale ne bilshe nizh argument number ceiling number Povertaye najmenshe chislo ale ne menshe nizh argument number round number Zaokruglyuye chislo za matematichnimi pravilami Prikladi vikoristannya Virazi mozhut stvoryuvatisya vseredini predikativ z vikoristannyam operatoriv lt lt gt i gt Bulevi virazi mozhut kombinuvatisya z duzhkami i bulevi operatori and i or yak i funkciya not opisani vishe Chislovi rozrahunki mozhut vikoristovuvati div i mod Ryadki mozhut skladatisya z bud yakih Yunikod Unicode harakteristik Napriklad viraz item price gt 2 discount vibiraye lt item gt atribut price yakih ye bilshij chislovogo znachennya yih atributu discount pomnozhenomu na dva Bezlich vuzliv mozhna ob yednati vikoristovuyuchi vertikalnu risku Mnozhini vuzliv sho zadovolnyayut odnomu abo bilshe z dekilkoh umov mozhut buti znajdeni shlyahom ob yednannya umov vseredini predikata z vikoristannyam or Nastupnij viraz v x or y w z povernetsya odin nabir vuzliv sho skladayetsya z usih v elementiv takih sho mayut x abo y ditej elementiv tak samo yak i zi vsih w elementiv sho mayut z ditej elementiv sho buli znajdeni v danomu konteksti PrikladiDanij prostij XML dokument lt xml version 1 0 encoding utf 8 gt lt wikimedia gt lt projects gt lt project name Wikipedia launch 2001 01 05 gt lt editions gt lt edition language English gt en wikipedia org lt edition gt lt edition language German gt de wikipedia org lt edition gt lt edition language French gt fr wikipedia org lt edition gt lt edition language Polish gt pl wikipedia org lt edition gt lt edition language Spanish gt es wikipedia org lt edition gt lt editions gt lt project gt lt project name Wiktionary launch 2002 12 12 gt lt editions gt lt edition language English gt en wiktionary org lt edition gt lt edition language French gt fr wiktionary org lt edition gt lt edition language Vietnamese gt vi wiktionary org lt edition gt lt edition language Turkish gt tr wiktionary org lt edition gt lt edition language Spanish gt es wiktionary org lt edition gt lt editions gt lt project gt lt projects gt lt wikimedia gt XPath virazi wikimedia projects project name povertaye atribut name dlya vsih lt project gt wikimedia editions vibiraye vsi lt edition gt vsih lt project gt wikimedia projects project editions edition language English text vibiraye adresi vsih lt project gt z anglijskoyi Vikipediyi tekst vsih edition elementiv de znachennya atributa language ye English wikimedia projects project name Wikipedia editions edition text vibiraye adresi vsih Vikipedij tekst vsih edition elementiv sho isnuyut pid project elementom iz znachennyam Wikipedia atributa name RealizaciyiInstrumenti komandnogo ryadka XMLStarlet xmllint libxml2 RaptorXML Server vid Altova sho pidtrimuye XPath 1 0 2 0 i 3 0 ActionScript C C libxml2 Sedna XML Database VTD XML Xalan XQilla 18 travnya 2015 u Wayback Machine Delphi Free Pascal XPath ye vklyuchenij v biblioteku za zamovchuvannyam Realizaciyi dlya dviguniv baz danih Virtuoso Universal Server OpenLink Virtuoso Java Saxon XSLT pidtrimuye XPath 1 0 XPath 2 0 i XPath 3 0 tak samo yak i XSLT 2 0 XQuery 3 0 BaseX takozh pidtrimuye XPath 2 0 and XQuery VTD XML Sedna XML Database XML DB i patentovanij QuiXPath 10 bereznya 2014 u Wayback Machine realizaciya potokovoyi politiki vidkritogo kodu Innovimax Paket Java buv chastinoyu Java standartnoyi versiyi pochinayuchi z Java 5 Tehnichno ce XPath API a ne realizaciya XPath i ce dozvolyaye programistu mozhlivist vibrati konkretnu realizaciyu sho vidpovidaye interfejsu JavaScript jQuery XPath plagin 9 lipnya 2014 u Wayback Machine zasnovana na politici vidkritogo kodu realizaciyi XPath 2 0 v JavaScript 11 chervnya 2018 u Wayback Machine NET Framework V prostorah imen System Xml i System Xml XPath Sedna XML Database Perl XML LibXML libxml2 PHP Sedna XML Database Python ElementTree XML API 15 bereznya 2015 u Wayback Machine v Python Standard Library vklyuchaye obmezhenu pidtrimku 15 bereznya 2015 u Wayback Machine dlya XPath viraziv libxml2 Amara Sedna XML Database lxml Ruby libxml2 Nokogiri Scheme Sedna XML Database SQL MySQL pidtrimuye chastinu XPath z versiyi 5 1 5 i dali PostgreSQL pidtrimuye XPath i XSLT z versiyi 8 4 i dali Tcl zabezpechuye duzhe povne sumisne i shvidke vprovadzhennya XPath v CVikoristannya v movah shemXPath vse chastishe vikoristovuyetsya shob virazhati obmezhennya sho nakladayutsya movami shem dlya XML V danij moment standart ISO mova shem Schematron zapochatkuvala pidhid Potokova pidmnozhina XPath vikoristovuyetsya v XML Schema W3C 1 0 dlya virazhennya unikalnosti ta klyuchovih obmezhen U XSD 1 1 vikoristannya XPath ye rozshirenim dlya pidtrimki umovnogo prisvoyuvannya tipu na osnovi znachen atributiv i dozvolu dovilnim logichnim tverdzhennyam buti ocinenimi na osnovi vmistu elementiv XForms vikoristovuye XPath shob pov yazati tipi iz znachennyami Pidhid navit znajshov zastosuvannya v ne XML dodatkah takih yak analizator vihidnogo kodu dlya Java nazvanij PMD spochatku Java kod peretvoryuyetsya v DOM derevo rozboru a potim XPath pravila viznachayutsya nad derevom Primitki PDF 4 lyutogo 2012 Arhiv originalu PDF za 24 kvitnya 2013 Procitovano 13 travnya 2015 Bergeron Randy 31 zhovtnya 2000 SQL Server Magazine Arhiv originalu za 26 lipnya 2010 Procitovano 13 travnya 2015 October 2012 PDF Arhiv originalu PDF za 14 kvitnya 2021 Procitovano 13 travnya 2015 XPath 2 0 pidtrimuye atomni tipi viznacheni v XML Schema yak vbudovani i takozh mozhe importuvati tipi zi shemi viznacheni koristuvachem Arhiv originalu za 9 travnya 2015 Procitovano 13 travnya 2015 What s new in 3 0 XSLT XPath XQuery plus XML Schema 1 1 3 kvitnya 2013 u Wayback Machine by Michael Kay Saxonica Arhiv originalu za 17 kvitnya 2008 Procitovano 21 travnya 2015 Arhiv originalu za 4 listopada 2018 Procitovano 7 listopada 2018 a href wiki D0 A8 D0 B0 D0 B1 D0 BB D0 BE D0 BD Cite web title Shablon Cite web cite web a Obslugovuvannya CS1 Storinki z tekstom archived copy yak znachennya parametru title posilannya Arhiv originalu za 23 travnya 2015 Procitovano 21 travnya 2015 a href wiki D0 A8 D0 B0 D0 B1 D0 BB D0 BE D0 BD Cite web title Shablon Cite web cite web a Obslugovuvannya CS1 Storinki z tekstom archived copy yak znachennya parametru title posilannya Arhiv originalu za 19 bereznya 2015 Procitovano 21 travnya 2015 Div takozhXML XLink XPointer XSL XSLT XSL FOPosilannyaRosijskij pereklad specifikaciyi XML Path XPath versiyi 1 0 26 veresnya 2007 u Wayback Machine Specifikaciya XPath 2 0 2 listopada 2007 u Wayback Machine Sho novogo v XPath 2 0 9 zhovtnya 2007 u Wayback Machine Parser sajtiv na Xpath Urok 1 3 listopada 2012 u Wayback Machine Ukrayinska Vtilennya XPath u JavaScript 11 zhovtnya 2007 u Wayback Machine Pidruchnik z chislennimi prikladami 2 listopada 2007 u Wayback Machine TinyXpath Vtilennya XPath na c 13 zhovtnya 2007 u Wayback Machine XPath Pidruchnik 10 serpnya 2011 u Wayback Machine Nimecka Nimecka nedostupne posilannya z chervnya 2019 XPath Achsen Diagramme nedostupne posilannya z zhovtnya 2019 Nimecka XPath v JavaScript 27 travnya 2015 u Wayback Machine Rosijska