Bazy dokumentów XML. Język XML. extensible Markup Language

Podobne dokumenty
Bazy danych dokumentów XML wykład 2 XQuery

Bazy danych dokumentów XML wykład 1 wprowadzenie

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.

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

Model semistrukturalny

Podzapytania. Rozdział 5. Podzapytania. Podzapytania wyznaczające wiele krotek (1) Podzapytania wyznaczające jedną krotkę

Podzapytania. Rozdział 5. Podzapytania. Podzapytania wyznaczające wiele krotek (1) Podzapytania wyznaczające jedną krotkę

Podzapytania. Rozdział 5. Podzapytania. Podzapytania wyznaczające wiele krotek (1) Podzapytania wyznaczające jedną krotkę

Język SQL. Rozdział 6. Podzapytania Podzapytania proste i skorelowane, podzapytania w klauzuli SELECT i FROM, operatory ANY, ALL i EXISTS.

XML extensible Markup Language 7

Język SQL. Rozdział 2. Proste zapytania

Standard SQL/XML. Wprowadzenie do XQuery

Spis treści. Przedmowa

Przykładowy dokument XML

Generowanie dokumentów XML z tabel relacyjnych - funkcje SQLX

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

1 XML w bazach danych

2 Natywne bazy XML Języki zapytań XQuery Źródła 14

Oracle11g: Wprowadzenie do SQL

SQL (ang. Structured Query Language)

Perspektywy Stosowanie perspektyw, tworzenie perspektyw prostych i złożonych, perspektywy modyfikowalne i niemodyfikowalne, perspektywy wbudowane.

Przestrzenne bazy danych Podstawy języka SQL

Procedury i funkcje składowane

Język SQL. Rozdział 10. Perspektywy Stosowanie perspektyw, tworzenie perspektyw prostych i złożonych, perspektywy modyfikowalne i niemodyfikowalne.

INTEGRACJA I EKSPLORACJA DANYCH

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

Technologie baz danych

Bazy danych Wykład zerowy. P. F. Góra

Bazy danych - wykład wstępny

Kolekcje Zbiory obiektów, rodzaje: tablica o zmiennym rozmiarze (ang. varray) (1) (2) (3) (4) (5) Rozszerzenie obiektowe w SZBD Oracle

Extensible Markup Language (XML) Wrocław, Java - technologie zaawansowane

Multi-wyszukiwarki. Mediacyjne Systemy Zapytań wprowadzenie. Architektury i technologie integracji danych Systemy Mediacyjne

Wprowadzenie do baz danych

LABORATORIUM 5 WSTĘP DO SIECI TELEINFORMATYCZNYCH WPROWADZENIE DO XML I XSLT

Podstawowe pojęcia dotyczące relacyjnych baz danych. mgr inż. Krzysztof Szałajko

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

Systemy GIS Tworzenie zapytań w bazach danych

XQuery. sobota, 17 grudnia 11

LITERATURA. C. J. Date; Wprowadzenie do systemów baz danych WNT Warszawa 2000 ( seria Klasyka Informatyki )

Ćwiczenie zapytań języka bazy danych PostgreSQL

SQL do zaawansowanych analiz danych część 1.

KOLEKCJE - to typy masowe,zawierające pewną liczbę jednorodnych elementów

