Presentation is loading. Please wait.

Presentation is loading. Please wait.

Подход к реализации XQuery Паращенко Олег Санкт-Петербургский Государственный Университет Обнинск, 2004.

Similar presentations


Presentation on theme: "Подход к реализации XQuery Паращенко Олег Санкт-Петербургский Государственный Университет Обнинск, 2004."— Presentation transcript:

1 Подход к реализации XQuery Паращенко Олег Санкт-Петербургский Государственный Университет olpa@uucode.com Обнинск, 2004

2 XML Hello Hello, World ! article / titlepara@idobject“hw”“Hello”“Hello, ”“!” “World”

3 … … Простой XPath Похож на путь к файлу /usr/bin/xmllint

4 Простой XPath Результат — множество узлов /AAA/CCC

5 // Поиск по всему поддереву //DDD/BBB

6 * Любое имя /AAA/*/*/BBB

7 @ Атрибут //BBB/@name

8 Оси навигации child::ename descendant::enam e parent::node() attribute::aname self::node() ancestor following-sibling preceding-sibling … ename //ename.. @aname.

9 Фильтрация (/AAA/BBB)[1](/AAA/BBB)[last()]

10 Фильтрация, функции //bin[vim] //openssh[.//sshd[@date<20040923]] //bin/*[contains(name(), 'vi')]

11 Запросы не для XPath Обратные ссылки /... /xxx//... /yyy//... [..?xxx..?yyy...] Создание элементов, переименование

12 Пример XQuery Here is a query. doc("books.xml")//book[1]/title Here is the result of the above query. { doc("books.xml")//book[1]/title } Here is a query. doc("books.xml")//book[1]/title Here is the result of the above query. TCP/IP Illustrated

13 FLWOR (“flower”) expressions for—let—where—order by—return for $i in (1, 2, 3) return { $i } 1 2 3

14 define function toc($book-or-section as element()) as element()* { for $section in $book-or-section/section return { $section/@*, $section/title, toc($section) } } { for $s in doc("xquery-book.xml")/book return toc($s) } Функции

15 Ресурсы Спецификации А.Валиков “Технология XSLT” http://xmlhack.ru/ “XQuery from the Experts: A Guide to the W3C XML Query Language” by Howard Katz, D. D. Chamberlin http://zvon.org/

16 Подход к реализации XQuery Паращенко Олег Санкт-Петербургский Государственный Университет olpa@uucode.com Обнинск, 2004 (продолжение)

17 XPath vs “вручную” get_elem("elemname[i]") vs /** * Returns child element at given position. Position can be * negative. In this case nodes are counting from end. * Last node position is '-1'. * @param node parent node * @param name name of node, null if not important * @param pos position of node starting from zero, can be negative */ public static Element getChildElement (Element node, String name, int s) { // // Update position to be always positive. // boolean fromEnd = pos < 0; if (fromEnd) { pos = -(pos + 1); } // // Initialize // Node cur_node = fromEnd ? node.getLastChild(): node.getFirstChild(); int cur_pos = -1; // // Walk on children // for (; cur_node != null; cur_node = (fromEnd ? cur_node.getPreviousSibling() : cur_node.getNextSibling ())) { // // Check that current node is of type 'element' // if (cur_node.getNodeType() != Node.ELEMENT_NODE) { continue; } // // Get element, check its name and position // Element cur_elem = (Element)cur_node; if ((name != null) && (! name.equals (cur_elem.getTagName()))) { continue; } cur_pos++; if (cur_pos == pos) { return cur_elem; } // // If node was found, it was returned from inside loop // return null; }

18 XPath vs “вручную” наглядность меньше кода – меньше ошибок и дополнительных расходов менее 1 минуты vs более 2 часов

19 Программы с деревьями find текстовые процессоры компиляторы, интерпретаторы встроенный xpath/xquery — “серебрянная пуля”

20 Единая реализация Библиотеки C vs Java vs.NET vs … Виртуальная машина ● Реализация XQuery на удобном языке программирования ● Байт-код ВМ ● Интерпретатор ВМ

21 Готовые реализации ● CL-XML ● SXML/SXPath/SXQuery Удобный язык ● Common Lisp или Scheme

22 SXML Hello Hello, World ! (*TOP* (article (@ (id "hw")) (title "Hello") (para "Hello, " (object "World") "!"))) S-exp: XML:

23 SXPath ((txpath "//TAF/VALID/@TRange/text()") document) ((sxpath '(// TAF VALID @ TRange *text*)) document) ((node-join (node-closure (node-typeof? 'TAF)) (select-kids (node-typeof? 'VALID)) (select-kids (node-typeof? '@)) (select-kids (node-typeof? 'TRange)) (select-kids (node-typeof? '*text*))) document)

24 Части системы SXQuery XQuery VM макрораскрытие, компиляция В программе: Интерпретатор ВМ Привязка (bindings) Парсер XML, XPath, XQuery

25 Этапы развития Сейчас – проверка идеи v.0.1: Python AST v.1.0: Docbook XSLT

26 Похожие системы Частично – любая реализация XPath/XQuery XSLTC от Oracle

27 Оптимизация (//ename)[1]

28 ВМ как исходный код e1 := _X(doc, “AAA//BBB/CCC”) e2 := _X(doc, “AAA//BBB/DDD”) t1 := child(doc, “AAA”) t2 := descendant(t1, “BBB”) e1 := child(t2, “CCC”) t3 := child(doc, “AAA”) t4 := descendant(t3, “BBB”) e2 := child(t4, “DDD”) t1 := child(doc, “AAA”) t2 := descendant(t1, “BBB”) e1 := child(t2, “CCC”) e2 := child(t2, “DDD”)

29 Другие ВМ Java VM.NET VM LLVM

30 Подход к реализации XQuery Паращенко Олег Санкт-Петербургский Государственный Университет olpa@uucode.com Обнинск, 2004


Download ppt "Подход к реализации XQuery Паращенко Олег Санкт-Петербургский Государственный Университет Обнинск, 2004."

Similar presentations


Ads by Google