Языки описания информации презентация

Содержание

Язык XPath XML Path Language 2.0

Слайд 1Языки описания информации
Лекция 4.
Кафедра «ОСУ»
Весенний семестр 2010/2011 уч. года
XPath


Слайд 2Язык XPath XML Path Language 2.0


Слайд 3Язык XPath
Язык XPath используется для идентификации различных частей XML документов.
Язык

XPath использует синтаксис отличный от XML синтаксиса.
XPath позволяет писать выражения, ссылающиеся на
первый элемент «person»,
седьмой дочерний элемент третьего элемента «person»,
атрибут ID первого элемента «person», содержащий строку «Фред Джоунс»,
все инструкции обработки xml-stylesheet в прологе документа и т. д.
С помощью выражений на языке XPath можно задавать узлы:
по положению,
по относительному положению,
по типу,
по содержимому
и другим критериям.
В выражениях XPath могут также использоваться числа, строки, логические операции.
Это позволяет в таблицах стилей XSLT выполнять простейшие арифметические вычисления для нумерации и создания перекрестных ссылок.
Строковые операции в XPath позволяют XSLT выполнять такие задачи, как перевод заголовка главы в верхний регистр в шапке при сохранении смешанного регистра в ссылке в основном тексте.



Слайд 4Использование XPath
XPath выражения используются:
в XSLT преобразованиях с помощью XPath выражений выполняется

поиск и выбор определенных элементов входного документа для их последующего копирования в выходной документ или дальнейшей обработки;
в языке XPointer выражения на языке XPath используются для идентификации определенной точки или части XML документа, на который ссылается язык XLink.


Слайд 5Древовидная структура XML документа
XML документ представляет собой дерево, состоящее из узлов.


Некоторые узлы могут содержать другие узлы.
Один корневой узел в конечном счете включает в себя все остальные узлы.
XPath – это язык для выбора узлов и наборов узлов этого дерева.
С точки зрения XPath существует семь типов узлов:
Корневой узел
Узлы элементов
Текстовые узлы
Узлы атрибутов
Узлы комментариев
Узлы инструкций обработки
Узлы пространств имен
В этом списке нет таких конструкций, как секции CDATA, ссылки на сущности и объявления типа документа. XPath работает с XML-документом уже после того, как они объединены с документом.
Например, XPath не сможет идентифицировать первую секцию CDATA в документе или различить, включено ли данное значение атрибута непосредственно в начальный тег исходного элемента или было взято как значение по умолчанию из объявления атрибута в DTD.


Слайд 6Пример XML документа


#FIXED "simple”
xmlns:xlink CDATA #FIXED "http://www.w3.org/1999/xlink">

]>



Алан Тьюринг


специалист по информатике
математик
криптограф




Ричард M Фейнман

физик
Игра на бонгах




Слайд 7Древовидная структура XML документа


Слайд 8Взаимосвязи между узлами
Parent (родитель) – узел «родителя» содержит под-узлы «ребенка».
Children (ребенок)
Siblings

(братья) – под-узлы имеющие одного «родителя».
Descendants (потомки) – все под-узлы ниже по иерархии текущего узла.
Ancestors (предки) – все под-узлы выше по иерархии текущего узла.


Слайд 9Parent (родитель)
Каждый элемент и атрибут имеет одного «родителя»
Например:

Harry Potter

J K. Rowling
2005
29.99

Элемент “book” является родителем узлов: title, author, year и price.



Слайд 10Children (ребенок)
Элемент может не иметь, либо иметь одного или несколько «детей»

(children).
Например:

Harry Potter
J K. Rowling
2005
29.99

Элементы title, author, year и price являются «детьми» (children) элемента «book».

Слайд 11Siblings (братья)
Узлы, которые имеют одного и того же «родителя» (parent).
Например:


Harry

Potter
J K. Rowling
2005
29.99

 
Все элементы title, author, year и price являются «братьями» (siblings).




Слайд 12Ancestors (предки)
Узлы «родители», их «родители» и т.д.
Например:


Harry Potter
J K.

Rowling
2005
29.99

 
предками элемента «title» являются элементы «book» «bookstore».

Слайд 13Descendants (потомки)
Узлы «ребенок», их «дети» и т.п.
Например:


Harry Potter
J K.

Rowling
2005
29.99

 

потомками элемента bookstore являются элементы: book, title, author, year и price.



Слайд 14Особенности модели данных XPath
Корневой узел не совпадает с корневым элементом.
Корневой узел

дерева содержит в себе весь документ, в том числе корневой элемент, а также комментарии и инструкции обработки, находящиеся перед начальным тегом корневого элемента или после конечного тега корневого элемента.
В приведенном примере корневой узел содержит инструкцию обработки xml-stylesheet и корневой элемент people.
Модель данных XPath включает не все, что есть в документе.
В частности, XML-объявление и DTD не доступны через XPath.
Однако, если DTD предоставляет значения по умолчанию для каких-либо атрибутов, XPath распознает эти атрибуты.
Например, элемент homepage имеет атрибут xlink:type, предоставляемый DTD.
Разрешаются все ссылки на анализируемые сущности.


Слайд 15
Элемент homepage имеет атрибут xlink:type, предоставляемый DTD.
Также разрешаются все ссылки

