Современные методы репрезентации данных Масленников Вадим Олегович Лектор:

advertisement
Современные методы
репрезентации данных
Лектор:
старший преподаватель кафедры ИТ
Масленников Вадим Олегович
Лекция 5
 XPath
 Введение в XSLT
XPath — язык
для навигации внутри документа
 Назначение XPath:
выбирать из документа узлы или значения, которые нужны для
совершения с ними каких-л. операций (напечатать, подсчитать,
преобразовать…)
 Основные понятия:

узел (node) документа


атомарное значение (atomic value)


узлами являются не только элементы, но и их атрибуты (attribute
node), текстовое содержимое (text node) и т. д.
число, строка, дата или булево значение
последовательность (sequence)
Выражение на XPath (путь) выбирает в документе
последовательность узлов или атомарных значений,
отвечающих заданным условиям

Последовательность может состоять из 0 или 1 члена
XPath — основные элементы
 Основные понятия:







корень документа
элементы
атрибуты
абсолютный и относительный путь
родитель-дети
предки-потомки
сиблинги (узлы одного уровня)
XPath — простые выражения
 Простые выражения





путь от корня (абсолютный) начинается с /
фрагмент пути между двумя / — шаг по дереву (по
умолчанию — от корня к листьям)
в результат входят все узлы, подходящие под
описанный путь
/booklist ; /booklist/book/author
путь без / (относительный) считается не от корня, а от
текущей позиции
book/author
//
любое количество шагов
//book ; //author ; /booklist//author
XPath — узлы и аттрибуты
 Простые выражения






. (точка)
Текущий узел
.. (две точки) Родительский узел
../title
(путь от book/author к book/title)
*
Узел с любым именем
/booklist/*
все дети booklist
/booklist/*/*
все внуки booklist
@
Атрибут
//book/@lang атрибут по имени lang
//book/@*
все атрибуты
node() Любой узел
text()
Узел с текстовым содержимым
XPath — узлы




