Język zapytań dla XML

Post on 05-Jan-2016

38 views 0 download

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

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?

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?

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)

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.

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.”

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

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.

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.

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

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.

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.

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.”

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

Nasze rozwiązanie

Czyli jak można zrobić to lepiej

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ń

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.

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.

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

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

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

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

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>

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

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

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

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

@year | title

}

}

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>

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

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>

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 ] ] ]

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

Porównanie (2) – zapytanie w XQL

Zadanie tego zapytania nie jest możliwe

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>

Porównanie (2) – zapytanie u nas

bib.book.(author, title) as Result

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>

Porównanie (3) – zapytanie w YATLmake

results [ *result [ title [ $t ],

$as ] ]

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

bib [ *book [ title [ $t ],

*($as) author ]

Porównanie (3) – zapytanie w Lorel

select xml(results:{

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

from bib.book b})

Porównanie (3) – zapytanie w XQL

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

book->result {

title | author

}

}

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>

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ć.

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>

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>

Implementacja

Co i jak

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

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.

Implementacja - narzędzia

Java SE 1.4, Xerces 1.4.3, JFlex, CUP.

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

Implementacja - problemy

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

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

Zakończenie

Kierunki rozwoju

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

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)

Kontakt

Rafał Hryniówr.hryniow@chello.pl

Tomasz Pieciukiewiczpietia@pjwstk.edu.pl

Dziękujemy

Pytania???