Klauzula FOR XML

advertisement
XML w relacyjnych bazach danych
Na przykładzie SQL Server 2008
informatyka +
1
Agenda
• Podstawy XML
– Historia XML w pigułce
– Struktura dokumentu XML
• XML a bazy danych
– Alternatywa dla relacyjnych baz danych?
• XML w SQL Server 2008
– Klauzula FOR XML polecenia SELECT
– Typ danych „XML”
– Metody typu „XML”
– Korzystanie z XML Schema
• Podsumowanie
informatyka +
2
Wymagania wstępne
• Podstawowa znajomość SQL
• Podstawowa znajomość SQL Server
• Podstawowa znajomość dowolnego języka opartego o
znaczniki (XML, HTML itp.)
• Chęć do nauki ;-)
informatyka +
3
Agenda
• Podstawy XML
– Historia XML w pigułce
– Struktura dokumentu XML
• XML a bazy danych
– Alternatywa dla relacyjnych baz danych?
• XML w SQL Server 2008
– Klauzula FOR XML polecenia SELECT
– Typ danych „XML”
– Metody typu „XML”
– Korzystanie z XML Schema
• Podsumowanie
informatyka +
4
Historia XML w pigułce
• Początki prac nad XML (Extensible Markup Language) –
1996 rok
• Specyfikacja XML 1.0 – 1998 rok (http://www.w3c.org)
• Cechy XML
oFormat tekstowy (przenaszalność)
oProste reguły dotyczące składni
oCzytelny dla człowieka
oBrak zdefiniowanego zbioru elementów (nie jak HTML)
oProstszy od SGML, a wyparł go z większości zastosowań
oOd powstania – coraz szerzej stosowany
oBogate wsparcie ze strony narzędzi (parsowanie, walidacja,
manipulowanie)
informatyka +
5
Agenda
• Podstawy XML
– Historia XML w pigułce
– Struktura dokumentu XML
• XML a bazy danych
– Alternatywa dla relacyjnych baz danych?
• XML w SQL Server 2008
– Klauzula FOR XML polecenia SELECT
– Typ danych „XML”
– Metody typu „XML”
– Korzystanie z XML Schema
• Podsumowanie
informatyka +
6
Reguły tworzenia dokumentów XML
• Dokument XML składa się z elementów, które mogą zawierać
atrybuty wraz z ich wartościami, tekst oraz inne elementy
• Dokument XML musi zawierać dokładnie jeden element główny
(tzw. root), który zawiera w sobie pozostałe elementy
• Element składa się ze znaczników (otwierającego i
zamykającego):
<kodPocztowy> …zawartość …</kodPocztowy >
<budynek/> (brak zawartości – można stosować skróconą
formę )
• Elementy mogą być zagnieżdżone:
<email><wartosc> Jan </wartosc></email>
• Elementy nie mogą się „przecinać”:
<email><wartosc> Jan </email></wartosc>
7
informatyka +
Reguły tworzenia dokumentów XML c.d.
• Elementy mogą zawierać atrybuty, które muszą posiadać
wartość (ujętą w apostrofy lub cudzysłów):
<wartosc typKomunikatora="Skype">
janekNowak
</wartosc>
Błąd
• Wielkość liter ma znaczenie <budynek>124A</Budynek>
• Do wykorzystania w treści dokumentu w miejscu znaków
specjalnych (mogących powodować problemy z interpretacją
dokumentu) przeznaczono tzw. encje:
–
–
–
–
–
< zastępującą znak <
> zastępującą znak >
" zastępującą znak ”
' zastępującą znak ‘
& zastępującą znak &
informatyka +
8
Reguły tworzenia dokumentów XML c.d.
• Dokument spełniający wszystkie wymagania odnośnie swojej struktury
jest dokumentem poprawnie sformułowanym (well formed document)
• Z racji prostoty reguł – łatwo jest stworzyć narzędzie weryfikujące
poprawność sformułowania dokumentu. Istnieje wiele takich narzędzi
(parserów XML)
• Jeżeli chcemy oprócz samej składni narzucić dodatkowe reguły, to
trzeba skorzystać z dodatkowych technologii i narzędzi.
– DTD (Document Type Definition)
– XML Schema
– Relax NG
– Parsery walidujące
• Jeżeli dokument XML jest poprawnie sformułowany i spełnia wymagania
opisane w DTD lub XML Schema to jest dokumentem poprawnym
(valid document)
informatyka +
9
Agenda
• Podstawy XML
– Historia XML w pigułce
– Struktura dokumentu XML
• XML a bazy danych
– Alternatywa dla relacyjnych baz danych?
• XML w SQL Server 2008
– Klauzula FOR XML polecenia SELECT
– Typ danych „XML”
– Metody typu „XML”
– Korzystanie z XML Schema
• Podsumowanie
informatyka +
10
XML alternatywą dla relacyjnych baz danych ?
Jeśli patrzeć na to od strony teoretycznej – czemu nie?
oHierarchiczna struktura oraz stosowanie atrybutów
pozwala modelować relacje
oXML Schema pozwala modelować dodatkowe
ograniczenia
oModelowanie może być bardziej pracochłonne i nie
każdy rodzaj ograniczeń da się zaimplementować
informatyka +
11
XML alternatywą dla relacyjnych baz danych ? C.d.
• W praktyce jednak pojawiają się problemy
– Wzrost rozmiaru pliku -> spadek wydajności
– Jednoczesny dostęp wielu użytkowników do pliku
– Transakcyjność i odporność na awarie
• Zamiast alternatywy – uzupełnienie możliwości baz
danych
– Przechowywanie danych o zróżnicowanej strukturze
– Zwracanie wyników zapytań w formie XML
– Manipulowanie zawartością XML
informatyka +
12
Wynik wojny XML-SQL
• Pomimo tego, że XML jest pewną alternatywą dla
relacyjnych baz danych – wybrano najlepsze
rozwiązanie
Dwie konkurencyjne technologie „zmuszono” do współpracy!
informatyka +
13
Przykład uproszczenia schematu relacyjnej bazy
danych z wykorzystaniem XML
Fragment poprawnie zaprojektowanej relacyjnej bazy danych!
informatyka +
14
Przykład uproszczenia schematu relacyjnej bazy
danych z wykorzystaniem XML
Schemat dokumentu XML zawierającego opis adresów i
kontaktów!
informatyka +
15
Przykład uproszczenia schematu relacyjnej bazy
danych z wykorzystaniem XML
A może uprościć to tak !!!!!!!
Kolumna typu XML
przechowująca dane zgodne ze
schematem XML pokazanym na
wcześniejszym slajdzie
… i zamiast pięciu tabel mamy tylko jedną - i wszystkie
potrzebne dane mogą być zapisane
informatyka +
16
Agenda
• Podstawy XML
– Historia XML w pigułce
– Struktura dokumentu XML
• XML a bazy danych
– Alternatywa dla relacyjnych baz danych?
• XML w SQL Server 2008
– Klauzula FOR XML polecenia SELECT
– Typ danych „XML”
– Metody typu „XML”
– Korzystanie z XML Schema
• Podsumowanie
informatyka +
17
Struktura bazy danych dla dalszych przykładów
Zaznaczone kolumny są typu XML i będą przechowywać złożone
dane
informatyka +
18
Dane w postaci XML potrzebne od zaraz…
• Problem :
Jak pobrać z bazy danych informacje od razu w
postaci XML?
• A po co akurat XML?
– Bo aplikacja potrafi takie dane od razu przetworzyć
– Bo takie są wymagania biznesowe naszego klienta
– Bo system, z którym współpracujemy potrafi pracować
tylko z danymi XML
– Bo łatwo takie dane potem przetworzyć na dowolna
inna potrzebną postać (HTML, PDF, RTF, SVG …)
• Ok. Wiemy po co. Ale jak?
– Klauzula XML w zapytaniu SELECT:)
informatyka +
19
Klauzula FOR XML polecenia SELECT
• Dodana do dowolnego polecenia SELECT powoduje
zwrócenie jego wyniku w formie dokumentu lub
fragmentu dokumentu XML
• Kilka trybów generowania XML
– RAW
– AUTO
– EXPLICIT
– PATH
• Tryby RAW i AUTO dają możliwość generowania wartości
kolumn jako atrybutów lub elementów
• Tryby EXPLICIT i PATH dają największe możliwości
– Tryb XPATH korzysta z wyrażeń języka XPath
– Tryb EXPLICIT korzysta z tabeli uniwersalnej
informatyka +
20
Dane do obróbki – lista klientów
• W przykładowej bazie mamy tabelę z danymi klientów
• Załóżmy, że chcemy zwrócić właśnie te dane. Nic
prostszego:
informatyka +
21
No tak. Ale potrzebujmy te dane w postaci XML!
• Nie ma problemu – skorzystamy z klauzuli FOR XML
• Zaczniemy od najprostszego wariantu : FOR XML RAW
informatyka +
22
Oooops! To nie jest dokument XML!
• Klauzula FOR XML RAW zwróciła nam fragment
dokumentu XML.
• Nie do końca nadaje się on do dalszej obróbki po
stronie aplikacji, gdyż żaden szanujący się parser nie
przymknie oka na brak elementu głównego!
<dane>
</dane>
informatyka +
23
Klauzula FOR XML RAW z opcją ROOT
• Oczywiście da się to poprawić
• Zmieńmy jeszcze „row” na coś milszego dla oka…
informatyka +
24
Klauzula FOR XML RAW z opcją ROOT
• Opcja RAW także dopuszcza podanie w nawiasie
nazwy elementu
informatyka +
25
Klauzula FOR XML RAW z opcją ELEMENTS
• Aplikacja potrzebuje elementów a nie atrybutów! Co
wtedy?
informatyka +
26
Klauzula FOR XML RAW to za mało !
• FOR XML Raw jest OK, ale potrzebujemy nieco więcej
możliwości!
• Jak generować dokument XML z hierarchią elementów?
– Np.: lista klientów i ich zamówień
• Odpowiedź : klauzula FOR XML AUTO
– Domyślnie generuje dla wiersza element o nazwie takiej jak
tabela
– Dla kolumn tworzone są atrybuty o nazwach takich jako
kolumny
– Przeznaczona do zapytań operujących na wielu tabelach
– Potrafi tworzyć proste hierarchie (heurystycznie poprzez
analizowanie kolejnych wierszy i porównywanie wartości
kolumn)
– Obsługuje wszystkie opcje omawiane przy FOR XML RAW
informatyka +
27
Klauzula FOR XML AUTO - przykład
Wpływa na
hierarchię!
informatyka +
28
Klauzula FOR XML AUTO - przykład
Tym razem po
ID zamówienia
informatyka +
29
Coraz więcej możliwości:) Co jeszcze da się zrobić?
• Da się zrobić wszystko. Kwestia czasu i nakładu pracy.
• Do tej pory podejście do generowania XML polegało na:
– Dodaniu do DOWOLNEGO zapytania klauzuli FOR XML (AUTO
lub RAW)
– Skorzystaniu z ich opcji do „dopracowania” postaci dokumentu
• Gdy to za mało – sięgamy po FOR XML EXPLICIT
–
–
–
–
Specjalnie skonstruowane zapytanie
Złożona konstrukcja.
Trudne modyfikowanie
Ogromne możliwości
informatyka +
30
Klauzula FOR XML EXPLICIT
• Największe możliwości w zakresie budowania
złożonych struktur XML
• Precyzyjne wymagania co do struktury wyniku
zapytania, które ma być przetworzone na XML (tabela
uniwersalna)
• Skomplikowany mechanizm definiowania tabeli
uniwersalnej dla uzyskania konkretnej struktury XML
informatyka +
31
Klauzula FOR XML EXPLICIT
• Spróbujmy sklecić przykład (podobny do tego z trybu
AUTO)
informatyka +
32
Klauzula FOR XML EXPLICIT
• Rezultat zapytania z poprzedniego slajdu (bez klauzuli
FOR XML):
informatyka +
33
Klauzula FOR XML EXPLICIT
• Rezultat zapytania z poprzedniego slajdu (z klauzulą
FOR XML):
informatyka +
34
Klauzula FOR XML EXPLICIT – fajna ale żmudna
• Jest jakiś sposób na uniknięcie jej stosowania?
• TAK:) Klauzula FOR XML PATH
– O wiele przyjemniejsza w stosowaniu
– Porównywalne możliwości
– Łatwiejsze modyfikowanie (znacznie lepsza czytelność zapytań)
• Wady? A owszem…
– Trzeba poznać język XPath (chociaż trochę)
informatyka +
35
Klauzula FOR XML PATH i język XPath
• Język XPath służy do wskazywania węzłów lub grup
węzłów w dokumencie XML
• Wyrażenia XPath można porównać do ścieżek w
systemie plików.
Wyrażenie: \dane\adres\pocztowy\ulica
wskazuje na katalog ulica i jego zawartość.
informatyka +
36
Klauzula FOR XML PATH i język XPath
<dane>
<adres>
<email>
<wartosc>[email protected]</wartosc>
</email>
</adres>
<adres>
<pocztowy>
<kodPocztowy>00-950</kodPocztowy>
<miejscowosc>Warszawa</miejscowosc>
<ulica>Marszałkowska</ulica>
<budynek>23</budynek>
<lokal>1</lokal>
</pocztowy>
</adres>
</dane>
Wyrażenie: /dane/adres/pocztowy/ulica
wskazuje na element ulica i jego zawartość.
informatyka +
37
Klauzula FOR XML PATH i język XPath
• Przykłady wyrażeń XPath
• /dane/adres/email[2]/wartosc
– Element „wartosc” drugiego elementu „email” będącego
dzieckiem elementu „adres”, będacego dzieckiem elementu
głównego „dane”
• //email
– Elementy „email” występujące w dowolnym miejscu w
dokumencie
• //adres/*/@typ
– Atrybuty „@typ” dowolnych elementów będących dziećmi
elementu „adres”
• /dane/adres/*[@typ=‘skype’]/text()
– Zawartośc tekstowa dowolnego elementu, który ma atrybut „typ”
o wartości „skype”, będącego dzieckiem elementu adres,
będącego dzieckiem elementu głównego „dane”
informatyka +
38
Klauzula FOR XML PATH
• Kompromis pomiędzy możliwościami a prostotą
korzystania
• Znacznie łatwiejsza od EXPLICIT
• Pozwala na definiowanie złożonych struktur przy
wykorzystaniu odpowiednich nazw kolumn
(przypominających wyrażenia XPath)
• Pozwala na zagnieżdżanie zapytań i uzyskiwanie tą
droga złożonej struktury XML
• Istotna jest kolejność kolumn (najpierw te definiujące
atrybuty, potem kolejne elementy)
• Możliwość wykorzystania znaku * (gwiazdka) jako
nazwy kolumny
informatyka +
39
Klauzula FOR XML PATH
• Obsługuje opcje znane z trybu RAW i AUTO
• Istotna jest kolejność kolumn w zapytaniu (najpierw
atrybuty, potem elementy)
informatyka +
40
Klauzula FOR XML PATH
Opcja
TYPE!
informatyka +
41
Klauzula FOR XML PATH – przykład 2
informatyka +
42
Klauzula FOR XML – inne opcje
•
•
•
Wszystkie warianty klauzuli FOR XML zawierają jeszcze jedną istotna
opcję – TYPE
Pozwala ona na traktowanie zwróconej wartości jako zmiennej typu XML,
co ułatwia zagnieżdżanie wyniku zapytania w innym i budowanie złożonych
hierarchii
Podobna sytuacja występuje przy opcji XSNIL. Powoduje ona ,że w
przypadku gdy element ma wartość null to i tak będzie umieszczony w
wynikowym dokumencie
informatyka +
43
Agenda
• Podstawy XML
– Historia XML w pigułce
– Struktura dokumentu XML
• XML a bazy danych
– Alternatywa dla relacyjnych baz danych?
• XML w SQL Server 2008
– Klauzula FOR XML polecenia SELECT
– Typ danych „XML”
– Metody typu „XML”
– Korzystanie z XML Schema
• Podsumowanie
informatyka +
44
Typ danych XML
• Kolumna w tabeli może być typu XML
• Pozwala na przechowanie bezpośrednio dokumentu
XML o wielkości do 2 GB
• Z kolumną można skojarzyć kolekcję dokumentów XML
Schema definiujących dopuszczalną zawartość kolumny
XML (walidacja zgodności z XML Schema-mi)
• Typed XML (skojarzony z kolekcją XML Schema) może
zapewnić większą wydajność ze względu na określenie
typów danych oraz często mniejszy rozmiar pliku
wynikowego
• Dokument nie jest przechowywany w oryginalnej
postaci (normalizacja)!
• Do XML Schema wrócimy pod koniec wykładu
informatyka +
45
Typ danych XML
• Deklarowanie typu kolumny jako XML (untyped)
• Kolumna może zawierać dokumenty lub fragmenty
dokumentów XML
• Przy zapisie weryfikowana jest jedynie składnia
dokumentu XML
• Dopuszczalne odstępstwo – może być wiele elementów
najwyższego poziomu (w przypadku fragmentu
dokumentu XML)
46
informatyka +
Typ danych XML
• Deklarowanie typu kolumny jako XML (typed)
• Korzystanie z możliwości XML Schema do definiowania
dodatkowych ograniczeń dla postaci dokumentu
• Automatyczna walidacja danych zapisywanych w bazie
• Sposób na definiowanie niektórych rodzajów reguł
biznesowych – w postaci kolekcji schem
informatyka +
47
Typ danych XML - Stosowanie typu xml
• Przechowywanie danych o złożonej strukturze, które
obsługiwane są przez aplikację. Baza jest tylko prostą
przechowalnią.
• Modelowanie złożonych struktur danych połączone z
rezygnacją z tworzenia wielu tabel w bazie.
• Wymiana danych z systemami zewnętrznymi
• Przechowywanie i umożliwienie modyfikowania
złożonych struktur w ramach kolumny w tabeli\
• Duże pliki XML = słabsza wydajność !
• Można próbować sobie z tym radzić poprzez
stosowanie Indeksów XML
informatyka +
48
Agenda
• Podstawy XML
– Historia XML w pigułce
– Struktura dokumentu XML
• XML a bazy danych
– Alternatywa dla relacyjnych baz danych?
• XML w SQL Server 2008
– Klauzula FOR XML polecenia SELECT
– Typ danych „XML”
– Metody typu „XML”
– Korzystanie z XML Schema
• Podsumowanie
informatyka +
49
Metody typu danych XML
• Typ danych XML udostępnia szereg metod służących do
manipulowania zawartością dokumentu
• W przykładowej bazie danych stosujemy XML do
przechowywania danych teleadresowych klientów.
• Unikamy w ten sposób tworzenia co najmniej czterech
tabel w bazie
• Dane teleadresowe zawierać będą adresy pocztowe,
email-e i identyfikatory z komunikatorów internetowych
• Na początku nie będziemy stosować kolekcji schem.
Przyjdzie na to czas pod koniec wykładu
informatyka +
50
Metody typu danych XML - przykłady
• Wszystkie przykłady korzystania z metod typu danych XML będą
przeprowadzane w oparciu o dokument XML:
informatyka +
51
Metody typu danych XML – value()
• Jak pobrać konkretną wartość z dokumentu XML?
• Odpowiedzią jest metoda value()
– Wywołuje się ją z dwoma prametrami
• Wyrażeniem XQuery (właściwie zwykle jest to wyrażenie XPath)
• Docelowym typem danych
– Zwracana jest wartość skalarna, skonwertowana do typu
określonego w wywołaniu:
SELECT @dane.value(’(//email/wartosc)[1]’,’varchar(100)’)
Zwróci wartość pierwszego elementu „wartosc” będącego dzieckiem
elementu „email”, który występuje gdziekolwiek w hierarchii
dokumentu. Wartość ta będzie skonwertowana
do typu varchar(100)
informatyka +
52
Metody typu danych XML – value()
• Metoda value() powinna być stosowana tylko gdy
faktycznie chcemy pobrać wartość z dokumentu XML
• Jest to spowodowane tym, że nie jest ona zbyt wydajna
• Zastosowanie do sprawdzenia jakiegoś warunku nie jest
dobrym pomysłem:
SELECT
CASE
WHEN
ISNULL(@dane.value(’(//email/wartosc)[1]’,’varchar(100’,’’) =’’
THEN 0
ELSE 1
END as czyZawieraEmail
informatyka +
53
Metody typu danych XML – exist()
• Metoda exist () służy do sprawdzania czy wskazany
węzeł istnieje
• Zapewnia wyższą wydajność
• Nie wymaga konwertowania węzła do docelowego typu:
SELECT @dane.exist(’//email/wartosc’) as czyZawieraEmail
SELECT @dane.exist('//email[position()>1]') as czyZawieraEmaile
informatyka +
54
Metody typu danych XML query()
• Metoda query () służy do pobierania z dokumentu XML
zbiorów elementów zdefiniowanych poprzez wyrażenie
XQuery.
• Zwracany zbiór jest także typu XML.
• Zwykle stosowana w połączeniu z wyrażeniami XPath:
• Lub XQuery (FLWOR):
informatyka +
55
Metody typu danych XML query()
• XQuery jest językiem służącym do „odpytywania”
dokumentu XML.
• Jest specyfikacją rozwijaną, a jakże, przez konsorcjum
W3C.
• Wyrażenia FLWOR to akronim od słów for, let, where,
order by, return
• Pozwalają na złożone definiowanie reguł pobierania
węzłów z dokumentu XML.
• Stosowane są raczej w przypadku bardziej złożonych
struktur dokumentów XML
• Porównywane do polecenia SELECT z SQL
informatyka +
56
Metody typu danych XML – nodes()
• Metoda nodes() zapewnia funkcjonalność odwrotną do
klauzuli FOR XML. Pozwala na wyłuskanie wartości
elementów lub atrybutów z dokumentu XML i, w
połączeniu z operatorem CROSS APPLY, na zwrócenie
tych danych w postaci zbioru wierszy
• Wywołanie:
kolumnaXML.nodes( [XQuery] )
• Zastosujmy ją tym razem do tabeli Klient, dla klientów,
którzy posiadają uzupełnione dane teleadresowe (jest
ich czworo):
informatyka +
57
Metody typu danych XML – nodes()
• Problem: potrzebna jest lista klientów i ich adresów pocztowych (w
formie zwykłego zbioru rekordów)
• CROSS APPLY oraz nodes() powodują „dodanie” do każdego
rekordu wynikowego dodatkowej kolumny zawierającej zmienną
typu xml, którą z kolei traktujemy metodą value() w celu pobrania
poszczególnych wartości (pól) adresu
• Znak . (kropka) w wyrażeniu XPath oznacza bieżący element. W
tym przypadku będzie to każdy znaleziony element „pocztowy”
informatyka +
58
Metody typu danych XML – modify()
• Operacje na danych typu XML nie kończą się oczywiście
na różnych wariantach ich odczytu
• Pozostaje jeszcze kwestia modyfikowania struktury
dokumentu XML:
– Dodawania nowych węzłów
– Modyfikacji zawartości węzłów
– Usuwania węzłów
• XQuery nie zawiera żadnych możliwości manipulowania
zawartością dokumentu
• W SQL Server wprowadzono „XML DML”, który
uzupełnia ten brak
• Metoda modify() wywoływana jest z jednym parametrem
– jednym z poleceń: insert, delete, replace value of
informatyka +
59
Metody typu danych XML –modify() [insert]
• Polecenie insert umożliwia dodawanie nowych węzłów
do dokumentu XML.
• Składnia :
insert [zawartosc] [położenie] [cel]
• Przykład:
insert <lokal>12</lokal> as last into (//pocztowy)[1]
• Położenie można określać jako:
– as first into
– as last into
– before
– after
informatyka +
60
Metody typu danych XML –modify() [insert]
Efekt wykonania polecenia insert:
Tylko
element
główny
informatyka +
61
Metody typu danych XML –modify() [insert]
Efekt wykonania polecenia insert:
Zmienna
typu XML
Wstawienie
zmiennej do
zawartości
dokumentu
informatyka +
62
Metody typu danych XML –modify() [delete]
• Polecenie delete umożliwia usuwanie węzłów z
dokumentu XML.
• Składnia :
delete [cel]
• Przykład:
delete //adres[email]
usuń wszystkie elementy „adres” zawierające w sobie element
„email”
• [cel] może wskazywać zarówno pojedynczy element jak
i grupę elementów /atrybutów
informatyka +
63
Metody typu danych XML –modify() [replace value of]
• Polecenie replace value of umożliwia zmianę zawartości
węzła dokumentu XML na wskazaną.
• Składnia :
replace value of [cel] with [zawartosc]
• Przykład:
replace value of (//pocztowy/budynek/text())[1] with „nieznany"
zmień zawartość tekstową pierwszego napotkanego elementu
„budynek” na „nieznany”
• [cel] może wskazywać co najwyżej jeden element lub
atrybut
informatyka +
64
Agenda
• Podstawy XML
– Historia XML w pigułce
– Struktura dokumentu XML
• XML a bazy danych
– Alternatywa dla relacyjnych baz danych?
• XML w SQL Server 2008
– Klauzula FOR XML polecenia SELECT
– Typ danych „XML”
– Metody typu „XML”
– Korzystanie z XML Schema
• Podsumowanie
informatyka +
65
Typ danych XML – co to jest XML Schema?
• XML Schema pozwala na narzucenie dodatkowych
ograniczeń na zawartość dokumentu XML
• Dokument XML Schema ….to też dokument XML
• Ogromne możliwości modelowania zawartości
dokumentów
• Stworzona i rozwijana przez konsorcjum W3C
( http://www.w3.org/XML/Schema )
• Dużo wiedzy do rozpoznania i przyswojenia :-)
• …a i tak zdarzają się sytuacje, gdy nie ma możliwości
zamodelowania tego co chcemy osiągnąć
informatyka +
66
Typ danych XML – co to jest XML Schema?
• Dokument XML Schema może być rozumiany jako
formalna specyfikacja jakiegoś dokumentu XML
• Jeżeli otrzymam od kogoś plik z XML Schema to wiem,
jak ma wyglądać dokument XML spełniający stawiane
wymagania.
• Ten mechanizm jest powszechnie stosowany
• W SQL Server XML Schema jest stosowana do
nakładania ograniczeń na zawartość kolumn typu XML.
• Pozwala to przenieść umiejętności ze świata XML do
relacyjnych baz danych
informatyka +
67
Korzystanie z XML Schema – istotne fakty
• Kolumna typu xml przyjmie każdy poprawnie sformułowany
dokument XML lub fragment dokumentu XML.
• Nałożenie ograniczeń na dopuszczalną strukturę i zawartość
dokumentów XML – poprzez XML Schema Collection
• XML Schema Collection może zawierać jedną lub więcej schem
opisujących dopuszczalne struktury dokumentów XML
• Ograniczenie nakłada się przy deklarowaniu typu kolumny – przez
podanie w nawiasie nazwy kolekcji schem
• Przy każdej próbie zapisu wartości XML do kolumny z nałożonymi
ograniczeniami następuje jej walidacja ze schemami z kolekcji.
Jeżeli jest zgodna z którąś ze schem zapis dochodzi do skutku
• Korzystanie z kolekcji schem może poprawić wydajność zapytań
operujących na zawartości XML (chociażby przez fakt, że znane
mogą być typy danych zawartych w poszczególnych elementach i
atrybutach)
informatyka +
68
Korzystanie z XML Schema
• Korzystanie z XML Schema Collection składa się z dwóch etapow
– Utworzenie kolekcji schem
– Deklarowanie w tabelach kolumn jako xml(?) gdzie ? Jest nazwą kolekcji
schem:
Adresy xml(DaneAdresowe) not null
informatyka +
69
Korzystanie z XML Schema
• Po utworzeniu kolekcji schem jest ona widoczna w oknie
object browser (narzędzia SQL Server Management Studio):
CREATE XML SCHEMA COLLECTION DaneAdresowe AS N'<xs:schema (…) ‘
informatyka +
70
Korzystanie z XML Schema
• Deklaracja kolumny typu xml korzystającej z kolekcji
schem:
[DaneTeleadresowe] [xml](DOCUMENT
[dbo].[DaneAdresowe]) NULL
• W naszym przykładzie użyjemy jej w tabeli z danymi
klientów:
informatyka +
71
Korzystanie z XML Schema
• Sam proces tworzenia dokumentu XML Schema jest na tyle złożony,
że zasługuje na osobny wykład lub dwa :-)
• Omówiony zostanie pokrótce, żeby zrozumieć zasadę działania a
nie wdawać się w niuanse modelowania dokumentów XML.
• Cel modelowania:
– Dane teleadresowe mogą się składać z dowolnej liczby adresów
pocztowych i email.
– Adres email składa się tylko z jednej wartości – ciągu
zawierającego sam adres
– Adres pocztowy składa się z obowiązkowych pól miejscowość i
kod pocztowy oraz z opcjonalnych: poczta, ulica, budynek i lokal.
– Dodatkowo kod pocztowy składa się z dwóch cyfr, znaku
myślnika i trzech cyfr
– Adres email musi zawierać znak @ i jedną kropkę.
informatyka +
72
Korzystanie z XML Schema
• Struktura schemy dla opisanego problemu (diagram z XML Spy)
informatyka +
73
Korzystanie z XML Schema
• Dodatkowe ograniczenia widoczne są dopiero w kodzie XML
schema:
• Definiują one kodPocztowy jako szablon ##-### gdzie # oznacza
cyfrę
• Definiują one wartość adresu email jako ciąg zawierajacy w sobie
znak @ oraz kropkę
informatyka +
74
Korzystanie z XML Schema
Spróbujmy teraz sprawdzić działanie kolekcji schem poprzez dodanie kilku
wpisów do kolumny xml. Zacznijmy od wpisu z adresem pocztowym:
Polecenie wykonało się poprawnie, gdyż dokument jest zgodny ze schemą
informatyka +
75
Korzystanie z XML Schema
Kolejna próba – dokument z adresem email
Polecenie wykona się poprawnie, gdyż dokument jest zgodny ze schemą
informatyka +
76
Korzystanie z XML Schema
Kolejna próba – dokument z dwoma adresami (pocztowym i email)
Polecenie wykona się poprawnie, gdyż dokument jest zgodny ze schemą
informatyka +
77
Korzystanie z XML Schema
Kolejna próba – dokument z adresem pocztowym (błędny kod)
Polecenie spowoduje błąd, gdyż dokument nie spełnia ograniczenia wynikającego
ze schemy.
informatyka +
78
Korzystanie z XML Schema
Kolejna próba – dokument z adresem email (błędna wartość adresu email)
Polecenie spowoduje błąd, gdyż dokument nie spełnia ograniczenia
wynikającego ze schemy.
informatyka +
79
Korzystanie z XML Schema
Kolejna próba – dokument z nadprogramowym elementem
Polecenie spowoduje błąd, gdyż dokument zawiera dodatkowy element „bonus”
informatyka +
80
Korzystanie z XML Schema
Kolejna próba – dokument z brakującym elementem (adresik zamiast
adres)
Polecenie spowoduje błąd, gdyż dokument nie zawiera wymaganego
elementu „adres”
informatyka +
81
Korzystanie z XML Schema
Kolejna próba – dokument z brakującym znacznikiem zamykającym
Polecenie spowoduje błąd, gdyż dokument nie jest poprawnie
sformułowany.
W tym przypadku nie doszło do walidacji za pomocą schemy!
informatyka +
82
Agenda
• Podstawy XML
– Historia XML w pigułce
– Struktura dokumentu XML
• XML a bazy danych
– Alternatywa dla relacyjnych baz danych?
• XML w SQL Server 2008
– Klauzula FOR XML polecenia SELECT
– Typ danych „XML”
– Metody typu „XML”
– Korzystanie z XML Schema
• Podsumowanie
informatyka +
83
Podsumowanie
• XML znajduje zastosowanie w świecie relacyjnych baz
danych
• Nie jest dla nich alternatywą, raczej uzupełnia ich
możliwości
• Z racji popularności XML serwery baz danych zaczynają
go wspierać (wcześniej tylko jako BLOB lub CLOB)
informatyka +
84
Podsumowanie
• SQL Server 2008 posiada szereg wygodnych mechanizmów
pozwalających na korzystanie z XML przy:
– Przechowywaniu danych w bazie (typ danych xml)
– Zwracaniu wyników zapytań w postaci XML (klauzula FOR XML)
– Odpytywaniu dokumentu XML (metody value(),exist(),nodes() )
• Nie wspomniano przy tej okazji chociażby o indeksach XML
poprawiających wydajność zapytań korzystających z danych
XML
– Modyfikowaniu struktury dokumentu XML (metoda modify() )
– Definiowaniu ograniczeń dopuszczalnej struktury dokumentów
XML (XML Schema Collection )
informatyka +
85
<Koniec />
…czy są pytania?
informatyka +
86
Download