/library/book/chapter/* выбор всех
дочерних узлов любого узла chapter
каждого узла book в library
//book/* выбор всех дочерних узлов всех
book
/*/*/*/paragraph выбор всех paragraph
которые имеют трех родителей
//* выбор всех элементов документа
XPath — аттрибуты
 Аттрибут можно выбирать по его имени или по узлу,
котором он находится




Аттрибут состоит из имени и значения, например в
<chapter num="5">, имя аттрибута num, значение 5
Для выбора аттрибута по имени используется префикс
@
@num выбирает аттрибут с именем num
//@* выбирает ВСЕ аттрибуты в документе
 Для выбора аттрибута по узлу необходимо его имя с
префиксом заключить в квадратные скобки

//chapter[@num] выбирает каждый chapter элемент в
любом месте документа, который содержит аттрибут
num
XPath — аттрибуты. примеры
 //chapter[@num] выбирает все chapter
узлы с аттрибутом num
 //chapter[not(@num)] выбирает все
chapter узлы, которые не содержат
аттрибута num
 //chapter[@*] выбирает все chapter узлы,
которые содержат любые аттрибуты
 //chapter[not(@*)] выбирает все chapter
узлы, которые не содержат аттрибутов
XPath — аттрибуты. значения
 //chapter[@num='3'] выбирает все chapter узлы с
аттрибутом num равным 3
 Функция normalize-space() используется для
отсекания правых и левых пробелов в значении
при сравнении, например

//chapter[normalize-space(@num)="3"]
XPath — условия и выражения
 Выражения с условием (предикатом)




условие на номер узла в последовательности
book[2] ; book[last()] ; book[position()<3]
условие на значение дочерних элементов
(путь отсчитывается от текущей позиции)
book[city="Москва"]
book[price>250]
условие на значение атрибутов
//book[@lang="rus"]/title
Условие […] применяется к тому узлу, после которого
стоит
book[2]/author vs. book/author[2]
XPath — арифметические выражения
+
*
div
mod
сложение
вычитание
умножение
(не / !!!) деление
остаток от деление
XPath — проверка на еквивалентность
=
“равно”
(Не == !!!)
 !=
“не равно”
 value = node-set истина, если node-set
содержит любой узел, равный value
 value != node-set истина, если node-set
содержит любой узел, не равный value
 Замечание: value=node-set и value!=node-set
могут быть истины одновременно !!!
XPath — логические операторы
 and
 or
Пример: count = 0 or count = 1
 not()(функция)

 Для числовых сравнений:
 < “меньше чем”
Иногда необходимо использовать <
 <= “меньше чем или равно” Иногда необходимо использовать <=
Аналогично
 > или >
 >= или >=
XPath — некоторые функции

count(elem) количество выбраных узлов


name() возвращает имя узла


Пример: //*[name()='section'] аналогично //section
starts-with(arg1, arg2) проверяет начинается
ли arg1 с arg2


Пример: //chapter[count(section)=1] selects
chapters с строго одним дочернем узлом section
Пример: //*[starts-with(name(), 'sec']
contains(arg1, arg2) проверяет, содержит ли
arg1 в себе arg2

Пример: //*[contains(name(), 'ect']
XPath — оси
 Оси (axes, ед.ч. axis)


Оси задают «направление движения»
в конкретном шаге
В полном виде шаг выглядит так:



… /имя_оси::узел[условие]/ …
… /sibling::book[25]/ …
Ось по умолчанию — child

/booklist/child::book = /booklist/book
XPath — оси
 Оси (axes)
1.
2.
3.
4.
5.
6.
7.
8.
child
parent
sibling
self
ancestor
ancestor-or-self
descendant
descendant-or-self
9.
10.
11.
12.
13.
14.
preceding
following
preceding-sibling
following-sibling
attribute
namespace
XPath — оси. пример
Начиная от текущего узла, оси self, preceding, following,
ancestor, и descendant формируют наборы всех узлов (не
рссматривая пространства имен и аттрибуты)
<library>
<book>
<chapter/>
<chapter>
<section>
<paragraph/>
<paragraph/>
</section>
</chapter>
<chapter/>
</book>
<book/>
</library>
 //chapter[2]/self::*
 //chapter[2]/preceding::*
 //chapter[2]/following::*
 //chapter[2]/ancestor::*
 //chapter[2]/descendant::*
XPath — оси. дерево
То же, только в вид синтаксического дерева
library
ancestor
following
book[2]
book[1]
preceding
chapter[1]
self
chapter[2]
chapter[3]
section[1]
descendant
paragraph[1]
paragraph[2]
XPath — оси. примеры
 //book/descendant::* все потомки каждого book
 //book/descendant::section все потомки section
каждого book
 //parent::* любой элемент, являющийся
родителем
 //section/parent::* любой родитель узла section
//parent::chapter любой узел chapter который
евляется родителем (т.е. имеет дочерние узлы)
 /library/book[3]/following::* каждый узел book в
библиотеке по номеру больше 3
XPath — оси. Другие оси
 ancestor-or-self:: родители + текущий узел
descendant-or-self:: потомки + текущий узел
attribute:: все аттрибуты текущего узла
namespace:: все пространсва имен текущего узла
preceding:: все перед текущим узлом в XML
документе
 following-sibling:: все узлы после текущего на
этом же уровне
 preceding-sibling:: все узлы перед текущем на
этом же уровне





Замечание: preceding-sibling:: и following-sibling::
неприменимы к аттрибутам и пространствам имен
XPath — оси. Сокращения
(none)
можно заменить на
child::
@
можно заменить на
attribute::
.
можно заменить на
self::node()
.//X
можно заменить на
self::node()/descendant-or-self::node()/child::X
..
можно заменить на
parent::node()
../X
можно заменить на
parent::node()/child::X
//
можно заменить на
/descendant-or-self::node()/
//X
можно заменить на
/descendant-or-self::node()/child::X
 Введение в XSLT
Преобразования XML-данных
(XSLT)
 XML ничего сам не делает. Его задача — описывать
структуру данных
 Чтобы с этими данными что-то сделать, используются
специальные средства
 XSL — eXtensible Stylesheet Language


XSLT: XSL Transformations
XSLT выполняет преобразования данных
XSL-FO: XSL Formatting Objects
XSL-FO форматирует данные для печати
Преобразования XSLT
Преобразования XSLT
 Что умеет делать XSL?




Отбирать (фильтровать) определённые данные
из целого документа
Упорядочивать данные независимо от исходного
порядка
Менять исходную структуру данных
(до неузнаваемости )
Преобразовывать XML




в другой XML
в правильный HTML
в другие текстовые форматы (RTF,PDF,DOC)
и графические тоже (svg)
Преобразования XSLT
 В отличие от многих языков программирования (BASIC,
Pascal, C,…), XSL — не процедурный язык, а
функционально-декларативный.
Программа на XSL (transformation, она же stylesheet)
сообщает не что нужно делать (последовательность
операций),
а что должно получиться.
Преобразования XSLT
 Программа на XSL состоит из шаблонов
(templates), которые сопоставляются
с различными частями дерева XML на входе
и выдают некоторый выход.
Что дальше ???
 XSLT - eXtensible Stylesheet Language
Transformations
Вопросы ???
Download