Język XML Query. Czym jest XML Query? Po co XML Query? Tomasz Traczyk. Czym jest XML Query? Wprowadzenie do składni języka.



Podobne dokumenty
Język XML Query. Tomasz Traczyk. Politechnika Warszawska e mail:

Cechy języka XQUERY. o na wejściu dokument lub fragment względnie kolekcja dokumentów lub fragmentów o na wyjściu dokument lub fragment.

XQuery. XQuery. Przykład. dokument XML. XQuery (XML Query Language) XQuery 1.0: An XML Query Language. W3C Recommendation

Systemy GIS Tworzenie zapytań w bazach danych

XML extensible Markup Language 7

XQuery konkurencja dla SQL?

SQL w 24 godziny / Ryan Stephens, Arie D. Jones, Ron Plew. Warszawa, cop Spis treści

Oracle11g: Wprowadzenie do SQL

Słowem wstępu. Część rodziny języków XSL. Standard: W3C XSLT razem XPath 1.0 XSLT Trwają prace nad XSLT 3.0

Języki XPath i XQuery

Języki XPath i XQuery

Bloki anonimowe w PL/SQL

Przykładowy dokument XML

SQL Server i T-SQL w mgnieniu oka : opanuj język zapytań w 10 minut dziennie / Ben Forta. Gliwice, Spis treści

Języki XPath i XQuery

Język XQuery jako narzędzie do integracji danych Oracle XML Data Synthesis

Język SQL. Rozdział 2. Proste zapytania

ZMODYFIKOWANY Szczegółowy opis przedmiotu zamówienia

SQL, LIKE, IN, CASE, EXISTS. Marcin Orchel

DECLARE <nazwa_zmiennej> typ [(<rozmiar> )] [ NOT NULL ] [ { := DEFAULT } <wartość> ];

Język XQuery jako narzędzie do integracji danych Oracle XML Data Synthesis

XML w bazach danych i bezpieczeństwie

Spis treści. Przedmowa

Wykład 7 Implementacja języka SQL w systemach baz danych Oracle sortowanie, funkcje agregujące i podzapytania.

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Podstawy programowania skrót z wykładów:

XPath XML Path Language. XPath. XSLT część 1. XPath data model. Wyrażenia XPath. Location paths. Osie (axes)

Testowanie i walidacja oprogramowania

Programowanie obiektowe

Paradygmaty programowania

SQL - Structured Query Language -strukturalny język zapytań SQL SQL SQL SQL

Relacyjne bazy danych. Podstawy SQL

Przestrzenne bazy danych Podstawy języka SQL

Model semistrukturalny

Bazy danych dokumentów XML wykład 2 XQuery

Bash - wprowadzenie. Bash - wprowadzenie 1/39

XQuery. sobota, 17 grudnia 11

Microsoft SQL Server Podstawy T-SQL

w PL/SQL bloki nazwane to: funkcje, procedury, pakiety, wyzwalacze

Przetwarzanie dokumentów XML i zaawansowane techniki WWW Wykład 03

Generowanie dokumentów XML z tabel relacyjnych - funkcje SQLX

Bazy danych dokumentów XML wykład 3 modyfikacja dokumentów

Słowem wstępu. Standard: W3C XPath razem XSLT 1.0. XPath razem z XQuery 1.0 i XSLT 2.0. XPath trwają prace nad XPath 3.

Laboratorium nr 5. Temat: Funkcje agregujące, klauzule GROUP BY, HAVING

Programowanie funkcyjne wprowadzenie Specyfikacje formalne i programy funkcyjne

XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery

29. Poprawność składniowa i strukturalna dokumentu XML

Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek].

Pakiety podprogramów Dynamiczny SQL

Języki skryptowe w programie Plans

Relacyjne bazy danych. Podstawy SQL

SQL (ang. Structured Query Language)

Wykład I. Wprowadzenie do baz danych

SQL do zaawansowanych analiz danych część 1.

KOTLIN. Język programowania dla Androida

Wprowadzenie do baz danych

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

Wprowadzenie do języka SQL

Język SQL podstawy zapytań

Wykład 2 Składnia języka C# (cz. 1)

Tworzenie zapytań do Microsoft SQL Server

Szablony funkcji i szablony klas

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

XML w bazach danych i bezpieczeństwie

Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.)

Metody dostępu do danych

Procedury i funkcje składowane

Algorytmika i Programowanie VBA 1 - podstawy

