jezyk˛ xml xml (extensible markup language, czyli...

73
ezyk XML XML (eXtensible Markup Language, czyli rozszerzalny j˛ ezyk znaczników) to specyfikacja dotycz ˛ aca przechowywania informacji. Jest to równie˙ z specyfikacja opisuj ˛ aca struktur˛ e tych informacji. I XML jest j˛ ezykiem znaczników, jak HTML, I XML nie posiada swoich wlasnych znaczników, I mo˙ zna tworzy´ c wlasne znaczniki wedlug potrzeb, I tworz ˛ ac nowe znaczniki, nale˙ zy trzyma´ c si˛ e specyfikacji XML-a.

Upload: hanhan

Post on 28-Feb-2019

217 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

Jezyk XML

XML (eXtensible Markup Language, czyli rozszerzalny jezykznaczników) to specyfikacja dotyczaca przechowywania informacji.Jest to równiez specyfikacja opisujaca strukture tych informacji.

I XML jest jezykiem znaczników, jak HTML,I XML nie posiada swoich własnych znaczników,I mozna tworzyc własne znaczniki według potrzeb,I tworzac nowe znaczniki, nalezy trzymac sie specyfikacji XML-a.

Literatura uzupełniajaca:[1] K.H. Goldberg, XML. Szybki start. Wydanie II (Helion, 2014).[2] P. Walmsley, XQuery (O’Reilly Media, Inc., 2007).

Page 2: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

Jezyk XML

XML (eXtensible Markup Language, czyli rozszerzalny jezykznaczników) to specyfikacja dotyczaca przechowywania informacji.Jest to równiez specyfikacja opisujaca strukture tych informacji.

I XML jest jezykiem znaczników, jak HTML,I XML nie posiada swoich własnych znaczników,I mozna tworzyc własne znaczniki według potrzeb,I tworzac nowe znaczniki, nalezy trzymac sie specyfikacji XML-a.

Literatura uzupełniajaca:[1] K.H. Goldberg, XML. Szybki start. Wydanie II (Helion, 2014).[2] P. Walmsley, XQuery (O’Reilly Media, Inc., 2007).

Page 3: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

Przykładowy dokument XML

<?xml version="1.0"?><book>

<authors><author id="47">Włodzimierz Krysicki</author><author id="58">Lech Włodarski</author>

</authors><title>Analiza matematyczna w zadaniach</title><price>69.00</price><keywords>

<keyword>pochodna</keyword><keyword>całka</keyword>

</keywords></book>

Page 4: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

Przykładowy dokument XML

<?xml version="1.0"?><book>

<authors><author id="47">Włodzimierz Krysicki</author><author id="58">Lech Włodarski</author>

</authors><title>Analiza matematyczna w zadaniach</title><price>69.00</price><keywords>

<keyword>pochodna</keyword><keyword>całka</keyword>

</keywords></book>

Page 5: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

Wady i zalety XML-a

Zalety

I Łatwy do odczytania, zarówno dla człowieka, jak dla maszyny(zwykły tekst).

I Zawiera dane i jednoczesnie opisuje znaczenie danych(self-documenting).

I Moze reprezentowac praktycznie dowolny rodzaj danych:hierarchie, rekordy, listy (elastycznosc, uniwersalnosc).

I Sformalizowany zapis pozwala na komputerowe przetworzenie,weryfikacje dokumentów XML (well-formed).

Wady

I Nadmiarowosc informacji (powtarzajace sie znaczniki,zagniezdzone elementy).

I Nie wszystko da sie wyrazic elastycznie w postaci strukturyhierarchicznej (np. albo Film->Aktor, albo Aktor->Film)

Page 6: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

Zastosowanie XML-a

I Elektroniczna wymiana danychI Usługi e-biznesu: transakcje zakodowane w postaci XML-a

(XML jako podstawa Web Serwisów), wiele formatówpochodnych.

I Komunikacja w sferze publicznej (np. podatnik – urzadpodatkowy, systemy celne, NFZ - swiadczeniodawcy, itp.).

I Do zapisu informacji o luznej strukturze, trudnej dojednoznacznego opisana w momencie projektowania, np.formularze WWW, wymagajace czestych zmian.

I Format przechowywania dokumentów.

Page 7: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

Zasady pisania dokumentów XML

Reguły, aby dokument XML był poprawny składniowo:

1. element główny jest wymagany; zawsze musi byc dokładniejeden element główny; wszystkie pozostałe elementy dokumentusa zawarte w elemencie głównym; przed elementem głównymdopuszczalne sa komentarze i instrukcje przetwarzania;

2. znaczniki zamykajace sa niezbedne; kazdy element musi miecznacznik zamykajacy;

3. elementy musza byc odpowiednio zagniezdzone;

4. wielkosc liter ma znaczenie;

5. wartosc atrybutu musi byc zamykana w dwóch takich samychznakach pojedynczego lub podwójnego cudzysłowu.

Page 8: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

Zasady tworzenia dokumentów XML

Elementy składowe XML-a to znaczniki okreslajace elementy,wartosci tych elementów oraz atrybuty.

Element XML to podstawowa jednostka dokumentu.Moze zawierac: tekst, atrybuty, inne znaczniki.

Kazdy element ma znacznik otwierajacy: <nazwa_elementu>oraz znacznik zamykajacy: </nazwa_elementu>.

Pusty element moze składac sie z pojedynczego znacznikaotwierajacego i zamykajacego, np.<obrazek plik="mapa.jpg"/>

Atrybuty elementu umieszczane sa w obrebie znacznikaotwierajacego, w postaci par nazwa-wartosc, np.<wysokosc jednostka="metr">33</wysokosc>.Opisuja zawartosc i przeznaczenie elementu. Informacje zawarte watrybutach to metadane. Element moze miec wiele atrybutów, ichnazwy musza byc unikalne

Page 9: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

Zasady tworzenia dokumentów XML

Dokument XML powinien rozpoczynac sie deklaracja, którawskazuje zastosowana wersje XML-a. Przykładowa deklaracja XML:<?xml version="1.0"?>

Deklaracje umieszczamy na poczatku, przed wszystkimi innymielementami.

Znaczniki rozpoczynajace sie od <? i konczace sie ?> to instrukcjeprzetwarzania. Słuza do deklarowania wersji XML, okreslaniakodowania znaków, arkuszy stylów.

Komentarze XML: warto opisywac dokumenty XML, aby okreslic cooznacza dany element.Komentarz zaczyna sie za pomoca <!−−, a konczy −−>. Nie wolnozagniezdzac komentarzy, ani uzywac znaku −− wewnatrzkomentarza.

Page 10: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

Zasady tworzenia dokumentów XML

Dokument XML powinien rozpoczynac sie deklaracja, którawskazuje zastosowana wersje XML-a. Przykładowa deklaracja XML:<?xml version="1.0"?>

Deklaracje umieszczamy na poczatku, przed wszystkimi innymielementami.

Znaczniki rozpoczynajace sie od <? i konczace sie ?> to instrukcjeprzetwarzania. Słuza do deklarowania wersji XML, okreslaniakodowania znaków, arkuszy stylów.

Komentarze XML: warto opisywac dokumenty XML, aby okreslic cooznacza dany element.Komentarz zaczyna sie za pomoca <!−−, a konczy −−>. Nie wolnozagniezdzac komentarzy, ani uzywac znaku −− wewnatrzkomentarza.

Page 11: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

Przykładowy dokument XML

<?xml version="1.0"?><book>

<authors><author id="47">Włodzimierz Krysicki</author><author id="58">Lech Włodarski</author>

</authors><title>Analiza matematyczna w zadaniach</title><!−−cena ksiazki na podstawie platformy Ceneo−−><price>69.00</price><keywords>

<keyword>pochodna</keyword><keyword>całka</keyword>

</keywords></book>

Page 12: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

Predefiniowane encje XML-a: piec znaków specjalnych

Predefiniowane encje XML-a:I &amp; tworzy znak &I &lt; tworzy znak <I &gt; tworzy znak >I &quot; tworzy znak ”I &apos; tworzy znak ′

Page 13: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

Przekształcanie dokumentów XML za pomoca XSLT 2.0

Jezyk XSLT słuzy do przekształcanie dokumentów XML na innyformat, np. HTML.

Przekształcanie dokumentu XML polega na zastosowaniu XSLT doanalizy jego zawartosci, a nastepnie podjecie konkretnych działan wzaleznosci od tego, jakie elementy zostana znalezione.

XSLT mozna uzyc takze do zmiany kolejnosci danych wynikowychna podstawie pewnych kryteriów, do wyswietlenia tylko okreslonychfragmentów informacji.

W procesie przekształcania biora udział dwa dokumenty: zródłowydokument XML oraz arkusz stylów XSLT opisujacy regułyprzekształcania.

Arkusze stylów to pliki tekstowe, zapisywane sa z rozszerzeniem .xsl.Kazdy arkusz stylów tez jest plikiem XML.

Do wykonania przekształcenia potrzebujemy: procesora XSLT lubprzegladarki, obsługujacej XSLT (wiekszosc ma wbudowanaobsługe).

Page 14: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

1. Powiazanie dokumentu XML z arkuszem stylów XSLT 2.0: dodajemyinstrukcje (po deklaracji xml):<?xml-stylesheet type="text/xsl"href="booksstyl.xsl"?>

2. Przegladarka (lub procesor XSLT) nastepnie wykona transformacjepliku XML, zanim zostanie on wyswietlony.Pierwszy etap: konwersja dokumentu XML do drzewa wezłów, którejest hierarchiczna reprezentacja. Kazdy wezeł odpowiada jednemu zelementów dokumentu XML, atrybutowi lub zawartosci tekstowej.

3. Kolejny etap to odwołanie sie do arkusza stylów XSLT w celuznalezienia instrukcji, okreslajacych sposób wyswietlania wezłów.Instrukcje te sa zawarte w tzw. szablonach, które składaja sie z etykiety,która identyfikuje wezły, do których ma zastosowanie dany szablon i zinstrukcji okreslajacych, jak te wezły maja byc przekształcone.

Page 15: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

1. Powiazanie dokumentu XML z arkuszem stylów XSLT 2.0: dodajemyinstrukcje (po deklaracji xml):<?xml-stylesheet type="text/xsl"href="booksstyl.xsl"?>

2. Przegladarka (lub procesor XSLT) nastepnie wykona transformacjepliku XML, zanim zostanie on wyswietlony.Pierwszy etap: konwersja dokumentu XML do drzewa wezłów, którejest hierarchiczna reprezentacja. Kazdy wezeł odpowiada jednemu zelementów dokumentu XML, atrybutowi lub zawartosci tekstowej.

3. Kolejny etap to odwołanie sie do arkusza stylów XSLT w celuznalezienia instrukcji, okreslajacych sposób wyswietlania wezłów.Instrukcje te sa zawarte w tzw. szablonach, które składaja sie z etykiety,która identyfikuje wezły, do których ma zastosowanie dany szablon i zinstrukcji okreslajacych, jak te wezły maja byc przekształcone.

Page 16: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

Dokument XML i jego drzewo wezłów

<?xml version="1.0"?><books>

<book><authors>

<author id="47">Włodzimierz Krysicki</author><author id="58">Lech Włodarski</author>

</authors><title>Analiza matematyczna w zadaniach</title><price>69.00</price><keywords>

<keyword>pochodna</keyword><keyword>całka</keyword>

</keywords></book>

</books>

Page 17: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

Dokument XML i jego drzewo wezłów

�����

������

�������

���

��

������������������

�������

���

���

�������������

������

���������������������������������

�����

� !""�

�������

�������

���������

�������

������

�#����$�%����

�#�����������%��

�#������������

�#������������

Page 18: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

Inicjowanie arkusza stylów XSLT:deklarujemy, ze to dokument XML:<?xml version="1.0"?>

nastepnie deklarujemy przestrzen nazw XSLT i jej prefiks oraz wersjeXSLT<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">

okreslamy typ pliku wynikowego (html):<xsl:output method="html"/>

tworzymy szablon główny:<xsl:template match="/">

w szablonie głównym okreslamy poszczególne elementy dokumentuHTML

Zamykamy szablon główny:</xsl:template>i konczymy arkusz stylów:</xsl:stylesheet>

Page 19: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

Tworzenie szablonu głównego:<xsl:template match="/">Szablon główny okresla reguły stosowane do wezła głównegodokumentu XML. Opisuje sposób przetwarzania zawartosci z wezłagłównego w nowe dane wynikowe.

Aby utworzyc plik wyjsciowy w formacie html, nalezy zastosowacinstrukcje:<xsl:output method="html"/>

W obrebie szablonu głównego nalezy teraz okreslic poszczególneelementy dokumentu HTML (head, title, body, itp.).

Wszystko w obrebie szablonu głównego, co nie jest instrukcja XSLT(czyli elementy literalne), bedzie wyswietlane w takiej formie, wjakiej zostało zapisane. W ten sposób mozna dodac znaczniki i teksthtml do pliku wynikowego.

Page 20: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

Wyswietlanie wartosci wezła

Aby wyswietlic wartosc wezła XML, uzywamy instrukcji<xsl:value-of>:<xsl:value-of select="wyrazenie"/>Wyrazenie XPath identyfikuje zbiór wezłów, który ma bycwyswietlany.

UwagiI instrukcja select="." słuzy do wybrania biezacego wezła.I Jezeli wyrazenie select odpowiada wiecej, niz jednemu wezłowi,

wyswietlana jest zawartosc pierwszego wezła.I Mozna zwrócic tylko te wezły, dla których okreslony atrybut ma

dana wartosc, np.:select="books/book[@language=’polski’]"

I Jezeli wyrazenie select odpowiada wezłowi, który posiada wezłypotomne, ich zawartosc tez jest wyswietlana.

I Jezeli odpowiada pustemu zbiorowi wezłów - nic nie jestwyswietlane.

Page 21: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

Zapetlanie wezłów

Element xsl:for-each pozwala działac na wszystkich wezłach,do których pasuje.Aby przetwarzac wezły partiami, nalezy:

I w obrebie reguły szablony wpisujemy<xsl:for-each select="wyrazenie">

I podajemy reguły przetwarzania wezłów, które maja bycprzetworzone (identyfikuje je wyrazenie XPath)

I konczymy instrukcje znacznikiem </xsl:for-each>

UwagiI znacznik xsl:for-each powinno sie umieszczac przed regułami,

które maja byc powtarzane dla kazdego znalezionego wezłaI jezeli chcemy umiescic zawartosc wezłów w tabeli, znacznik

<table> otwierajacy tabele powinien byc przed instrukcja<xsl:for-each>, a znacznik zamykajacy tabele po niej.

Page 22: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

Jezyk XPath

XPath jest jezykiem słuzacym do wybierania wezłów i zbioru wezłówpoprzez okreslanie sciezek ich lokalizacji w dokumencie XML.

XPath mozna tez uzyc do dalszego przetworzenia zbioru zwróconychwezłów, za pomoca wbudowanych funkcji do obliczenmatematycznych, przetwarzania ciagów znaków i testowaniawarunków w dokumencie XML.

U podstaw jezyka XPath lezy mozliwosc stosowania sciezeklokalizacji, w celu odwołania sie do wezłów dokumentu XML (wezełto kazdy indywidualny fragment dokumentu XML: element, atrybut,zawartosc tekstowa).XPath widzi dokument XML w postaci drzewa wezłów.

Page 23: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

Dokument XML i jego drzewo wezłów

<?xml version="1.0"?><books>

<book><authors>

<author id="47">Włodzimierz Krysicki</author><author id="58">Lech Włodarski</author>

</authors><title>Analiza matematyczna w zadaniach</title><price>69.00</price><keywords>

<keyword>pochodna</keyword><keyword>całka</keyword>

</keywords></book>

</books>

Page 24: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

Dokument XML i jego drzewo wezłów

�����

������

�������

���

��

������������������

�������

���

���

�������������

������

���������������������������������

�����

� !""�

�������

�������

���������

�������

������

�#����$�%����

�#�����������%��

�#������������

�#������������

Page 25: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

Sciezki lokalizacji

Dwa rodzaje sciezek lokalizacji:

wzgledna sciezka:składa sie z sekwencji kroków lokalizacji, rozdzielonych znakiem /.Kazdy krok okresla wezeł (lub zbiór wezłów) wzgl. wezła biezacego.W kolejnym kroku kazdy wezeł w tym zbiorze jest uzyty w roli wezłabiezacego dla kolejnego kroku;

bezwgledna sciezka:zaczyna sie od znaku /, po którym moze nastepowac wzglednasciezka lokalizacji. Znak / okresla wezeł główny.

Wezeł biezacy to element lub wezeł, który jest aktualnieprzetwarzany.

Page 26: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

Wyrazenia XPath

Wybieranie dzieci danego wezła:jezeli biezacy wezeł zawiera elementy, które chcemy znalezc, nalezypodac nazwe elementu - dziecka, aby odwołac sie do dalszychpotomków, nalezy uzyc znaku / i podac nazwe dalszego potomka, itp.Znak * okresla wszystkie dzieci biezacego wezła, np./book/authors/author/book/title

Wybieranie rodzica danego wezła: za pomoca ..Mozna potem odwołac sie do innych dzieci wezła, bedacego tymrodzicem, np. ../title spowoduje wybranie wezła - dziecka (o nazwietitle) dla wezła bedacego rodzicem wezła biezacego; ../* to wybraniewszystkich elementów-dzieci rodzica wezła biezacego.

Wybieranie atrybutów wezła: stosujemy znak @.Wpisz sciezke lokalizacji dla danego wezła, nastepnie /@nazwaatrybutu, np./book/authors/author[@id=100]

Page 27: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

Wyrazenia XPath

Wybieranie wszystkich potomków: skrót //Aby wybrac wszystkich potomków wezła głównego uzyj //Aby wybrac pewnych potomków danego wezła uzyj sciezkalokalizacji do wezła//nazwa elementu, który nas interesuje.Aby wybrac wszystkie wezły o danej nazwie, bez wzgledu na ichpołozenie w dokumencie XML, uzyj //nazwa elementu.

Warunkowe wybieranie wezłów: w XPath mozna tworzycwyrazenia logiczne (tzw. predykaty), do testowania warunków, napodstawie których mozna wybrac tylko pewien podzbiór zeznalezionego zbioru wezłów. Podajemy je w nawiasachkwadratowych, np./book/authors/author[@id=200]

Wybranie tylko wartosci tekstowej elementu: funkcja text(), np./book/authors/author/text()

Page 28: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

Jezyk XQuery

Jezyk XQuery 1.0 jest wykorzystywany do selekcji zawartosci zdanych zródłowych XML, przekształcania jej wg okreslonych reguł, anastepnie zwracania w postaci np. pliku XML, HTML lub innej.

XQuery stosuje składnie jezyka XPath 2.0 do wybierania zawartoscizródłowej XML i modyfikacji tej zawartosci w razie potrzeby.

Page 29: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

Wyrazenia FLWOR

Wyrazenie FLWOR zawiera nastepujace klauzule (od poczatkowychliter klauzul powstała nazwa wyrazenia:)F: for (dokonuje iteracji wiazac zmienna z elementem)L: let (wiaze zmienna z sekwencja)W: where (eliminuje elementy do iteracji)O: order by (porzadkuje elementy do iteracji)R: return (buduje wynik zapytania)xqueryfor $cust indb2-fn:xmlcolumn("CUSTOMER.INFO")/customerinfolet $tel :=$cust/phonewhere $tel/@type=’work’order by $custreturn ($cust/name/text(), $tel);

Page 30: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

XML w relacyjnych bazach danych

I Model XML jest modelem hierarchicznym, natomiast danerelacyjne maja płaska strukture.

I Dane XML opisuja swoje znaczenie, a dane relacyjne nie.I Dane XML maja okreslona kolejnosc, a dane relacyjne nie.

Konwersja z formatu XML na relacyjny jest kłopotliwa, w drugastrone nieco łatwiejsza.

Page 31: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

XML w relacyjnych bazach danych

Dane XML mozna przechowywac w relacyjnej bazie danych na kilkasposobów:

I całe dokumenty XML, jako duze obiekty (CLOB / BLOB) -duza elastycznosc w przechowywaniu dokumentów XML oróznej strukturze, kosztem wydajnosci zapytan.

I Szybkie wstawianie oraz pobieranie całych dokumentówI Swoboda definiowania struktury dokumentu (schematu)I Koniecznosc parsowania dokumentu w momencie realizowania

zapytan przy odwołaniu do elementów nie poindeksowanych(niska wydajnosc zapytan)

I rozbite na kilka tabel bazy (mimo stosunkowo dobrej wydajnosciwyszukiwania, tracimy to co motywuje do korzystania z formatuXML – elastycznosc).

I Stosunkowo szybkie wyszukiwanie, nawet mimo konwersjiXQuery na SQL

I Koniecznosc definiowania struktury (schematu) dokumentu przedwstawieniem - problem ze zmiana schematu

Page 32: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

XML w DB2: Technologia PureXML

Dokument jest wstawiany do pola o typie XML, w tle wezłydokumentu sa dekomponowane do hierarchicznej postaci (do drzewawezłów).

I Duza elastycznosc, brak wymogu wczesniejszego definiowaniaschematu

I Szybkie wyszukiwanie, bez koniecznosci dynamicznegoparsowania

I Spowolnione przy wstawianiu dokumentu.

Hybrydowa architektura serwera DB2 pozwala zachowacelastycznosc formatu XML przy zachowaniu odpowiedniejwydajnosci.

Page 33: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

XML w DB2

Dostep do danych XML:jezyki SQL/XML oraz XQuery.

Obsługa XML wbudowana w DB2:Wysoka wydajnosc dzieki głebokiej integracji XML w silnik DB2.

Zoptymalizowane przechowywanie XML:Nowy sposób składowania oraz indeksowania dokumentów XML –silnik hierarchiczny.

Page 34: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

Zapytania na danych XML

Istnieja dwa sposoby konstruowania zapytan XML w DB2:

(1) przy uzyciu XQuery:

XQuery jako jezyk podstawowy.

(2) Przy uzyciu SQL z rozszerzeniami XML (SQL/XML):

SQL jako jezyk podstawowy, umozliwia złaczenie danych XML zrelacyjnymi.

Page 35: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

Odpytywanie danych XML za pomoca XQuery

XQuery jest uzyty jako jezyk podstawowy, mozna uzywac SQLosadzonego wewnatrz XQuery (za pomoca funkcji db2-fn:sqlquery lub db2-fn:xmlcolumn).

Przykład:xquery db2-fn:xmlcolumn("CUSTOMER.INFO");

Wyrazenia XQuery zawsze poprzedzamy prefiksem xquery, aby DB2wiedział, ze nalezy uzyc parsera XQuery.

Funkcja db2-fn:xmlcolumn: zwraca dokumenty XML z kolumnypodanej w parametrze. Powyzsze zapytanie odpowiada wyrazeniuSQL:SELECT contact FROM clients

Przy funkcji db2-fn:xmlcolumn mozna podac wyrazenie XPath, abywybrac dane XML w odpowiedni sposób.

Page 36: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

Odpytywanie danych XML za pomoca XQuery

XQuery jest uzyty jako jezyk podstawowy, mozna uzywac SQLosadzonego wewnatrz XQuery (za pomoca funkcji db2-fn:sqlquery lub db2-fn:xmlcolumn).

Przykład:xquery db2-fn:xmlcolumn("CUSTOMER.INFO");

Wyrazenia XQuery zawsze poprzedzamy prefiksem xquery, aby DB2wiedział, ze nalezy uzyc parsera XQuery.

Funkcja db2-fn:xmlcolumn: zwraca dokumenty XML z kolumnypodanej w parametrze. Powyzsze zapytanie odpowiada wyrazeniuSQL:SELECT contact FROM clients

Przy funkcji db2-fn:xmlcolumn mozna podac wyrazenie XPath, abywybrac dane XML w odpowiedni sposób.

Page 37: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

Odpytywanie danych XML za pomoca XQuery

XQuery jest uzyty jako jezyk podstawowy, mozna uzywac SQLosadzonego wewnatrz XQuery (za pomoca funkcji db2-fn:sqlquery lub db2-fn:xmlcolumn).

Przykład:xquery db2-fn:xmlcolumn("CUSTOMER.INFO");

Wyrazenia XQuery zawsze poprzedzamy prefiksem xquery, aby DB2wiedział, ze nalezy uzyc parsera XQuery.

Funkcja db2-fn:xmlcolumn: zwraca dokumenty XML z kolumnypodanej w parametrze. Powyzsze zapytanie odpowiada wyrazeniuSQL:SELECT contact FROM clients

Przy funkcji db2-fn:xmlcolumn mozna podac wyrazenie XPath, abywybrac dane XML w odpowiedni sposób.

Page 38: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

Odpytywanie danych XML za pomoca XQuery

XQuery jest uzyty jako jezyk podstawowy, mozna uzywac SQLosadzonego wewnatrz XQuery (za pomoca funkcji db2-fn:sqlquery lub db2-fn:xmlcolumn).

Przykład:xquery db2-fn:xmlcolumn("CUSTOMER.INFO");

Wyrazenia XQuery zawsze poprzedzamy prefiksem xquery, aby DB2wiedział, ze nalezy uzyc parsera XQuery.

Funkcja db2-fn:xmlcolumn: zwraca dokumenty XML z kolumnypodanej w parametrze. Powyzsze zapytanie odpowiada wyrazeniuSQL:SELECT contact FROM clients

Przy funkcji db2-fn:xmlcolumn mozna podac wyrazenie XPath, abywybrac dane XML w odpowiedni sposób.

Page 39: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

Przykładowe zapytania

xquery db2-fn:xmlcolumn("CUSTOMER.INFO")/customerinfo/ name/text();

xquery db2-fn:xmlcolumn("CUSTOMER.INFO")/customerinfo[@Cid >= 1001]/name;

xquery db2-fn:xmlcolumn("CUSTOMER.INFO")/customerinfo/count(phone);

xquery db2-fn:xmlcolumn("CUSTOMER.INFO")/customerinfo/(<dane> {name/text(), ’ liczba nr tel: ’,count(phone)}</dane>);

Page 40: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

Odpytywanie danych XML za pomoca XQuery

Przykład - uzycie wyrazenia FLWOR z funkcjadb2-fn:xmlcolumn:

xqueryfor $y indb2-fn:xmlcolumn(‘CLIENTS.CONTACT’)/Client/faxreturn $y

Page 41: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

Odpytywanie danych XML za pomoca XQuery

Funkcja db2-fn:sqlquery wykonuje zapytanie SQL i zwracatylko wybrane dane XML. Zapytania SQL przekazane dodb2-fn:sqlquery musza zwracac tylko dane XML. Te daneXML moga byc nastepnie przetwarzane przez XQuery.

xqueryfor $cust indb2-fn:sqlquery("SELECT info FROM customer WHERE cid = 1005")/customerinfolet $phone :=$cust/phonereturn (<info>{$cust/name/text(),$phone}</info>);

Page 42: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

Odpytywanie danych XML za pomoca XQuery

Funkcja db2-fn:sqlquery wykonuje zapytanie SQL i zwracatylko wybrane dane XML. Zapytania SQL przekazane dodb2-fn:sqlquery musza zwracac tylko dane XML. Te daneXML moga byc nastepnie przetwarzane przez XQuery.

xqueryfor $cust indb2-fn:sqlquery("SELECT info FROM customer WHERE cid = 1005")/customerinfolet $phone :=$cust/phonereturn (<info>{$cust/name/text(),$phone}</info>);

Page 43: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

Odpytywanie danych XML za pomoca SQL/XML

Zapytanie SQL moze byc wykorzystane do pracy z całymidokumentami XML, ale nie pozwala na dostep jedynie do wybranychfragmentów dokumentu. W takiej sytuacji mozna wykorzystacrozszerzenie SQL - SQL/XML.

Podstawowe funkcje SQL/XML (zgodnie ze standardem SQL 2006):Nazwa funkcji OpisXMLPARSE Analizuje ciag znaków lub obiekt binarny

zwraca dokument XMLXMLSERIALIZE Tłumaczy dokument XML na ciag znaków

lub obiekt binarnyXMLVALIDATE Waliduje dokument XML według schematuXMLEXISTS Okresla, czy polecenie XQuery zwraca wynikXMLQUERY Wykonuje polecenie XQueryXMLTABLE Wykonuje polecenie XQuery

zwraca wynik w postaci tabeli relacyjnejXMLCAST Rzutuje z lub na dokument XML

Page 44: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

Odpytywanie danych XML za pomoca SQL/XML

Zapytanie SQL moze byc wykorzystane do pracy z całymidokumentami XML, ale nie pozwala na dostep jedynie do wybranychfragmentów dokumentu. W takiej sytuacji mozna wykorzystacrozszerzenie SQL - SQL/XML.

Podstawowe funkcje SQL/XML (zgodnie ze standardem SQL 2006):Nazwa funkcji OpisXMLPARSE Analizuje ciag znaków lub obiekt binarny

zwraca dokument XMLXMLSERIALIZE Tłumaczy dokument XML na ciag znaków

lub obiekt binarnyXMLVALIDATE Waliduje dokument XML według schematuXMLEXISTS Okresla, czy polecenie XQuery zwraca wynikXMLQUERY Wykonuje polecenie XQueryXMLTABLE Wykonuje polecenie XQuery

zwraca wynik w postaci tabeli relacyjnejXMLCAST Rzutuje z lub na dokument XML

Page 45: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

Funkcja XMLQUERY

Funkcja XMLQUERY - umozliwia wykonanie wyrazenia XQuery zpoziomu SQL;zwraca wyrazenie XML - sekwencje XML, bedaca wynikiemwyrazenia XQuery dla kazdego wiersza zapytania SQL;zwracana sekwencja moze zawierac wiele elementów, lub byc pusta.

Wykorzystujac XMLQUERY:

mamy mozliwosc wykonywania zapytan na danych XML;dane XML moga byc uzyte w obrebie zapytania SQL;dostep jednoczesnie do danych relacyjnych i XML;dane XML zwrócone przez XQUERY mozna nastepnie wykorzystacw zapytaniu SQL, aby np. uporzadkowac wynik (nalezy je najpierwzrzutowac na odpowiedni relacyjny typ danych za pomocaXMLCAST).

Page 46: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

Funkcja XMLQUERY

Funkcja XMLQUERY - umozliwia wykonanie wyrazenia XQuery zpoziomu SQL;zwraca wyrazenie XML - sekwencje XML, bedaca wynikiemwyrazenia XQuery dla kazdego wiersza zapytania SQL;zwracana sekwencja moze zawierac wiele elementów, lub byc pusta.

Wykorzystujac XMLQUERY:

mamy mozliwosc wykonywania zapytan na danych XML;dane XML moga byc uzyte w obrebie zapytania SQL;dostep jednoczesnie do danych relacyjnych i XML;dane XML zwrócone przez XQUERY mozna nastepnie wykorzystacw zapytaniu SQL, aby np. uporzadkowac wynik (nalezy je najpierwzrzutowac na odpowiedni relacyjny typ danych za pomocaXMLCAST).

Page 47: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

XMLQUERY

SELECT XMLQuery(’$i/customerinfo/name’ PASSINGINFO as "i") FROM customerwhere CID IN (1003,1001,1004);

W tym zapytaniu XQuery, zmienna $i zawiera dokument XMLzapisany w tabeli customer w kolumnie INFO (typu XML).Przypisanie dokumentu do zmiennej nastepuje w klauzuli PASSINGINFO as "i" (mozna zwiazac wiecej niz jedna zmienna).Wyrazenie XPath wykorzystane w funkcji wskazuje na element namew dokumencie XML.

Wynik:<name>Kathy Smith</name><name>Robert Shoemaker</name><name>Matt Foreman</name>

Page 48: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

XMLQUERY

SELECT XMLQuery(’$i/customerinfo/name’ PASSINGINFO as "i") FROM customerwhere CID IN (1003,1001,1004);

W tym zapytaniu XQuery, zmienna $i zawiera dokument XMLzapisany w tabeli customer w kolumnie INFO (typu XML).Przypisanie dokumentu do zmiennej nastepuje w klauzuli PASSINGINFO as "i" (mozna zwiazac wiecej niz jedna zmienna).Wyrazenie XPath wykorzystane w funkcji wskazuje na element namew dokumencie XML.

Wynik:<name>Kathy Smith</name><name>Robert Shoemaker</name><name>Matt Foreman</name>

Page 49: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

W funkcji XMLQUERY mozna uzyc takze wyrazenia FLWORXQuery, np.

SELECT XMLQuery(’for $c in $i/customerinfolet $p := $c/phonereturn ($c/name, $p)’PASSING INFO as "i") as daneFROM customerwhere CID =1004;

Wynik (tylko jeden wiersz):DANE---------------------------------------------------------------------<name>Matt Foreman</name><phone type="work">905-555-4789</phone>

<phone type="home">416-555-3376</phone>

Page 50: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

W funkcji XMLQUERY mozna uzyc takze wyrazenia FLWORXQuery, np.

SELECT XMLQuery(’for $c in $i/customerinfolet $p := $c/phonereturn ($c/name, $p)’PASSING INFO as "i") as daneFROM customerwhere CID =1004;

Wynik (tylko jeden wiersz):DANE---------------------------------------------------------------------<name>Matt Foreman</name><phone type="work">905-555-4789</phone>

<phone type="home">416-555-3376</phone>

Page 51: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

Funkcja XMLTable

Funkcje XMLTable mozna wykorzystac, jezeli chcemy prezentowacdane XML w postaci tabeli, np.select c.cid, cinfo.name,cinfo.city, cinfo.phone,cinfo.typefrom customer c,xmltable(’$cust/customerinfo’ passing c.info as"cust"columnsname char(30) path ’name’,city char(12) path ’addr/city’,phone char(12) path ’phone[1]’,type char(6) path ’phone[1]/@type’

) cinfo;

Page 52: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

Wynik poprzedniego zapytania:CID NAME CITY PHONE TYPE--- --------------- -------- -------- ----1000 Kathy Smith Toronto 416-555-1358 work1001 Kathy Smith Markham 905-555-7258 work1002 Jim Noodle Markham 905-555-7258 work1003 Robert Shoemaker Aurora 905-555-7258 work1004 Matt Foreman Toronto 905-555-4789 work1005 Larry Menard Toronto 905-555-9146 work

Page 53: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

XMLTable z wykorzystaniem wyrazenia FOR w XPath

select c.cid, cinfo.name,cinfo.city,cinfo.phone, cinfo.typefrom customer c,xmltable(’$cust/customerinfo’ passing c.infoas "cust"columnsname char(30) path ’name’,city char(12) path ’addr/city’,phone char(12) path ’for $p in phone return$p’,) cinfo;

Page 54: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich
Page 55: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

XMLExists

Funkcja XMLExists moze byc wykorzystana w klauzuli WHEREzapytania SQL, aby sprawdzic, czy zapytanie XQuery zwraca wyniki,np.

select cid,xmlquery(’$INFO/customerinfo/name/text()’)from customerwherexmlexists(’$INFO/customerinfo/phone[@type="home"]’);

Powyzsze zapytanie zwróci informacje tylko o tych klientach, którzypodali domowy numer telefonu.

Uwaga. w funkcjach XMLQuery i XMLExists w przykładziewykorzystano uproszczona składnie.

Page 56: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

XMLExists

Funkcja XMLExists moze byc wykorzystana w klauzuli WHEREzapytania SQL, aby sprawdzic, czy zapytanie XQuery zwraca wyniki,np.

select cid,xmlquery(’$INFO/customerinfo/name/text()’)from customerwherexmlexists(’$INFO/customerinfo/phone[@type="home"]’);

Powyzsze zapytanie zwróci informacje tylko o tych klientach, którzypodali domowy numer telefonu.

Uwaga. w funkcjach XMLQuery i XMLExists w przykładziewykorzystano uproszczona składnie.

Page 57: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

Przykład bazy z wykorzystaniem XML

Schemat bazy danych:

Page 58: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

Przykład bazy z wykorzystaniem XML

Przykładowy dokument XML z kolumny author.info

Page 59: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

Przykład bazy z wykorzystaniem XML

Przykładowy dokument XML z kolumny edition.translations

Page 60: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

Dodawanie danych XML do tabel

Dodawanie dokumentów XML do bazy danych DB2 moze zostacwykonane za pomoca polecenia INSERT jezyka SQL, albo poleceniaIMPORT.(1) Dodawanie nowego wiersza do tabeli author za pomoca INSERT(w poleceniu INSERT przekazujemy dokument XML jako ciagznaków zawarty w cudzysłowie):INSERT INTO author VALUES(DEFAULT, ’Joanne Rowling’,’<Info>

<Email>[email protected]</Email><Country>England</Country><YearOfBirth>1965</YearOfBirth>

</Info>’);

Page 61: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

Dodawanie danych XML do tabelDodawanie dokumentów XML do bazy danych DB2 moze zostacwykonane za pomoca polecenia INSERT jezyka SQL, albo poleceniaIMPORT.(2) Ładowanie (wielu) wierszy do tabeli author za pomoca poleceniaIMPORT(importujemy dane z pliku authors.del (plik ASCII z separatorami),dodatkowo wskazujemy lokalizacje dokumentu XML, do któregoodnosi sie authors.del):

IMPORT FROM "C:\xml\authors.del" OF DELXML FROM "C:\xml\xxx"METHOD P ( 1, 2 )INSERT INTO ANIAF.AUTHOR ( NAME, INFO );

W pliku authors.del mamy zapisane dwa wiersze danych:

"Joanna Chmielewska","<XDS FIL=’a1.01.xml’ />""Frank Herbert","<XDS FIL=’a1.02.xml’ />"

W pliku authors.del, instrukcja “XDS FIL= ” słuzy do wskazaniadokumentu XML.

Page 62: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

Operacje aktualizacji i usuwania

Operacje aktualizacji (UPDATE) i usuwania (DELETE) wdokumentach XML moga byc wykonane na dwa sposoby:

(1) Uzycie operacji SQL: UPDATE, DELETE(2) Uzycie wyrazenia XQuery TRANSFORM

Korzystajac z pierwszego sposobu, czyli SQL UPDATE i DELETE,aktualizacja lub usuniecie dotyczy całego dokumentu. Oznacza to, zecały dokument XML zostaje usuniety lub zaktualizowany, np.update authorset info=’<Info>

<Email>[email protected]</Email><Country>England</Country><YearOfBirth>1965</YearOfBirth>

</Info>’where id=41;

Page 63: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

Polecenie TRANSFORM

Przy uzyciu drugiego sposobu, mozna wykonywac czesciowaaktualizacje za pomoca wyrazenia TRANSFORM (od DB2 9.5), cojest o wiele bardziej efektywne.Dzieki temu mozna zastapic, wstawic, usunac lub zmienic nazwywezłów w dokumencie XML.Mozna zmienic wartosc wezła bez zastepowania całego wezła, alezwykle przy zmianach wartosci lub nazwy wezła zamieniany jest caływezeł.Wyrazenie TRANSFORM jest czescia jezyka XQuery.Mozna go uzywac wszedzie tam, gdzie normalnie uzywamy XQuery,na przykład w wyrazeniach FLWOR lub w funkcjach XMLQUERY wzapytaniach SQL/XML.Najczesciej wykorzystywane jest w instrukcji SQL UPDATE, abyzmodyfikowac dokument XML w kolumnie XML.

Page 64: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

Polecenie TRANSFORM tworzy kopie wartosci XML, zmienia ja, anastepnie zwraca wynik, czyli zmodyfikowana kopie.Polecenia TRANSFORM uzywamy wewnatrz funkcji XMLQUERY(albo wyrazenia XQuery).Słowo kluczowe PASSING moze byc wykorzystane aby przekazacwartosc XML z kontekstu SQL do kontekstu XML.Wynik polecenia TRANSFORM staje sie wynikiem funkcjiXMLQUERY.Polecenie TRANSFORM nie zmienia wartosci XML, która zostałaprzekazana (za pomoca PASSING) - nalezy uzyc instrukcji SQLUPDATE, aby umiescic zmodyfikowana wartosc w tablicy, np.UPDATE authorSET info = XMLQuery(’transformcopy $res := $imodify do insert element Website {"www.jkr.com"}

as last into $res/Inforeturn $res’PASSING info AS "i")

where id=41;

Page 65: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

Polecenie TRANSFORM

Polecenie transform ma trzy (wymagane) klauzule:

transformcopy variable assignmentmodify modify expressionreturn return expression

Wyrazenie copy jest uzywane, aby przypisac do zmiennej dokumentXML, z którym chcemy pracowac.

W wyrazeniu modify, mozemy podac wyrazenie do insert,do delete, do rename lub do replace. Wyrazenia tepozwalaja nam na dokonywanie modyfikacji w naszych dokumentachXML: insert dla dodania nowego wezła, delete - usunieciawezła, rename - zmiany nazwy elementu lub atrybutu; aby zastapicelement nowym elementem, lub ciagiem kilku nowych elementów,nalezy uzyc wyrazenia replace. Wyrazenie replace moze byc uzytetylko do zmiany elementu lub atrybutu.

Wyrazenie return zwraca wynik transformacji.

Page 66: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

Dodawanie nowych wezłów

Wyrazenie do insert - aby dodac nowy wezeł. Miejscewstawienia nowego wezła jest okreslana na podstawie wyrazeniaXPath oraz podanego słowa kluczowego okreslajacego pozycje(before, after, as last into, as first into).

UPDATE authorSET info = XMLQuery(’transformcopy $res := $imodify do insert <Email>[email protected]</Email>

before $res/Info/Countryreturn $res’PASSING info AS "i")where id=41;

Page 67: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

Usuwanie wezłów

Wyrazenie do delete - aby usunac wezły.Jezeli wyrazenie XPath podane po "do delete" zwraca wiecej nizjeden wezeł, wszystkie te wezły beda usuniete, np.

UPDATE authorSET info = XMLQuery(’transformcopy $res := $imodify do delete $res/Info/Emailreturn $res’PASSING info AS "i")

WHERE id=41;

Powyzsze wyrazenie usunie wszystkie wezły Email (w dokumencieXML Info dla autora o id=41).

Page 68: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

Zmiana nazwy wezła

Wyrazenie do rename - aby zmienic nazwe wezła, nie zmieniajacjego pozycji ani wartosci, np. chcemy dla kazdego autora zmienic wdokumencie Info wezeł Country na BirthCountry:

UPDATE authorSET info = XMLQUERY(’transformcopy $res := $imodify do rename $res/Info/Country as"BirthCountry"return $res’PASSING info AS "i")

Wyrazenie XPath podane po "do rename" musi zwracac dokładniejeden wezeł, w przeciwnym przypadku dostaniemy bład.

Page 69: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

Zmiana nazwy wezła

Jezeli wyrazenie XPath podane po "do rename" zwraca wiele wezłów,mozna wykorzystac FLOWR, by zmienic nazwy wszystkichpasujacych elementów, np. aby zmienic nazwe kazdego wezłaTranslation (których moze byc zero lub kilka) na Version wdokumencie translations (w tabeli edition):

UPDATE editionSET translations = XMLQUERY(’transformcopy $res := $transmodify for $t in $res//Translation

return do rename $t as "Version"return $res’PASSING translations AS "trans")

Page 70: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

Zmiana nazwy atrybutuWyrazenie do rename - aby zmienic nazwe atrybutu.Dodajmy do wezła Info nowy wezeł NewEmail z atrybutem Type, zkopia wartosci z wezła Email (ale tylko dla autora z id=41):UPDATE authorSET info = XMLQuery(’transformcopy $res := $imodify do insert<NewEmail Type="work"> {$res/Info/Email/text()}</NewEmail>after $res/Info/Emailreturn $res’PASSING info AS "i")

where id=41;

Zmiana nazwy atrybutu Type na status:UPDATE authorSET info = XMLQUERY(’transformcopy $res := $imodify do rename $res/Info/NewEmail/@Type as "status"return $res’PASSING info AS "i")

where id=41;

Page 71: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

Zamiana wezła

Wyrazenie do replace - moze byc uzyte, aby zamienic wezeł nainny. Wyrazenie XPath podane w replace identyfikuje wezeł (musiwskazywac dokładnie jeden wezeł) i nastepnie zamienia go na wezeł(albo sekwencje wezłów). Np. zamiana wezła Email na wezeł Skype(dla autora z id=41):

UPDATE authorSET info = XMLQUERY(’transformcopy $res := $infomodify do replace $res//Email with elementSkype {"j.k.rowling.author"}return $res’PASSING info AS "info")WHERE id=41;

Page 72: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

Zamiana wezła

Wyrazenie do replace - moze byc uzyte, aby zamienic wezeł nainny. Wyrazenie XPath podane w replace identyfikuje wezeł (musiwskazywac dokładnie jeden wezeł) i nastepnie zamienia go na wezeł(albo sekwencje wezłów). Np. zamiana wezła Email na sekwencje(dla autora z id=41):

UPDATE authorSET info = XMLQUERY(’transformcopy $res := $infomodify do replace $res//Email with (elementSkype {"carl.sagan.author"}, element Phone{"1234"})return $res’PASSING info AS "info")WHERE id=41;

Page 73: Jezyk˛ XML XML (eXtensible Markup Language, czyli ...staff.uz.zgora.pl/afiedoro/pliki/2017/wyklad4xml.pdf · I XML jest jezykiem˛ znaczników, jak HTML, I XML nie posiada swoich

Zamiana wartosci wezła

Wyrazenie do replace - moze byc tez uzyte, aby zamienicwartosc wezła (elementu lub atrybutu).Nalezy uzyc polecenia do replace value of. Np. aby zmienicdate urodzenia, czyli wartosc wezła YearOfBirth autora o id=41,mozna uzyc polecenia:

UPDATE authorSET info = XMLQUERY(’transformcopy $res := $imodify do replace value of$res/Info/YearOfBirth with 1914return $res’PASSING info AS "i")WHERE id=41;