Слайд 2Пространства имён
(Namespaces)
Представьте, что в одном XML-документе определены такие элементы:
name, age, company, position
А

в другом такие:
name, border, size, position
Что случится, если нам понадобится объединить данные из этих документов?
Парсер запутается в элементах name и position.
К какому типу их отнести?
Слайд 3Пространства имён
(Namespaces)
Пространства имён позволяют разделять наборы элементов, относящихся к разным объектам. Например:

name, age, company, position можно отнести к пространству имён «people»,
а name, border, size, position — к пространству имён «image»
Пространства имён задаются ссылками URI (Uniform Resource Identifier).
Например, URI может иметь вид URL (гиперссылки):
http://www.philol.msu.ru/people
NB! В данном случае URL — лишь форма задания уникального имени. По такому адресу в сети может ничего не существовать.
Слайд 4Пространства имён
(Namespaces)
Пространства имён, используемые в документе, должны быть объявлены
объявление можно сделать в

корневом элементе
или в том элементе, где данное пространство имён используется
каждому пространству имён (URI) даётся краткое обозначение
xmlns:image="http://www.philol.msu.ru/photo">
Это краткое обозначение добавляется к имени элемента как префикс (отделяется двоеточием)
У каждого элемента может быть только один префикс
pers:name, pers:age, pers:company, pers:position
image:name, image:border, image:size, image:position
Слайд 5XML
eXtensible Markup Language
Пространства имён (Namespaces)
Язык навигации внутри
XML-документа (XPath)

Слайд 6XPath — язык
для навигации внутри документа
Назначение XPath:
выбирать из документа узлы или значения,

которые нужны для совершения с ними каких-л. операций (напечатать, подсчитать, преобразовать…)
Основные понятия:
узел (node) документа
узлами являются не только элементы, но и их атрибуты (attribute node), текстовое содержимое (text node) и т. д.
атомарное значение (atomic value)
число, строка, дата или булево значение
последовательность (sequence)
Выражение на XPath (путь) выбирает в документе последовательность узлов или атомарных значений, отвечающих заданным условиям
Последовательность может состоять из 0 или 1 члена
Слайд 7XPath — навигация внутри документа
Основные понятия:
корень документа
элементы
атрибуты
абсолютный и относительный путь
родитель-дети
предки-потомки
сиблинги (узлы

одного уровня)
Слайд 8XPath — навигация внутри документа
Простые выражения
путь от корня (абсолютный) начинается с /
фрагмент

пути между двумя / — шаг по дереву (по умолчанию — от корня к листьям)
в результат входят все узлы, подходящие под описанный путь
/booklist ; /booklist/book/author
путь без / (относительный) считается не от корня, а от текущей позиции
book/author
// любое количество шагов
//book ; //author ; /booklist//author
Слайд 9XPath — навигация внутри документа
Простые выражения
. (точка) Текущий узел
.. (две

точки) Родительский узел
../title (путь от book/author к book/title)
* Узел с любым именем
/booklist/* все дети
/booklist/*/* все внуки
@ Атрибут
//book/@lang атрибут по имени lang
//book/@* все атрибуты
node() Любой узел
text() Узел с текстовым содержимым
Слайд 10XPath — навигация внутри документа
Выражения с условием (предикатом)
условие на номер узла в

последовательности
book[2] ; book[last()] ; book[position()<3]
условие на значение дочерних элементов
(путь отсчитывается от текущей позиции)
book[city="Москва"]
book[price>250]
условие на значение атрибутов
//book[@lang="rus"]/title
Условие […] применяется к тому узлу, после которого стоит
book[2]/author vs. book/author[2]
Слайд 11XPath — навигация внутри документа
Оси (axes, ед.ч. axis)
Оси задают «направление движения»
в

конкретном шаге
В полном виде шаг выглядит так:
… /имя_оси::узел[условие]/ …
… /sibling::book[25]/ …
Ось по умолчанию — child
/booklist/child::book = /booklist/book
Слайд 12XPath — навигация внутри документа
Оси (axes)
child
parent
sibling
self
ancestor
ancestor-or-self
descendant
descendant-or-self
preceding
following
preceding-sibling
following-sibling
attribute
namespace

Слайд 13XPath — навигация внутри документа
Запишите полностью выражения
/books//author
//book[3]/*
..[name()='author']/@lang
..[@lang='rus']/title
./@*
/books/*/city
![XPath — навигация внутри документа Запишите полностью выражения /books//author //book[3]/* ..[name()='author']/@lang ..[@lang='rus']/title ./@* /books/*/city](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/416536/slide-12.jpg)
Слайд 14Преобразования XML-данных
(XSLT)
Как мы помним, XML ничего сам не делает. Его задача —

описывать структуру данных
Чтобы с этими данными что-то сделать, используются специальные средства
XSL — eXtensible Stylesheet Language
XSLT: XSL Transformations
XSLT выполняет преобразования данных
XSL-FO: XSL Formatting Objects
XSL-FO форматирует данные для печати
Слайд 15Преобразования XML-данных
(XSLT)

Слайд 16Преобразования XML-данных
(XSLT)
Что умеет делать XSL?
Отбирать (фильтровать) определённые данные из целого документа
Упорядочивать данные

независимо от исходного порядка
Менять исходную структуру данных
(до неузнаваемости)
Преобразовывать XML
в другой XML
в правильный HTML
в другие текстовые форматы
Слайд 17Преобразования XML-данных
(XSLT)
В отличие от многих языков программирования (BASIC, Pascal, C,…), XSL —

не процедурный язык, а декларативный.
Программа на XSL (transformation, она же stylesheet) сообщает не что нужно делать (последовательность операций),
а что должно получиться.