(XML).

Transkrypt

(XML).
J˛ezyk XML
XML (eXtensible Markup Language, czyli rozszerzalny j˛ezyk
znaczników) to specyfikacja dotyczaca
˛ przechowywania informacji.
Jest to również specyfikacja opisujaca
˛ struktur˛e tych informacji.
I
XML jest j˛ezykiem znaczników, jak HTML,
I
XML nie posiada swoich własnych znaczników,
I
można tworzyć własne znaczniki według potrzeb,
I
tworzac
˛ nowe znaczniki, należy trzymać si˛e specyfikacji XML-a.
J˛ezyk XML
XML (eXtensible Markup Language, czyli rozszerzalny j˛ezyk
znaczników) to specyfikacja dotyczaca
˛ przechowywania informacji.
Jest to również specyfikacja opisujaca
˛ struktur˛e tych informacji.
I
XML jest j˛ezykiem znaczników, jak HTML,
I
XML nie posiada swoich własnych znaczników,
I
można tworzyć własne znaczniki według potrzeb,
I
tworzac
˛ nowe znaczniki, należy trzymać si˛e 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).
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>
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>
Wady i zalety XML-a
Zalety
I
I
I
I
Łatwy do odczytania, zarówno dla człowieka, jak dla maszyny
(zwykły tekst).
Zawiera dane i jednocześnie opisuje znaczenie danych
(self-documenting).
Może reprezentować praktycznie dowolny rodzaj danych:
hierarchie, rekordy, listy (elastyczność, uniwersalność).
Sformalizowany zapis pozwala na komputerowe przetworzenie,
weryfikacje dokumentów XML (well-formed).
Wady
I
I
Nadmiarowość informacji (powtarzajace
˛ si˛e znaczniki,
zagnieżdżone elementy).
Nie wszystko da si˛e wyrazić elastycznie w postaci struktury
hierarchicznej (np. albo Film->Aktor, albo Aktor->Film)
Zastosowanie XML-a
I
Elektroniczna wymiana danych
I
I
I
I
Usługi e-biznesu: transakcje zakodowane w postaci XML-a
(XML jako podstawa Web Serwisów), wiele formatów
pochodnych.
Komunikacja w sferze publicznej (np. podatnik – urzad
˛
podatkowy, systemy celne, NFZ - świadczeniodawcy, itp.).
Do zapisu informacji o luźnej strukturze, trudnej do
jednoznacznego opisana w momencie projektowania, np.
formularze WWW, wymagajace
˛ cz˛estych zmian.
Format przechowywania dokumentów.
Zasady pisania dokumentów XML
Reguły, aby dokument XML był poprawny składniowo:
1. element główny jest wymagany; zawsze musi być dokładnie
jeden element główny; wszystkie pozostałe elementy dokumentu
sa˛ zawarte w elemencie głównym; przed elementem głównym
dopuszczalne sa˛ komentarze i instrukcje przetwarzania;
2. znaczniki zamykajace
˛ sa˛ niezb˛edne; każdy element musi mieć
znacznik zamykajacy;
˛
3. elementy musza˛ być odpowiednio zagnieżdżone;
4. wielkość liter ma znaczenie;
5. wartość atrybutu musi być zamykana w dwóch takich samych
znakach pojedynczego lub podwójnego cudzysłowu.
Zasady tworzenia dokumentów XML
Elementy składowe XML-a to znaczniki określajace
˛ elementy,
wartości tych elementów oraz atrybuty.
Element XML to podstawowa jednostka dokumentu.
Może zawierać: tekst, atrybuty, inne znaczniki.
Każdy element ma znacznik otwierajacy:
˛ <nazwa_elementu>
oraz znacznik zamykajacy:
˛ </nazwa_elementu>.
Pusty element może składać si˛e z pojedynczego znacznika
otwierajacego
˛
i zamykajacego,
˛
np.
<obrazek plik="mapa.jpg"/>
Atrybuty elementu umieszczane sa˛ w obr˛ebie znacznika
otwierajacego,
˛
w postaci par nazwa-wartość, np.
<wysokosc jednostka="metr">33</wysokosc>.
Opisuja˛ zawartość i przeznaczenie elementu. Informacje zawarte w
atrybutach to metadane. Element może mieć wiele atrybutów, ich
nazwy musza˛ być unikalne
Zasady tworzenia dokumentów XML
Dokument XML powinien rozpoczynać si˛e deklaracja,˛ która
wskazuje zastosowana˛ wersj˛e XML-a. Przykładowa deklaracja XML:
<?xml version="1.0"?>
Deklaracj˛e umieszczamy na poczatku,
˛
przed wszystkimi innymi
elementami.
Znaczniki rozpoczynajace
˛ si˛e od <? i kończace
˛ si˛e ?> to instrukcje
przetwarzania. Służa˛ do deklarowania wersji XML, określania
kodowania znaków, arkuszy stylów.
Zasady tworzenia dokumentów XML
Dokument XML powinien rozpoczynać si˛e deklaracja,˛ która
wskazuje zastosowana˛ wersj˛e XML-a. Przykładowa deklaracja XML:
<?xml version="1.0"?>
Deklaracj˛e umieszczamy na poczatku,
˛
przed wszystkimi innymi
elementami.
Znaczniki rozpoczynajace
˛ si˛e od <? i kończace
˛ si˛e ?> to instrukcje
przetwarzania. Służa˛ do deklarowania wersji XML, określania
kodowania znaków, arkuszy stylów.
Komentarze XML: warto opisywać dokumenty XML, aby określić co
oznacza dany element.
Komentarz zaczyna si˛e za pomoca˛ <!−−, a kończy −−>. Nie wolno
zagnieżdżać komentarzy, ani używać znaku −− wewnatrz
˛
komentarza.
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 ksiażki
˛ na podstawie platformy Ceneo−−>
<price>69.00</price>
<keywords>
<keyword>pochodna</keyword>
<keyword>całka</keyword>
</keywords>
</book>
Predefiniowane encje XML-a: pi˛eć 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 0
Przekształcanie dokumentów XML za pomoca˛ XSLT 2.0
J˛ezyk XSLT służy do przekształcanie dokumentów XML na inny
format, np. HTML.
Przekształcanie dokumentu XML polega na zastosowaniu XSLT do
analizy jego zawartości, a nast˛epnie podj˛ecie konkretnych działań w
zależności od tego, jakie elementy zostana˛ znalezione.
XSLT można użyć także do zmiany kolejności danych wynikowych
na podstawie pewnych kryteriów, do wyświetlenia tylko określonych
fragmentów informacji.
W procesie przekształcania biora˛ udział dwa dokumenty: źródłowy
dokument XML oraz arkusz stylów XSLT opisujacy
˛ reguły
przekształcania.
Arkusze stylów to pliki tekstowe, zapisywane sa˛ z rozszerzeniem .xsl.
Każdy arkusz stylów też jest plikiem XML.
Do wykonania przekształcenia potrzebujemy: procesora XSLT lub
przegladarki,
˛
obsługujacej
˛ XSLT (wi˛ekszość ma wbudowana˛
obsług˛e).
1. Powiazanie
˛
dokumentu XML z arkuszem stylów XSLT 2.0: dodajemy
instrukcj˛e (po deklaracji xml):
<?xml-stylesheet type="text/xsl"
href="booksstyl.xsl"?>
1. Powiazanie
˛
dokumentu XML z arkuszem stylów XSLT 2.0: dodajemy
instrukcj˛e (po deklaracji xml):
<?xml-stylesheet type="text/xsl"
href="booksstyl.xsl"?>
2. Przegladarka
˛
(lub procesor XSLT) nast˛epnie wykona transformacj˛e
pliku XML, zanim zostanie on wyświetlony.
Pierwszy etap: konwersja dokumentu XML do drzewa w˛ezłów, które
jest hierarchiczna˛ reprezentacja.˛ Każdy w˛ezeł odpowiada jednemu z
elementów dokumentu XML, atrybutowi lub zawartości tekstowej.
3. Kolejny etap to odwołanie si˛e do arkusza stylów XSLT w celu
znalezienia instrukcji, określajacych
˛
sposób wyświetlania w˛ezłów.
Instrukcje te sa˛ zawarte w tzw. szablonach, które składaja˛ si˛e z etykiety,
która identyfikuje w˛ezły, do których ma zastosowanie dany szablon i z
instrukcji określajacych,
˛
jak te w˛ezły maja˛ być przekształcone.
Dokument XML i jego drzewo w˛ezłó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>
Dokument XML i jego drzewo w˛ezłów
„‘‘•
„‘‘
#
#
$ %
%
#
#
™¹œ‡Ó‡Ž‡‡–—
™¹œ‡Ó–‡•–‘™›
!""
™¹œ‡Ó‡Ž‡‡–—
™¹œÓ›‡Ž‡‡–Ü™
Inicjowanie arkusza stylów XSLT:
deklarujemy, że to dokument XML:
<?xml version="1.0"?>
nast˛epnie deklarujemy przestrzeń nazw XSLT i jej prefiks oraz wersj˛e
XSLT
<xsl:stylesheet xmlns:xsl="http://www.w3.org/
1999/XSL/Transform" version="2.0">
określamy typ pliku wynikowego (html):
<xsl:output method="html"/>
tworzymy szablon główny:
<xsl:template match="/">
w szablonie głównym określamy poszczególne elementy dokumentu
HTML
Zamykamy szablon główny:
</xsl:template>
i kończymy arkusz stylów:
</xsl:stylesheet>
Tworzenie szablonu głównego:
<xsl:template match="/">
Szablon główny określa reguły stosowane do w˛ezła głównego
dokumentu XML. Opisuje sposób przetwarzania zawartości z w˛ezła
głównego w nowe dane wynikowe.
Aby utworzyć plik wyjściowy w formacie html, należy zastosować
instrukcj˛e:
<xsl:output method="html"/>
W obr˛ebie szablonu głównego należy teraz określić poszczególne
elementy dokumentu HTML (head, title, body, itp.).
Wszystko w obr˛ebie szablonu głównego, co nie jest instrukcja˛ XSLT
(czyli elementy literalne), b˛edzie wyświetlane w takiej formie, w
jakiej zostało zapisane. W ten sposób można dodać znaczniki i tekst
html do pliku wynikowego.
Wyświetlanie wartości w˛ezła
Aby wyświetlić wartość w˛ezła XML, używamy instrukcji
<xsl:value-of>:
<xsl:value-of select="wyrażenie"/>
Wyrażenie XPath identyfikuje zbiór w˛ezłów, który ma być
wyświetlany.
Uwagi
I
instrukcja select="." służy do wybrania bieżacego
˛
w˛ezła.
I
Jeżeli wyrażenie select odpowiada wi˛ecej, niż jednemu w˛ezłowi,
wyświetlana jest zawartość pierwszego w˛ezła.
I
Można zwrócić tylko te w˛ezły, dla których określony atrybut ma
dana˛ wartość, np.:
select="books/book[@language=’polski’]"
I
Jeżeli wyrażenie select odpowiada w˛ezłowi, który posiada w˛ezły
potomne, ich zawartość też jest wyświetlana.
I
Jeżeli odpowiada pustemu zbiorowi w˛ezłów - nic nie jest
wyświetlane.
Zap˛etlanie w˛ezłów
Element xsl:for-each pozwala działać na wszystkich w˛ezłach,
do których pasuje.
Aby przetwarzać w˛ezły partiami, należy:
I
w obr˛ebie reguły szablony wpisujemy
<xsl:for-each select="wyrażenie">
I
podajemy reguły przetwarzania w˛ezłów, które maja˛ być
przetworzone (identyfikuje je wyrażenie XPath)
I
kończymy instrukcj˛e znacznikiem </xsl:for-each>
Uwagi
I
znacznik xsl:for-each powinno si˛e umieszczać przed regułami,
które maja˛ być powtarzane dla każdego znalezionego w˛ezła
I
jeżeli chcemy umieścić zawartość w˛ezłów w tabeli, znacznik
<table> otwierajacy
˛ tabel˛e powinien być przed instrukcja˛
<xsl:for-each>, a znacznik zamykajacy
˛ tabel˛e po niej.
J˛ezyk XPath
XPath jest j˛ezykiem służacym
˛
do wybierania w˛ezłów i zbioru w˛ezłów
poprzez określanie ścieżek ich lokalizacji w dokumencie XML.
XPath można też użyć do dalszego przetworzenia zbioru zwróconych
w˛ezłów, za pomoca˛ wbudowanych funkcji do obliczeń
matematycznych, przetwarzania ciagów
˛
znaków i testowania
warunków w dokumencie XML.
U podstaw j˛ezyka XPath leży możliwość stosowania ścieżek
lokalizacji, w celu odwołania si˛e do w˛ezłów dokumentu XML (w˛ezeł
to każdy indywidualny fragment dokumentu XML: element, atrybut,
zawartość tekstowa).
XPath widzi dokument XML w postaci drzewa w˛ezłów.
Dokument XML i jego drzewo w˛ezłó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>
Dokument XML i jego drzewo w˛ezłów
„‘‘•
„‘‘
#
#
$ %
%
#
#
™¹œ‡Ó‡Ž‡‡–—
™¹œ‡Ó–‡•–‘™›
!""
™¹œ‡Ó‡Ž‡‡–—
™¹œÓ›‡Ž‡‡–Ü™
Ścieżki lokalizacji
Dwa rodzaje ścieżek lokalizacji:
wzgl˛edna ścieżka:
składa si˛e z sekwencji kroków lokalizacji, rozdzielonych znakiem /.
Każdy krok określa w˛ezeł (lub zbiór w˛ezłów) wzgl. w˛ezła bieżacego.
˛
W kolejnym kroku każdy w˛ezeł w tym zbiorze jest użyty w roli w˛ezła
bieżacego
˛
dla kolejnego kroku;
bezwgl˛edna ścieżka:
zaczyna si˛e od znaku /, po którym może nast˛epować wzgl˛edna
ścieżka lokalizacji. Znak / określa w˛ezeł główny.
W˛ezeł bieżacy
˛ to element lub w˛ezeł, który jest aktualnie
przetwarzany.
Wyrażenia XPath
Wybieranie dzieci danego w˛ezła:
jeżeli bieżacy
˛ w˛ezeł zawiera elementy, które chcemy znaleźć, należy
podać nazw˛e elementu - dziecka, aby odwołać si˛e do dalszych
potomków, należy użyć znaku / i podać nazw˛e dalszego potomka, itp.
Znak * określa wszystkie dzieci bieżacego
˛
w˛ezła, np.
/book/authors/author
/book/title
Wybieranie rodzica danego w˛ezła: za pomoca˛ ..
Można potem odwołać si˛e do innych dzieci w˛ezła, b˛edacego
˛
tym
rodzicem, np. ../title spowoduje wybranie w˛ezła - dziecka (o nazwie
title) dla w˛ezła b˛edacego
˛
rodzicem w˛ezła bieżacego;
˛
../* to wybranie
wszystkich elementów-dzieci rodzica w˛ezła bieżacego.
˛
Wybieranie atrybutów w˛ezła: stosujemy znak @.
Wpisz ścieżk˛e lokalizacji dla danego w˛ezła, nast˛epnie /@nazwa
atrybutu, np.
/book/authors/author[@id=100]
Wyrażenia XPath
Wybieranie wszystkich potomków: skrót //
Aby wybrać wszystkich potomków w˛ezła głównego użyj //
Aby wybrać pewnych potomków danego w˛ezła użyj ścieżka
lokalizacji do w˛ezła//nazwa elementu, który nas interesuje.
Aby wybrać wszystkie w˛ezły o danej nazwie, bez wzgl˛edu na ich
położenie w dokumencie XML, użyj //nazwa elementu.
Warunkowe wybieranie w˛ezłów: w XPath można tworzyć
wyrażenia logiczne (tzw. predykaty), do testowania warunków, na
podstawie których można wybrac tylko pewien podzbiór ze
znalezionego zbioru w˛ezłów. Podajemy je w nawiasach
kwadratowych, np.
/book/authors/author[@id=200]
Wybranie tylko wartości tekstowej elementu: funkcja text(), np.
/book/authors/author/text()
J˛ezyk XQuery
J˛ezyk XQuery 1.0 jest wykorzystywany do selekcji zawartości z
danych źródłowych XML, przekształcania jej wg określonych reguł, a
nast˛epnie zwracania w postaci np. pliku XML, HTML lub innej.
XQuery stosuje składni˛e j˛ezyka XPath 2.0 do wybierania zawartości
źródłowej XML i modyfikacji tej zawartości w razie potrzeby.
Wyrażenia FLWOR
Wyrażenie FLWOR zawiera nast˛epujace
˛ klauzule (od poczatkowych
˛
liter klauzul powstała nazwa wyrażenia:)
F: for (dokonuje iteracji wia˛żac
˛ zmienna˛ z elementem)
L: let (wia˛że zmienna˛ z sekwencja)
˛
W: where (eliminuje elementy do iteracji)
O: order by (porzadkuje
˛
elementy do iteracji)
R: return (buduje wynik zapytania)
xquery
for $cust in
db2-fn:xmlcolumn("CUSTOMER.INFO")/customerinfo
let $tel :=$cust/phone
where $tel/@type=’work’
order by $cust
return ($cust/name/text(), $tel);
XML w relacyjnych bazach danych
I
Model XML jest modelem hierarchicznym, natomiast dane
relacyjne maja˛ płaska˛ struktur˛e.
I
Dane XML opisuja˛ swoje znaczenie, a dane relacyjne nie.
I
Dane XML maja˛ określona˛ kolejność, a dane relacyjne nie.
Konwersja z formatu XML na relacyjny jest kłopotliwa, w druga˛
stron˛e nieco łatwiejsza.
XML w relacyjnych bazach danych
Dane XML można przechowywać w relacyjnej bazie danych na kilka
sposobów:
I
całe dokumenty XML, jako duże obiekty (CLOB / BLOB) duża elastyczność w przechowywaniu dokumentów XML o
różnej strukturze, kosztem wydajności zapytań.
I
I
I
I
Szybkie wstawianie oraz pobieranie całych dokumentów
Swoboda definiowania struktury dokumentu (schematu)
Koniecznosc parsowania dokumentu w momencie realizowania
zapytan przy odwołaniu do elementów nie poindeksowanych
(niska wydajność zapytań)
rozbite na kilka tabel bazy (mimo stosunkowo dobrej wydajnosci
wyszukiwania, tracimy to co motywuje do korzystania z formatu
XML – elastyczność).
I
I
Stosunkowo szybkie wyszukiwanie, nawet mimo konwersji
XQuery na SQL
Konieczność definiowania struktury (schematu) dokumentu przed
wstawieniem - problem ze zmiana˛ schematu
XML w DB2: Technologia PureXML
Dokument jest wstawiany do pola o typie XML, w tle wezły
dokumentu sa˛ dekomponowane do hierarchicznej postaci (do drzewa
w˛ezłów).
I
Duża elastyczność, brak wymogu wcześniejszego definiowania
schematu
I
Szybkie wyszukiwanie, bez koniecznosci dynamicznego
parsowania
I
Spowolnione przy wstawianiu dokumentu.
Hybrydowa architektura serwera DB2 pozwala zachować
elastyczność formatu XML przy zachowaniu odpowiedniej
wydajności.
XML w DB2
Dost˛ep do danych XML:
j˛ezyki SQL/XML oraz XQuery.
Obsługa XML wbudowana w DB2:
Wysoka wydajność dzi˛eki gł˛ebokiej integracji XML w silnik DB2.
Zoptymalizowane przechowywanie XML:
Nowy sposób składowania oraz indeksowania dokumentów XML –
silnik hierarchiczny.
Zapytania na danych XML
Istnieja˛ dwa sposoby konstruowania zapytań XML w DB2:
(1) przy użyciu XQuery:
XQuery jako j˛ezyk podstawowy.
(2) Przy użyciu SQL z rozszerzeniami XML (SQL/XML):
SQL jako j˛ezyk podstawowy, umożliwia złaczenie
˛
danych XML z
relacyjnymi.
Odpytywanie danych XML za pomoca˛ XQuery
XQuery jest użyty jako j˛ezyk podstawowy, można używać SQL
osadzonego wewnatrz
˛ XQuery (za pomoca˛ funkcji db2-fn:
sqlquery lub db2-fn:xmlcolumn).
Odpytywanie danych XML za pomoca˛ XQuery
XQuery jest użyty jako j˛ezyk podstawowy, można używać SQL
osadzonego wewnatrz
˛ XQuery (za pomoca˛ funkcji db2-fn:
sqlquery lub db2-fn:xmlcolumn).
Przykład:
xquery db2-fn:xmlcolumn("CUSTOMER.INFO");
Wyrażenia XQuery zawsze poprzedzamy prefiksem xquery, aby DB2
wiedział, że należy użyć parsera XQuery.
Odpytywanie danych XML za pomoca˛ XQuery
XQuery jest użyty jako j˛ezyk podstawowy, można używać SQL
osadzonego wewnatrz
˛ XQuery (za pomoca˛ funkcji db2-fn:
sqlquery lub db2-fn:xmlcolumn).
Przykład:
xquery db2-fn:xmlcolumn("CUSTOMER.INFO");
Wyrażenia XQuery zawsze poprzedzamy prefiksem xquery, aby DB2
wiedział, że należy użyć parsera XQuery.
Funkcja db2-fn:xmlcolumn: zwraca dokumenty XML z kolumny
podanej w parametrze. Powyższe zapytanie odpowiada wyrażeniu
SQL:
SELECT contact FROM clients
Odpytywanie danych XML za pomoca˛ XQuery
XQuery jest użyty jako j˛ezyk podstawowy, można używać SQL
osadzonego wewnatrz
˛ XQuery (za pomoca˛ funkcji db2-fn:
sqlquery lub db2-fn:xmlcolumn).
Przykład:
xquery db2-fn:xmlcolumn("CUSTOMER.INFO");
Wyrażenia XQuery zawsze poprzedzamy prefiksem xquery, aby DB2
wiedział, że należy użyć parsera XQuery.
Funkcja db2-fn:xmlcolumn: zwraca dokumenty XML z kolumny
podanej w parametrze. Powyższe zapytanie odpowiada wyrażeniu
SQL:
SELECT contact FROM clients
Przy funkcji db2-fn:xmlcolumn można podać wyrażenie XPath, aby
wybrać dane XML w odpowiedni sposób.
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>);
Odpytywanie danych XML za pomoca˛ XQuery
Przykład - użycie wyrażenia FLWOR z funkcja˛
db2-fn:xmlcolumn:
xquery
for $y in
db2-fn:xmlcolumn(‘CLIENTS.CONTACT’)/Client/fax
return $y
Odpytywanie danych XML za pomoca˛ XQuery
Funkcja db2-fn:sqlquery wykonuje zapytanie SQL i zwraca
tylko wybrane dane XML. Zapytania SQL przekazane do
db2-fn:sqlquery musza˛ zwracać tylko dane XML. Te dane
XML moga˛ być nast˛epnie przetwarzane przez XQuery.
Odpytywanie danych XML za pomoca˛ XQuery
Funkcja db2-fn:sqlquery wykonuje zapytanie SQL i zwraca
tylko wybrane dane XML. Zapytania SQL przekazane do
db2-fn:sqlquery musza˛ zwracać tylko dane XML. Te dane
XML moga˛ być nast˛epnie przetwarzane przez XQuery.
xquery
for $cust in
db2-fn:sqlquery(
"SELECT info FROM customer WHERE cid = 1005"
)/customerinfo
let $phone :=$cust/phone
return (<info>
{$cust/name/text(),
$phone}
</info>);
Odpytywanie danych XML za pomoca˛ SQL/XML
Zapytanie SQL może być wykorzystane do pracy z całymi
dokumentami XML, ale nie pozwala na dost˛ep jedynie do wybranych
fragmentów dokumentu. W takiej sytuacji można wykorzystać
rozszerzenie SQL - SQL/XML.
Odpytywanie danych XML za pomoca˛ SQL/XML
Zapytanie SQL może być wykorzystane do pracy z całymi
dokumentami XML, ale nie pozwala na dost˛ep jedynie do wybranych
fragmentów dokumentu. W takiej sytuacji można wykorzystać
rozszerzenie SQL - SQL/XML.
Podstawowe funkcje SQL/XML (zgodnie ze standardem SQL 2006):
Nazwa funkcji
Opis
XMLPARSE
Analizuje ciag
˛ znaków lub obiekt binarny
zwraca dokument XML
XMLSERIALIZE Tłumaczy dokument XML na ciag
˛ znaków
lub obiekt binarny
XMLVALIDATE
Waliduje dokument XML według schematu
XMLEXISTS
Określa, czy polecenie XQuery zwraca wynik
XMLQUERY
Wykonuje polecenie XQuery
XMLTABLE
Wykonuje polecenie XQuery
zwraca wynik w postaci tabeli relacyjnej
XMLCAST
Rzutuje z lub na dokument XML
Funkcja XMLQUERY
Funkcja XMLQUERY - umożliwia wykonanie wyrażenia XQuery z
poziomu SQL;
zwraca wyrażenie XML - sekwencj˛e XML, b˛edac
˛ a˛ wynikiem
wyrażenia XQuery dla każdego wiersza zapytania SQL;
zwracana sekwencja może zawierać wiele elementów, lub być pusta.
Funkcja XMLQUERY
Funkcja XMLQUERY - umożliwia wykonanie wyrażenia XQuery z
poziomu SQL;
zwraca wyrażenie XML - sekwencj˛e XML, b˛edac
˛ a˛ wynikiem
wyrażenia XQuery dla każdego wiersza zapytania SQL;
zwracana sekwencja może zawierać wiele elementów, lub być pusta.
Wykorzystujac
˛ XMLQUERY:
mamy możliwość wykonywania zapytań na danych XML;
dane XML moga˛ być użyte w obr˛ebie zapytania SQL;
dost˛ep jednocześnie do danych relacyjnych i XML;
dane XML zwrócone przez XQUERY można nast˛epnie wykorzystać
w zapytaniu SQL, aby np. uporzadkować
˛
wynik (należy je najpierw
zrzutować na odpowiedni relacyjny typ danych za pomoca˛
XMLCAST).
XMLQUERY
SELECT XMLQuery(’$i/customerinfo/name’ PASSING
INFO as "i") FROM customer
where CID IN (1003,1001,1004);
W tym zapytaniu XQuery, zmienna $i zawiera dokument XML
zapisany w tabeli customer w kolumnie INFO (typu XML).
Przypisanie dokumentu do zmiennej nast˛epuje w klauzuli PASSING
INFO as "i" (można zwiazać
˛ wi˛ecej niż jedna˛ zmienna).
˛
Wyrażenie XPath wykorzystane w funkcji wskazuje na element name
w dokumencie XML.
XMLQUERY
SELECT XMLQuery(’$i/customerinfo/name’ PASSING
INFO as "i") FROM customer
where CID IN (1003,1001,1004);
W tym zapytaniu XQuery, zmienna $i zawiera dokument XML
zapisany w tabeli customer w kolumnie INFO (typu XML).
Przypisanie dokumentu do zmiennej nast˛epuje w klauzuli PASSING
INFO as "i" (można zwiazać
˛ wi˛ecej niż jedna˛ zmienna).
˛
Wyrażenie XPath wykorzystane w funkcji wskazuje na element name
w dokumencie XML.
Wynik:
<name>Kathy Smith</name>
<name>Robert Shoemaker</name>
<name>Matt Foreman</name>
W funkcji XMLQUERY można użyć także wyrażenia FLWOR
XQuery, np.
SELECT XMLQuery(’for $c in $i/customerinfo
let $p := $c/phone
return ($c/name, $p)’
PASSING INFO as "i") as dane
FROM customer
where CID =1004;
W funkcji XMLQUERY można użyć także wyrażenia FLWOR
XQuery, np.
SELECT XMLQuery(’for $c in $i/customerinfo
let $p := $c/phone
return ($c/name, $p)’
PASSING INFO as "i") as dane
FROM customer
where 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>
Funkcja XMLTable
Funkcj˛e XMLTable można wykorzystać, jeżeli chcemy prezentować
dane XML w postaci tabeli, np.
select c.cid, cinfo.name,cinfo.city, cinfo.phone,
cinfo.type
from customer c,
xmltable(’$cust/customerinfo’ passing c.info as
"cust"
columns
name char(30) path ’name’,
city char(12) path ’addr/city’,
phone char(12) path ’phone[1]’,
type char(6) path ’phone[1]/@type’
) cinfo;
Wynik poprzedniego zapytania:
CID
--1000
1001
1002
1003
1004
1005
NAME
--------------Kathy Smith
Kathy Smith
Jim Noodle
Robert Shoemaker
Matt Foreman
Larry Menard
CITY
-------Toronto
Markham
Markham
Aurora
Toronto
Toronto
PHONE
-------416-555-1358
905-555-7258
905-555-7258
905-555-7258
905-555-4789
905-555-9146
TYPE
---work
work
work
work
work
work
XMLTable z wykorzystaniem wyrażenia FOR w XPath
select c.cid, cinfo.name,cinfo.city,
cinfo.phone, cinfo.type
from customer c,
xmltable(’$cust/customerinfo’ passing c.info
as "cust"
columns
name char(30) path ’name’,
city char(12) path ’addr/city’,
phone char(12) path ’for $p in phone return
$p’,
) cinfo;
XMLExists
Funkcja XMLExists może być wykorzystana w klauzuli WHERE
zapytania SQL, aby sprawdzić, czy zapytanie XQuery zwraca wyniki,
np.
select cid,
xmlquery(’$INFO/customerinfo/name/text()’)
from customer
where
xmlexists(’$INFO/customerinfo/phone[@type="home"]’);
XMLExists
Funkcja XMLExists może być wykorzystana w klauzuli WHERE
zapytania SQL, aby sprawdzić, czy zapytanie XQuery zwraca wyniki,
np.
select cid,
xmlquery(’$INFO/customerinfo/name/text()’)
from customer
where
xmlexists(’$INFO/customerinfo/phone[@type="home"]’);
Powyższe zapytanie zwróci informacje tylko o tych klientach, którzy
podali domowy numer telefonu.
Uwaga. w funkcjach XMLQuery i XMLExists w przykładzie
wykorzystano uproszczona˛ składni˛e.