Dr Michał Tanaś(

DB2 XML w relacyjnych bazach danych wstęp do wprowadzenia. Kuba Pochrybniak

ZMODYFIKOWANY Szczegółowy opis przedmiotu zamówienia

Bazy Danych. C. J. Date, Wprowadzenie do systemów baz danych, WNT - W-wa, (seria: Klasyka Informatyki), 2000

Język SQL. Rozdział 5. Połączenia i operatory zbiorowe

PODSTAWY BAZ DANYCH 13. PL/SQL

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

Język SQL. Rozdział 7. Zaawansowane mechanizmy w zapytaniach

77. Modelowanie bazy danych rodzaje połączeń relacyjnych, pojęcie klucza obcego.

Wyzwalacze. Anna Fiedorowicz Bazy danych 2

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

XML w bazie danych IBM DB2

Systemy baz danych w zarządzaniu przedsiębiorstwem. W poszukiwaniu rozwiązania problemu, najbardziej pomocna jest znajomość odpowiedzi

Wstęp 5 Rozdział 1. Podstawy relacyjnych baz danych 9

Definicja bazy danych TECHNOLOGIE BAZ DANYCH. System zarządzania bazą danych (SZBD) Oczekiwania wobec SZBD. Oczekiwania wobec SZBD c.d.

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

Język SQL. instrukcja laboratoryjna. Politechnika Śląska Instytut Informatyki. laboratorium Bazy Danych

Integralność danych Wersje języka SQL Klauzula SELECT i JOIN

BAZY DANYCH. Dr hab. Sławomir Zadrożny, prof. PR

Rola języka XML narzędziem

Ćwiczenie rozpocznie się od wprowadzenia do laboratorium, po którym omówimy składnię ę polecenia INSERT pozwalającego ą na wstawianie krotek do

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

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

PHP i MySQL dla każdego / Marcin Lis. Wyd. 3. Gliwice, cop Spis treści

GML w praktyce geodezyjnej

Plan. Raport. Tworzenie raportu z kreatora (1/3)

Informatyka (10) dr inż. Katarzyna Palikowska Katedra Transportu Szynowego i Mostów p. 4 Hydro

Teoretyczne podstawy informatyki

Autor: Joanna Karwowska

Pakiety podprogramów Dynamiczny SQL

Wykład 2. Relacyjny model danych

Wprowadzenie do technologii XML

15. Funkcje i procedury składowane PL/SQL

Microsoft SQL Server Podstawy T-SQL

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

Podstawy języka T-SQL : Microsoft SQL Server 2016 i Azure SQL Database / Itzik Ben-Gan. Warszawa, Spis treści

Porównanie systemów zarządzania relacyjnymi bazami danych

Modelowanie hierarchicznych struktur w relacyjnych bazach danych

XML extensible Markup Language. Paweł Chodkiewicz

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

Procedury wyzwalane. (c) Instytut Informatyki Politechniki Poznańskiej 1

Pakiety są logicznymi zbiorami obiektów takich jak podprogramy, typy, zmienne, kursory, wyjątki.

Konstruowanie Baz Danych SQL UNION, INTERSECT, EXCEPT

Plan. Formularz i jego typy. Tworzenie formularza. Co to jest formularz? Typy formularzy Tworzenie prostego formularza Budowa prostego formularza

Wykład 8. SQL praca z tabelami 5

Implementacja schematów i statycznej kontroli typów w systemie JLoXiM

Wprowadzenie do języka SQL

Ref. 7 - Język SQL - polecenia DDL i DML

PRZEWODNIK PO PRZEDMIOCIE

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

Bazy danych. Plan wykładu. Diagramy ER. Podstawy modeli relacyjnych. Podstawy modeli relacyjnych. Podstawy modeli relacyjnych

2017/2018 WGGiOS AGH. LibreOffice Base

Język SQL. Rozdział 8. Język manipulowania danymi DML

Plan wykładu BAZY DANYCH II WYKŁAD 3. Zasięg zmiennych. Zasięg zmiennych

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

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

Cel przedmiotu. Wymagania wstępne w zakresie wiedzy, umiejętności i innych kompetencji 1 Język angielski 2 Inżynieria oprogramowania

XML w bazach danych i bezpieczeństwie

Transkrypt:

Bazy dokumentów XML Język XML extensible Markup Language

Klasy strukturalizacji danych Dane niestrukturalne sposób składowania danych nie zawiera informacji o ich wewnętrznej logicznej strukturze, dane zawierają zrozumiałe przez użytkowników jednostki semantyczne, niewyspecyfikowane jako odrębne jednostki leksykalne. Dane strukturalne sposób składowania danych zawiera pełną informację o ich logicznej strukturze; każdej jednostce semantycznej odpowiada jedna jednostka leksykalna; przykładem są schematy relacji w relacyjnych bazach danych w 1NF. Dane semistrukturalne specyfikacja struktur danych zawiera informacje o ich logicznej strukturze, jednak fragmenty danych pozostają niestrukturalne. Dane niestrukturalne - przykłady Brak specyfikacji wewnętrznej struktury danych "Jan Kowalski, prog. BD, 27 lat, kawaler, tel. 123 456 789" "Burza Zdarto żagle, ster prysnął, ryk wód, szum zawiei, Głosy trwożnej gromady, pomp złowieszcze jęki, Ostatnie liny majtkom wyrwały się z ręki, Słońce krwawo zachodzi, z nim reszta nadziei." <!DOCTYPE html> <html> Korea Północna zrywa wszystkie układy o nieagresji z <br /> Koreą Południową, wyłącza "gorącą linię" telefoniczną i zamyka <br /> przejście w Panmundżonie między obu krajami w strefie <br /> zdemilitaryzowanej. Jak poważne jest zagrożenie i dla kogo? </html>

Dane strukturalne - przykłady Kompletna specyfikacja wewnętrznych struktur danych, która obejmuje: konstruktory typów, typy danych i więzy integralności. idprac Imię Nazwisko Etat Płaca Premia Zespół 100 Jan Tarzan Prezes 25 000 zł 15 000 zł Zarząd 110 Joanna Jane Sekretarka 2500 zł 250 zł Zarząd 120 Henryk Nowak Kierownik 5600 zł 1000 zł Ochrona Dane semistrukturalne - przykład Specyfikacja struktury danych nie jest kompletna; pewne elementy danych nie są wyspecyfikowane. <antologia> <sonet><tytuł>burza</tytuł> <strofa> <wiersz> Zdarto żagle, ster prysnął, ryk wód, szum zawiei, </wiersz> <wiersz> Głosy trwożnej gromady, pomp złowieszcze jęki, </wiersz> <wiersz> Ostatnie liny majtkom wyrwały się z ręki, </wiersz> <wiersz> Słońce krwawo zachodzi, z nim reszta nadziei. </wiersz> </strofa> </sonet> </antologia>

Języki znaczników Języki służące do definiowania struktury danych w postaci tekstowej. Znaczenie wybranych fragmentów dokumentów tekstowych jest określone przez objęcie tych fragmentów elementami leksykalnymi nazywanymi znacznikami. GenCode Tex GML, SGML HTML XML Język znaczników HTML Zbiór predefiniowanych znaczników określających strukturę i formaty tekstu, np. paragrafy, nagłówki, złamanie linii, typ i rozmiar czcionki, hyperlinki, itp. : <!DOCTYPE html> <html> <body> <h1><b> Burza </b></h1> <p>zdarto żagle, ster prysnął, ryk wód, szum zawiei, <br /> Głosy trwożnej gromady, pomp złowieszcze jęki, <br /> Ostatnie liny majtkom wyrwały się z ręki, <br /> Słońce krwawo zachodzi, z nim reszta nadziei. <br /></p> </html>

Język XML Rozszerzalny język znaczników XML (Extensible Markup Language) uniwersalny język znaczników przeznaczony do reprezentowania danych w sposób strukturalny. W przeciwieństwie do języka HTML nie ma żadnych predefiniowanych znaczników, jest otwarty na definiowanie przez użytkowników dowolnych własnych znaczników. Tylko metodyczną sugestią jest, żeby nie definiować znaczników odkreślających elementy prezentacji danych. Język XML, tak jak HTML jest interpretowalny zarówno przez użytkowników, jak i przez komputery. Język XML pojawił się jako propozycja modelu danych pośredniczącego między innymi modelami danych. Struktury danych XML Dokument XML jest dokumentem tekstowym. Elementy składające się na dokument XML dzielą się na znaczniki i zawartość. Tekst, który nie tworzy znaczników jest zawartością. Wyróżnia się trzy rodzaje znaczników: znacznik początkowy, np.: <paragraf> znacznik końcowy, np.: </paragraf> znacznik pusty, np.: <nowa linia/> Para znaczników początkowego i odpowiadającego mu znacznika końcowego oraz wypełniająca je treść (albo znacznik pusty) tworzą element dokumentu XML. Na przykład: <Tytuł>To jest tytuł</tytuł>

Struktury danych XML Definicja znaczników może obejmować definicję jednego lub większej liczby atrybutów elementu. Na przykład: <Krok numer="1" ważność="duża"> Włącz komputer </Krok> Zawartość elementów może być złożona, przez zagnieżdżenie w niej innych elementów. Na przykład: <Krok numer="1" ważność="duża"> Włącz komputer <Krok_składowy numer="1.1"> Podłącz komputer do prądu </Krok_składowy> </Krok> Przykład XML dane strukturalne <Student> <Indeks>11111</Indeks> <Nazwisko>Tarzan</Nazwisko> <Płeć>M</Płeć> <Średnia_ocen>3.12</Średnia_ocen> <Adres> <Kod_pocztowy>60123</Kod_pocztowy> <Miasto>Poznań</Miasto> <Ulica>Browarna</Ulica> <Numer_domu>13</Numer_domu> </Adres> </Student>

Przykład XML dane semistrukturalne <News> Wczoraj <data> 21 stycznia 2013 r. </data> w <gdzie> Poznaniu </gdzie> na <uczelnia> Politechnice Poznańskiej </uczelnia> miał miejsce niezwykły wypadek. Studenci Studium Podyplomowego z Systemów Baz Danych z entuzjazmem uczestniczyli w wykładzie z <przedmiot> Zaawansowanych Baz Danych </przedmiot>. </News> Specyfika modelu danych XML, w opozycji do modelu relacyjnego Otwarta fizyczna reprezentacja danych, brak typów danych tylko tekst. Celem jest czytelność danych i niezależność od sformatowanych źródeł danych, efektem ubocznym mniejsza odporność na błędy i mniejsza wydajność. Brak wymagań co do wspólnej struktury danych w jednym dokumencie XML. Można (DTD), ale nie trzeba definiować wspólnej struktury danych dla podobnych elementów dokumentów XML. Utrudnia to semantyczną interpretacje zawartości i obniża odporność na błędy, ale za to zwiększa elastyczność. Otwartość na dane niestrukturalne i semistrukturalne Brak determinizmu zapytań dla danych niestrukturalnych

DTD opis struktury dokumentów XML Struktura dokumentów XML może być wyspecyfikowana w odrębnym dokumencie DTD. Na przykład: <!DOCTYPE osoba [ <!ELEMENT osoba (imie, drugieimie, nazwisko)> <!ELEMENT imie (#PCDATA)> <!ELEMENT drugieimie (#PCDATA)> <!ELEMENT nazwisko (#PCDATA)> ]> Można narzucić dokumentom XML zgodność ze zdefiniowaną strukturą, dla poprawnego przetwarzania kolekcji dokumentów: <osoba> <imie>jan</imie> <drugieimie>mateusz</drugieimie> <nazwisko>nowak</nazwisko> </osoba> Typy dokumentów a typy baz danych Bazy danych pozwalające na przechowywanie dokumentów XML (ang. XML-enabled database systems) Niezorientowane na przetwarzanie dokumentów XML. Z reguły pozwalają na przechowywanie określonego typu dokumentów XML Plikowe i tekstowe bazy danych Obiektowe i relacyjne bazy danych Bazy danych dokumentów XML (ang. native XML database systems) Zorientowane na przetwarzanie dokumentów XML

Przechowywanie dokumentów XML (1/3) Przechowywanie dokumentów XML w systemie plików w bazach danych w strukturach typu CLOB lub BLOB w bazach danych w postaci zdekomponowanej Mapowanie schematów XML na schematy baz danych Generacja schematów XML ze schematów baz danych i odwrotnie Przechowywanie dokumentów w bazach danych dokumentów XML Przechowywanie dokumentów XML (2/3) w bazach danych w postaci zdekomponowanej Mapowanie schematów XML na schematy baz danych Generacja schematów XML ze schematów baz danych <ROW> <EMPNO>7369</EMPNO> <ENAME>SMITH</ENAME> <JOB>CLERK</JOB> <MGR>7902</MGR> <HIREDATE>17.12.1980</HIREDATE> <SAL>800</SAL> <DEPTNO>10</DEPTNO> </ROW> EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO 7369 SMITH CLERK 7902 17.12.1980 800 20

Przechowywanie dokumentów XML (3/3) Przechowywanie dokumentów XML w systemie plików w bazach danych w strukturach typu CLOB lub BLOB w bazach danych w postaci zdekomponowanej Mapowanie schematów XML na schematy baz danych Generacja schematów XML ze schematów baz danych i odwrotnie Przechowywanie dokumentów w bazach danych dokumentów XML Języki zapytań (1/5) Języki zapytań w obiektowo-relacyjnych bazach danych oparte na konwersji zgodnej z przyjętym mapowaniem oparte na szablonach XML oparte na funkcjach SQL Ich podstawowym zadaniem jest konstruowanie dokumentów XML w oparciu o zawartość bazy danych

Języki zapytań (2/5) przykład zapytania opartego o szablon SELECT XMLGen ( '<PRACOWNIK id="{$id_prac}"> <NAZWISKO>{$NAZWISKO}</NAZWISKO> <ZAROBKI> <PODSTAWA>{$PLACA_POD}</PODSTAWA> <DODATEK>{$PLACA_DOD}</DODATEK> </ZAROBKI> </PRACOWNIK>', p.id_prac, p.nazwisko, p.placa_pod, p.placa_dod) AS "wynik" FROM pracownicy p Języki zapytań (3/5) przykład dokumentu pełniącego rolę szablonu <?xml version="1.0"?> <EmpInfo> <Emps> <Query><SelectStmt> SELECT ENAME, SAL FROM EMP</SelectStmt> <Emp> <Nr>$ENAME</Nr> <Name>$SAL</Name> </Emp> </Query> </Emps> </EmpInfo>

Języki zapytań (4/5) przykład zapytania opartego o funkcje SQL SELECT XMLElement ( "PRACOWNIK", XMLAttributes(id_prac as "id"), XMLForest( XMLForest( as "ZAROBKI" )) AS "wynik" FROM pracownicy nazwisko as "NAZWISKO", placa_pod as "PODSTAWA", placa_dod as "DODATEK") wynik --------------------------------- <PRACOWNIK id="100"> <NAZWISKO>WEGLARZ</NAZWISKO> <ZAROBKI> <PODSTAWA>1730</PODSTAWA> <DODATEK>420.5</DODATEK> </ZAROBKI> </PRACOWNIK>... Języki zapytań (5/5) Języki zapytań w bazach danych dokumentów XML Są to języki zorientowane na przetwarzanie dokumentów XML. Działają na zbiorach dokumentów XML i konstruują dokumenty XML

Definicja bazy danych dokumentów XML (ang. native XML database system) Baza danych dokumentów XML Definiuje model dla dokumentów XML-owych Dokumenty XML są jej podstawową jednostką składowania Wykorzystuje dowolny sposób fizycznego składowania Funkcjonalność bazy danych dokumentów XML Składowanie dokumentów XML Definiowanie i przechowywanie schematów (DTD, XML Schema) Obsługa zapytań (XPath, XQuery, XML-QL, Quilt) Obsługa modyfikacji, wstawiania i usuwania dokumentów Obsługa interfejsów programistycznych (XML:DB API, XQuery API for Java XQJ, SAX, DOM, JDOM) Funkcjonalność tradycyjnych SZBD

Składowanie dokumentów XML w bazach danych dokumentów XML (1/2) Architektura baz danych dokumentów XML ściśle zależy od modelu bazy danych oparte na obiektach tekstowych oparte na strukturach (relacyjnych, obiektowych, oryginalnych) Kolekcje dokumentów w bazach danych dokumentów XML Bazy danych dokumentów XML, z punktu widzenia użytkownika, przechowują dokumenty zebrane w postaci tzw. kolekcji Kolekcje dokumentów zawierają podobne lub powiązane ze sobą dokumenty podobne są do katalogów w systemie plików dokumenty mogą mieć dowolny schemat mogą być zagnieżdżone lub, podobne są do tabel w systemie relacyjnym dokumenty muszą spełniać reguły określonego schematu umożliwiają zaawansowane indeksowanie i optymalizację zapytań

Schematy i indeksy w bazach danych dokumentów XML W bazach danych dokumentów XML oprócz samych dokumentów składowane są także: schematy dokumentów XML indeksy Typy indeksów strukturalne indeksowanie nazw elementów i atrybutów oparte na wartościach indeksowanie wartości elementów i atrybutów indeksy pełnotekstowe indeksowanie leksemów występujących w wartościach elementów i atrybutów Charakterystyka indeksów w bazach danych dokumentów XML Indeksy strukturalne zawierają informacje o wszystkich ścieżkach, które występują w dowolnej instancji dokumentów XML wspomaga przeszukiwanie dokumentów bez określonego schematu może być wykorzystywany do walidacji zmian bez dostępu do schematu dokumentu Indeksy oparte na wartościach wspomagają wyszukiwanie elementów (atrybutów) posiadających określone wartości uwzględniają typy wartości Indeksy tekstowe warunkują efektywne wyszukiwanie wartości tekstowych indeksowane są słowa występujące w elementach lub atrybutach

Języki zapytań w bazach danych dokumentów XML Oryginalne XPath powszechnie wykorzystywany XQuery obecny standard języka zapytań dla baz danych dokumentów XML Sposoby modyfikacji w bazach danych dokumentów XML Większość baz danych umożliwia tylko usuwanie i wstawianie kompletnych dokumentów XML Modyfikacja zawartości jest możliwa za pomocą: operacji DOM wyrażeń XPath, które wskazują węzły, na których można przeprowadzić operację: wstawienie węzła przed lub po modyfikacja węzła usunięcie węzła rozszerzeń języka XQuery

Przykład polecenia modyfikacji zdefiniowanego za pomocą wyrażeń XPath <xupdate:append select="/bib" child="last()"> <xupdate:element name="book"> <title>system zarzadzania bazą danych Oracle 7</title> </xupdate:element> </xupdate:append> Interfejsy programistyczne w bazach danych dokumentów XML Zazwyczaj podobne do ODBC Języki zapytań oddzielone są od API Podstawowe polecenia: connect, execute query, get results, commit/rollback Rezultat zapytań w postaci: ciągu znaków, drzewa DOM, zdarzeń SAX. Zazwyczaj dostępne przez HTTP Wiele baz danych wykorzystuje swoje oryginalne API XML:DB API i XQuery API for Java (XQJ) to rozwiązania niezależne od bazy danych

Cechy języka XQuery Język deklaratywny podobnie jak SQL Wykorzystuje wyrażenia ścieżkowe XPath 2.0 Operuje na pojedynczych dokumentach lub ich kolekcjach Konstruuje dokumenty XML lub ich fragmenty Oparty na wyrażeniach FLWOR, składających się z pięciu klauzul: FOR, LET, WHERE, ORDER BY, RETURN XQuery "w całości" (1/2) for $d in doc("zespoly.xml")//id_zesp let $e := doc("pracownicy.xml")//pracownik[id_zesp = $d] where count($e) >= 5 order by avg($e/placa_pod) descending return <duzy-zespol> { $d, <liczba-pracownikow>{count($e)}</liczba-pracownikow>, <srednia-placa>{avg($e/placa_pod)}</srednia-placa> } </duzy-zespol>

XQuery "w całości" (2/2) <duzy-zespol> <id_zesp>20</id_zesp> <liczba-pracownikow>7</liczba-pracownikow> <srednia-placa>690,59</srednia-placa> </duzy-zespol> pracownicy.xml: <?xml version="1.0"?> <rowset> <pracownik> <id_prac>130</id_prac> <nazwisko>brzezinski</nazwisko> <etat>profesor</etat> <id_szefa>100</id_szefa> <placa_pod>1075.2</placa_pod> <placa_dod>611.16</placa_dod> <id_zesp>20</id_zesp> </pracownik>... zespoly.xml: <?xml version="1.0"?> <rowset> <zespol> <id_zesp>10</id_zesp> <nazwa>administracja</nazwa> </zespol> <zespol> <id_zesp>20</id_zesp> <nazwa>syst.rozpr.</nazwa> <adres>piotrowo 3a</adres> </zespol>... Klauzule FOR i LET Klauzule FOR i LET wykorzystywane są do tworzenia strumienia krotek. Każda krotka składa się z jednej lub wielu zmiennych. for $s in (<one/>, <two/>, <three/>) for $d in document("zespoly.xml")//id_zesp

Klauzula FOR Klauzula FOR może zawierać wiele zmiennych Klauzula FOR iteruje po każdej wartości uzyskanej w wyniku ewaluacji wyrażenia przypisanego do zmiennej. Użycie wielu zmiennych w w klauzuli FOR powoduje, że dla każdej wartości zmiennej nadrzędnej wykonywana jest iteracja za pomocą zmiennej podrzędnej. Wynikowa kolejność krotek tworzonych za pomocą klauzuli FOR jest znacząca for $i in (1, 2), $j in (3, 4) ($i = 1, $j = 3) ($i = 1, $j = 4) ($i = 2, $j = 3) ($i = 2, $j = 4) for $z in document("zespoly.xml")//id_zesp, $p in document("pracownicy.xml")//pracownicy[id_zesp = $z] Klauzula LET Klauzula LET może zawierać jedną lub wiele zmiennych. Wiązanie zmiennych odbywa się bez iteracji. Wartością zmiennej użytej w klauzuli LET są wszystkie węzły (las węzłów) wskazywane przez wyrażenie przypisane do zmiennej Zmienne z klauzuli LET są dodawane do krotek wygenerowanych przez klauzulę FOR. Jeśli klauzuli FOR nie ma, wówczas LET generuje tylko jedną krotkę let $i := (1, 2), $j := (3, 4) return <wynik>i={$i}, j={$j} </wynik> <wynik>i=1 2, j=3 4</wynik> for $e in distinct-values(doc('pracownicy.xml')//etat/text()) let $l := doc('pracownicy.xml')//pracownik[etat = $e] return <etat nazwa="{$e}">{count($l)}</etat> <etat nazwa="adiunkt">2</etat> <etat nazwa="asystent">3</etat>

FOR vs LET Mimo iż obie klauzule FOR i LET służą do wiązania zmiennych, sposób w jaki to robią jest zupełnie różny. for $s in (<one/>, <two/>, <three/>) return <out>{$s}</out> let $s := (<one/>, <two/>, <three/>) return <out>{$s}</out> <out><one/> </out> <out><two/> </out> <out><three/> </out> <out><one/><two/><three/></out> Klauzula FOR i zmienne pozycji Zmienna pozycji (positional variable) może wystąpić w klauzuli FOR i musi być poprzedzona słowem kluczowym AT. Kolejne iteracje przypisują zmiennym pozycji kolejne numery porządkowe. Wartości zmiennych pozycji rozpoczynają się od 1, a ich typem jest xs:integer for $car at $i in ("Ford", "Chevy"), $pet at $j in ("Cat", "Dog") return <wynik>{$car} at {$i}, {$pet} at {$j} </wynik> <wynik>ford at 1, Cat at 1</wynik> <wynik>ford at 1, Dog at 2</wynik> <wynik>chevy at 2, Cat at 1</wynik> <wynik>chevy at 2, Dog at 2</wynik>

Klauzula WHERE Opcjonalna klauzula WHERE służy do filtrowania krotek Wyrażenie zdefiniowane w klauzuli WHERE jest obliczane dla każdej z krotek. Jeśli wyrażenie jest prawdziwe, to krotka jest poddawana dalszemu przetwarzaniu, np. w klauzuli RETURN. W przeciwnym wypadku krotka jest odrzucana. avg(for $x at $i in (1,2,3,4,5,6,7,8,9,10) where $i mod 2 = 0 return $x) for $e in distinct-values(doc('pracownicy.xml')//etat/text()) let $l := doc('pracownicy.xml')//pracownik[etat = $e] where count ($l) > 2 return <etat nazwa="{$e}">{count($l)}</etat> Klauzula RETURN i ORDER BY Klauzula RETURN jest ewaluowana raz dla każdej krotki uzyskanej w wyniku działania wcześniejszych klauzul. Wyniki tej ewaluacji są składają się na rezultat wyrażenia FLWOR. Jeśli w zapytaniu nie ma klauzuli ORDER BY wówczas kolejność krotek dostarczanych do klauzuli RETURN jest determinowana przez sposób przetwarzania klauzul FOR i LET. Jeśli klauzula ORDER BY istnieje wówczas to ona decyduje o kolejności krotek w strumieniu dostarczanym do klauzuli RETURN.

Klauzula ORDER BY Zadaniem klauzuli ORDER BY jest uszeregowanie strumienia krotek Klauzula ORDER BY definiuje porządek w oparciu o jedno lub wiele wyrażeń. Słowa kluczowe występujące w wyrażeniach klauzuli ORDER BY: descending porządek sortowania malejący empty least wartości puste traktowane są jako najmniejsze empty greatest wartości puste traktowane są jako największe for $p in doc("pracownicy.xml")//pracownik order by number($p/placa_pod) descending return <w>{$p/nazwisko} {$p/placa_pod}</w> for $z in doc("zespoly.xml")//zespol order by $z/adres empty greatest return $z Uporządkowanie wyników Wyrażenia XQuery zwracają wynik w ściśle określonym porządku wyznaczonym przez klauzulę ORDER BY wyznaczonym przez kolejność węzłów w dokumencie odczytywanych za pomocą klauzuli FOR Deklaracja pozwalająca na zignorowanie porządku poszczególnych elementów ma postać funkcji unordered unordered(for $z in doc("zespoly.xml")//id_zesp, $p in doc("pracownicy.xml")//pracownik where $p/id_zesp = $z return <pracownik>{$p/nazwisko},{$z/../nazwa}</pracownik> )

Podzapytania W zapytaniach XQuery można zagnieżdżać wyrażenia FLWOR Najczęściej zagnieżdżenia występują w klauzuli RETURN jako argumenty funkcji w klauzuli WHERE pod postacią np. wyrażeń ilościowych Zagnieżdżenia mogą wykorzystywać wcześniej przypisane zmienne for $z in doc("zespoly.xml")//id_zesp return <zespol> {$z/../nazwa} {for $p in doc("pracownicy.xml")//pracownik where $p/id_zesp = $z return $p/nazwisko} </zespol> <wynik> { for $z in doc("zespoly.xml")//nazwa return $z } </wynik> Wyrażenia warunkowe XQuery wspiera wyrażenia warunkowe oparte na konstrukcji IF, THEN, ELSE W przypadku, gdy wyrażenie testowane w warunku występującym po IF jest spełnione, wynikiem wyrażenia warunkowego jest wyrażenie występujące po THEN. W przeciwnym przypadku, wynikiem jest wyrażenie występujące po ELSE. for $z in doc("zespoly.xml")//id_zesp return <zespol> {$z/../nazwa} { if ($z = 10) then for $p at $i in doc("pracownicy.xml")//pracownik where $p/id_zesp = $z return $p/nazwisko else () } </zespol>

Wyrażenia ilościowe (1/2) Wyrażenia ilościowe wspierają weryfikację warunków dla zbioru elementów. Wyrażenia ilościowe są spełnione gdy warunek testujący jest spełniony dla wszystkich elementów w zbiorze chociaż jednego elementu w zbiorze Format wyrażenia ilościowego jest następujący: (some every) var in expr (, var2 in expr2)* satisfies WarunekTestujacy for $z in doc("zespoly.xml")//id_zesp where some $p in doc("pracownicy.xml")//pracownik satisfies $p/id_zesp = $z return $z/../nazwa Wyrażenia ilościowe (2/2) for $z in doc("zespoly.xml")//id_zesp where every $p in doc("pracownicy.xml")//pracownik[id_zesp = $z] satisfies $p/placa_pod > 500 return $z/../nazwa <frequent_bidder> { for $u in doc("users.xml")//user_tuple where every $item in doc("items.xml")//item_tuple satisfies some $b in doc("bids.xml")//bid_tuple satisfies ($item/itemno = $b/itemno and $u/userid = $b/userid) return $u/name } </frequent_bidder>