на анализируемые сущности.
Ссылки на сущности, символьные ссылки и секции CDATA не различимы, хотя все данные, которые в них содержатся, доступны.
Например, XSLT не позволит выделить жирным шрифтом весь текст в секциях CDATA, потому что XPath не знает, какой текст является частью секции CDATA, а какой не является.
И наконец, атрибуты xmlns представляются в виде узлов пространств имен.
Они не рассматриваются как узлы атрибутов, хотя анализатор, не знающий о пространствах имен, увидит их как атрибуты.
Кроме того, эти узлы присоединяются к каждому узлу элементов и атрибутов, относящемуся к области действия объявления, а не к одному только узлу того элемента, в котором объявлено пространство имен.



Слайд 16
Ссылки на сущности, символьные ссылки и секции CDATA не различимы, хотя

все данные, которые в них содержатся, доступны.
Например, XSLT не позволит выделить жирным шрифтом весь текст в секциях CDATA, потому что XPath не знает, какой текст является частью секции CDATA, а какой не является.
Атрибуты xmlns представляются в виде узлов пространств имен.
Они не рассматриваются как узлы атрибутов, хотя анализатор, не знающий о пространствах имен, увидит их как атрибуты.
Эти узлы присоединяются к каждому узлу элементов и атрибутов, относящемуся к области действия объявления, а не к одному только узлу того элемента, в котором объявлено пространство имен.


Слайд 17Маршруты поиска
Самыми полезными выражениями XPath являются маршруты поиска.
Типы маршрутов поиска
сокращенные

