Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
1
Rafał Hryniów Tomasz Pieciukiewicz
Język zapytań dla XML Rafał Hryniów Tomasz Pieciukiewicz
2
Plan prezentacji Przedstawienie podstawowych założeń języka
Porównanie z innymi rozwiązaniami Omówienie implementacji Potencjalne kierunki rozwoju
3
Założenia języka Naturalny dla użytkownika, Prosty w użyciu,
Duże możliwości rozwoju, Oparty na solidnych podstawach teoretycznych (podejście stosowe), Obsługa danych półstrukturalnych (XML)
4
Założenia języka Jednoczesna obsługa wielu plików XML, Obsługa linków
Operatory algebraiczne: Arytmetyczne Logiczne Porównania Operacje na łańcuchach tekstowych Operacje na kolekcjach Złączenia Operator zmiany nazwy
5
Założenia języka Operatory nie-algebraiczne
Kwantyfikatory Selekcja Zależne złączenie Rozróżnianie pomiędzy węzłem XML, a tekstem zawartym w tym węźle (atrybut o nazwie TextValue)
6
Porównanie z XML Query Porównanie zostanie przeprowadzone przy pomocy przykładów. Zapytania w XML Query pochodzą z dokumentów W3C dotyczących tego języka
7
Porównanie (1) – zapytanie w XML Query
Tytuły i rok wydania książek opublikowanych przez „Addison-Wesley” wydanych po roku 1991 <bib> { for $b in document(" where $b/publisher = "Addison-Wesley" and > 1991 return <book year="{ }"> { $b/title } </book> } </bib>
8
Porównanie (1) – zapytanie w YATL
make bib [ *book [ $y ], title [ $t ] ] ] match " with title [ $t ] ], publisher [ name [ $n ] ] ] where $n = "Addison-Wesley" and $y > 1991
9
Porównanie (1) – Zapytanie w Lorel
select xml(bib:{ (select title:t}) from bib.book b, b.title t, b.year y where b.publisher = "Addison-Wesley" and y > 1991)})
10
Porównanie (1) – Zapytanie w XQL
document(" { book[publisher/name="Addison-Wesley" { @year | title }
11
Porównanie (1) – Zapytanie w XML-QL
CONSTRUCT <bib> { WHERE <bib> <book year=$y> <title>$t</title> <publisher><name>Addison-Wesley</name></publisher> </book> </bib> IN " $y > 1991 CONSTRUCT <book year=$y><title>$t</title></book> } </bib>
12
Porównanie (1) – zapytanie u nas
Wersja skrócona (bib.book where (year>1991 AND publisher.TextValue='Addison-Wesley')).(year , title) Wersja dająca prawie identyczny wynik jak XML Query (bib.book where (year>1991 AND publisher.TextValue='Addison-Wesley')).(year as Year, title) as Book
13
Porównanie (2) – zapytanie w XML Query
Lista par autor-tytuł, każda para zamknięta w elemencie „result” <results> { for $b in document(" $t in $b/title, $a in $b/author return <result> { $t } { $a } </result> } </results>
14
Porównanie (2) – zapytanie w YATL
make results [ *result [ title [ $t ] author [ $a ] ] ] match " with bib [ *book [ title [ $t ], *author [ $a ] ] ]
15
Porównanie (2) – zapytanie w Lorel
select xml(results:{ (select xml(result:{title: t,author: a}) from bib.book b, b.title t, b.author a)})
16
Porównanie (2) – zapytanie w XQL
Zadanie tego zapytania nie jest możliwe
17
Porównanie (2) – zapytanie w XML-QL
CONSTRUCT <results> { WHERE <bib> <book> <title>$t</title> <author>$a</author> </book> </bib> IN " CONSTRUCT <result> </result> } </results>
18
Porównanie (2) – zapytanie u nas
bib.book.(author, title) as Result
19
Porównanie (3) – zapytanie w XML Query
Dla każdej książki wyświetla tytuł i listę autorów <results> { for $b in document(" return <result> { $b/title } { $b/author } </result> } </results>
20
Porównanie (3) – zapytanie w YATL
make results [ *result [ title [ $t ], $as ] ] match " with bib [ *book [ title [ $t ], *($as) author ]
21
Porównanie (3) – zapytanie w Lorel
select xml(results:{ select xml(result{b.title, b.author}) from bib.book b})
22
Porównanie (3) – zapytanie w XQL
document(" { book->result { title | author }
23
Porównanie (3) – zapytanie w XML-QL
CONSTRUCT <results> { WHERE <bib> <book> <title>$t</title> </book> CONTENT_AS $b </bib> IN " CONSTRUCT <result> { WHERE <author>$a</author> IN $b CONSTRUCT <author>$a</> } </result> } </results>
24
Porównanie (3) – zapytanie u nas
(bib.book as x, bib.book as y where x=y).(x.title, y.author group as autorzy) Ze względu na brak operatora pozwalającego stworzyć strukturę bez opakowanie jej w węzeł wynik różni się nieco od wyniku XML Query
25
Obsługa linków - przykład
<bib> <person id="A1"><last>Stevens</last><first>W.</first></person> <person id="A2"><last>Abiteboul</last><first>Serge</first></person> <person id="A3"><last>Buneman</last><first>Peter</first></person> <person id="A4"><last>Suciu</last><first>Dan</first></person> <book year="1994"> <title>TCP/IP Illustrated</title> <author pointer="true">A1</author> <publisher>Addison-Wesley</publisher> <price> 65.95</price> </book> <book year="2000"> <title>Data on the Web</title> <author pointer="true">A2</author> <author pointer="true">A3</author> <author pointer="true">A4</author> <publisher>Morgan Kaufmann Publishers</publisher> <price>39.95</price> </bib>
26
Obsługa linków - przykład
bib.book.(author.person, title) as Result (bib.book as x, bib.book as y where x=y).(x.title, y.author.person group as autorzy)
27
Implementacja - narzędzia
Java SE 1.4, Xerces (działa też z nowszymi), JFlex, CUP.
28
Implementacja - decyzje
Wykorzystanie drzewa DOM jako składu obiektów, Przechowywanie całości danych w pamięci, Wyniki udostępniane użytkownikowi w formie referencji do węzła XML (ResultNode),
29
Implementacja - problemy
Użycie drzewa DOM jako składu spowodowało problemy implementacyjne, Wartości tekstowe w DOM Brak typów danych w XML
30
Kierunki rozwoju Uzupełnienie systemu o perspektywy,
Wykorzystanie DTD lub XML Schema, Wprowadzenie cech obiektowych, Optymalizacja zapytań, Zmiana modelu składu, Indeksowanie itp., …
31
Bibliografia Przykłady zapytań w XML Query pochodzą z „XML Query Use Cases” ( Przykładowe zapytanie w YATL pochodzi z XML Query Languages: Experiences and Exemplars (
32
Dziękujemy Pytania???
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.