XML w relacyjnych bazach danych
Na przykładzie SQL Server 2008
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 2
informatyka +
• Podstawowa znajomość SQL
• Podstawowa znajomość SQL Server
• Podstawowa znajomość dowolnego języka opartego o znaczniki (XML, HTML itp.)
• Chęć do nauki ;-)
Wymagania wstępne
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 4
informatyka +
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
5
informatyka +
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)
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 6
informatyka +
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
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>
• 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 &
8
informatyka +
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)
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 10
informatyka +
XML alternatywą dla relacyjnych baz danych ?
Jeśli patrzeć na to od strony teoretycznej – czemu nie?
11
informatyka +
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ć
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
12
Wynik wojny XML-SQL
• Pomimo tego, że XML jest pewną alternatywą dla relacyjnych baz danych – wybrano najlepsze
rozwiązanie
13
informatyka +
Przykład uproszczenia schematu relacyjnej bazy danych z wykorzystaniem XML
14
informatyka +
Przykład uproszczenia schematu relacyjnej bazy danych z wykorzystaniem XML
15
informatyka +
Schemat dokumentu XML zawierającego opis adresów i kontaktów!
Przykład uproszczenia schematu relacyjnej bazy danych z wykorzystaniem XML
16
informatyka +
… i zamiast pięciu tabel mamy tylko jedną - i wszystkie potrzebne dane mogą być zapisane
Kolumna typu XML
przechowująca dane zgodne ze schematem XML
pokazanym na wcześniejszym slajdzie
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 17
informatyka +
Struktura bazy danych dla dalszych przykładów
18
informatyka +
Zaznaczone kolumny są typu XML i będą przechowywać złożone dane
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:)
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
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:
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
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!
23
informatyka +
<dane>Klauzula FOR XML RAW z opcją ROOT
• Oczywiście da się to poprawić
24
informatyka +
Klauzula FOR XML RAW z opcją ROOT
• Opcja RAW także dopuszcza podanie w nawiasie nazwy elementu
25
Klauzula FOR XML RAW z opcją ELEMENTS
• Aplikacja potrzebuje elementów a nie atrybutów! Co wtedy?
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
27
Klauzula FOR XML AUTO - przykład
28
informatyka +
Wpływa na hierarchię!
Klauzula FOR XML AUTO - przykład
29
informatyka +
Tym razem po ID zamówienia
Coraz więcej możliwości:) Co jeszcze da się zrobić?
30
informatyka +
• 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
Klauzula FOR XML EXPLICIT
31
informatyka +
• 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
Klauzula FOR XML EXPLICIT
32
informatyka +
• Spróbujmy sklecić przykład (podobny do tego z trybu AUTO)
Klauzula FOR XML EXPLICIT
33
informatyka +
Klauzula FOR XML EXPLICIT
34
informatyka +
Klauzula FOR XML EXPLICIT – fajna ale żmudna
35
informatyka +
• 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…
Klauzula FOR XML PATH i język XPath
36
informatyka +
• 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
Klauzula FOR XML PATH i język XPath
37
informatyka +
Wyrażenie: /dane/adres/pocztowy/ulica
wskazuje na element ulica i jego zawartość.
<dane> <adres> <email> <wartosc>jan.nowak@pocza.pl</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>
Klauzula FOR XML PATH i język XPath
38
informatyka +
• 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”
Klauzula FOR XML PATH
39
informatyka +
• 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
Klauzula FOR XML PATH
40
informatyka +
• Obsługuje opcje znane z trybu RAW i AUTO
Klauzula FOR XML PATH
41
informatyka +
Opcja TYPE!
Klauzula FOR XML PATH – przykład 2
42
Klauzula FOR XML – inne opcje
43
informatyka +
• 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
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 44
informatyka +
Typ danych XML
45
informatyka +
• 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)!
Typ danych XML
46
informatyka +
• 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
Typ danych XML
47
informatyka +
• 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ł
Typ danych XML - Stosowanie typu xml
48
informatyka +
• 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ść !
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 49
informatyka +
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
50
Metody typu danych XML - przykłady
• Wszystkie przykłady korzystania z metod typu danych XML będą przeprowadzane w oparciu o dokument XML:
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)
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 53
informatyka +
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
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):
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
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):
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”
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
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 60
informatyka +
Metody typu danych XML –modify() [insert]
61
informatyka +
Efekt wykonania polecenia insert:
Tylko element
Metody typu danych XML –modify() [insert]
62
informatyka +
Efekt wykonania polecenia insert:
Zmienna typu XML Wstawienie zmiennej do zawartości dokumentu
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
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
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 65
informatyka +
Typ danych XML – co to jest XML Schema?
66
informatyka +
• 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ąć
Typ danych XML – co to jest XML Schema?
67
informatyka +
• 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
Korzystanie z XML Schema – istotne fakty
68
informatyka +
• 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
Korzystanie z XML Schema
69
informatyka +
• 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:
Korzystanie z XML Schema
70
informatyka +
• Po utworzeniu kolekcji schem jest ona widoczna w oknie
object browser (narzędzia SQL Server Management Studio):
Korzystanie z XML Schema
71
informatyka +
• 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:
Korzystanie z XML Schema
72
informatyka +
• 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
Korzystanie z XML Schema
73
informatyka +
Korzystanie z XML Schema
74
informatyka +
• 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
Korzystanie z XML Schema
75
informatyka +
Spróbujmy teraz sprawdzić działanie kolekcji schem poprzez dodanie kilku wpisów do kolumny xml. Zacznijmy od wpisu z adresem pocztowym:
Korzystanie z XML Schema
76
informatyka +
Kolejna próba – dokument z adresem email
Korzystanie z XML Schema
77
informatyka +
Kolejna próba – dokument z dwoma adresami (pocztowym i email)
Korzystanie z XML Schema
78
informatyka +
Kolejna próba – dokument z adresem pocztowym (błędny kod)
Polecenie spowoduje błąd, gdyż dokument nie spełnia ograniczenia wynikającego ze schemy.
Korzystanie z XML Schema
79
informatyka +
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.
Korzystanie z XML Schema
80
informatyka +
Kolejna próba – dokument z nadprogramowym elementem
Korzystanie z XML Schema
81
informatyka +
Kolejna próba – dokument z brakującym elementem (adresik zamiast adres)
Polecenie spowoduje błąd, gdyż dokument nie zawiera wymaganego elementu „adres”
Korzystanie z XML Schema
82
informatyka +
Kolejna próba – dokument z brakującym znacznikiem zamykającym
Polecenie spowoduje błąd, gdyż dokument nie jest poprawnie sformułowany.
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 83
informatyka +
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)
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 )
85
…czy są pytania?
86