Program szkoleniowy Efektywni50+ Moduł IV Podstawy relacyjnych baz danych i język SQL

Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.)

Godzina (wtorek)

LITERATURA. Wprowadzenie do systemów baz danych C.J.Date; WNT Warszawa 2000

Tworzenie raportów XML Publisher przy użyciu Data Templates

Materiały do laboratorium MS ACCESS BASIC

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Bazy danych dokumentów XML wykład 1 wprowadzenie

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

PRZEWODNIK PO PRZEDMIOCIE

XML i nowoczesne technologie zarządzania treścią

- język zapytań służący do zapisywania wyrażeń relacji, modyfikacji relacji, tworzenia relacji

Język programowania DELPHI / Andrzej Marciniak. Poznań, Spis treści

1 Podstawy c++ w pigułce.

Szkolenie autoryzowane. MS 6232 Wdrażanie bazy danych Microsoft SQL Server 2008 R2

INFORMATYKA Pytania ogólne na egzamin dyplomowy

Język PL/SQL. Rozdział 5. Pakiety podprogramów. Dynamiczny SQL

Python. Skąd taka nazwa? Kurs systemu UNIX 1

Podprogramy. Rozdział 11 Procedury i funkcje składowane

Standard SQL/XML. Wprowadzenie do XQuery

Temat : SBQL 1 obiektowy język zapytań.

System operacyjny Linux

Plan. Aplikacja. Architektura aplikacji. Architektura aplikacji Tworzenie aplikacji Application Builder podstawy

Język PL/SQL. Rozdział 4. Procedury i funkcje składowane

Typy, klasy typów, składnie w funkcji

Szkolenie Oracle SQL podstawy. Terminy lutego 2010 First Minute! 1100zł!

Wstęp Wprowadzenie do BD Podstawy SQL. Bazy Danych i Systemy informacyjne Wykład 1. Piotr Syga

Spis treści 1. Wstęp 2. Projektowanie systemów informatycznych

Cw.12 JAVAScript w dokumentach HTML

QUERY język zapytań do tworzenia raportów w AS/400

Przydatne sztuczki - sql. Na przykładzie postgres a.

Wykład XII. optymalizacja w relacyjnych bazach danych

Transkrypt:

Język XML Query Język XML Query Tomasz Traczyk ttraczyk@ia.pw.edu.pl http://www.ia.pw.edu.pl/~ttraczyk/ Politechnika Warszawska Wydział Elektroniki i Technik Informacyjnych Instytut Automatyki i Informatyki Stosowanej 2 Po co XML Query? Po co język zapytań do XML? Wyszukiwanie w dokumentach XML innych źródłach dostępnych w XML-u (serwisy WWW, bazy danych itp.) Przetwarzanie danych z wyż. wym. źródeł obliczenia łączenie danych przetwarzanie w stylu bliższym programistom (w porównaniu do XSLT) Czego oczekujemy od języka zapytań? 1. Powinien umożliwiać zapisanie złożonych warunków wyszukiwania 2. Powinien być deklaratywny 3. Powinien zwracać wyniki w tej samej formie, w jakiej istnieją dane źródłowe 4. Powinien umożliwiać wykonywanie przekształceń wyszukanej informacji, w tym agregacji Dlaczego nie wystarczy XPath? Języki zapytań do baz danych (np. SQL, OQL) spełniają te oczekiwania XPath spełnia tylko 1. i 2. Ale na bazie XPath można zbudować język zapytań mający pozostałe pożądane cechy XML Query (XQuery) Jest deklaratywnym językiem zapytań przeznaczonym do wyszukiwania w źródłach XML-owych bazującym na XPath 2.0 umożliwiającym konstruowanie dokumentów XML o możliwościach porównywalnych z językami zapytań dla baz danych Jest to język funkcyjny wolny od efektów ubocznych z możliwością silnego typowania Składnia XQuery ma być czytelna dla człowieka nie jest dialektem XML wielkość liter ma znaczenie słowa kluczowe języka pisze się małymi literami 3 4

