XQuery – konkurencja dla SQL? - Instytut Automatyki i Informatyki
Transkrypt
XQuery – konkurencja dla SQL? - Instytut Automatyki i Informatyki
XQuery – konkurencja dla SQL? Wprowadzenie – czym jest XQuery? Podstawy składni języka XQuery UŜycie XQuery XQuery – konkurencja dla SQL? XQuery w Oracle 10g r. 2 Oracle XML Query Service Tomasz Traczyk Podsumowanie Wydział Elektroniki i Technik Informacyjnych Politechnika Warszawska T. Traczyk XQuery – konkurencja dla SQL? 2 Po co XQuery XQuery?? Po co język zapytań do XML? • Wyszukiwanie w – dokumentach XML » z plików » z baz danych – innych źródłach w XML-u » strony WWW Wprowadzenie – czym jest XQuery » usługi sieciowe (Web services) » bazy danych » itp. • Przetwarzanie danych z tych źródeł – obliczenia – łączenie danych – kształtowanie formatu wyniku – przetwarzanie w stylu bliŜszym programistom (w porównaniu do XSLT) T. Traczyk XQuery – konkurencja dla SQL? 3 T. Traczyk XQuery – konkurencja dla SQL? 4 Język zapytań dla XML Czym jest XQuery XQuery?? XQuery (XML Query) Czego oczekujemy od języka zapytań? • 1. Powinien umoŜliwiać zapisanie złoŜonych warunków wyszukiwania Deklaratywny język zapytań 2. Powinien być deklaratywny – przeznaczony do wyszukiwania w źródłach XML-owych 3. Powinien zwracać wyniki w tej samej formie, w jakiej otrzymuje dane źródłowe – bazujący na XPath 2.0 – umoŜliwiający konstruowanie dokumentów XML 4. Powinien umoŜliwiać sortowanie – o moŜliwościach porównywalnych z językami zapytań dla baz danych 5. Powinien umoŜliwiać wykonywanie przekształceń wyszukanej informacji, • w tym agregacji Język funkcyjny – wolny od efektów ubocznych – z moŜliwością silnego typowania Dlaczego nie wystarczy XPath? • • • • Języki zapytań do baz danych (np. SQL, OQL) spełniają te oczekiwania Składnia XQuery – ma być czytelna dla człowieka XPath spełnia tylko 1. i 2. » nie jest dialektem XML Ale na bazie XPath moŜna zbudować język zapytań mający pozostałe poŜądane cechy T. Traczyk XQuery – konkurencja dla SQL? 5 XQuery – konkurencja dla SQL? T. Traczyk Przykład Przykład, c.d. Przeszukiwany dokument: Zapytanie XQuery: – wyszukiwanie publikacji z roku 1998 <?xml version = '1.0' encoding = 'windows-1250'?> <publikacje> <publikacja id="360" typ="REFERAT"> <tytul>Język XML w aplikacjach z bazami danych</tytul> <autorzy> <autor afiliacja="WEiTI"> <nazwisko>Traczyk</nazwisko><imiona>Tomasz</imiona> </autor> <autor afiliacja="WEiTI"> <nazwisko>Macewicz</nazwisko><imiona>Włodzimierz</imiona> </autor> </autorzy> <cechy> <cecha id="TYTUŁ_KONFER"> IV Konferencja uŜytkowników i developerów Oracle </cecha> <cecha id="MIEJSCE_KONF">Kościelisko</cecha> <cecha id="ORGANIZATOR">PLOUG</cecha> <cecha id="STRONY">133-146</cecha> </cechy> <rok>1998</rok> </publikacja> <publikacja> ... </publikacja> ... Uproszczony fragment danych wyjściowych z systemu informacji </publikacje> o publikacjach na Wydziale Elektroniki i Technik Informacyjnych Politechniki Warszawskiej T. Traczyk 6 XQuery – konkurencja dla SQL? Zmienna $b przebiega sekwencję węzłów będącą wynikiem ścieŜki XPath <odpowiedz> { for $b in doc("/public/publikacje.xml") )//publikacja doc( where $b//rok="1998" return <referat rok="{ {$b/rok} }" miejsce="{ {$b//cecha[@id='MIEJSCE_KONF']} }"> {$b/tytul} } </referat> } </odpowiedz> 7 T. Traczyk XQuery – konkurencja dla SQL? 8 Przykład, c.d. Przykład, c.d. Zapytanie XQuery: Zapytanie XQuery: – wyszukiwanie publikacji z roku 1998 – wyszukiwanie publikacji z roku 1998 Warunek where pozwala dodatkowo ograniczyć wynik <odpowiedz> { for $b in doc("/public/publikacje.xml") )//publikacja doc( where $b//rok="1998" return <referat rok="{ {$b/rok} }" miejsce="{ {$b//cecha[@id='MIEJSCE_KONF']} }"> {$b/tytul} } </referat> } </odpowiedz> <odpowiedz> w treści wyniku moŜna uŜyć wyraŜeń odwołujących się do zmiennych { for $b in doc("/public/publikacje.xml") )//publikacja doc( where $b//rok="1998" return <referat rok="{ {$b/rok} }" miejsce="{ {$b//cecha[@id='MIEJSCE_KONF']} }"> {$b/tytul} } </referat> } </odpowiedz> T. Traczyk XQuery – konkurencja dla SQL? Klauzula return kształtuje postać wyniku; 9 T. Traczyk Przykład, c.d. XQuery – konkurencja dla SQL? 10 Przykład, c.d. Zapytanie XQuery: Zapytanie XQuery: – wyszukiwanie publikacji z roku 1998 – wyszukiwanie publikacji z roku 1998 Cały wynik zapytania moŜna „wmontować” w strukturę XML <odpowiedz> { for $b in doc("/public/publikacje.xml") )//publikacja doc( where $b//rok="1998" return <referat rok="{ {$b/rok} }" miejsce="{ {$b//cecha[@id='MIEJSCE_KONF']} }"> {$b/tytul} } </referat> } </odpowiedz> <odpowiedz> { for $b in doc("/public/publikacje.xml") )//publikacja doc( where $b//rok="1998" return <referat rok="{ {$b/rok} }" miejsce="{ {$b//cecha[@id='MIEJSCE_KONF']} }"> {$b/tytul} } </referat> } </odpowiedz> Wynik: <odpowiedz> <referat rok="1998" miejsce="Kościelisko"> <tytul> Język XML w aplikacjach z bazami danych </tytul> </referat> ... </odpowiedz> T. Traczyk XQuery – konkurencja dla SQL? 11 T. Traczyk XQuery – konkurencja dla SQL? 12 ZałoŜenia XQuery Czytelność składni języka dla człowieka Deklaratywność NiezaleŜność od protokołów i środowisk uŜycia Uwzględnienie XML-owego modelu danych, przestrzeni nazw i schematów XML Działanie takŜe bez dostępu do schematów dokumentów Silne typowanie (typy proste i złoŜone) Istnienie kwantyfikatorów MoŜliwość operowania na hierarchiach i sekwencjach MoŜliwość łączenia informacji z wielu źródeł MoŜliwość wykonywania agregacji Transformacje dokumentów XML i moŜliwość tworzenia wynikowych struktur XML MoŜliwość nawigowania po odwołaniach (referencjach) do identyfikatorów T. Traczyk Standaryzacja XQuery Ciało standaryzujące XQuery – konkurencja dla SQL? • • Standaryzacja jest prowadzona przez XML Query Working Group w ramach W3C Język XQuery jest silnie zaleŜny od XPath 2.0 – standaryzacją zajmuje się ta sama grupa Stan standaryzacji • Główne dokumenty dotyczące standaryzacji XQuery mają status Candidate Recommendation (listopad 2005) • Proces standaryzacyjny wciąŜ trwa, ale jest bliski ukończenia 13 T. Traczyk XQuery – konkurencja dla SQL? 14 Podstawowe zasady języka Język funkcyjny Sekwencje • Wszystkie konstrukcje języka są wyraŜeniami zwracającymi wartość • • MoŜna je zagnieŜdŜać Podstawy składni języka XQuery 15 • Sekwencji nie moŜna zagnieŜdŜać • Porządek w sekwencji – zgodny z tzw. porządkiem dokumentu – chyba Ŝe uŜyto klauzuli order by • Format języka XQuery – konkurencja dla SQL? Pojedyncza jednostka jest toŜsama z jednoelementową sekwencją Na wyjściu teŜ sekwencja – dokument lub fragment T. Traczyk • – wynik wyraŜenia z zagnieŜdŜeniem zostaje „spłaszczony” – kolekcja dokumentów lub fragmentów • • • – węzłów Na wejściu tzw. sekwencja – dokument lub fragment • Uporządkowany ciąg jednostek (items): – wartości atomowych Wartości zwracane przez wyraŜenia są tzw. sekwencjami (w sensie XPath 2.0) Charakter przetwarzanej informacji • • Jawny zapis sekwencji: (jednostka1, jednostka2, ...) Swobodny Wielkość liter ma znaczenie Słowa kluczowe pisze się małymi literami T. Traczyk XQuery – konkurencja dla SQL? 16 Podstawowe elementy ję języka WyraŜenia • • Podstawowe elementy ję języka, zyka, c.d. Wartości logiczne Wartości wszystkich wyraŜeń są sekwencjami WyraŜenia zawierają – stałe i jawnie zapisane sekwencje • • • – odwołania do zmiennych Operatory i porównania Wartości true i false • • Operatory or i and oraz funkcja not() Efektywna wartość logiczna wyraŜeń » liczba 0 lub NaN – wywołania funkcji wbudowanych i uŜytkownika » pusta sekwencja • – prawda w przeciwnym wypadku – wyraŜenia FLWOR – nie dotyczy to jawnych konwersji cast as • • Mogą, ale nie muszą, być deklarowane • • 17 Część else jest obowiązkowa XQuery – konkurencja dla SQL? T. Traczyk Podstawowe elementy języka, c.d. 18 Budowa zapytania XQuery Funkcje wbudowane • • Postać: then wyraŜenie1 else wyraŜenie2 Komentarze moŜna zagnieŜdŜać XQuery – konkurencja dla SQL? Stosowane np. w klauzuli where if warunek Oznaczenie: (: ... :) – mogą być silnie typowane T. Traczyk Badają elementy sekwencji WyraŜenia warunkowe Porównywanie całych gałęzi (z węzłami podrzędnymi): deep-equal() Komentarze Oznacza się $nazwa Porównywanie toŜsamości węzłów – porządek: <<, >> • • • satisfies warunek • • – identyczność: is – wyraŜenia warunkowe Zmienne satisfies warunek – some $zmienna in sekwencja Porównania ogólne: =, !=, <, <=, >, >= sekwencji z kwantyfikatorem exists • Postać: – every $zmienna in sekwencja – połączenie porównania elementów » pusty napis – ścieŜki XPath • Porównania prostych wartości: eq, ne, lt, le, gt, ge – fałsz jeśli: – operatory Kwantyfikatory Typowe operatory arytmetyczne i logiczne XPath Wielka liczba funkcji wbudowanych XPath 2.0 • Obejmują m.in. Źródła danych Najprostszym zapytaniem XQuery jest • sama ścieŜka XPath – operacje na sekwencjach: insert-before(), remove(), reverse(), empty(), union(), intersect() • Wszystkie zapytania bazują – zmiennej na ścieŜkach XPath – operacje na węzłach: node-before(), name(),local-name() – funkcji – źródła danych – ścieŜka pozwala „dostać się” – operacje na wartościach: string(), data() – operacje arytmetyczne: abs(), floor(), round() do właściwych danych – agregacje: count(), sum(), min() w strukturze hierarchicznej ŚcieŜka XPath uŜyta w XQuery musi zaczynać się od źródła danych • Funkcje wbudowane udostępniające dane zewnętrzne: – doc(URI) – udostępnia dokument – moŜna w niej umieścić złoŜone warunki – operacje na tekstach: concat(), substring(), string-length(), upper-case(), contains(), starts-with() • – wyraŜenia regularne: matches(), replace() » Oracle10g: W XQuery moŜna korzystać ze składni ścieŜek nieco okrojonej w stosunku do XPath 2.0 URI dokumentu w repozytorium XDB – collection(URI) – udostępnia kolekcję » w Oracle10g r. 2 implementacja niezgodna ze specyfikacją » Oracle10g: – operacje na datach i czasie: date-equal(), date-less-than(), time-equal(), time-less-than(), year-from-date(), day-from-date(), adjust-time-to-timezone() URI folderu w repozytorium XDB – operacje na przedziałach czasu: add-yearMonthDurations(), add-dayTimeDurations() – obsługę błędów i śledzenie T. Traczyk XQuery – konkurencja dla SQL? 19 T. Traczyk XQuery – konkurencja dla SQL? 20 WyraŜenia FLWOR WyraŜenia FLWOR WyraŜenia FLWOR, c.d. Zasady Przykład: wypisanie w kolejności chronologicznej tytułów publikacji mających tylko jednego autora for $p in doc( "/public/publikacje.xml") )//publikacja let $a := $p/autorzy/autor where count($a) = 1 order by $p/rok return $p/tytul Wynik (fragment, a nie dokument!): ... <tytul>Język XSL</tytul> <tytul>Czy juŜ warto uŜywać XML?</tytul> <tytul>Schematy XML</tytul> ... • • ZagnieŜdŜanie wyraŜeń FLWOR • Wszystkie klauzule są opcjonalne – musi wystąpić for lub let WyraŜenia FLWOR moŜna zagnieŜdŜać Klauzula for • • SłuŜy do organizowania iteracji Przypisuje do zmiennej kolejne elementy sekwencji – wyniku wyraŜenia Klauzula let • • SłuŜy do wykonywania podstawień Przypisuje do zmiennej całą wartość wyraŜenia na raz Wynik: Klauzula where • <spis> <pozycja tytul="Język XML w aplikacjach z bazami danych"> <autor>Traczyk Tomasz</autor> <autor>Macewicz Włodzimierz</autor> </pozycja> ... </spis> Określa warunki filtrowania sekwencji zwróconej przez klauzule for i let Klauzula order by • Określa sortowanie tej sekwencji Klauzula return • Kształtuje postać wyniku XQuery – konkurencja dla SQL? T. Traczyk Pozwala tworzyć wielopoziomowe struktury <spis> { for $p in doc("/public/publikacje.xml") )//publikacja doc( return <pozycja tytul="{ {$p/tytul} }"> { for $a in $p//autor return <autor> {$a/nazwisko/text()} {" "} {$a/imiona/text()} </autor> } </pozycja> } </spis> 21 T. Traczyk Budowa zapytania XQuery, c.d. Konstruowanie struktur wynikowych • Umieszczanie (literalnie) elementów wynikowej struktury („szablonu”) w treści zapytania – wartości wyraŜeń XQuery wstawia się do „szablonu” przez ujęcie wyraŜeń w { } • Stosowanie computed constructors – konstruktory: » element, attribute, text » pi, comment » nazw » wartości wstawianych jednostek T. Traczyk Łączenie danych z róŜnych źródeł Przykład: for $p in doc("/public/publikacje.xml")//publikacja return <publikacja tytul="{$p/tytul/text()}"> { for $c in $p//cecha return element {lower-case($c/@id)} } { ( if ($c/@id="DATA_KONFER") ) then attribute rok {$p/rok/text()} } else nil , $c/text() ) } } </publikacja> • • XQuery dobrze nadaje się do łączenia danych z róŜnych źródeł MoŜna wykonywać np. – operacje podobne do złączeń relacyjnych – wyszukania zagnieŜdŜone Przykład: • Dodatkowy dokument: <instytucje> <instytucja kod="WEiTI">Wydział Elektroniki i Technik Informacyjnych</instytucja> <instytucja kod="IAiIS">Instytut Automatyki i Informatyki Stosowanej</instytucja> ... </instytucje> <publikacja tytul="Język XML w aplikacjach z bazami danych"> <tytuł_konfer> IV Konferencja uŜytkowników i developerów Oracle: Ewolucja systemów informatycznych: dane, sprzęt, oprogramowanie i aplikacje </tytuł_konfer> <miejsce_konf>Kościelisko</miejsce_konf> <data_konfer rok="1998">XI 1998</data_konfer> <organizator>PLOUG</organizator> <strony>133-146</strony> </publikacja> XQuery – konkurencja dla SQL? 22 Łączenie danych Wynik: – umoŜliwiają wyliczanie XQuery – konkurencja dla SQL? • 23 Łączone będą dane – publikacji – instytucji, w których afiliowani są autorzy T. Traczyk XQuery – konkurencja dla SQL? 24 Łączenie danych, c.d. Łączenie danych, c.d. Złączenie danych z róŜnych źródeł ZagnieŜdŜenie danych z róŜnych źródeł for $p in doc("/public/publikacje.xml") )//publikacja, doc( $i in doc("/public/instytucje.xml") )//instytucja doc( where $i/@kod = $p//autor/@afiliacja return <pozycja> {$p/tytul} {$i} </pozycja> for $p in doc("/public/publikacje.xml") )//publikacja doc( return <pozycja> {$p/tytul} { )//instytucja for $i in doc("/public/instytucje.xml") doc( where $i/@kod = $p//autor/@afiliacja return $i } </pozycja> Wynik: Wynik: <pozycja> <tytul>Język XML w aplikacjach z bazami danych</tytul> <instytucja kod="WEiTI">Wydział Elektroniki i Technik Informacyjnych</instytucja> </pozycja> <pozycja> <tytul>Język XML w aplikacjach z bazami danych</tytul> <instytucja kod="IAiIS">Instytut Automatyki i Informatyki Stosowanej</instytucja> </pozycja> <pozycja> <tytul>Język XML w aplikacjach z bazami danych – po roku</tytul> <instytucja kod="WEiTI">Wydział Elektroniki i Technik Informacyjnych</instytucja> </pozycja> ... • <pozycja> <tytul>Język XML w aplikacjach z bazami danych</tytul> <instytucja kod="WEiTI">Wydział Elektroniki i Technik Informacyjnych</instytucja> <instytucja kod="IAiIS">Instytut Automatyki i Informatyki Stosowanej</instytucja> </pozycja> <pozycja> <tytul>Język XML w aplikacjach z bazami danych – po roku</tytul> <instytucja kod="WEiTI">Wydział Elektroniki i Technik Informacyjnych</instytucja> </pozycja> ... Uzyskano powtórzenia, jak to przy złączeniu T. Traczyk XQuery – konkurencja dla SQL? 25 XQuery – konkurencja dla SQL? T. Traczyk Grupowanie i agregacje Grupowanie i agregacje, c.d. Grupowanie • • 26 Unikalność • Brak specyficznych konstrukcji językowych do grupowania Efekt grupowania moŜna uzyskać np. przez odpowiednie zagnieŜdŜanie wynikowych elementów XML for $a in distinctdistinct-values( doc("/public/publikacje.xml")//autor/@afiliacja ) return <instytucja kod="{$a}"> { for $p in doc("/public/publikacje.xml")//publikacja[.//autor/@afiliacja = $a] return <publikacja>{$p/tytul/text()}</publikacja> } </instytucja> Funkcja distinct-values() – eliminuje powtórzenia z wyniku zapytania – uŜywana np. w części in klauzuli for – działa na danych prostych typów Funkcje agregujące • sum(), avg(), count(), max() i min() Przykład: zliczenie publikacji związanych z poszczególnymi instytucjami for $i in doc("/public/instytucje.xml")//instytucja let $p := doc("/public/publikacje.xml")//publikacja[.//autor/@afiliacja = $i/@kod] return <instytucja liczba="{count( count($p) "> count( )}" {$i/text()} </instytucja> Wynik: <instytucja kod="IAiIS"> <publikacja>Język XML w aplikacjach z bazami danych</publikacja> </instytucja> <instytucja kod="WEiTI"> <publikacja>Język XML w aplikacjach z bazami danych</publikacja> <publikacja>Język XML w aplikacjach z bazami danych – po roku</publikacja> ... </instytucja> ... T. Traczyk XQuery – konkurencja dla SQL? Wynik: <instytucja liczba="7">Wydział Elektroniki i Technik Informacyjnych</instytucja> <instytucja liczba="1">Instytut Automatyki i Informatyki Stosowanej</instytucja> 27 T. Traczyk XQuery – konkurencja dla SQL? 28 Modularyzacja Budowa modułu Moduły • • Kod moŜe być podzielony na moduły – zapytań – biblioteczne • Moduły biblioteczne – zawierają obowiązkowo deklarację module – – – – – Zmienne zewnętrzne (external) – pełnią rolę parametrów – wartości są dostarczane przez środowisko wykonania • • Oracle10g r. 2 Przykład: Funkcje uŜytkownika Prolog – deklaracja xquery (opcjonalna) » wersja » strona kodowa – deklaracja module (w modułach bibliotecznych) – włączane do modułów zapytań deklaracją import module • Modularyzacja, c.d. • declare declare function local: ($param) ) local:liczba-autorow( { count($param//autor) } ; MoŜliwe jest – definiowanie funkcji uŜytkownika – wykorzystanie ich w zapytaniach • • • » docelowa przestrzeń nazw deklaracje import schema deklaracje import module deklaracje przestrzeni nazw deklaracje zmiennych deklaracje funkcji • – przeciąŜać nazw funkcji uŜytkownika for $p in doc( doc("/public/publikacje.xml” )//publikacja let $c := local: ($p) ) local:liczba-autorow( return <pozycja autorow="{ {$c} }"> {$p/tytul} } </pozycja> – definiować funkcji o zmiennej liczbie parametrów Wynik: Funkcje mogą mieć parametry Parametry i wartość funkcji mogą być typowane Nie moŜna Funkcje lokalne muszą być umieszczone w predefiniowanej przestrzeni nazw local <pozycja autorow="2"> <tytul>Język XML w aplikacjach z bazami danych</tytul> </pozycja> <pozycja autorow="1"> <tytul>Język XML w aplikacjach z bazami danych – po roku</tytul> </pozycja> <pozycja autorow="1"> <tytul>Język XSL</tytul> </pozycja> ... Ciało – zapytanie (wyraŜenie XQuery) – nie zaimplementowano modularyzacji » wszystko w module głównym T. Traczyk XQuery – konkurencja dla SQL? 29 T. Traczyk Typowanie • Gdzie przydaje się typowanie – sortowanie i porównywanie • • Typy predefiniowane XML Schema • Typy ze schematu powiązanego z danym dokumentem – operacje wymagające konwersji – wykrywanie błędów w zapytaniach • Typowanie dynamiczne • Typy predefiniowane XPath 2.0, np. xdt:untyped, xdt:untypedAtomic, xdt:anyAtomicType Typowanie w XQuery – w oparciu o schemat dokumentu Deklaracje typów • • – gdy brak schematu » jawne deklaracje typu » w ostateczności: przetwarzanie reprezentacji tekstowej Import schematów: import schema • Jawne deklaracje typów – zmiennych » domyślne i jawne konwersje • 30 Typowanie c.d. Dostępne typy Typy XQuery – konkurencja dla SQL? – parametrów i wyników funkcji Jawne określenie typu wyraŜeń: treat as (statyczne, bez konwersji) Operacje na typach Walidacja na podstawie schematu – wyraŜenie validate » działa na węźle » sprawdza zgodność ze schematem » przypisuje dynamicznie typy – tryby walidacji » strict – elementy spoza schematu powodują błąd » lax – elementy spoza schematu pozostają nieznanego typu Sprawdzenia w czasie wykonania – wykonalności operacji – poprawności jawnych i domyślnych konwersji – zgodności typów z deklaracjami • Konstrukcje XPath 2.0 pozwalające wyszukać elementy/atrybuty określonego typu, np. element(*, nazwa_typu) • • Jawne konwersje typów: cast as • Przetwarzanie zaleŜne od typu: typeswitch... case... default... • Wydobywanie wartości: Badanie czy element sekwencji jest danego typu: instance of – znakowej: fn:string() – daje konkatenację reprezentacji znakowych – typowanej: fn:data() – daje sekwencję wartości typowanych Typowanie statyczne • • • T. Traczyk XQuery – konkurencja dla SQL? 31 Opcjonalne (Static Typing Feature) Polega na sprawdzaniu poprawności typów w czasie kompilacji zapytania XQuery Zaimplementowane w Oracle 10g r. 2 T. Traczyk XQuery – konkurencja dla SQL? 32 XQuery a przestrzenie nazw XQueryX Predefiniowane przestrzenie i prefiksy Co to takiego? • xs – typy danych XML Schema • xsi – prefiks atrybutu wskazującego instancję schematu • xdt – typy danych XPath 2.0 • fn – funkcje wbudowane • local – funkcje uŜytkownika zdefiniowane lokalnie w module zapytania • ora – funkcje rozszerzające dodane przez Oracle • • Przykład: for $t in doc("/public/publikacje.xml") )/publikacje/publikacja/tytul return $t doc( <xq:query query xmlns:xq="http://www.w3.org/2001/06/xqueryx"> <xq:flwr flwr> flwr <xq:forAssignment forAssignment variable="$t"> <xq:step step axis="CHILD"> <xq:function function name="doc"> <xq:constant constant datatype="CHARSTRING">publik.xml</xq:constant constant> constant </xq:function function> function <xq:identifier identifier>publikacje</xq:identifier identifier> identifier identifier </xq:step step> step <xq:step step axis="CHILD"> <xq:identifier identifier>publikacja</xq:identifier identifier> identifier identifier </xq:step step> step <xq:step step axis="CHILD"> <xq:identifier identifier>tytul</xq:identifier identifier> identifier identifier </xq:step step> step </xq:forAssignment forAssignment> forAssignment <xq:return return> return <xq:variable variable>$t</xq:variable variable> variable variable </xq:return return> return </xq:flwr flwr> flwr </xq:query query> query UŜycie przestrzeni nazw • • • Przetwarzanie XQuery wykorzystuje przestrzenie nazw UŜycie przestrzeni nazw w definicjach funkcji uŜytkownika jest obowiązkowe Deklaracje przestrzeni nazw – declare namespace – definiuje inne przestrzenie nazw (i prefiksy) – declare default element namespace – określa przestrzeń domyślną – deklaracje działają i na dane wejściowe, i wyjściowe declare namespace p="urn://ploug.org"; for $i in doc("/public/instytucje.xml")//instytucja return <p:instytucja>{$i/text()}</p:instytucja> <p:instytucja xmlns:p="urn://ploug.org"> Wydział Elektroniki i Technik Informacyjnych </p:instytucja> ... T. Traczyk XQuery – konkurencja dla SQL? Reprezentacja XQuery w składni XML Nieczytelna dla człowieka, ale łatwa do przetwarzania za pomocą narzędzi XML-owych 33 XQuery – konkurencja dla SQL? T. Traczyk 34 Do czego XQuery? Funkcje • Wyszukiwanie – w źródłach XML-owych – w źródłach mieszanych • Transformacje – przekształcanie XML – scalanie XML z wielu źródeł • • • • UŜycie XQuery Agregacje i inne obliczenia Integracja danych heterogenicznych Usługi sieciowe (Web Services) Przetwarzane informacje • • • Środowiska • • Dynamiczne serwisy WWW – w połączeniu z XSLT i CSS • • T. Traczyk XQuery – konkurencja dla SQL? 35 T. Traczyk Dokumenty XML – w tym informacja semistrukturalna Dane z baz danych – przekształcone do XML Usługi sieciowe (Web Services) Systemy inter- i intranetowe Systemy wielowarstwowe – warstwa DBMS – warstwa mid-tier Systemy rozproszone – zwłaszcza bazujące na SOAP Systemy EDI i e-business – zwłaszcza B2B XQuery – konkurencja dla SQL? 36 XQuery a XSLT XSLT • XQuery a SQL XQuery Programowanie deklaratywne (szablony) • XQuery • • • • • • Programowanie deklaratywne i proceduralne (np. iteracje) • • • • • Mało podatny na optymalizację zapytań Bardziej podatny na optymalizację zapytań Dość nienaturalny sposób programowania • • • • • • Rozwlekły i mało czytelny kod • Kod dość zwarty, ale czytelny Przeznaczony pierwotnie do formatowania Przetwarza w zasadzie jedno źródło Dość trudny do nauczenia Przeznaczony do przetwarzania danych MoŜe przetwarzać wiele źródeł Łatwiejszy do nauczenia Sposób programowania bliŜszy programistom, SQL Deklaratywny Podatny na optymalizację zapytań Tylko zapytania Przetwarza dane hierarchiczne Zwraca sekwencje (z węzłami) Kolejność danych w odpowiedzi zgodna • • • • • • z kolejnością dokumentu zwłaszcza znającym inne języki zapytań Deklaratywny Podatny na optymalizację zapytań Zapytania, DML i DDL Przetwarza dane relacyjne Zwraca relacje (tabele) Kolejność danych w odpowiedzi losowa (jeśli bez sortowania) (jeśli bez sortowania) • Dobry do przetwarzania informacji strukturalnej • Przetwarza tylko informację strukturalną i semistrukturalnej XQuery – konkurencja dla SQL? T. Traczyk 37 Implementacje XQuery Najbardziej znane implementacje • – Saxon Testy implementacji XQuery • Mogą być składane za pomocą „konsol” XQuery • Rozbudowany zestaw zapytań testowych • SłuŜyć mogą do zapytań ad-hoc, nauki języka, testowania zapytań itp. Narzędzia automatyzujące testowanie Usługi WWW (Web Services) – Qexo (GNU) • XQuery a Java Zapytania interaktywne • • – Qizx/open Komercyjne • Narzędzia do XQuery – Oracle 10g r. 2 • – MS SQL Server 2005 • – BEA AquaLogic Data Services Platform • 38 Konteksty uŜycia XQuery BumbleBee Open-source itp. XQuery – konkurencja dla SQL? T. Traczyk • Stylus Studio XQuery Tools Oracle JDeveloper 10g • • MoŜna uŜyć JDBC i funkcji SQL/XML – OJXQI (Oracle Java XQuery API) Opracowywany jest standard interfejsu – zaangaŜowane Oracle, IBM, BEA, Sun, Sybase i in. Oracle10g r. 2 udostępnia wyniki zapytań – „ideologia” zgodna z JDBC XQuery przez protokół SOAP – „stylistyka” API zgodna z JDBC i JAXP Przetwarzanie w DBMS • Istniejące implementacje mają własne API programistycznego XQJ XQuery zwraca XML, jest więc idealnym językiem zapytań dla WebServices Altova XMLSpy XQuery Development • – nawigacyjny mechanizm dostępu („kursory”) – przewidziana jest obsługa transakcji XQuery w postaci SQL/XML daje się zanurzać w PL/SQL Przetwarzanie w warstwie mid-tier • T. Traczyk XQuery – konkurencja dla SQL? 39 Interfejsy API do języka Java T. Traczyk XQuery – konkurencja dla SQL? 40 XML i XQuery w integracji danych XML jako format integracji • • • • • • XQuery jako narzędzie do integracji Bardzo odpowiedni format do integracji DuŜa siła wyrazu – moŜe reprezentować dowolne dane mające postać tekstową Elastyczność Łatwo dostępne narzędzia Własny język wielu źródeł danych – serwisy w XML, XHTML – Web Services Stosunkowo łatwa konwersja innych źródeł – bazy danych – arkusze kalkulacyjne – HTML – itp. T. Traczyk • • • Dobre narzędzie do integracji danych XML Cechy języka zapytań XQuery – deklaratywny » łatwe pisanie zapytań nie trzeba kodować algorytmów – uniwersalny » łatwe łączenie dane z wielu źródeł » dowolne formatowanie wyniku – wydajny » zapytania podlegają optymalizacji XQuery umoŜliwia – integrację źródeł danych » w czasie rzeczywistym » bez replikowania informacji – efektywność » dobry stosunek wydajności i jakości wyniku do nakładów – elastyczność integracji » łatwe rozszerzanie » łatwa adaptacja do zmian danych źródłowych XQuery – konkurencja dla SQL? XQuery w Oracle 10g r. 2 41 T. Traczyk XQuery w technologii Oracle • • • 42 Konsola XQuery Oracle10g release 2 • XQuery – konkurencja dla SQL? SQL*Plus 10g r. 2 Wbudowane rozwiązania zgodne z XQuery 1.0 Working Draft April 2005 – z niewielkimi odstępstwami Nowe funkcje SQL/XML (wg SQL:2005) – XMLQuery » zwraca w wyniku fragment dokumentu (o typie XMLType) – XMLTable » elementy wynikowej sekwencji umieszcza w wierszach wirtualnej tabeli, która moŜe być wykorzystana w klauzuli FROM zapytań SQL Dodatkowe funkcje rozszerzające XPath Nowe polecenie SQL*Plus: xquery Przykłady zapytań XQuery, umieszczone w niniejszej prezentacji, zostały sprawdzone przy uŜyciu tej właśnie implementacji XQuery • Nowe polecenie xquery umoŜliwia interaktywne wykonywanie zapytań XQuery SQL*Plus: Release 10.2.0.1.0 – Production Połączono z: Personal Oracle Database 10g Release 10.2.0.1.0 - Production SQL> xquery doc("/public/publikacje.xml")//publikacja[@id="354"]//autor 2 / Result Sequence -----------------------------------------------------------------------------------<autor afiliacja="WEiTI"><nazwisko>Traczyk</nazwisko><imiona>Tomasz</imiona></autor> • Dodano kilka nowych komend set, sterujących działaniem polecenia xquery Oracle JDeveloper 10g release 3 • • Wsparcie dla składni XQuery (w tym wbudowany schemat) Wykonywanie zapytań XQuery wprost z IDE Oracle Application Server 10g release 3 • Technologia XQS (XML Query Service, dawniej XDS) w AS10g r. 3 T. Traczyk XQuery – konkurencja dla SQL? 43 T. Traczyk XQuery – konkurencja dla SQL? 44 XQuery w SQL/XML XQuery w SQL/XML, c.d. Funkcja xmlquery() xmlquery() • • • • Funkcja xmltable() xmltable() Przyjmuje tekstowo zapytanie XQuery Zwraca wynikowy XML w postaci XMLType – klauzula returning content jest obowiązkowa – w Oracle10g nie ma opcji returning sequence W celu otrzymania wyniku tekstowego naleŜy uŜyć metody getclobval() lub getstringval() Dodatkowo moŜna uŜyć metody extract() by sformatować wynik • • • • select x.column_value.getclobval() from xmltable(' xmltable( for $p in doc("/public/publikacje.xml")//publikacja return <publikacja> {$p/tytul} <autor1> {$p//autor[1]/nazwisko/text(), " ", $p//autor[1]/imiona/text()} </autor1> </publikacja> ') ) x; select xmlquery('doc("/public/publikacje.xml")//publikacja' xmlquery( returning content).extract('.').getclobval() content) as xml from dual; • Przyjmuje tekstowo zapytanie XQuery Do deklarowania przestrzeni nazw w słuŜy specjalne wyraŜenie xmltable( xmlnamespaces('urn://ploug.org' as "p") "), xmlnamespaces( ") ...) Kolejne elementy wynikowej sekwencji umieszcza w wierszach wirtualnej tabeli Tej wirtualnej tabeli moŜna uŜyć w klauzuli from zapytania SQL W ten sposób moŜna uŜyć dowolnej konsoli SQL jako konsoli XQuery <publikacja> <tytul>Język XML w aplikacjach z bazami danych</tytul> <autor1>Traczyk Tomasz</autor1> </publikacja> <publikacja> <tytul>Język XML w aplikacjach z bazami danych – po roku</tytul> <autor1>Traczyk Tomasz</autor1> </publikacja> ... T. Traczyk XQuery – konkurencja dla SQL? 45 XQuery w SQL/XML, c.d. 46 Źródła danych dla XQuery w Oracle 10g 10g r. 2 Funkcja xmltable() xmltable(), () c.d. Repozytorium XML DB • Wynik zapytania moŜe być interpretowany jako zbiór kolumn • – sterowanie klauzulami columns i path – jeśli źródło jest w postaci „kanonicznej”, klauzulę path moŜna pominąć Nadaje się więc do transformacji XML w dane relacyjne • doc(URI) – udostępnia dokument przez URI dokumentu w repozytorium XDB • collection(URI) – udostępnia kolekcję przez URI folderu w repozytorium XDB select x.* from xmltable(' xmltable( for $p in doc("/public/publikacje.xml")//publikacja return <publikacja> {$p/tytul} <autor1> {($p//autor[1]/nazwisko/text(), " ", $p//autor[1]/imiona/text())} </autor1> </publikacja>' columns tytul VARCHAR2(100) path '//tytul' , autor1 VARCHAR2(50) path '//autor1' ) x; TYTUL AUTOR1 Język XML w aplikacjach z bazami danych Traczyk Tomasz Język XML w aplikacjach z bazami danych – po roku Traczyk Tomasz ... ... T. Traczyk XQuery – konkurencja dla SQL? T. Traczyk XQuery – konkurencja dla SQL? Przykład: wypisanie nazwy elementu głównego doc("/public/publikacje.xml") )/name(./*) doc( zwraca: publikacje collection("/public") )/name(./*) collection( zwraca: instytucje publikacje 47 T. Traczyk XQuery – konkurencja dla SQL? 48 Źródła danych dla XQuery w Oracle 10g 10g r. 2, c.d. Źródła danych dla XQuery w Oracle 10g 10g r. 2, c.d. Obiekty XMLType Tabela/perspektywa • • Funkcja ora:view rozszerzająca XPath – udostępnia dane z tabeli lub perspektywy w postaci „kanonicznej” XML » sekwencja elementów <ROW>, zawierających elementy nazwane tak jak kolumny » nazwy wielkimi literami – dla danych relacyjno-obiektowych tworzy odpowiednie struktury zagnieŜdŜone Przykłady: Tabela: Zapytanie: • Przykłady: Tabela r-o: CREATE TABLE instytucje_xml (kod VARCHAR2(12), opis XMLType) XMLType CREATE TABLE instytucje (kod VARCHAR2(12), nazwa VARCHAR2(100)); select xmlquery('$i xmlquery $i/instytucja' $i passing opis as "i" returning content) from instytucje_xml; ora:view("instytucje")/. ora:view <ROW> <KOD>WEiTI</KOD> <NAZWA>Wydział Elektroniki i Technik Informacyjnych</NAZWA> </ROW> <ROW> <KOD>IAiIS</KOD> <NAZWA>Instytut Automatyki i Informatyki Stosowanej</NAZWA> </ROW> Zapytanie: Pochodzące np. z – wierszy tabel obiektów, kolumn tabel relacyjnych, – perspektyw XML-owych Dostęp za pomocą klauzuli passing as funkcji xmlquery lub xmltable <instytucja kod="WEiTI">Wydział Elektroniki i Technik Informacyjnych</instytucja> <instytucja kod="IAiIS">Instytut Automatyki i Informatyki Stosowanej</instytucja> ora:view("instytucje")//NAZWA ora:view <NAZWA>Wydział Elektroniki i Technik Informacyjnych</NAZWA> <NAZWA>Instytut Automatyki i Informatyki Stosowanej</NAZWA> Tabela r-o: CREATE TABLE instytucje_xml (kod VARCHAR2(12), opis XMLType) XMLType Zapytanie : ora:view("instytucje_xml")/. ora:view select ro.kod, xml.column_value.getclobval() from instytucje_xml ro, xmltable('$i passing opis as "i") xmltable $i/instytucja' $i "i" xml; <ROW> <KOD>WEiTI</KOD> <OPIS> <instytucja kod="WEiTI">Wydział Elektroniki i Technik Informacyjnych</instytucja> </OPIS> </ROW> XQuery – konkurencja dla SQL? T. Traczyk 49 WEiTI <instytucja kod="WEiTI">Wydział Elektroniki i Technik Informacyjnych</instytucja> IAiIS <instytucja kod="IAiIS">Instytut Automatyki i Informatyki Stosowanej</instytucja> Źródła danych dla XQuery w Oracle 10g 10g r. 2, c.d. • • • Dostęp do danych • Dokumenty zewnętrzne XML dostępne przez protokół http mogą być wykorzystane w zapytaniach XQuery Wykorzystuje się funkcję httpuritype() UmoŜliwia to integrację danych zewnętrznych w zapytaniach w DBMS Wydajność jest ograniczona – konieczność parsowania XML XQuery – konkurencja dla SQL? Funkcja ora:view() WyraŜenia regularne • • Funkcje ora:matches() i ora:replace() WyraŜenia regularne w Oracle10g nie są zgodne ze standardem XPath Wyszukiwanie pełnotekstowe • • select xmlquery('$i xmlquery $i/.‘ $i passing xmlparse( xmlparse( document httpuritype('http://.../instytucje.xml').getclob() httpuritype( ).getclob() ) as "i" returning content) from dual; T. Traczyk 50 Oracle 10g 10g r. 2 – funkcje rozszerzające XPath Dokumenty zewnętrzne • XQuery – konkurencja dla SQL? T. Traczyk Funkcja ora:contains pozwala wyszukiwać z uŜyciem mechanizmów pełnotekstowych UŜywana zwykle w klauzuli where wyraŜenia FLWOR Obliczenia • 51 Funkcja ora:sqrt wylicza pierwiastek kwadratowy T. Traczyk XQuery – konkurencja dla SQL? 52 Oracle10g Oracle10g r. 2 – wydajność zapytań XQuery Optymalizacja zapytań XQuery • • • Zapytanie XQuery jest optymalizowane – łącznie z otaczającym SQL – w podobny sposób Optymalizacja XQuery – zapytanie XQuery jest zamieniane na bloki podzapytań SQL ze specjalnymi operatorami działającymi na sekwencjach – te bloki są optymalizowane w kontekście całego zapytania SQL – eliminuje się zbędne pośrednie materializacje wyników – nieliczne konstrukcje XQuery, które nie dają się zamienić na podzapytania SQL, są interpretowane przez wbudowany interpreter Optymalizacja XPath – mechanizm XPath rewrite » zamienia zapytania ścieŜkowe XPath na zapytania relacyjne, jeśli moŜna » umoŜliwia wykorzystanie indeksów Oracle XML Query Service Przykład: Indeks: CREATE UNIQUE INDEX instytucje_idx ON instytucje(kod); T. Traczyk XQuery – konkurencja dla SQL? 53 T. Traczyk Oracle XQS • MoŜliwe źródła danych • • Narzędzie do integracji danych – działające w warstwie middle-tier – napisane w Jawie (aplikacja serwera OC4J) – uŜywające XML jako wspólnego formatu danych – uŜywające języka XQuery do definiowania sposobu integracji • • • Dostępność – składnik AS10g r. 3 Dostęp do źródeł w XQuery Dokumenty XML Dokumenty nie-XML – transformowane na bieŜąco – opis transformacji w D3L Dane z baz relacyjnych – przez JDBC Dane uzyskiwane z Web Services przez SOAP XML zwracany przez klasę Java lub EJB – dostępne przez WSIF Provider (Web Services Invocation Framework) • • XQuery – konkurencja dla SQL? 55 XQS moŜe buforować dane źródłowe – polepszenie wydajności – parametry buforowania ustawiane w pliku konfiguracyjnym T. Traczyk Przez funkcje zastępujące standardową doc() – definiowane deklaratywnie (pliki konfiguracyjne XQS) D3L (Data Definition Description Lang.) • • Buforowanie danych T. Traczyk 54 Źródła danych dla XQS XML Query Service (dawniej XML Data Synthesis) • XQuery – konkurencja dla SQL? • Część technologii Oracle Application Server Integration InterConnect Język opisu formatów nie-XML-owych – dialekt XML – określa » format źródła » sposób jego udostępnienia w XML Motor D3L wbudowano w XQS – definicja źródła danych moŜe odwoływać się do URL opisu w D3L – XQS wykonuje translację on-line i udostępnia do integracji dane w XML XQuery – konkurencja dla SQL? 56 Wyniki XQS Dostęp do wyników integracji • • • Przykład – zadanie • Biblioteka znaczników JSP • Zapytania XQuery – zapamiętane w plikach .xq API klienta dla języka Java Komponenty sesyjne EJB • » mogą być sparametryzowane za • pomocą zmiennych zewnętrznych (declare variable ... external ) – bezstanowy – zachowujący stan • w wielu krokach • – zdefiniowane w pliku konfiguracyjnym » umoŜliwia pobieranie wyniku • Dane wejściowe Widoki XQuery UŜycie: Widoki XQuery udostępnione – jako źródła danych w innych zapytaniach jako Web Services – jako usługi sieciowe Opis zadania • • XQuery – konkurencja dla SQL? Zestawić repety za ostatni semestr z podaniem terminu opłaty i kwoty opłaty w złotych Rozwiązanie • T. Traczyk Spis repet studentów w poszczególnych semestrach – perspektywa w bazie danych Oracle Cennik opłat za powtarzanie przedmiotów, ceny w euro – plik Excela w formacie CSV Lista terminów wnoszenia opłat – plik XML Kursy walut – usługa sieciowa 57 Cztery źródła danych – SQL – dokument tekstowy z konwersją przez D3L – dokument XML – Web Service Integracja w XQS przez zapytanie XQuery T. Traczyk Źródło danych: dokument XML Konfiguracja w pliku xqs-config.xml <document-source isCached="false"> <function-name namespace="http://xmlns.oracle.com/ias/xqs"> ceny_dokumentCSV </function-name> <documentURL>http://.../ceny.csv</documentURL > <XMLTranslate method="D3L"> <schema-file>http://.../ceny_CSV2XML.xml</schema-file> </XMLTranslate> </document-source> <xqs-sources> <document documentdocument-source isCached="false"> <function-name namespace="http://xmlns.oracle.com/ias/xqs"> terminy_dokumentXML </function-name> <documentURL>http://.../terminy.xml</documentURL> </document documentdocument-source> source ... </xqs-sources> Konfiguracja D3L <?xml version="1.0"?> <!DOCTYPE message SYSTEM "d3l.dtd"> <message name="excelData" type="ceny_repet"> <imparray id="wiersz"> <struct> <field name="typ_zaliczenia"><termstring endchar=","/></field> <field name="nazwa_typu"><termstring endchar=","/></field> <field name="cena_w_euro"><number><termstring endchar="\n"/></number></field> </struct> <ceny_repet> </imparray> <repeta> <struct id="ceny_repet"> <typ_zaliczenia>E</typ_zaliczenia> <field name="repeta"> <nazwa_typu>Egzamin</nazwa_typu> <typeref type="wiersz"/> <cena_w_euro>150</cena_w_euro> </field> </repeta> </struct> ... </message> </ceny_repet> <terminy_platnosci> <termin typ_zaliczenia="E">2005-10-20</termin> <termin typ_zaliczenia="Z">2005-10-20</termin> <termin typ_zaliczenia="P">2005-09-25</termin> <termin typ_zaliczenia="L">2005-09-25</termin> </terminy_platnosci> XQuery – konkurencja dla SQL? 58 Źródło danych: dokument CSV Konfiguracja w pliku xqs-config.xml T. Traczyk XQuery – konkurencja dla SQL? 59 T. Traczyk XQuery – konkurencja dla SQL? 60 Źródło danych: zapytanie SQL Źródło danych: usługa sieciowa (Web (Web Service) Service) Konfiguracja w pliku xqs-config.xml Konfiguracja w pliku xqs-config.xml <wsdl-source isCached="false"> <function-name prefix="xqs">repety_zrodloSQL</function-name> <wsdlURL>http://.../repety_SQL.wsdl</wsdlURL> <operation>pobierzDaneSQL</operation> <port>portSQL</port> <input-parameters> <part position="1" name="semestr"> <schema-type prefix="xs">string</schema-type> </part> </input-parameters> </wsdl-source> <wsdl-source isCached="true"> <function-name prefix="xqs">kursyWalut_WebService</function-name> <wsdlURL>http://.../CurrencyExchangeService.wsdl</wsdlURL> <operation>getRate</operation> <service>CurrencyExchangeService</service> <port>CurrencyExchangePort</port> <input-parameters> <part position="1" name="country1""> <schema-type prefix="xs">string</schema-type> </part> <part position="2" name="country2"/> <schema-type prefix="xs">string</schema-type> </part> </input-parameters> </wsdl-source> Konfiguracja „usługi” w pliku WSDL (fragment) <binding name="wiazanieSQL" type="oe:zrodloSQL_typ"> <sql:binding/> <ROW num="1"> <operation name="pobierzDaneSQL"> <ID_STUDENTA>120032</ID_STUDENTA> <sql:operation XMLtransform="XSU-client"> <NAZWISKO>Abacki</NAZWISKO> select * from repety where semestr = :1 </sql:operation> <IMIONA>Aleksander</IMIONA> <input name="SqlInput"> <KOD_PRZEDMIOTU>BD1</KOD_PRZEDMIOTU> <sql:input>semestr</sql:input> </input> <SEMESTR>05L</SEMESTR> <output name="SqlResult"/> <TYP_ZALICZENIA>L</TYP_ZALICZENIA> <fault name="SqlFault"/> </operation> </ROW> </binding> ... <service name="repety_SQL"> <port name="portSQL" binding="oe:wiazanieSQL"> <sql:address data-source-location="jdbc/OracleCoreDS" user="..." password="..." /> </port> </service> T. Traczyk XQuery – konkurencja dla SQL? • 61 Konfiguracja odwołuje się do „obcego” dokumentu WSDL, opisującego usługę T. Traczyk XQuery – konkurencja dla SQL? 62 Zapytanie XQuery declare declare declare declare declare namespace xqs = "http://xmlns.oracle.com/ias/xqs"; function xqs:repety_zrodloSQL ($id_semestru as xs:string) external; function xqs:ceny_dokumentCSV() external; function xqs:kursyWalut_WebService($j1 as xs:string, $j2 as xs:string) external; function xqs:terminy_dokumentXML() external; let $t := xqs:terminy_dokumentXML(), $c := xqs:ceny_dokumentCSV(), $k := xqs:kursyWalut_WebService("euro", "poland") return <oplaty> { for $r in xqs:repety_zrodloSQL('05L')//ROW let $ce := $c//repeta[typ_zaliczenia=$r//TYP_ZALICZENIA]/cena_w_euro/text(), $cz := $ce * $k, $te := $t//termin[@typ_zaliczenia=$r//TYP_ZALICZENIA]/text() order by $r//KOD_PRZEDMIOTU, $r//TYP_ZALICZENIA, $r//NAZWISKO, $r//IMIONA return <oplaty> <repeta> <repeta> <oplata> <oplata> {$r//KOD_PRZEDMIOTU} <KOD_PRZEDMIOTU>BD1</KOD_PRZEDMIOTU> {$r//TYP_ZALICZENIA} <TYP_ZALICZENIA>E</TYP_ZALICZENIA> <kwota waluta="EUR">{$ce}</kwota> <kwota waluta="EUR">150</kwota> <kwota waluta="PLN">{$cz}</kwota> <kwota waluta="PLN">588,450014591217</kwota> <termin_wplaty>{$te}</termin_wplaty> <termin_wplaty>2005-10-20</termin_wplaty> </oplata> </oplata> <student> <student> {$r//NAZWISKO} <NAZWISKO>Cabacki</NAZWISKO> {$r//IMIONA} <IMIONA>Cezary</IMIONA> </student> </student> </repeta> } </repeta> </oplaty> ... Podsumowanie </oplaty> T. Traczyk XQuery – konkurencja dla SQL? 63 T. Traczyk XQuery – konkurencja dla SQL? 64 XQuery a SQL Podsumowanie Przewagi XQuery • • • • Standard XQuery • • Bogatsza postać przetwarzanej informacji Dostosowanie do przetwarzania informacji semistrukturalnej Bardziej konsekwentna składnia języka Bardzo dobre dopasowanie do potrzeb środowiska WWW, w tym Web Services Braki XQuery • • Przewagi SQL • • • • • • • • Raczej uzupełnieniem w zastosowaniach związanych z XML, WWW, integracją danych itp. Alternatywą dla SQL/XML A konkurencją – jeszcze nie dziś... T. Traczyk XQuery – konkurencja dla SQL? 65 XQuery – konkurencja dla SQL? T. Traczyk XQuery – konkurencja dla SQL? Brak DML – nie ma instrukcji DML ani zarządzania transakcjami Brak mechanizmu refleksji (np. funkcji typu eval()) Praktyczne znaczenie języka XQuery Prostota przetwarzanej informacji Dostosowanie do licznych narzędzi i interfejsów Wielka rzesza specjalistów Efektywne metody optymalizacji i szeroko znane sposoby strojenia DML i DDL XQuery konkurencją dla SQL? • • • Wspierany przez wielkich producentów oprogramowania Bliski ukończenia 67 Szybko rośnie Czynniki wzrostu znaczenia XQuery – pojawienie się implementacji » zintegrowanych z DBMS – spełnione » zintegrowanych z wyszukiwarkami internetowymi – jeszcze brak Spodziewana rola XQuery – wygodny środek do jednolitego wyszukiwania informacji w Internecie, bazach danych i innych zasobach informacji – narzędzie do scalania i przekształcania informacji – język zapytań uzupełniający moŜliwości SQL T. Traczyk XQuery – konkurencja dla SQL? 66