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: – – – – – &lt; zastępującą znak < &gt; zastępującą znak > &quot; zastępującą znak ” &apos; zastępującą znak ‘ &amp; 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