47
Klauzula FOR XML – inne opcje
48
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 49
informatyka +
Typ danych XML
50
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
51
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 najwyższego poziomu (w przypadku fragmentu
Typ danych XML
52
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
53
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ść !
• Można próbować sobie z tym radzić poprzez stosowanie Indeksów XML
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 54
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
55
Metody typu danych XML - przykłady
• Wszystkie przykłady korzystania z metod typu danych XML będą przeprowadzane w oparciu o dokument XML:
56
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)
57
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 58
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
59
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):
60
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
61
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):
62
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”
63
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
64
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 65
informatyka +
Metody typu danych XML –modify() [insert]
66
informatyka +
Efekt wykonania polecenia insert:
Tylko element
Metody typu danych XML –modify() [insert]
67
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
68
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
69
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 70
informatyka +
Typ danych XML – co to jest XML Schema?
71
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?
72
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
73
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 atrybutach)
Korzystanie z XML Schema
74
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
75
informatyka +
• Po utworzeniu kolekcji schem jest ona widoczna w oknie
object browser (narzędzia SQL Server Management Studio):
Korzystanie z XML Schema
76
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
77
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
78
informatyka +
Korzystanie z XML Schema
79
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 znak @ oraz kropkę
Korzystanie z XML Schema
80
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
81
informatyka +
Kolejna próba – dokument z adresem email
Korzystanie z XML Schema
82
informatyka +
Kolejna próba – dokument z dwoma adresami (pocztowym i email)
Korzystanie z XML Schema
83
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
84
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
85
informatyka +
Kolejna próba – dokument z nadprogramowym elementem
Korzystanie z XML Schema
86
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
87
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 88
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)
89
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 )
90