Język zapytań dla XML

53
Język zapytań dla XML Rafał Hryniów Tomasz Pieciukiewicz

description

Język zapytań dla XML. Rafał Hryniów Tomasz Pieciukiewicz. Plan prezentacji. Wprowadzenie Przedstawienie podstawowych założeń języka Porównanie z innymi rozwiązaniami Omówienie implementacji Potencjalne kierunki rozwoju. Wprowadzenie. Co to jest XML? Do czego XML bywa używany? - PowerPoint PPT Presentation

Transcript of Język zapytań dla XML

Page 1: Język zapytań dla XML

Język zapytań dla XML

Rafał Hryniów

Tomasz Pieciukiewicz

Page 2: Język zapytań dla XML

Plan prezentacji

Wprowadzenie Przedstawienie podstawowych założeń

języka Porównanie z innymi rozwiązaniami Omówienie implementacji Potencjalne kierunki rozwoju

Page 3: Język zapytań dla XML

Wprowadzenie

Co to jest XML? Do czego XML bywa używany?

XML jako standard do przenoszenia danych XML jako lekka baza danych

Czy da się to zrobić bez języka zapytań? Dlaczego dla XML potrzebny jest nowy język

zapytań? Co ma na ten temat do powiedzenia W3C?

Page 4: Język zapytań dla XML

Obszary zastosowań języka zapytań wg W3C Wykonywania zapytań na dokumentach XML oraz

kolekcjach dokumentów takich jak np. instrukcje obsługi, w celu znalezienia dokumentu, lub fragmentu dokumentu.

Wykonywanie zapytań na dokumentach zawierających dane w celu przekształcenia ich do nowej postaci, lub zintegrowania danych z wielu źródeł.

Wykonywanie zapytań na dokumentach zawierających zarówno dane jak i opisy tekstowe, takich jak katalogi, dane chorobowe pacjenta itp.

Wykonywanie zapytań na danych administracyjnych (pliki konfiguracyjne, logi, profile użytkowników)

Page 5: Język zapytań dla XML

Obszary zastosowań języka zapytań wg W3C

Filtrowania danych napływających w formie dokumentów XML przysyłanych strumieniowo.

Wykonywanie zapytań na drzewach DOM Wykonywanie zapytań na repozytoriach dokumentów w

XML oraz serwerach WWW. „Wykonywanie zapytań na katalogach zawierających

serwery dokumentów, typy dokumentów, pliki XML Schema, lub dokumenty.

Page 6: Język zapytań dla XML

Wymagania W3C dla języków zapytań do XML

Języki zapytań zbudowane na podstawie dokumentu W3C mogą mieć różne syntaktyki, Język zapytań musi być wygodny i czytelny dla użytkownika i wyrażony w XML.

Język zapytań musi być deklaratywny, oraz nie może wymuszać konkretnej strategii ewaluacji

Język musi być niezależny od protokołu komunikacyjnego. Język zapytań musi określać standardowe błędy mogące powstać

podczas ewaluacji zapytania. Język zapytań dla XML nie może ograniczać możliwości rozbudowy

samego standardu XML. „Język zapytań dla XML musi być zdefiniowany dla skończonych

instancji modelu danych. Może być zdefiniowany dla nieskończonych instancji.”

Page 7: Język zapytań dla XML

Wymagania W3C dla modelu danych Model danych dla zapytań musi opierać się na informacjach

otrzymanych od procesorów XML oraz XML Schema i nie może wymagać informacji nie dostarczanych przez te procesory. Model danych musi pokazywać odwzorowanie konstrukcji XML w odpowiednie konstrukcje modelu danych. Model danych powinien mieć reprezentację dla wszystkich elementów niosących informację lub zawierać wyjaśnienie, dlaczego konkretna konstrukcja została pominięta. Model musi być opracowany we współpracy z XML Schema Working Group w celu zapewnienia zgodności między modelem danych a danymi dostarczonymi przez procesory XML Schema.

Model danych musi reprezentować zarówno prosty typ znakowy jak i typy proste i złożone zdefiniowane w XML Schema

Page 8: Język zapytań dla XML

Wymagania W3C dla modelu danych Model danych musi umożliwiać reprezentację kolekcji

dokumentów i kolekcji wartości prostych i złożonych. Model danych musi zawierać wsparcie dla referencji,

włączając referencje wewnętrzne oraz do zewnętrznych dokumentów XML.

Model danych musi uwzględniać elementy wprowadzane do dokumentu XML przez XML Schema, takie jak np. wartości domyślne.

Model danych musi uwzględniać przestrzenie nazw.

Page 9: Język zapytań dla XML

Funkcjonalność wymagana przez W3C

Język zapytań musi wspierać operację na wszystkich typach danych reprezentowanych w modelu danych.