Przeszukiwany dokument: Przykład <?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> </publikacje> Uproszczony fragment danych wyjściowych z systemu informacji o publikacjach na Wydziale Elektroniki i Technik Informacyjnych Politechniki Warszawskiej Zapytanie XQuery: Zmienna $b przebiega sekwencję węzłów będącą wynikiem ścieżki XPath <referat rok="$b/rok" miejsce="$b//cecha[@id='miejsce_konf']"> $b/tytul 5 6 Zapytanie XQuery: Warunek where pozwala dodatkowo ograniczyć wynik <referat rok="$b/rok" miejsce="$b//cecha[@id='miejsce_konf']"> $b/tytul Zapytanie XQuery: Klauzula kształtuje postać wyniku; w treści wyniku można użyć wyrażeń odwołujących się do zmiennych <referat rok="$b/rok" miejsce="$b//cecha[@id='miejsce_konf']"> $b/tytul 7 8

Zapytanie XQuery: Zapytanie XQuery: Cały wynik zapytania można wmontować w strukturę XML <referat rok="$b/rok" miejsce="$b//cecha[@id='miejsce_konf']"> $b/tytul <referat rok="$b/rok" miejsce="$b//cecha[@id='miejsce_konf']"> $b/tytul Wynik: <referat rok="1998" miejsce="kościelisko"> <tytul> Język XML w aplikacjach z bazami danych </tytul> 9 10 Standaryzacja XQuery Stan standaryzacji 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 Dokumenty dotyczące standaryzacji XQuery mają status Working Draft Proces standaryzacyjny jest jest daleki od zakończenia, ale postępuje Standard jest słabo ustabilizowany w kolejnych wersjach dokumentów są dość duże zmiany w szczególności zmieniają się szczegóły składni, nazwy funkcji itp. Wymagania dla 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 11 12

Podstawowe elementy języka Podstawowe elementy języka, c.d. Sekwencje Uporządkowany ciąg jednostek (items): węzłów wartości atomowych Pojedyncza jednostka jest tożsama z jednoelementową sekwencją Sekwencji nie można zagnieżdżać Porządek w sekwencji zgodny z tzw. porządkiem dokumentu chyba że użyto klauzuli order by Zapis: (jednostka1, jednostka2, ) Wyrażenia Wartości wszystkich wyrażeń są sekwencjami Wyrażenia zawierają stałe i jawnie zapisane sekwencje odwołania do zmiennych operatory wywołania funkcji wbudowanych i użytkownika ścieżki XPath wyrażenia FLWOR wyrażenia warunkowe Zmienne Oznacza się $nazwa Mogą, ale nie muszą, być deklarowane Operatory i porównania Typowe operatory arytmetyczne i logiczne Porównania prostych wartości: eq, ne, lt, le, gt, ge Porównania ogólne: =,!=, <, <=, >, >= połączenie porównania elementów sekwencji z kwantyfikatorem exists Porównywanie tożsamości węzłów identyczność: is porządek: <<, >> Porównywanie całych gałęzi (z węzłami podrzędnymi): deep-equal() Funkcje wbudowane Wielka liczba funkcji wbudowanych XPath 2.0 Obejmują m.in. operacje na sekwencjach operacje na węzłach i wartościach operacje arytmetyczne agregacje operacje na tekstach wyrażenia regularne operacje na datach i czasie obsługę błędów i śledzenie Wartości logiczne Wartości true i false Operatory or i and oraz funkcja not() Efektywna wartość logiczna wyrażeń fałsz jeśli: liczba 0 lub NaN pusta sekwencja pusty napis prawda w przeciwnym wypadku nie dotyczy to jawnych konwersji cast as Komentarze Oznaczenie: (: :) Komentarze można zagnieżdżać 13 14 Budowa zapytania XQuery Wyrażenia FLWOR XPath Najprostszym zapytaniem XQuery jest sama ścieżka XPath Wszystkie zapytania bazują na ścieżkach XPath ścieżka pozwala dostać się do właściwych danych w strukturze hierarchicznej można w niej umieścić złożone warunki W XQuery można korzystać z nieco okrojonej w stosunku do XPath składni ścieżek niektóre implementacje mogą nie mieć tego ograniczenia (Full Axis Feature) Źródła danych Ścieżka XPath użyta w XQuery musi zaczynać się od zmiennej funkcji źródła danych Funkcje wbudowane udostępniające dane zewnętrzne: doc(uri) udostępnia zewnętrzny dokument collection(uri) udostępnia zewnętrzną kolekcję (np. dane z bazy) Wyrażenia FLWOR Przykład: wypisanie w kolejności chronologicznej tytułów publikacji mających tylko jednego autora for $p in doc("publik.xml")//publikacja let $a := $p/autorzy/autor where count($a) = 1 order by $p/rok $p/tytul Wszystkie klauzule są opcjonalne, ale musi wystąpić przynajmniej raz 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 Klauzula where Określa warunki filtrowania sekwencji zwróconej przez klauzule for i let Klauzula order by Określa sortowanie tej sekwencji Klauzula Kształtuje postać wyniku 15 16