маршруты поиска:
простые маршруты:
корневой маршрут - указывает на корневой узел документа (/);
маршруты к дочерним элементам - одиночное имя элемента (имя-элемента);
маршруты к атрибутам - для выбора определенного атрибута элемента (@имя-атрибута);
подстановочные элементы (*, node(), @*);
составные маршруты (/,//, “.”, “..”):
полные маршруты поиска.


Слайд 18
Маршрут поиска использует как минимум один шаг для идентификации набора узлов

документа.
Этот набор может быть пустым, содержать один узел или содержать несколько узлов.
Узел может быть
корневым узлом,
узлом элементов,
узлом атрибутов,
узлом пространств имен,
узлом текста,
узлом комментариев,
узлом инструкцией обработки
Или любой их комбинацией.


Слайд 19Описание выражений
/ - Selects the document root node (absolute path) node

Selects the node (relative path)
// - Selects all descendent nodes of the current node that match the selection
. - Selects the current node
.. - Selects the parent of the current node
@ - Selects attribute nodes


Слайд 20Пример XML




particular book -->
Harry Potter
79.99


Learning XML
69.95


Intro. to Databases
39.00



Слайд 21XPath пути к элементам
Selects the document root node - /

или /.
Selects the bookstore element node /bookstore или ./bookstore
Selects all book element nodes /bookstore/book или //book
Selects all price element nodes - bookstore/book/price или //price
Selects all lang attribute nodes //@lang
Selects the document root node ././.
Selects all the book element nodes /bookstore//@lang/../..
Selects the empty set ./book/tilte/@lang

Слайд 22XPath пути к элементам (2)
Selects text nodes of all price element

nodes //price/text()
Select all child nodes of book element nodes /bookstore/book/*
Select all comment nodes //comment()
Select all nodes except attribute nodes //node()
Select all attribute nodes //@*
Selects empty set /bookstore/book/text()
Select all attribute nodes which are descendant of book element nodes /bookstore/book/title/..//@*

Слайд 23Синтаксис и семантика XPath выражений
Синтаксис
locationStep1/locationStep2/…
где: locationStep = axis::nodeSelector[predicate]
Семантика
Найти все вершины, описанные с

помощью locationStep1
Find all nodes specified by axis::nodeSelector
Select only those that satisfy predicate
Для каждой такой вершины N:
Find all nodes specified by locationStep2 using N as the current node
Объединить их
For each node returned by locationStep2 do the same using locationStep3, …

Слайд 24Полный набор осей
self ‐‐ the context node itself
child ‐‐ the children

of the context node
descendant ‐‐ all descendants (children+)
parent ‐‐ the parent (empty if at the root)
ancestor ‐‐ all ancestors from the parent to the root
descendant‐or‐self ‐‐ the union of descendant and self
ancestor‐or‐self ‐‐ the union of ancestor and self
following‐sibling ‐‐ siblings to the right
preceding‐sibling ‐‐ siblings to the left
following ‐‐ all following nodes in the document, excluding descendants
preceding ‐‐ all preceding nodes in the document, excluding ancestors
attribute ‐‐ the attributes of the context node

Слайд 26
Selects book element nodes /descendant::book
Select all isbn attribute nodes //book/attribute::isbn
Select title

and price element nodes //book/title | //book/price
Selects empty set /child::book
Selects the second book element node /bookstore/book/following-sibling::book
Select all nodes (except attributes) that are descendants of the bookstore element node /bookstore/node()/descendant-or-self::node()
Select all nodes (except attributes) after the first title node /descendant::title/@*/parent::title/following::node()

Слайд 27Предикаты
[position() op #], [last()]
op: =, !=, , =
test position

among siblings
[attribute::name op “value"]
op: =, !=, <, >, <=, >=
test equality of an attribute
[axis:nodeSelector]
test pattern

Слайд 28Примеры использования предикатов
Selects the first book element that is the child

of the bookstore element. /bookstore/book[1] или /bookstore/book[position()=1]
Select book element nodes which has a child title element with lang attribute value no equal to “eng”. /bookstore/book[child::title/attribute::lang!="eng"]
Selects the second to last book element /bookstore/book[last()-1]
Selects all nodes which have an attr //node()[@*]
Selects nodes with an attribute named lang or has a child element named price - //node()[@lang or child::price]
Selects all the title element of all book elements with a price greater than 35.00 /bookstore/book[price>35.00]/title
Select the empty set /bookstore/book[position()>1 and attribute::isbn="111111"]
Select the last title element node of all book element nodes /bookstore/book/title[last()]

Слайд 29Упражнение на XPath выражения
Задача: найти title и isbn книг, которые не

fiction и стоят (цена, price) более чем 50 USD.





Harry Potter
79.99


Learning XML
69.95


Intro. to Databases
39.00


Ответ:
/bookstore/book[attribute::cat!="fiction" and price>50.00]/title |
/bookstore/book[attribute::cat!="fiction" and price>50.00]/@isbn

Слайд 30Упражнение на XPath выражения
Задача: find average price of textbooks.


a bookstore database -->


Harry Potter
79.99


Learning XML
69.95


Intro. to Databases
39.00


Ответ:
sum(/bookstore/book[attribute::cat="textbook"]/price/number(text())) div
count(/bookstore/book[attribute::cat=“textbook”]/price)

Слайд 31
Question: find the titles of textbooks on XML.


a bookstore database -->


Harry Potter
79.99


Learning XML
69.95


Intro. to Databases
39.00


Answer:
/bookstore/book[attribute::cat="textbook" and contains(title, "XML")]/title/text()

Слайд 32Корневой маршрут
Простейшим маршрутом поиска является тот, который указывает на корневой узел

документа. Этот маршрут представляет собой просто наклонную черту "/".
Например, данный шаблон XSLT использует образец XPath “/” для выбора всего дерева входного документа и заключения его в элемент html:
 


 
Наклонная черта "/" – это абсолютный маршрут поиска, так как независимо от контекстного узла, независимо от того, в каком месте входного документа применен данный шаблон, он всегда обозначает одно и тоже: корневой узел документа.


Слайд 33Маршруты к дочерним элементам
Второй простейший маршрут – это одиночное имя элемента.

Он позволяет выбрать все дочерние элементы с указанным именем.
Например, выражение XPath “profession” ссылается на все дочерние элементы «profession» контекстного узла.
Точный набор выбираемых элементов зависит от контекстного узла, поэтому это относительный маршрут XPath.



Слайд 34Пример ссылки на дочерние элементы
Если контекстным узлом является элемент «person» Алана

Тьюринга, тогда маршрут “profession” будет ссылаться на три дочерних элемента profession:
специалист по информатике
математик
криптограф

А если контекстным узлом является элемент «person» Ричарда Фейнмана из того же примера, выражение XPath “profession” будет ссылаться на единственный его дочерний элемент «profession»:
физик

Если контекстным узлом является дочерний элемент «name» элемента «person» Ричарда Фейнмана или Алана Тьюринга, тогда данный маршрут XPath не будет ссылаться ни на что, так как ни один из элементов «name» не имеет дочерних элементов «profession».



Слайд 35
В XSLT преобразовании контекстным узлом выражения XPath, используемом в атрибуте select

элемента xsl:apply-templates и ему подобных, является текущий найденный узел.
Когда другие системы, такие как XPointer, используют XPath, для определения контекстного узла предоставляются другие средства.



Слайд 36Пример простой таблицы стилей

 








Рассмотрим

шаблон для элемента person.
Процессор XSLT дважды активизирует этот шаблон, по одному разу на каждый узел person в документе.
В первый раз контекстным узлом является элемент person Алана Тьюринга.
Во второй раз контекстным узлом становится элемент person Ричарда Фейнмана.
При активизации одного и того же шаблона для различных контекстных узлов выражение XPath в каждый раз обращается к разным элементам, и поэтому результаты его работы различаются.


Слайд 37Маршруты к атрибутам
Для выбора определенного атрибута элемента, используйте знак @, за

которым следует имя нужного атрибута.
Например, выражение XPath “@born” выбирает атрибут «born» контекстного узла.











Результат:
Алан Тьюринг 1912 1954
Ричард М Фейнман 1918 1988

Слайд 38Функции для работы со специальными узлами
Для работы текстовыми узлами, комментариями и

инструкции обработки используются специальные функции:
text() – для получения значения текстового узла;
comment() – для получения значения комментария;
processing-instruction() – для получения значения инструкции обработки.



Слайд 39
Значением узла комментария является текст комментария.
Значением узла атрибута – значение атрибута.
Значением

узла инструкции обработки являются данные инструкции обработки.


Слайд 40
Так как узлы комментариев и текстовые узлы не имеют имен, функциям

comment() и text() соответствует любой комментарий или текстовый узел, являющийся непосредственным дочерним узлом контекстного узла.
Каждый комментарий является отдельным узлом комментария.
Каждый текстовый узел содержит максимально возможный непрерывный отрезок текста, не прерванный тегом. Ссылки на сущности и секции CDATA заменяются на текст и разметку и не разбивают текстовые узлы.
По умолчанию таблицы стилей XSLT обрабатывают текстовые узлы, но пропускают узлы комментариев.
Можно добавить в таблицу стилей XSLT шаблон для комментария, и тогда комментарии также будут обработаны.
Следующий шаблон меняет каждый комментарий на текст «Комментарий удален», выделенный курсивом:

Комментарий удален



Слайд 41Подстановочные выражения
Подстановочные выражения позволяют выбирать несколько типов элементов и узлов одновременно.


Существует три подстановочных выражения:
звездочка ‘*’ – соответствует любому узлу элемента, независимо от его типа.
node() – соответствующее всем узлам: элементов, текста, атрибутов, инструкций обработки, пространств имен и комментариев.
‘@*’ – соответствует всем узлам атрибутов. .



Слайд 42Подстановочный элемент ‘*’
Звездочка ‘*’ соответствует любому узлу элемента, независимо от его

типа (но не соответствует атрибутам и комментариям и пр.).
Например, следующий шаблон XSLT говорит, что должны быть обработаны дочерние элементы всех элементов, однако никакие данные выводить не требуется:



Звездочка не соответствует атрибутам, текстовым узлам, комментариям или узлам инструкций обработки.
Поэтому в приведенном примере выдается информация только из дочерних элементов, у которых есть собственные шаблоны, переопределяющие данный.
Перед звездочкой может присутствовать префикс пространства имен. В этом случае выбираются только элементы из указанного пространства имен.
Например, svg:* соответствует всем элементам с тем же URI пространства имен, что и у префикса svg.
Как правило, имеет значение именно URI, а не префикс. Префиксы в таблице стилей и исходном документе могут отличаться, но URI пространств имен должны совпадать.


Слайд 43Подстановочный элемент node()
node() – это подстановочное выражение, соответствующее, в отличии от

‘*’, всем узлам:
элементов,
текста,
атрибутов,
инструкций обработки,
пространств имен и
комментариев.



Слайд 44Подстановочный элемент ‘@*’
Выражение ‘@*’ соответствует всем узлам атрибутов.
Например, данный шаблон

XSLT копирует значения всех атрибутов элемента person входного документа в элементы attributes выходного документа:



 К выражению можно добавить префикс пространства имен для выбора атрибутов конкретного пространства имен, подобно тому, как это делается с элементами.
Например, @xlink:* соответствует всем атрибутам XLink, при условии, что префиксу xlink поставлено в соответствие пространство имен http://www.w3.org/1999/xlink. И опять имеет значение именно URI, а не фактически используемый префикс.


Слайд 45Составные маршруты поиска
Рассмотренные выражения XPath (имена элементов, @ плюс имя атрибута,

‘/’) являются одиночными шагами поиска.
Эти шаги поиска можно объединять с помощью косой черты, перемещаясь вниз по иерархии от найденного узла к другим узлам.
Можно также использовать
точку ‘.’ для ссылки на текущий узел,
две точки ‘..’ для ссылки на родительский узел
двойной слэш ‘//’ для ссылки на потомков контекстного узла.
Символ ‘/’ объединяет различные шаги в составной маршрут поиска.
Каждый шаг в маршруте является относительным по отношению к предшествующему.
Если маршрут начинается с ‘/’, первый шаг является относительным по отношению к корневому узлу.
В противном случае он является относительным по отношению к контекстному узлу.




Слайд 46Пример сложного маршрута с помощью наклонной черты
Пример: выражение /people/person/name/first_name.
Это

выражение начинается с корневого узла, выбирает все дочерние элементы «people» корневого узла,
выбирает все дочерние элементы «person» этих узлов,
затем все дочерние элементы «name» этих узлов
и, наконец, все дочерние элементы «first_name» этих узлов.
Применительно к примеру, выражение соответствует следующим двум элементам:
Алан
Ричард
Чтобы выделить только текстовое содержимое этих двух узлов, нужен один шаг.
Например: “/people/person/name/first_name/text()” выберет из примера строки «Алан» и «Ричард».
Оба эти выражения XPath начинаются с ‘/’, поэтому они являются абсолютными, начинающимися с корня маршрутами поиска. Относительные маршруты могут отсчитываться от контекстного узла.
Например, выражение XPath “person/@id” выбирает атрибут id дочернего по отношению к контекстному узлу элемента person.



Слайд 47Выбор всех потомков
Для выбора всех потомков используется двойная косая черта.
Двойная наклонная

черта ‘//’ выбирает всех потомков контекстного узла, а также сам контекстный узел.
В начале выражения XPath эти символы позволяют выбрать всех потомков корневого узла.
Например, выражение XPath ‘//name’ выбирает в документе все элементы name.
Выражение ‘person//@id’ выбирает все атрибуты «id» всех элементов, содержащихся в дочернем элементе «person» контекстного узла.


Слайд 48Выбор родительского элемента
Родительский элемент можно выбрать с помощью двойной точки.
Две точки

‘..’ обозначают родителя текущего узла.
Например, выражение XPath ‘//@id’ относится ко всем атрибутам id в документе: оно выбирает все атрибуты id любого элемента документа.
Выражение ‘person//@id’ выбирает все атрибуты id всех элементов, содержащихся в дочернем элементе person контекстного узла. Следовательно, //@id/.. Указывает на все элементы документа, имеющие атрибут id.
Выражение //middle_initial/../first_name идентифицирует в документе все элементы first_name, которые являются одноуровневыми для элементов middle_initial.
Применительно к примеру это выражение выбирает Ричард,
но не выбирает Алан.


Слайд 49Выбор текущего элемента с помощью точки
Одинарная точка указывает на текущий узел.


В XSLT она чаще всего используется, когда требуется получить значение текущего найденного элемента.
Например, данный шаблон копирует содержимое каждого комментария из входного документа в элемент span выходного документа, выделяя его курсивом:



 Символ ‘.’ – значение атрибута select элемента xsl:value-of – обозначает найденный элемент.
Эта схема одинаково хорошо подходит для узлов элементов, атрибутов и всех других видов узлов.
Например, следующий шаблон выбирает элементы «name» из входного документа и копирует в выходной документ, выделяя их:





Слайд 50Предикаты
В общем случае выражение XPath может ссылаться более чем на один

узел. Иногда это именно то, что требуется, однако в некоторых случаях приходится просеивать набор узлов, возвращаемый выражением, чтобы выбрать только несколько из них.
Каждый шаг в маршруте поиска может иметь предикат, который делает выбор из текущего на данном шаге выражения списка узлов.
Предикат содержит логическое выражение, которое проверяется для каждого узла в контекстном списке узлов. Если выражение ложно, этот узел удаляется из списка, в противном случае – сохраняется.
Предположим, например, что требуется найти все элементы «profession», которые имеют значение физик.
Выражение XPath //profession[.="физик"] находит все такие элементы. Здесь точка обозначает строковое значение текущего узла, то есть то же, что возвращает элемент xsl:value-of.
Можно использовать одинарные кавычки вместо двойных, когда выражение XPath помещено внутрь значения атрибута, уже находящегося в кавычках.
Например .


Слайд 51Выполнение сравнений
Для выбора всех элементов «person», имеющих дочерний элемент «profession»

со значением «физик» нужно использовать выражение “//person [profession="физик"]”.
Если требуется найти элемент «person» с «id», равным “p4567”, то нужно задать перед именем атрибута символ ‘@’.
Например, в выражении //person[@id="p4567"].
XPath кроме знака равенства поддерживает полный набор операторов сравнения, в том числе <, >, >=, <= и !=.
Например, выражение //person[@born<=1976] ищет в документе все элементы person с атрибутом born, числовое значение которого меньше или равно 1976.
Если < или <= используются внутри XML-документа, необходимо заменять знак «меньше» на “<”
Например .
Однако, если выражение XPath находится вне XML-документа, как в некоторых случаях использования XPointer, знак «меньше» можно не заменять.


Слайд 52Использование логических операций
XPath также предусматривает логические операторы and и or для

логического объединения выражений.
Пример 1: выбрать все элементы person, значения атрибутов born которых находятся между 1910 и 1920 включительно.
//person[@born<=1920 and @born>=1910]
Пример 2: выбрать все элементы name, имеющие дочерние элементы first_name со значением Ричард или Дик.
//name[first_name="Ричард" or first_name="Дик"]


Слайд 53
Выражение XPath “//name” выбирает все элементы «name».
Выражение “//name[middle_initial]” выбирает все

элементы «name» и затем проверяет каждый из них на наличие дочернего элемента middle_initial. Сохраняются только те элементы, в которых есть такой дочерний элемент.
Например, //name[middle_initial] выберет элемент «name» Ричарда М. Фейнмана, но не выберет «name» Алана Тьюринга.
Любой или все шаги в маршруте поиска могут иметь предикаты.
Например, выражение
“/people/person[@born < 1950]/name[first_name="Алан"]”
сначала выбирает все дочерние элементы people корневого узла (в примере такой только один).
Затем он выбирает из этих элементов все элементы person, атрибуты born которых имеют числовое значение меньше 1950.
И наконец, из этой группы элементов отбираются все дочерние элементы name, у которых дочерний элемент first_name имеет значение Алан.


Слайд 54Полные маршруты поиска
Ранее рассмотренные маршруты называются «сокращенными маршрутами поиска». Именно они

лучше всего подходят для масок поиска XSLT.
В XPath также определен полный синтаксис для полных маршрутов поиска, который более многословен и более гибок.
Каждый шаг в маршруте поиска имеет
обязательные части
ось поиска
критерий узла,
необязательная часть
предикаты.
Ось указывает направление перемещения от контекстного узла для поиска следующих узлов.
Критерий узла определяет, какие узлы по этой оси следует включать.
Предикаты дополнительно отсеивают узлы в соответствии с указанным в предикате выражением.


Слайд 55Схема полного маршрута поиска




Слайд 56Соотношение сокращенных и полных маршрутов поиска
В сокращенном маршруте поиска ось и

критерий узла объединены вместе.
В полном маршруте они разделяются двумя двоеточиями “::”.
Например, сокращенный маршрут поиска “people/person/@id” состоит из трех шагов.
Первый шаг выбирает узлы элементов people по оси дочерних узлов,
Второй шаг – выбираются узлы элементов «person» по оси дочерних узлов,
Третий шаг – выбираются узлы атрибутов id по оси атрибутов.
Если переписать это выражение в полной форме, тот же маршрут поиска будет выглядеть следующим образом:
“child::people/child::person/attribute::id”.


Слайд 57Соотношение сокращенных и полных маршрутов поиска (2)
Эти полные маршруты поиска, как

и сокращенные, могут быть абсолютными, если начинаются с корневого узла.
Например, полная форма “/child::people/child::person”
эквивалентна сокращенной форме “/people/person”.
Полные маршруты поиска также могут иметь предикаты.
Например, сокращенный маршрут
“/people/person[@born < 1950]/name[first_name="Алан"]”
в полной форме превратится в
“/child::people/child::person[@born<1950]/child::name[first_name="Алан"]”
В общем случае, полная форма очень многословна и не часто используется на практике.
Она не допускается в масках атрибута match в XSLT.
Достоинство полных маршрутов: они является единственным способом обращения к большинству осей, по которым выражения XPath позволяют выбирать узлы.


Слайд 58Оси поиска
В языке XPath понятие оси служит для того, чтобы выделить

в дереве документа различные подмножества узлов относительно некоторого узла, называемого контекстным.
В общем случае эти подмножества пересекаются, но оси ancestor, descendant, following, preceding и self разбивают документ на непересекающиеся части, в совокупности содержащие все узлы (за исключением тех, что соответствуют пространствам имен и атрибутам).
Контекстный узел устанавливается языком, в который погружен XPath.
В случае XSLT контекстный узел устанавливают следующие конструкции:
сопоставление с шаблоном
;
оператор xsl:for-each;
оператор xsl:apply-templates.

Слайд 59Оси сокращенного синтаксиса
Сокращенный синтаксис позволяет перемещаться по следующим осям:
ось дочерних узлов

(child),
ось родительских узлов (parent),
собственная оси (self),
ось атрибутов (attribute) и
оси потомков с включением контекстного узла (descendant-or-self).


Слайд 60Дополнительные оси полного синтаксиса
Полный синтаксис добавляет еще восемь осей:
Ось предков (ancestor)

- Все узлы элементов, содержащие контекстный узел; родительский узел, родитель родителя, родитель родителя родителя и т.д. вверх вплоть до корневого узла в порядке, обратном расположению узлов в документе.
Ось следующих одноуровневых узлов (following-sibling) - Все узлы, следующие за контекстным узлом и содержащиеся в том же узле родительского элемента, в том же порядке, в каком узлы присутствуют в документе.
Ось предыдущих одноуровневых узлов (preceding-sibling) - Все узлы, предшествующие контекстному узлу и содержащиеся в том же узле родительского элемента, в порядке, обратном порядку в документе.
Ось следующих узлов (following) - Все узлы, следующие после контекстного узла, в том же порядке, в каком узлы присутствуют в документе.
Ось предыдущих узлов (preceding) - Все узлы, предшествующие началу контекстного узла, в порядке, обратном порядку в документе.
Ось пространств имен (namespace) - Все пространства имен в области действия контекстного узла, объявленные либо в контекстном узле, либо в одном из его предков.
Ось потомков (descendant) - Все потомки контекстного узла, исключая сам контекстный узел.
Ось предков, включая контекстный узел (ancestor-or-self) - Все предки контекстного узла, включая сам контекстный узел.


Слайд 61Пример XSLT преобразования с использованием полный синтаксиса



















  • Слайд 62Пояснение примера
    Первый шаблон соответствует корневому узлу.
    Он применяет шаблоны ко всем

    потомкам корневого узла, являющимся элементами person, то есть перемещается от корневого узла по оси потомков (descendant) с критерием узла person.
    Второй шаблон соответствует элементам person.
    Он помещает дочерние элементы name каждого элемента person в элемент dt.
    (Использованный здесь маршрут поиска, child::name, может быть переписан и в сокращенной форме – в виде одного слова name.)
    Далее шаблоны применяются ко всем элементам, следующим за элементом name на том же уровне иерархии.
    Шаблон начинает обработку с контекстного узла person, затем перемещается по оси дочерних элементов в поисках элемента name.
    Отсюда процессор перемещается по оси следующих одноуровневых узлов (following-sibling) и ищет элементы любого типа (*) после элемента name, также являющиеся дочерними для того же элемента person.
    Для оси following-sibling не существует сокращенного эквивалента, и потому это действительно простейший способ написания данной конструкции.

    Слайд 63Пояснение примера (2)
    Третий шаблон
    выбирает любые элементы, не подходящие для других

    шаблонов; он просто помещает такие элементы в элемент li.
    Выражение XPath self::* выбирает значение текущего найденного элемента, то есть контекстного узла.
    Это выражение можно сократить до символа «точка».
    Четвертый (последний) шаблон
    выбирает элементы homepage.
    В этом случае требуется выбрать значение атрибута xlink:href, поэтому от контекстного узла homepage мы перемещаемся по оси атрибутов.
    Критерий узлов выбирает атрибуты xlink:href.
    Точнее, он ищет атрибут с локальным именем href, префиксу которого поставлено в соответствие URI пространства имен http://www.w3.org/1999/xlink.


    Слайд 64Общие выражения XPath
    Кроме маршрутов поиска выражения XPath могут также возвращать числа,

    логические и строковые выражения.
    Например, допускаются следующие выражения XPath:
    3,141529
    2+2
    'Rosalind Franklin‘
    true()
    32,5 < 76,2E-21
    position()=last()
    Если выражения XPath не являются наборами узлов, то они не могут использоваться в атрибуте match элемента xsl:template.
    Однако они могут выступать в качестве значений атрибута select элементов xsl:value-of и в предикатах маршрутов поиска.




    Слайд 65Функции XPath
    Язык XPath предоставляет много функций, которые могут оказаться полезными в

    предикатах или в обычных выражениях.
    Любая функция XPath возвращает значение, относящееся к одному из четырех типов:
    логическое значение;
    числовое значение;
    набор узлов;
    строка.


    Слайд 66Функции для наборов узлов
    Функции для наборов узлов либо используют, либо возвращают

    информацию о наборах узлов – упорядоченных коллекциях узлов XPath.
    функция position() - возвращает положение контекстного узла;
    функция last() - возвращает количество узлов в контекстном наборе, которое совпадает с позицией последнего узла набора;
    функция count() - возвращает количество узлов своего аргумента, а не контекстного списка.
    Например, “count(//name)” подсчитывает, сколько элементов «name» присутствует в документе.


    Слайд 67Функция position()
    Функция position() возвращает в виде числа положение текущего узла в

    контекстном списке.
    Например, шаблон XSLT используюет функцию position() для вычисления номера обрабатываемого элемента person относительно других узлов контекстного списка:

    Person ,



    Слайд 68Функция id()
    Функция id() принимает в качестве аргумента строку, состоящую из одного

    или более ID, разделенных пробельными символами, и возвращает набор узлов, который содержит все узлы документа, имеющие указанные ID.
    Это узлы, атрибуты которых объявлены в DTD как принадлежащие к типу ID, но они не обязательно имеют имя ID или id.
    Например, id('p342') указывает в примере на элемент person Алана Тьюринга, а id('p342 p4567') – на оба элемента person, как Алана Тьюринга, так и Ричарда Фейнмана.
    Функция id() чаще всего используется в сокращенном синтаксисе XPath.
    Она позволяет формировать абсолютные маршруты поиска, начинающиеся не от корня.
    Например, id('p342')/name ссылается на элемент name Алана Тьюринга независимо от расположения в документе элемента person Алана Тьюринга, пока у этого элемента сохраняется ID.


    Слайд 69Дополнительные функции
    Три оставшиеся функции
    функция local-name() принимает в качестве аргумента набор

    узлов, чаще всего содержащий только один узел, и возвращает локальное имя первого узла набора.
    функция namespace-uri() принимает в качестве аргумента набор узлов и возвращает URI пространства имен для первого узла набора.
    функция name() принимает в качестве аргумента набор узлов и возвращает полное имя первого узла набора.
    Во всех трех функциях аргумент может быть опущен, и в этом случае рассматривается контекстный узел.
    Например, применив выражение
    localname(//homepage/@xlink:href)
    получаем href;
    namespace-uri(//homepage/@xlink:href)
    равно http://www.w3.org/1999/xlink;
    name(//homepage/@xlink:href)
    равно xlink:href.


    Слайд 70Фильтрация узлов
    Часто требуется отобрать узлы в зависимости от хранящихся в них

    данных, возможно, в сочетании с ограничениями на имена или позицию.

    Во многих мини-рецептах в разделе 1.1 для фильтрации узлов использовались предикаты, но они налагали условия только на позицию или имя узла.
    Ниже мы рассмотрим предикаты, фильтрующие по содержимому. Во всех примерах из этого раздела перед каждым предикатом стоит имя X, но вместо него можно было бы задать произвольное путевое выражение.

    Слайд 72Введение в язык XPath
    XPath is a language for finding information in

    an XML document.
    XPath is a syntax for defining parts of an XML document
    XPath uses path expressions to navigate in XML documents
    XPath contains a library of standard functions
    XPath is a major element in XSLT
    XPath is a W3C recommendation


    Слайд 73XPath Versions
    XPath 1.0 became a W3C Recommendation November 16, 1999.
    XPath 2.0

    became a W3C Recommendation January 23, 2007.
    XPath 2.0 is a language derived from XPath 1.0 and XQuery.
    The XPath 2.0 and XQuery 1.0 are generated from a common source, sharing much of the same syntax, and much of the text is identical.
    W3C XSL Specifications and Timeline



    Слайд 74XPath Path Expressions
    XPath uses path expressions to select nodes or node-sets

    in an XML document. These path expressions look very much like the expressions you see when you work with a traditional computer file system.
    XPath is Used in XSLT
    XPath is a major element in the XSLT standard. Without XPath knowledge you will not be able to create XSLT documents.
    XQuery and XPointer are both built on XPath expressions. XQuery 1.0 and XPath 2.0 share the same data model and support the same functions and operators.
    XPATH is a W3C Recommendation
    XPath became a W3C Recommendation 16. November 1999.
    XPath was designed to be used by XSLT, XPointer and other XML parsing software.
    To read more about the XPATH activities at W3C, please read our W3C tutorial.


    Слайд 75Терминология XPath
    Узлы - Nodes
    In XPath, there are seven kinds of nodes:

    element, attribute, text, namespace, processing-instruction, comment, and document nodes.
    XML documents are treated as trees of nodes. The topmost element of the tree is called the root element.
    Look at the following XML document:


     
        Harry Potter
        J K. Rowling
        2005
        29.99 


    Example of nodes in the XML document above:
    (root element node)
    J K. Rowling (element node)
    lang="en" (attribute node)

    Слайд 76Atomic values
    Atomic values are nodes with no children or parent.
    Example of

    atomic values:
    J K. Rowling
    "en"Items
    Items are atomic values or nodes.


    Слайд 77Взаимосвязи между узлами
    Parent
    Each element and attribute has one parent.
    In the following

    example; the book element is the parent of the title, author, year, and price:

      Harry Potter
      J K. Rowling
      2005
      29.99

    Children
    Element nodes may have zero, one or more children.
    In the following example; the title, author, year, and price elements are all children of the book element:

      Harry Potter
      J K. Rowling
      2005
      29.99


    Слайд 78Взаимосвязи между узлами (2)
    Siblings
    Nodes that have the same parent.
    In the following

    example; the title, author, year, and price elements are all siblings:

      Harry Potter
      J K. Rowling
      2005
      29.99

    Ancestors
    A node's parent, parent's parent, etc.
    In the following example; the ancestors of the title element are the book element and the bookstore element:


      Harry Potter
      J K. Rowling
      2005
      29.99



    Слайд 79Взаимосвязи между узлами (3)
    Descendants
    A node's children, children's children, etc.
    In the following

    example; descendants of the bookstore element are the book, title, author, year, and price elements:


      Harry Potter
      J K. Rowling
      2005
      29.99



    Слайд 80XPath Syntax
    XPath uses path expressions to select nodes or node-sets in an

    XML document. The node is selected by following a path or steps.
    The XML Example Document



      Harry Potter
      29.99


      Learning XML
      39.95



    Слайд 81Selecting Nodes
    XPath uses path expressions to select nodes in an XML

    document.
    The node is selected by following a path or steps.
    The most useful path expressions are listed below:



    Слайд 82
    In the table below we have listed some path expressions and

    the result of the expressions:



    Слайд 83Предикаты
    Predicates are used to find a specific node or a node

    that contains a specific value.
    Predicates are always embedded in square brackets.
    In the table below we have listed some path expressions with predicates and the result of the expressions:



    Слайд 84Выбор неизвестных узлов
    XPath wildcards can be used to select unknown XML

    elements.


    In the table below we have listed some path expressions and the result of the expressions:



    Слайд 85Выбор нескольких путей
    By using the | operator in an XPath expression

    you can select several paths.
    In the table below we have listed some path expressions and the result of the expressions:



    Слайд 86XPath Axes
    The XML Example Document



      Harry Potter
      29.99


     

    lang="eng">Learning XML
      39.95



    Слайд 87XPath Axes
    An axis defines a node-set relative to the current node.



    Слайд 88Location Path Expression
    A location path can be absolute or relative.
    An

    absolute location path starts with a slash ( / ) and
    a relative location path does not.
    In both cases the location path consists of one or more steps, each separated by a slash:
    An absolute location path: /step/step/...
    A relative location path: step/step/...
    Each step is evaluated against the nodes in the current node-set.
    A step consists of:
    an axis (defines the tree-relationship between the selected nodes and the current node)
    a node-test (identifies a node within an axis)
    zero or more predicates (to further refine the selected node-set)
    The syntax for a location step is:
    axisname::nodetest[predicate]

    Слайд 89Примеры
    Примеры Location Path Expression


    Слайд 90Операции XPath
    Список операций, которые могут быть использованы в XPath выражениях:


    Слайд 91Пример XML документа (books.xml)
      Everyday Italian   Giada

    De Laurentiis   2005   30.00   Harry Potter   J K. Rowling   2005   29.99

      XQuery Kick Start   James McGovern   Per Bothner   Kurt Cagle   James Linn   Vaidyanathan Nagarajan   2003   49.99   Learning XML   Erik T. Ray   2003   39.95


    Слайд 92Загрузка XML документа
    Using XMLHttpRequest to load XML documents is supported in

    all modern browsers.
    Code for most modern browsers:
    var xmlhttp=new XMLHttpRequest()Code for old Microsoft browsers (IE 5 and 6):
    var xmlhttp=new ActiveXObject("Microsoft.XMLHTTP") Selecting Nodes
    Unfortunately, there are different ways of dealing with XPath in Internet Explorer and other browsers.
    In our examples we have included code that should work with most major browsers.
    Internet Explorer uses the selectNodes() method to select nodes from the XML document:
    xmlDoc.selectNodes(xpath);Firefox, Chrome, Opera and Safari use the evaluate() method to select nodes from the XML document:
    xmlDoc.evaluate(xpath, xmlDoc, null, XPathResult.ANY_TYPE,null);

    Слайд 93



    function loadXMLDoc(dname)
    {
    if (window.XMLHttpRequest) {
    xhttp=new XMLHttpRequest();
    }
    else {
    xhttp=new ActiveXObject("Microsoft.XMLHTTP");

    }
    xhttp.open("GET",dname,false);
    xhttp.send("");
    return xhttp.responseXML;
    }
    xml=loadXMLDoc("books.xml");
    path="/bookstore/book/title"
    // code for IE

    if (window.ActiveXObject) {
    var nodes=xml.selectNodes(path);
    for (i=0;i document.write(nodes[i].childNodes[0].nodeValue);
    document.write("
    ");
    }}
    // code for Mozilla, Firefox, Opera, etc.
    else if (document.implementation && document.implementation.createDocument) {
    var nodes=xml.evaluate(path, xml, null, XPathResult.ANY_TYPE, null);
    var result=nodes.iterateNext();
    while (result) {
    document.write(result.childNodes[0].nodeValue);
    document.write("
    ");
    result=nodes.iterateNext();
    }
    }




    Слайд 94Примеры
    Select all the titles = /bookstore/book/title
    Select the title of the first

    book = /bookstore/book[1]/title
    There is a problem with this. The example above shows different results in IE and other browsers.
    IE5 and later has implemented that [0] should be the first node, but according to the W3C standard it should have been [1]!!
    A Workaround! To solve the [0] and [1] problem in IE5+, you can set the SelectionLanguage to XPath.
    The following example selects the title of the first book node under the bookstore element:
    xml.setProperty("SelectionLanguage","XPath");
    xml.selectNodes("/bookstore/book[1]/title");
    Select all the prices = /bookstore/book/price/text()
    Select price nodes with price>35 = /bookstore/book[price>35]/price
    Select title nodes with price>35 = /bookstore/book[price>35]/title

    Обратная связь

    Если не удалось найти и скачать презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

    Email: Нажмите что бы посмотреть 

    Что такое ThePresentation.ru?

    Это сайт презентаций, докладов, проектов, шаблонов в формате PowerPoint. Мы помогаем школьникам, студентам, учителям, преподавателям хранить и обмениваться учебными материалами с другими пользователями.


    Для правообладателей

    Яндекс.Метрика