Zapytania muszą umożliwiać wyrażanie prostych warunków na tekst, włączając warunki na tekst przekraczający granice elementu.

Język zapytań musi wspierać kwantyfikatory ogólne i egzystencjalne. Język zapytań musi wspierać operacje na hierarchii i sekwencji struktur

dokumentu. Język musi być zdolny do łączenia informacji z wielu części dokumentu,

lub wielu dokumentów. Język zapytań musi zawierać operacje agregujące. Język zapytań musi zawierać operacje sortujące.

Page 10: Język zapytań dla XML

Funkcjonalność wymagana przez W3C

Język zapytań musi umożliwiać zagnieżdżanie zapytań. Język zapytań musi wspierać wartości NULL. Język zapytań musi przenosić hierarchię i kolejność elementów z

dokumentu źródłowego do dokumentu stanowiącego wynik zapytania. Język zapytań musi umożliwiać transformację struktury XML i tworzenie

nowych struktur. Język zapytań musi umożliwiać przechodzenie po referencjach zarówno

wewnątrz jak i na zewnątrz dokumentu. Język zapytań musi zachowywać tożsamość elementów. Język zapytań musi umożliwiać operację na literałach (dowolne dane

zdefiniowane wewnątrz zapytania).

Page 11: Język zapytań dla XML

Funkcjonalność wymagana przez W3C Język zapytań musi umożliwiać wykonywanie prostych

operacji na nazwach, takich jak porównywanie nazw elementów, atrybutów, instrukcji przetwarzania. Musi pozwalać także na operacje na kombinacji nazw i danych. Zapytania mogą wykonywać bardziej złożone operacja na nazwach.

Język zapytań powinien umożliwiać dostęp do XML Schema lub DTD dla danego dokumentu. Jeżeli schemat jest reprezentowany w postaci DTD, mapowanie do XML Schema może być wymagane.

Język zapytań musi operować na informacjach post-walidacyjnych otrzymanych od procesora XML Schema.

Page 12: Język zapytań dla XML

Funkcjonalność wymagana przez W3C Język zapytań powinien wspierać wykorzystanie

zewnętrznie zdefiniowanych funkcji na wszystkich typach danych istniejących w modelu danych. Powinien definiować interfejs dla takich funkcji oraz powinien rozróżniać takie funkcje od funkcji zdefiniowanych w języku zapytań. Implementacja funkcji zewnętrznych nie jest częścią języka zapytań.

Język zapytań musi udostępniać informacje środowiskowe, właściwe dla środowiska, w którym zapytanie jest wykonywane.

Page 13: Język zapytań dla XML

Funkcjonalność wymagana przez W3C Zapytanie muszą być domknięte względem modelu

danych dla zapytań XML. Zarówno wejście jak i wyjście zapytania muszą być zdefiniowane wyłącznie przy pomocy modelu danych dla zapytań XML. Źródła nie będące dokumentami XML mogą być odpytywane tylko i wyłącznie w przypadku, gdy zostanie dla nich zdefiniowana reprezentacja w modelu danych. Podobnie wyniki zapytań zdefiniowane są wyłącznie przy pomocy modelu danych dla zapytań XML. W oprogramowaniu wyniki te mogą być utworzone przy pomocy dowolnej, wygodnej reprezentacji, takiej jak: DOM, węzły, hiperlinki, tekst XML, lub różne inne formaty danych.”

Page 14: Język zapytań dla XML

Istniejące języki zapytań dla XML – co jest nie tak?

Oparte (z jednym wyjątkiem) na XML Query Requirements,

Semantyka tych języków nie jest absolutnie określona (definicja „by example”),

Składnia jest mało wygodna i trudna do przyswojenia

Page 15: Język zapytań dla XML

Nasze rozwiązanie

Czyli jak można zrobić to lepiej

Page 16: Język zapytań dla XML

Założenia języka

Naturalny dla użytkownika, Prosty w użyciu, Oparty na solidnych podstawach

teoretycznych (podejście stosowe), Duże możliwości rozwoju, Obsługa danych półstrukturalnych (XML) Ortogonalność zapytań

Page 17: Język zapytań dla XML

Przydatna definicja

Ortogonalność: każda kombinacja cech języka, która ma sens, powinna być dozwolona.

Ortogonalność pozwala na zredukowanie do minimum definicji języka oraz znaczne podwyższenie jego mocy. Ma ona ogromne znaczenie dla przypadku, gdy wyrażenia języka nie są pisane przez ludzi, a są automatycznie generowane z innych interfejsów.

Page 18: Język zapytań dla XML

Podejście stosowe – o co w tym chodzi? Idea znana z języków programowania takich jak Pascal i

C Środowisko, w jakim działają zapytania znajduje się na

tzw. stosie środowiskowym (w językach programowania zwykle nazywanym call stack).

