1 / 63

Języki zapytań dla XML

Języki zapytań dla XML. XPath XQuery. Plan wykładów. Wprowadzenie do XML Struktura dokumentów XML Języki zapytań dla XML XML a bazy danych. Plan wykładu. XPath XQuery. XPath 1.0. Język umożliwiający wskazywanie elementów, atrybutów i całych fragmentów dokumentu XML

elysia
Download Presentation

Języki zapytań dla XML

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Języki zapytań dla XML XPath XQuery

  2. Plan wykładów • Wprowadzenie do XML • Struktura dokumentów XML • Języki zapytań dla XML • XML a bazy danych

  3. Plan wykładu • XPath • XQuery

  4. XPath 1.0 • Język umożliwiający wskazywanie elementów, atrybutów i całych fragmentów dokumentu XML • Rekomendacja W3C (1999) • Wykorzystywany w: XSLT, XLink, XQuery

  5. XPath 1.0 Możliwości: • Nawigacja po drzewiastej strukturze dokumentu • Korzystanie z funkcji • Przetwarzanie tekstu • Korzystanie z wyrażeń zagnieżdżonych

  6. Struktura dokumentu • Struktura dokumentu XML może zostać przedstawiona w postaci drzewa • Drzewo dokumentu zawiera węzły • element, atrybut, tekst, przestrzeń nazw, instrukcja przetwarzania, komentarz, dokument • XPath rozróżnia pokrewieństwo między poszczególnymi węzłami

  7. Struktura dokumentu <Pracownicy> <Pracownik pesel="56022812345"> <Nazwisko> Jaworek </Nazwisko> <Data_przyjecia>01.10.1980</Data_przyjecia> <Zespol> Projektowania </Zespol> </Pracownik> </Pracownicy>

  8. document element element element element element Struktura dokumentu attribute text text text

  9. Struktura dokumentu Do węzłów można się odnosić poprzez odwołanie do: • Rodzaju węzła • Nazwy węzła

  10. Struktura dokumentu Odwołanie do rodzaju węzła: • node() • text() • comment() • element() • ...

  11. Struktura dokumentu Odwołanie do nazwy węzła: • Dotyczy elementu lub atrybutu • W odwołaniu należy podać nazwę elementu lub atrybutu • Znak * zastępuje dowolną nazwę

  12. Struktura dokumentu – słowa kluczowe

  13. XPath – wyrażenia • Podstawowym wyrażeniem języka XPath jest ścieżka (ang. path) • Ścieżka pozwala na lokalizację węzłów w dokumencie • Ścieżka składa się z jednego lub więcej kroków (ang. step) oddzielonych znakiem „ / ” • Krok definiuje kierunek poruszania się po drzewie dokumentu oraz węzeł docelowy lub wyrażenie filtrujące • Zbiór alternatywnych ścieżek oddzielonych „|” tworzy wzór (ang. pattern)

  14. XPath – wyrażenia Wyrażenia XPath zwracają wartości typu: • boolean – wartość logiczna • node-set – zbiór węzłów • number – wartość liczbowa • string – łańcuch znaków

  15. Wyszukiwanie node() text() … child descendent-or-self … path child::node()

  16. <?xml version="1.0" encoding="UTF-8" ?> <budowla> <zamek numer="1" krolewna="Brak" smok="Brak"> <opis>Ładny</opis> <wartosc>250000</wartosc> <wiek>750</wiek> </zamek> <zamek numer="2" krolewna="Jest" smok="Brak"> <opis>Ładny. Królewna oczekuje na księcia :)</opis> <wartosc>499000</wartosc> <wiek>610</wiek> </zamek> <zamek numer="3" krolewna="Jest" smok="Jest"> <opis>Interesujący. Ładny. Niebezpieczny.</opis> <wartosc>990000</wartosc> <wiek>900</wiek> </zamek> </budowla>

  17. średniowiecze.xml D budowla E krolewna numer zamek smok A E A A opis wartosc wiek E E E T T T

  18. Przykładowe ścieżki • child::text() - dostęp do zawartości tekstowej węzłów dzieci • parent::node() – do elementu rodzica • self::* - do aktualnego węzła • following-sibling::comment() – do komentarzy występujących na tym samym poziomie co dany węzeł ale następujących po nim • descendant::zamek – do wszystkich elementów zamek, potomków aktualnego węzła

  19. Przykładowe ścieżki • /child::budowla/child::zamek/child::opis – dostęp do elementów o nazwie opis, będących dziećmi elementów o nazwie zamek, które są dziećmi korzenia dokumentu Wynik: <opis>Ładny</opis> <opis>Ładny. Królewna oczekuje na księcia :)</opis> <opis>Interesujący. Ładny. Niebezpieczny.</opis>

  20. Przykładowe ścieżki • /child::budowla/child::*/child::wartosc – dostęp do elementów o nazwie wartość, będących dziećmi wszystkich elementów będących dziećmi korzenia dokumentu Wynik: <wartosc>250000</wartosc> <wartosc>499000</wartosc> <wartosc>990000</wartosc>

  21. Dostęp do atrybutów • Słowo kluczowe attribute • Dostęp w kolejnym kroku, czyli wykorzystanie „/” /child::budowla/child::zamek/attribute::numer Wynik: 1 2 3

  22. Skróty w notacji

  23. Przykładowe ścieżki Zastosowanie skrótów /child::budowla/child::zamek/child::opis <=> /budowla/zamek/opis /child::budowla/child::*/child::wartosc <=> /budowla/*/wartosc /child::budowla/child::zamek/attribute::numer <=> /budowla/zamek/@numer

  24. Wyrażenia filtrujące • Umieszczane w nawiasach klamrowych [ ] • Wykorzystywane do zawężania obszaru poszukiwań • Wykorzystują część funkcji XPath, operatory porównania i operatory logiczne

  25. Operatory • Porównania: =, !=, >, >=, &lt;, &lt;= • Logiczne: and, or, not • Arytmetyczne:+, -, *, div, mod

  26. <?xml version="1.0" encoding="UTF-8" ?> <budowla> <zamek numer="1" krolewna="Brak" smok="Brak"> <opis>Ładny</opis> <wartosc>250000</wartosc> <wiek>750</wiek> </zamek> <zamek numer="2" krolewna="Jest" smok="Brak"> <opis>Ładny. Królewna oczekuje na księcia :)</opis> <wartosc>499000</wartosc> <wiek>610</wiek> </zamek> <zamek numer="3" krolewna="Jest" smok="Jest"> <opis>Interesujący. Ładny. Niebezpieczny.</opis> <wartosc>990000</wartosc> <wiek>900</wiek> </zamek> </budowla>

  27. Przykłady wyrażeń filtrujących /budowla/zamek[opis = ‘Ładny’] Wynik: <zamek numer="1" krolewna="Brak" smok="Brak"> <opis>Ładny</opis> <wartosc>250000</wartosc> <wiek>750</wiek> </zamek>

  28. Przykłady wyrażeń filtrujących /budowla/zamek[@numer < 3] Wynik: <zamek numer="1" krolewna="Brak" smok="Brak"> <opis>Ładny</opis> <wartosc>250000</wartosc> <wiek>750</wiek> </zamek> <zamek numer="2" krolewna="Jest" smok="Brak"> <opis>Ładny. Królewna oczekuje na księcia :)</opis> <wartosc>499000</wartosc> <wiek>610</wiek> </zamek>

  29. Przykłady wyrażeń filtrujących /budowla/zamek[(@smok=‘Jest’) and (@krolewna=‘Jest’)] Wynik: <zamek numer="3" krolewna="Jest" smok="Jest"> <opis>Interesujący. Ładny. Niebezpieczny.</opis> <wartosc>990000</wartosc> <wiek>900</wiek> </zamek>

  30. Przykłady wyrażeń filtrujących /budowla/zamek[number(wartosc) > (number(wiek)*1000)] Wynik: <zamek numer="3" krolewna="Jest" smok="Jest"> <opis>Interesujący. Ładny. Niebezpieczny.</opis> <wartosc>990000</wartosc> <wiek>900</wiek> </zamek>

  31. Przykłady wyrażeń filtrujących //zamek[*=‘Ładny’] – badanie elementów potomnych Wynik: <zamek numer="1" krolewna="Brak" smok="Brak"> <opis>Ładny</opis> <wartosc>250000</wartosc> <wiek>750</wiek> </zamek>

  32. Przykłady wyrażeń filtrujących //zamek[@*=‘Brak’] – badanie atrybutów Wynik: <zamek numer="1" krolewna="Brak" smok="Brak"> <opis>Ładny</opis> <wartosc>250000</wartosc> <wiek>750</wiek> </zamek> <zamek numer="2" krolewna="Jest" smok="Brak"> <opis>Ładny. Królewna oczekuje na księcia :)</opis> <wartosc>499000</wartosc> <wiek>610</wiek> </zamek>

  33. Przykłady wyrażeń filtrujących /budowla/zamek[@numer=1]/opis Wynik: <opis>Ładny</opis> //zamek[wiek > 700]/wartosc Wynik: <wartosc>250000</wartosc> <wartosc>990000</wartosc>

  34. Funkcja position() • Wybór z drzewa dokumentu węzła o określonym numerze wystąpienia • Zlicza wyłącznie dzieci, nie pozwala na sprawdzanie zagnieżdżonej struktury /budowla/zamek[position()=2] /budowla/zamek[position()!=3] /budowla/zamek[2]

  35. Funkcje operujące na łańcuchach concat(string l1, string l2,...) – łączenie contains(string l1, string wzorzec) – czy l1 zawiera wzorzec starts-with (string l1, string wzorzec) – czy l1 zaczyna się od wzorca substring(string l1, number pocz, number kon) substring-after, substring-before, translate ...

  36. Inne funkcje Funkcje operujące na liczbach (number):ceiling, floor, round, number Funkcje operujące na węzłach: position, sum, count, last

  37. Plan wykładu • XPath • XQuery

  38. Wymagania W3C dla języka zapytań XML • Przynajmniej jedna składnia XML • Deklaracyjność • Niezależność od protokołu komunikacyjnego • Respektowanie składni XML, przestrzeni nazw i XML Schema • Wsparcie dla prostych i złożonych typów danych • Wsparcie dla operacji na hierarchiach i sekwencjach struktur dokumentów • Łączenie informacji z wielu dokumentów • Agregacja • Transformacja między strukturami dokumentów

  39. XQuery • XQuery 1.0 jest generalizacją XPath 2.0 • XQuery wykorzystuje do poruszania się po drzewie danych ścieżki zdefiniowane w języku XPath

  40. XQuery • Możliwość wyszukiwania nie tylko w pojedynczych dokumentach lecz w kolekcjach dokumentów • Kolekcja – zbiór dokumentów XML logicznie ze sobą powiązanych

  41. Wyrażenia XPath w XQuery • Korzeń określony jako collection("/Uczelnia") collection("/Uczelnia")//child::node()[Nazwisko = "Jaworek"] <Pracownik> <Nazwisko>Jaworek</Nazwisko> <PESEL>56022812345</PESEL> <Data_ur>28.02.1956</Data_ur> <Data_przyjecia>01.10.1980</Data_przyjecia> <Dzieci>Brak</Dzieci> <Zespol>Projekt ZEUS</Zespol> </Pracownik> <Student> <Nazwisko>Jaworek</Nazwisko> <PESEL>82022812345</PESEL> <Data_ur>28.02.1982</Data_ur> <Data_przyjecia>01.10.2003</Data_przyjecia> <Wydzial>RAu2</Wydzial> <Kierunek>Informatyka</Kierunek> </Student>

  42. XQuery • Korzeń określony jako document("/Uczelnia/pracownicy.xml") document("/Uczelnia/pracownicy.xml")//Pracownik[ Nazwisko = "Jaworek"] <Pracownik> <Nazwisko>Jaworek</Nazwisko> <PESEL>56022812345</PESEL> <Data_ur>28.02.1956</Data_ur> <Data_przyjecia>01.10.1980</Data_przyjecia> <Dzieci>Brak</Dzieci> <Zespol>Projekt ZEUS</Zespol> </Pracownik>

  43. Konstruktory elementów i atrybutów • Konstruktory bezpośrednie (ang. Direct Constructors) • Konstruktory wyliczane (ang. Computed Constructors)

  44. Konstruktory bezpośrednie Poniższe wyrażenie jest wartościowane do samego siebie <Pracownicy> <Pracownik id="1"> <Nazwisko> Jaworek </Nazwisko> <PESEL> 56022812345 </PESEL> <Data_ur> 28.02.1956 </Data_ur> <Zespol> Projekt ZEUS </Zespol> </Pracownik> </Pracownicy>

  45. Konstruktory wyliczane element Pracownicy { element Pracownik { attribute id { "1" }, element Nazwisko {"Jaworek"}, element PESEL {"56022812345"}, element Data_ur {"28.02.1956"}, element Zespol {"Projekt ZEUS"} } }

  46. Konstruktory wyliczane let $nazw := "Jaworek" let $pesel := "56022812345" let $data := "28.02.1956" return element Pracownicy { element Pracownik { attribute id { "1" }, element Nazwisko {$nazw}, element PESEL {$pesel}, element Data_ur {$data}, element Zespol {"Projekt ZEUS"} }}

  47. Konstruktory – kombinacja let $nazw := "Jaworek" let $pesel := "56022812345" let $data := "28.02.1956" return <Pracownicy> <Pracownik id="1"> <Nazwisko> {$nazw} </Nazwisko> <PESEL> {$pesel} </PESEL> <Data_ur> {$data} </Data_ur> <Zespol> Projekt ZEUS </Zespol> </Pracownik> </Pracownicy>

  48. Konstruktory elementów i atrybutów • W obecnej wersji jest to jedyny sposób na uaktualnianie danych – brak specyfikacji operacji update

  49. Wyrażenie FLWOR • Główne wyrażenie XQuery • FLWOR(„flower”)=For-Let-Where-Order-Return • Odpowiednik występującego w SQL SELECT-FROM-HAVING-WHERE

More Related