Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник_Палагута.doc
Скачиваний:
11
Добавлен:
13.11.2019
Размер:
6.6 Mб
Скачать

Тема 11. Мова xPath, мова xslt

11.1. Мова xPath

XML Path Language (мова XML Path, XPath) розроблено для того, щоб надати можливість обирати окремі частини XML – документа. На теперішній час розроблено дві рекомендації концерну W3C щодо мови XPath – версія 1.0 (рекомендація від 16 листопада 1999 р.) і версія 2.0 (рекомендація від 23 січня 2007 р. http://www.w3.org/TR/2007/REC-xpath20-20070123).

Модель даних XPath подає більшість частин XML – документа у вигляді дерева вузлів. Кореневим вузлом є власно сам документ, він є вершиною ієрархії вузлів, вузли елементів є дочірніми по відношенню до нього. Кожний елемент XML – документа є вузлом. Кореневому вузлу підпорядковані також вузли коментарів і вузли команд обробки. Текстові вузли є текстовим умістом елементів, простори імен подаються вузлами просторів імен. Рядкове значення вузла елемента є результатом конкатенації (об’єднання) значень усіх текстових вузлів, які є його нащадками, у тому порядку, в якому вони розташовані в документі. Кожний атрибут подається вузлом атрибуту. Вузол елемента, з яким пов’язаний вузол атрибуту, називається батьківським по відношенню до вузла атрибута. У XPath атрибути не є дочірніми по відношенню до батьківських елементів, звернення до них потрібно виконувати по вісі атрибутів. У моделі даних не подається оголошення документа та оголошення типу документа.

Для вибору частини документа потрібно визначити вираз, що повертає певну множину вузлів, який називається шляхом місцезнаходження (location path). Цей вираз може бути абсолютним і описувати шлях пошуку починаючи зі стартової точки – кореневого вузла, або відносним – описувати шлях відносно місця старту – так званого контексту. Контекстним вузлом (context node) є вузол, у якому можна так сказати знаходиться аналізатор. Це конкретний вузол, який включає у тому числі позицію і розмір контексту – тобто це конкретний вузол у дереві вузлів.

Вираз (або оператор XPath) складається з етапів локалізації (location steps) – конструкцій, які надають змогу визначити послідовність вибору частини документі. Етапи локалізації відокремлюються у виразі символом /, включають такі складові:

axis_name::node_test[predicates]

axis_name – ім’я типу осі, що визначає напрям пошуку вузлів.

node_test – тести вузлів, дозволяють обирати з певної осі конкретні вузли або елементи, можуть приймати значення: * - усі вузли, ім’я вузла тощо.

predicates – надають можливість визначити умови відбору.

Усього в XPath існує 13 видів осів, найбільш поширені представлені у табл. 11.1.

Таблиця 11.1 – Вісі XPath

Вісь

Назва

Опис

Приклад

1

2

3

4

child

Дочірня вісь

Обирає вузли, які є безпосередніми нащадками певного вузла, використовується за замовчуванням

child::students/child::student/child::birthday – обираються усі елементи birthday за напрямом: дочірні елементи кореневого вузла students, дочірні елементи student, далі дочірні елементи birthday (оскільки вісь child використовується за замовчуванням можна було визначити students/student/birthday)

attribute

Вісь атрибутів

Використовується для вибору атрибутів, пов’язаних з вузлом елемента (можна заміняти ім’я осі на дві двокрапки та @)

child::students/child::student/attribute::number – обирає всі атрибути number елемента student (теж саме: students/student/@number)

descendant

Вісь нащадків

Обирає всіх нащадків певного вузла

students/student/descendant::* - обираються усі гілки елементів нижче елементів student

following-sibling

Наступний вузол того ж рівня

Використовується для вибору вузлів того ж рівня нижче по дереву вузлів

//name/following-sibling::* - обирає елементи birthday, які знаходяться на тому ж рівні, що і елементи name, але нижче по дереву вузлів

Продовження табл. 11.1

1

2

3

4

preceding-sibling

Попередній вузол того ж рівня

Використовується для вибору вузлів того ж рівня нижче по дереву вузлів

//last_name/preceding-sibling::* - обираються вузли first_name як такі, що знаходяться на тому ж рівні, що і last_name вище по дереву вузлів

following

Вісь наступних вузлів

Обирає всі наступі вузли у порядку розташування їх у документі

//name/following::* - обирає всі елементи після першого елемента name

parent

Батьківська вісь

Обирає вузол, батьківський по відношенню до контекстного вузла

//name/parent::* - обирає всі батьківські елементи елементів name – елементи student

ancestor

Вісь батьків

Обирає вузол, батьківський по відношенню до контекстного вузла, батьківський по відношенню до батьківського і далі до кореневого вузла

//name/ancestor::* - обирає всі батьківські елементи елементів name до кореневого вузла – елементи student і students

descendant-or-self

Вісь нащадків і себе

Включає всі вузли – нащадки і контекстний вузол

//name/descendant-or-self::* - обирає елемент name і всіх його нащадків

ancestor-or-self

Вісь батьків і себе

Включає всі батьківські вузли і контекстний вузол

//name/ancestor-or-self ::* - обирає елемент name і всіх його батьків до вершини дерева

self

Власна вісь

Обирає контекстний вузол

При визначенні тестів вузлів можна використовувати крім імені вузла і символу * також такі типи тестів вузлів:

node() - відповідає всім вузлам певної осі, у тому числі вузлам елементів, текстовим вузлам, вузлам атрибутів тощо;

text() - відповідає всім текстовим вузлам певної осі;

префікс:* - обирає вузли у певному просторі імен, якому відповідає префікс;

comment() – відповідає вузлам коментарів визначеної осі.

Приклади застосування різних типів тестів вузлів:

//name/descendant::node()

- обирає елементи і їх уміст, які є нащадками елемента name: first_name і last_name

//name/descendant::text()

- обирає текстовий уміст елементів, які є нащадками елемента name: first_name і last_name

//node()

- обирає все дерево вузлів документа, включаючи елементи і їх текстовий уміст

У виразах XPath можна також використовувати функції множин вузлів:

position() – повертає вузол з відповідним порядковим номером (функція за замовчуванням);

count() – повертає кількість вузлів.

Наприклад,

book[position()=1] – звернення до першого елемента book

Оскільки функция position() використовується за замовчуванням, результат не зміниться, якщо звернення записати так:

book[1]

Для засвоєння правил формування виразів XPath доцільно використовувати програму, яка працює з XML – документами із застосуванням мови XPath. До цих програм належить достатньо проста і розповсюджувана безкоштовно програма XPath Visualiser. У вікні цієї програми можна розчинити XML – документ, ввести у поле XPath expression вираз XPath, для вибору відповідних вузлів у дереві документа натиснути на кнопку Select Nodes. У результаті програма виділяє у дереві документа вузли, що відповідають XPath виразу. Вікно програми XPath Visualiser наведено на рис. 11.1.

Рисунок 11.1 - Вікно програми XPath Visualiser