Stos ten może być podnoszony/opuszczany w wyniku niektórych operacji (np. wołania funkcji lub tzw. operatorów nie-algebraicznych), tworzone są w ten sposób środowiska lokalne

Środowisko lokalne (segment na szczycie stosu środowiskowego) ma priorytet względem środowiska globalnego.

Page 19: Język zapytań dla XML

Podejście stosowe – o co w tym chodzi? Na stosie środowisk znajdują się tzw. bindery

Binder jest parą <n, x>, gdzie n jest zewnętrzną nazwą (nazwą zmiennej, stałej, obiektu, funkcji, perspektywy, procedury, metody, itd.), zaś x jest bytem czasu wykonania (zwykle referencją do obiektu)

Operatory nie-algebraiczne Operatory nie dające sprowadzić się w prosty sposób do algebry

Where – operator selekcji „.” – operator kropki jest to operator projekcji, nawigacji Operator zależnego złączenia Operator sortowania Kwantyfikatory

Page 20: Język zapytań dla XML

Podejście stosowe – o co w tym chodzi? Stos wyników

Stos, na którym przechowywane są wyniki zapytań Wyniki zapytań mogą być „konsumowane” przez operatory

Zasady kompozycji zapytań Każde wyrażenie jest zapytaniem Zapytania można dowolnie kombinować przy użyciu operatorów,

kombinacja zapytanie operator zapytanie też jest zapytaniem Zapytanie interpretowane jest tak, jak wyrażenie algebraiczne, z

zachowaniem reguł dotyczących priorytetów operatorów i nawiasowania

Page 21: Język zapytań dla XML

Prac where ( Zar > 1000 )

i1

i5

i9Prac(i1) Prac(i5) Prac(i9) Dział(i17) Dział(i22)

i3

i7

i11

i1

i5

Stan stosu ENVS przed ewaluacją

Rezultat zwracany przez zapytanie Prac (wiązanie Prac)

Rezultat zwracany przez zapytanie Zar (wiązanie Zar)

Iteracja po elementach e poprzedniego rezultatu: na ENVS wkłada się nested(e)

Nazwisko(i2) Zar(i3) PracujeW(i4)

Prac(i1) Prac(i5) Prac(i9) Dział(i17) Dział(i22)

Nazwisko(i6) Zar(i7) PracujeW(i8)

Prac(i1) Prac(i5) Prac(i9) Dział(i17) Dział(i22)

Nazwisko(i10) Zar(i11) Adres(i12) PracujeW(i16)

Prac(i1) Prac(i5) Prac(i9) Dział(i17) Dział(i22)

Rezultat dereferencji wymuszanej przez operator >

2500

2000

900

Rezultat zwracany przez zapytanie 1000

1000

1000

1000

prawda

prawda

fałsz

Rezultat zwracany przez zapytanie Zar>1000

Końcowy rezultat zapytania

Page 22: Język zapytań dla XML

Porównanie z istniejącymi językami zapytańPorównanie zostanie przeprowadzone przy pomocy przykładów.

Page 23: Język zapytań dla XML

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("http://www.bn.com")/bib/book where $b/publisher = "Addison-Wesley" and $b/@year > 1991 return

<book year="{ $b/@year }">{ $b/title }

</book> }

</bib>

Page 24: Język zapytań dla XML

Porównanie (1) – zapytanie w YATL

make bib [ *book [ @year [ $y ],

title [ $t ] ] ]match "www.bn.com/bib.xml" with

bib [ *book [ @year [ $y ], title [ $t ] ], publisher [ name [ $n ] ] ]

where $n = "Addison-Wesley" and $y > 1991

Page 25: Język zapytań dla XML

Porównanie (1) – Zapytanie w Lorel

select xml(bib:{

(select xml(book:{@year:y, title:t})

from bib.book b, b.title t, b.year y

where b.publisher = "Addison-Wesley" and y > 1991)})

Page 26: Język zapytań dla XML

Porównanie (1) – Zapytanie w XQLdocument("http://www.bn.com")/bib {

book[publisher/name="Addison-Wesley" and @year>1991] {

@year | title

}

}

Page 27: Język zapytań dla XML

Porównanie (1) – Zapytanie w XML-QLCONSTRUCT <bib> { WHERE <bib> <book year=$y> <title>$t</title> <publisher><name>Addison-Wesley</name></publisher> </book> </bib> IN "www.bn.com/bib.xml", $y > 1991 CONSTRUCT <book year=$y><title>$t</title></book>

} </bib>

Page 28: Język zapytań dla XML

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

Page 29: Język zapytań dla XML

Porównanie (2) – zapytanie w XML Query Lista par autor-tytuł, każda para zamknięta w elemencie „result”

<results> {

for $b in document("http://www.bn.com")/bib/book, $t in $b/title, $a in $b/author return

<result> { $t } { $a }

</result> } </results>