Wyrażenia FLWOR, c.d. Budowa zapytania XQuery, c.d. Zagnieżdżanie wyrażeń FLWOR <spis> for $p in doc("publik.xml")//publikacja <pozycja tytul="$p/tytul"> for $a in $p//autor <autor nazwisko="$a/nazwisko/text()"/> </pozycja> </spis> Wynik: <spis> <pozycja tytul="język XML w aplikacjach z bazami danych"> <autor nazwisko="traczyk"/> <autor nazwisko="macewicz"/> </pozycja> </spis> Konstruowanie wynikowych struktur XML 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 umożliwiają wyliczanie nazw wartości wstawianych jednostek Wyrażenia warunkowe Postać: if warunek then wyrażenie1 else wyrażenie2 Część else jest obowiązkowa Kwantyfikatory Postać: every $zmienna in sekwencja satisfies warunek some $zmienna in sekwencja satisfies warunek Badają elementy sekwencji Stosowane np. w klauzuli where Unikalność Funkcja distinct-values() eliminuje powtórzenia z wyniku zapytania używana np. w części in klauzuli for 17 18 Łączenie danych Grupowanie i agregacje Łączenie danych z różnych źródeł XQuery dobrze nadaje się do łączenia danych z różnych źródeł Przykład: Dodatkowy dokument: <instytucje> <instytucja kod="weiti">wydział Elektroniki</instytucja> </instytucje> Zapytanie złączenie danych publikacji i danych instytucji, w których afiliowani są autorzy for $p in doc("publik.xml")//publikacja, $i in doc("instyt.xml")//instytucja where $i/@kod = $p//autor/@afiliacja <pozycja> $p/tytul $i </pozycja> Grupowanie Brak specyficznych konstrukcji językowych do grupowania Efekt grupowania można uzyskać np. przez odpowiednie zagnieżdżanie wynikowych elementów XML Funkcje agregujące sum(), avg(), count(), max() i min() Przykład: Zliczenie publikacji związanych z poszczególnymi instytucjami for $i in doc("instyt.xml")//instytucja let $p := doc("publik.xml")//publikacja[.//autor/@afiliacja = $i/@kod] <instytucja> <nazwa>$i/text()</nazwa> <liczba>count($p)</liczba> </instytucja> 19 20

