Upload
shayla
View
38
Download
0
Embed Size (px)
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
Citation preview
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)
Dziękujemy
Pytania???