Page 30: Język zapytań dla XML

Porównanie (2) – zapytanie w YATL

make

results [ *result [ title [ $t ]

author [ $a ] ] ]

match "www.bn.com/bib.xml" with

bib [ *book [ title [ $t ],

*author [ $a ] ] ]

Page 31: Język zapytań dla XML

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)})

Page 32: Język zapytań dla XML

Porównanie (2) – zapytanie w XQL

Zadanie tego zapytania nie jest możliwe

Page 33: Język zapytań dla XML

Porównanie (2) – zapytanie w XML-QLCONSTRUCT <results> { WHERE <bib> <book> <title>$t</title> <author>$a</author>

</book> </bib> IN "www.bn.com/bib.xml"

CONSTRUCT <result>

<title>$t</title> <author>$a</author> </result> } </results>

Page 34: Język zapytań dla XML

Porównanie (2) – zapytanie u nas

bib.book.(author, title) as Result

Page 35: Język zapytań dla XML

Porównanie (3) – zapytanie w XML Query

Dla każdej książki wyświetla tytuł i listę autorów<results> { for

$b in document("http://www.bn.com")/bib/book return

<result> { $b/title } { $b/author }

</result> } </results>

Page 36: Język zapytań dla XML

Porównanie (3) – zapytanie w YATLmake

results [ *result [ title [ $t ],

$as ] ]

match "www.bn.com/bib.xml" with

bib [ *book [ title [ $t ],

*($as) author ]

Page 37: Język zapytań dla XML

Porównanie (3) – zapytanie w Lorel

select xml(results:{

select xml(result{b.title, b.author})

from bib.book b})

Page 38: Język zapytań dla XML

Porównanie (3) – zapytanie w XQL

document("http://www.bn.com")/bib->results {

book->result {

title | author

}

}

Page 39: Język zapytań dla XML

Porównanie (3) – zapytanie w XML-QLCONSTRUCT <results> {

WHERE<bib>

<book><title>$t</title>

</book> CONTENT_AS $b </bib> IN "www.bn.com/bib.xml"

CONSTRUCT <result>

<title>$t</title> { WHERE <author>$a</author> IN $b CONSTRUCT <author>$a</> }

</result> } </results>

Page 40: Język zapytań dla XML

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. Oczywiście operator ten można doimplementować.

Page 41: Język zapytań dla XML

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> </book></bib>

Page 42: Język zapytań dla XML

Obsługa linków - przykład

bib.book.(author.person, title) as Result Uzyskujemy wynik postaci

<Result><author pointer="true">A1</author><title>TCP/IP Illustrated</title></Result>

bib.book.(author.person, title) as Result Uzyskujemy wynik postaci

<Result><person id="A1"><last>Stevens</last><first>W.</first></person><title>TCP/IP Illustrated</title></Result>

Page 43: Język zapytań dla XML

Implementacja

Co i jak

Page 44: Język zapytań dla XML

Cechy obecnej implementacji 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

Page 45: Język zapytań dla XML

Cechy obecnej implementacji 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)

Brak operatorów imperatywnych – programista może dokonywać operacji zmieniających stan składu poprzez interfejs DOM, korzystając z referencji do węzłów XML uzyskanych poprzez zapytania.

Page 46: Język zapytań dla XML

Implementacja - narzędzia

Java SE 1.4, Xerces 1.4.3, JFlex, CUP.

Page 47: Język zapytań dla XML

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),

Page 48: Język zapytań dla XML

Implementacja - problemy

Użycie drzewa DOM jako składu spowodowało problemy implementacyjne,

Wartości tekstowe w DOM Brak typów danych w XML

Page 49: Język zapytań dla XML

Zakończenie

Page 50: Język zapytań dla XML

Kierunki rozwoju

Uzupełnienie systemu o perspektywy, Wykorzystanie DTD lub XML Schema, Wprowadzenie cech obiektowych, Optymalizacja zapytań, Zmiana modelu składu, Indeksowanie itp., …

Page 51: Język zapytań dla XML

Bibliografia

Przykłady zapytań w XML Query pochodzą z „XML Query Use Cases” (http://www.w3.org/TR/xmlquery-use-cases/)

Zapytania w pozostałych językach pochodzą z „XML Query Languages: Experiences and Exemplars” (http://www.w3.org/1999/09/ql/docs/xquery.html)

Kazimierz Subieta Teoria I Konstrukcja obiektowych języków zapytań

Rafał Hryniów, Tomasz Pieciukiewicz Język zapytań dla XML oparty na podejściu stosowym (praca magisterska)

Page 52: Język zapytań dla XML

Kontakt

Rafał Hrynió[email protected]

Tomasz [email protected]

Page 53: Język zapytań dla XML

Dziękujemy

Pytania???