Modularyzacja Typowanie Funkcje użytkownika Możliwe jest definiowanie funkcji użytkownika wykorzystanie ich w zapytaniach Nie można przeciążać nazw funkcji użytkownika definiować funkcji o zmiennej liczbie parametrów Przykład: define function liczba-autorow($param) count($param//autor) for $p in doc("publik.xml")//publikacja let $c := liczba-autorow($p) <pozycja autorow="$c"> $p/tytul </pozycja> Moduły W nowszych propozycjach standardu przewidziano mechanizmy modularyzacji kodu Kod może być podzielony na moduły zapytań biblioteczne Prolog modułu zawiera różne deklaracje Moduły biblioteczne zawierają deklarację module, definiującą m.in. nazwę modułu włączane do modułów zapytań deklaracją import module Typy Gdzie przydaje się typowanie sortowanie i porównywanie operacje wymagające konwersji wykrywanie błędów w zapytaniach Typowanie w XQuery w oparciu o schemat dokumentu gdy brak schematu jawne deklaracje typu domyślne i jawne konwersje w ostateczności: przetwarzanie reprezentacji tekstowej Dostępne typy Typy predefiniowane XML Schema Typy predefiniowane XPath 2.0, np. xdt:untyped, xdt:untypedatomic, xdt:anyatomictype Typy ze schematu powiązanego z danym dokumentem Deklaracje typów Import schematów: import schema Jawne deklaracje typów zmiennych parametrów i wyników funkcji Jawne określenie typu wyrażeń: treat as (statyczne, bez konwersji) 21 22 Typowanie c.d. XQuery a przestrzenie nazw Typowanie dynamiczne 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 Operacje na typach Konstrukcje XPath 2.0 pozwalające wyszukać elementy/atrybuty określonego typu, np. element(*, nazwa_typu) Jawne konwersje typów: cast as Badanie czy element sekwencji jest danego typu: instance of Przetwarzanie zależne od typu: typeswitch case default Wydobywanie wartości: znakowej: fn:string() daje konkatenację reprezentacji znakowych typowanej: fn:data() daje sekwencję wartości typowanych Przetwarzanie XQuery wykorzystuje przestrzenie nazw Predefiniowane przestrzenie i prefiksy: xs typy danych XML Schema xdt typy danych XPath 2.0 fn funkcje wbudowane local funkcje użytkownika zdefiniowane lokalnie w module zapytania Deklaracje przestrzeni nazw declare namespace definiuje inne przestrzenie nazw (i prefiksy) declare default element namespace określa przestrzeń domyślną W najnowszych wersjach propozycji standardu użycie przestrzeni nazw w definicjach funkcji użytkownika jest obowiązkowe Typowanie statyczne Opcjonalne (Static Typing Feature) Nie wszystkie problemy rozwiązano Brak implementacji 23 24

Konteksty użycia XQuery Zapytania interaktywne XQuery a Java Mogą być składane za pomocą konsol XQuery Służyć mogą do zapytań ad-hoc, nauki języka, testowania zapytań itp. W przyszłości dostępne zapewne przez serwisy WWW (server pages) Niezbędna jest możliwość zanurzania języka zapytań w językach ogólnego przeznaczenia Istniejące implementacje mają własne API Dla języka Java opracowywany jest standard interfejsu programistycznego XQJ zaangażowane Oracle, IBM, BEA, Sun, Sybase i in. ideologia zgodna z JDBC stylistyka API zgodna z JDBC i JAXP przewidziana jest obsługa transakcji zapewniony ma być nawigacyjny mechanizm dostępu ( kursory ) 25 26 XQueryX Implementacje XQuery Co to takiego? Reprezentacja XQuery w składni XML Nieczytelna dla człowieka, ale łatwa do przetwarzania za pomocą narzędzi XML-owych Przykład: for $t in doc("publik.xml")/publikacje/publikacja/tytul $t <xq:query xmlns:xq="http://www.w3.org/2001/06/xqueryx"> <xq:flwr> <xq:forassignment variable="$t"> <xq:step axis="child"> <xq:function name="doc"> <xq:constant datatype="charstring">publik.xml</xq:constant> </xq:function> <xq:identifier>publikacje</xq:identifier> </xq:step> <xq:step axis="child"> <xq:identifier>publikacja</xq:identifier> </xq:step> <xq:step axis="child"> <xq:identifier>tytul</xq:identifier> </xq:step> </xq:forassignment> <xq:> <xq:variable>$t</xq:variable> </xq:> </xq:flwr> </xq:query> Najbardziej znane implementacje Saxon (open-source) Qizx/open (open-source) Qexo (GNU) BumbleBee Testy implementacji XQuery Rozbudowany zestaw zapytań testowych Narzędzia automatyzujące testowanie XQuery w Oracle Oracle XQuery Technology Preview niepełna implementacja uwzględnia bardzo starą wersja propozycji standardu (November 2002) zrealizowana w Javie Inne cechy OJXQI własne API do Javy XQuery uzupełniony o zmienne związane dostęp do danych z bazy funkcja sqlquery jako źródło danych (wykorzystuje XSU z XDK) Przydatność praktyczna: mierna 27 28

Braki XQuery Niestabilny standard częste znaczne zmiany Brak DML nie ma instrukcji DML ani zarządzania transakcjami Brak mechanizmu refleksji (np. funkcji typu eval()) Brak integracji z bazami danych jeśli źródłem danych jest baza danych, to zapytanie XQuery powinno korzystać z możliwości optymalizacji zapytań dostarczanych przez DBMS, np. przepisywanie zapytań (query rewrite) użycie indeksów wyszukiwanie pełnotekstowe dostępne implementacje nie mają takich możliwości można co najwyżej jako źródło danych zastosować ręcznie przygotowane zapytanie SQL 29 30 Rozwój standardu XQuery Wspierany przez wielkich producentów oprogramowania Wymaga jeszcze sporo pracy Język XML Query Praktyczne znaczenie języka XQuery Obecnie jeszcze niewielkie Warunki wzrostu znaczenia ustabilizowanie standardu pojawienie się implementacji zintegrowanych z DBMS wyszukiwarkami internetowymi Spodziewana rola XQuery wygodny środek do jednolitego wyszukiwania informacji w Internecie bazach danych innych zasobach informacji narzędzie do scalania i przekształcania informacji 31 32