Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

XML w relacyjnych bazach danych

Podobne prezentacje


Prezentacja na temat: "XML w relacyjnych bazach danych"— Zapis prezentacji:

1

2 XML w relacyjnych bazach danych
Na przykładzie SQL Server 2008 informatyka +

3 informatyka + 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 Podstawowym zagadnieniem omawianym w trakcie wykładu jest wykorzystanie możliwości SQL Server 2008 w zakresie korzystania z XML W ramach wykładu zaprezentowana zostanie krótka historia XML, podstawowe zasady obowiązujące przy tworzeniu dokumentów XML, oraz pojęcia dokumentu poprawnie sformułowanego i poprawnego. Następnie rozważone zostaną możliwe zastosowania XML, w tym jako formatu przechowywania danych. Kluczową cześć omawianych zagadnień stanowić jednak będzie SQL Server 2008 oraz jego możliwości związane z korzystaniem z XML jako postaci danych wejściowych lub wyjściowych oraz typu, wraz z metodami manipulowania zawartością XML przechowywaną w bazie danych. Opisana zostanie znana z wcześniejszych wersji SQL Server-a klauzula FOR XML pozwalająca na zwrócenie wyniku zapytania w formie dokumentu XML. Główna uwaga zostanie skupiona na typie danych – XML, który pozwala na dość rozbudowane manipulowanie zawartością dokumentu XML oraz „odpytywanie” go za pomocą XQuery. Zaprezentowane zostaną metody udostępniane przez typ danych XML oraz przykłady ich wykorzystania. Typ danych XML umożliwia również korzystanie z XML Schema do narzucania ograniczeń dopuszczalnej strukturze dokumentu XML, który może być przechowywany w kolumnie typu XML. Przykłady wykorzystania tego mechanizmu również zostaną zaprezentowane w ramach wykładu. Przy okazji budowania zapytań korzystających z danych XML zaprezentowane zostanie także użycie operatora CROSS APPLY do tworzenia dynamicznych złączeń z danymi zawartymi w kolumnie typu XML W podsumowaniu dokonana zostanie próba oceny zalet i wad korzystania z XML w SQL Server 2008, a także zostaną wskazane dobre praktyki z tym związane. informatyka + 3

4 informatyka + Wymagania wstępne Podstawowa znajomość SQL
Podstawowa znajomość SQL Server Podstawowa znajomość dowolnego języka opartego o znaczniki (XML, HTML itp.) Chęć do nauki ;-) Wykład zawiera sporą ilość informacji podstawowych, które pozwolą nawet osobom nie mającym wcześniej styczności z XML zrozumieć podstawy tego języka oraz przekazywane wiadomości na temat korzystania z XML w SQL Server 2008 informatyka + 4

5 informatyka + 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 + 5

6 informatyka + Historia XML w pigułce
Początki prac nad XML (Extensible Markup Language) – 1996 rok Specyfikacja XML 1.0 – 1998 rok ( Cechy XML Format tekstowy (przenaszalność) Proste reguły dotyczące składni Czytelny dla człowieka Brak zdefiniowanego zbioru elementów (nie jak HTML) Prostszy od SGML, a wyparł go z większości zastosowań Od powstania – coraz szerzej stosowany Bogate wsparcie ze strony narzędzi (parsowanie, walidacja, manipulowanie) I tak w 1996 roku powstał pomysł stworzenia nowego języka dla potrzeb Internetu. Miałby to być prosty język, z prostymi regułami dotyczącymi jego składni, czytelny zarówno dla człowieka jak i dla maszyn, oraz możliwie uniwersalny jako nośnik danych i informacji o ich strukturze. W efekcie tych prac powstał XML (Extensible Markup Language). Wizualnie zbliżony do HTML (stosowanie znaczników, elementów atrybutów), choć od samego początku rygorystycznie podchodzący do poprawnego formułowania dokumentu. Mimo, że XML jest tylko podzbiorem istniejącego od dawna, potężnego SGML (Standarized General Markup Language), szybko okazało się, że z racji swojej prostoty szybko wyparł SGML z większości zastosowań. Wraz ze wzrostem popularności XML pojawiły się narzędzia służące do jego „obróbki”. Dziś trudno znaleźć jakikolwiek język programowania, w którym nie byłoby bibliotek obsługujących XML (w zakresie odczytu, tworzenia i weryfikacji poprawności). informatyka + 6

7 informatyka + 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 + 7

8 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: < ><wartosc> Jan </wartosc></ > Elementy nie mogą się „przecinać”: < ><wartosc> Jan </ ></wartosc> Żeby dokument XML był uznany za poprawnie sformułowany musi spełniać następujące wymagania: składać się z elementów, przy czym jeden z elementów jest elementem głównym i zawiera w sobie pozostałe. Element składa się (podobnie jak w HTML) ze znaczników: otwierającego i zamykającego. HTML dopuszczał brak znacznika zamykającego w miejscach, w których można się było domyślić, że element powinien być zamknięty (np. przy definiowaniu komórek w tabeli znacznik <td> nie musiał być zamykany, bo wiadomo, że gdy po nim pojawiał się kolejny <td> to oznaczał początek kolejnej komórki tabeli) . W XML każdy element musi być zamknięty. Jeżeli element nie ma zawartości to można zastosować formę skróconą (zamiast znacznika zamykającego umieszcza się po nazwie znacznika otwierającego znak / ). elementy muszą być poprawnie pozagnieżdżane – zakres objęty elementem musi być jednoznacznie określony. informatyka + 8

9 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 ” &apos; zastępującą znak ‘ & zastępującą znak & Błąd Każdy element może zawierać atrybuty. Są one definiowane wewnątrz znacznika otwierającego po nazwie elementu. Każdy atrybut musi mieć wartość – w przeciwieństwie do HTML, gdzie takiej konieczności nie było. Wartość atrybutu musi być ujęta w apostrofy lub cudzysłów. XML rozróżnia wielkość liter i jest ona istotna. Elementy <dane /> <Dane /> i <DANE /> to trzy różne elementy. Podobnie jak w HTML, jeżeli w treści dokumentu chcemy umieścić znak, który mógłby powodować niejasności w interpretacji dokumentu – zastępujemy go odpowiednią encją. Np. w przypadku: <wyrazenie>Ela<Ala</wyrazenie> Znak < pomiędzy słowami Ela i Ala mógłby zostać błędnie zinterpretowany jako początek elementu o nazwie Ala. Po zastąpieniu go encją otrzymujemy: Co jest już poprawnie interpretowane. informatyka + 9

10 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) Poprawność dokumentów XML można rozpatrywać na dwóch poziomach : syntaktycznym i semantycznym. Pierwszy z nich tworzony jest przez wcześniej opisane reguły dotyczące tworzenia dokumentów XML. Jeżeli dokument pod względem składniowym spełnia te reguły – jest dokumentem poprawnie sformułowanym. Jeżeli ten poziom weryfikacji nie wystarcza, można sięgnąć po dodatkowe narzędzia, aby nałożyć ograniczenia semantyczne. (np. w każdym elemencie „osoba” musi wystąpić co najmniej jeden element „imie” ; wartością atrybutu pesel musi być ciąg 11 cyfr) . Istnieją dwa najczęściej stosowane rozwiązania: DTD (Document Type Definition) i XML Schema. DTD jest rozwiązaniem starszym i o ograniczonych możliwościach. Obecnie znacznie częściej stosuje się XML Schema, co nie znaczy że zapewnia ono możliwość zdefiniowania dowolnych reguł dotyczących dopuszczalnej zawartości dokumentu XML. Jako alternatywa dla XML Schema wymieniane jest też Relax NG. Jest to rozwiązanie porównywalne z XML Schema, o nieco innej specyfice i możliwościach. Zależnie od reguł, które chcemy wymusić w dokumencie można stosować konkretne rozwiązania. Jeżeli dokument jest poprawnie sformułowany oraz spełnia reguły opisane w DTD lub XML Schema to jest dokumentem poprawnym (Valid document). Istnieje cały szereg narzędzi pozwalających na sprawdzanie poprawności dokumentów XML (parsery walidujące). Podsumowując: Dla dowolnego problemu, dla którego specyfikuje się format dokumentu XML, można za pomocą standardowych narzędzi zdefiniować dodatkowe reguły semantyczne i weryfikować automatycznie ich spełnienie. Pozwala to na ujednolicenie wstępu do procesu przetwarzania danych z dokumentu XML do postaci sprawdzenia poprawności sformułowania i poprawności dokumentu. Dalsze przetwarzanie odbywa się już przy założeniu poprawności dokumentu, co upraszcza ten proces ze względu na gwarancję co to struktury i zawartości przetwarzanego dokumentu. informatyka + 10

11 informatyka + 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 + 11

12 XML alternatywą dla relacyjnych baz danych ?
Jeśli patrzeć na to od strony teoretycznej – czemu nie? Hierarchiczna struktura oraz stosowanie atrybutów pozwala modelować relacje XML Schema pozwala modelować dodatkowe ograniczenia Modelowanie może być bardziej pracochłonne i nie każdy rodzaj ograniczeń da się zaimplementować Dokument XML pozwala na zastąpienie relacji odpowiednim zagnieżdżaniem elementów oraz stosowaniem atrybutów. Przy niewielkim rozmiarze dokumentu może on śmiało rywalizować z bazą danych. Wraz ze wzrostem rozmiaru dokumentu – XML szybko zostaje w tyle i osiąga „masę krytyczną” co powoduje ogromny spadek wydajności przy jego przetwarzaniu. Podobnie wygląda sprawa z definiowaniem ograniczeń stosowanych do zawartości i struktury dokumentu XML. Xml Schema, mimo rozbudowanych możliwości, okazuje się jednak niewystarczająca i powstaje konieczność dobudowywania własnych mechanizmów służących zapewnieniu spójności danym. informatyka + 12

13 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 Obszarem, w którym XML sprawdza się dobrze jest pełnienie roli magazynu danych „off-line”. Rola ta polega na tworzeniu aplikacji, które łączą się z bazą danych, pobierają dane niezbędne do pracy aplikacji i przechowują je na komputerze użytkownika w postaci XML. Dalsza praca odbywa się na tych danych i dopiero w momencie synchronizacji dane są uaktualniane w bazie. Przykładem tego typu rozwiązania jest klasa DataSet z .NET Framework. Zasadniczo jednak XML należy raczej rozpatrywać jako pewnego rodzaju uzupełnienie funkcjonalności baz danych, które może być stosowane w przypadkach, które wymagałyby tworzenia rozbudowanej struktury tabel aby zamodelować zbiór cech informacyjnych o zróżnicowanej strukturze i występujący w wielu wariantach. Tu XML sprawdza się znakomicie. W związku z takim stanem rzeczy producenci serwerów baz danych rozwijają możliwości stosowania XML w ramach bazy danych. W ramach niniejszego wykładu prezentowane będą takie właśnie mechanizmy w odniesieniu do SQL Server 2008. informatyka + 13

14 informatyka + Wynik wojny XML-SQL
Pomimo tego, że XML jest pewną alternatywą dla relacyjnych baz danych – wybrano najlepsze rozwiązanie Należy podkreślić, że pomimo pozornie konkurencyjnego charakteru technologii XML i SQL – najlepszym rozwiązaniem okazało się współdziałanie w celu osiągnięcia większej efektywności baz danych. Na kolejnym slajdzie przedstawiony zostanie przykład wykorzystania XML do uproszczenia schematu relacyjnej bazy danych, bez utraty jej funkcjonalności Dwie konkurencyjne technologie „zmuszono” do współpracy! informatyka + 14

15 Przykład uproszczenia schematu relacyjnej bazy danych z wykorzystaniem XML
Na kolejnych slajdach zaprezentowany zostanie przykład uproszczenia schematu relacyjnej bazy danych, osiągnięty dzięki wykorzystaniu kolumny typu XML. Pokazany na tym slajdzie fragment schematu bazy danych jest sposobem zapewnienia możliwości zapisania wielu adresów (np. adres do korespondencji, adres siedziby, adres na fakturę) i wielu różnych typów kontaktów (telefon stacjonarny, telefon komórkowy, adres , numer GG itp. )– dowiązanych do jednego klienta. Z punktu widzenia modelu relacyjnego jest to poprawny fragment projektu - uzyskujemy elastyczność modelu (możliwość zapisania wielu adresów i kontaktów dowiązanych do jednego klienta) – kosztem utworzenia czterech dodatkowych tabel. Tego typu rozwiązania były często stosowane przy projektowaniu relacyjnych baz danych. Kolejna wadą tego rozwiązania jest skomplikowanie programowej obsługi zapisywania i modyfikacji danych z poziomu interfejsu użytkownika. Fragment poprawnie zaprojektowanej relacyjnej bazy danych! informatyka + 15

16 Przykład uproszczenia schematu relacyjnej bazy danych z wykorzystaniem XML
Na slajdzie przedstawiony został schemat dokumentu XML umożliwiający przechowywanie danych o adresach i kontaktach - podobnie jak cztery tabele w przypadku relacyjnego podejścia. Przedstawiony schemat jest graficzna postacią dokumentu XSD , który może być wykorzystany w relacyjnej bazie jak element walidacji danych zapisanych w dokumencie XML. Schemat dokumentu XML zawierającego opis adresów i kontaktów! informatyka + 16

17 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 efekt końcowy – jedna tabela z kolumną o nazwie DaneDodatkowe typu XML – w której będzie można przechowywać dowolna ilość adresów i kontaktów dowiązanych do danego klienta. Oprócz uproszczenia schematu bazy danych – w prezentowanym przykładzie – uzyskujemy także uproszczenie obsługi modyfikacji danych z poziomu interfejsu użytkownika … i zamiast pięciu tabel mamy tylko jedną - i wszystkie potrzebne dane mogą być zapisane informatyka + 17

18 informatyka + 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 + 18

19 Struktura bazy danych dla dalszych przykładów
W dalszych przykładach będziemy się posługiwać specjalnie zaprojektowaną baza danych. Jest ona typową bazą służącą do celu gromadzenia informacji o zamówieniach składanych przez klientów. W celu uproszczenia struktury bazy zastosowano typ danych XML w dwóch miejscach – przy opisywaniu danych teleadresowych klienta oraz specyfikacji produktu. Te dwie kolumny pozwoliły na uniknięcie tworzenia co najmniej czterech dodatkowych tabel. Zaznaczone kolumny są typu XML i będą przechowywać złożone dane informatyka + 19

20 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:) Wraz ze wzrostem popularności XML coraz częściej przy projektowaniu systemów mamy do czynienia z wymaganiami dotyczącymi stosowania XML jako formatu danych wejściowych/wyjściowych. Wymaga to uzupełnienia funkcjonalności aplikacji o dodatkowe możliwości pobierania i zwracania danych w tym właśnie formacie. Można robić to „na piechotę”, czyli pobierać dane z bazy w zwykły sposób (zapytania SELECT), a potem iterować po zbiorze wynikowym i budować z niego wymagany dokument XML. Podobnie w druga stronę. Można odebrać dokument XML z wejścia systemu, a następnie przetworzyć go na ciąg poleceń INSERT, UPDATE czy DELETE (ew. wywołań różnych procedur składowanych). Zacznijmy od pierwszego wariantu – zwrócenia danych wyjściowych w postaci dokumentu XML. Producent SQL Server 2008 zadbał, by nie trzeba było w tym celu się zbytnio napracować – stworzył klauzulę FOR XML w zapytaniu SELECT informatyka + 20

21 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 Żeby skorzystać z możliwości wygenerowania rezultatu zapytania w formie dokumentu/fragmentu dokumentu XML należy dobrać odpowiedni wariant klauzuli FOR XML. W prostszych przypadkach mogą to być tryby RAW albo AUTO. Pozwalają one na stworzenie prostej reprezentacji zbioru wynikowego jako fragmentu dokumentu XML z opcją ujęcia go w zdefiniowany element „root”. W przypadku istnienia wymagań generowania bardziej złożonej struktury dokumentu XML mamy do dyspozycji klauzulę FOR XML w wariantach EXPLICIT oraz PATH. Wariant PATH, podobnie jak RAW czy AUTO można zastosować do większości zapytań, podczas gdy wariant EXPLICIT ma ściśle określone wymagania co do postaci zbioru wynikowego, który ma być przekształcony na postać XML. Na kolejnych slajdach zaprezentowane zostaną najważniejsze cechy poszczególnych wariantów oraz ich możliwości. informatyka + 21

22 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: Manipulowanie danymi zwracanymi z bazy rozpoczniemy na przykładzie danych o klientach. Każdy z nich jest opisany imieniem, nazwiskiem oraz adresem , ma także przypisany unikalny identyfikator – ID. Będziemy próbować wykorzystać klauzulę FOR XML w różnych wariantach do manipulowania strukturą wyjściowego dokumentu XML. informatyka + 22

23 No tak. Ale potrzebujmy te dane w postaci XML!
Nie ma problemu – skorzystamy z klauzuli FOR XML Zaczniemy od najprostszego wariantu : FOR XML RAW Najprostszym do zastosowania jest tryb RAW. Jego działanie sprowadza się do wygenerowania dla każdego wiersza ze zbioru wynikowego jednego elementu XML o domyślnej nazwie „row”. Wartości poszczególnych kolumn dla wiersza stają się wartościami atrybutów elementu „row”. Można także określić własna nazwę dla elementu „row” oraz zamiast atrybutów wybrać generowanie wartości z kolumn jako elementów XML o takiej nazwie jak nazwa kolumny. W przykładzie ze slajdu – na wyjściu otrzymaliśmy nie dokument XML tylko fragment dokumentu XML! informatyka + 23

24 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> O ile wynik działania zapytania z klauzulą FOR XML RAW może być traktowany jako fragment dokumentu XML i „obudowany” później w element główny, to można to także zrealizować od razu przy generowaniu wyniku zapytania. Służy do tego opcja ROOT. </dane> informatyka + 24

25 Klauzula FOR XML RAW z opcją ROOT
Oczywiście da się to poprawić Opcja ROOT powoduje dodanie do rezultatu zapytania elementu głównego o domyślnej nazwie „root”, bądź dowolnej innej określonej w ramach opcji. Korzystanie z opcji ROOT jest powszechną praktyką, gdyż tylko wtedy zwrócony dokument XML spełnia reguły składni i jest poprawnie sformułowany, co umożliwia jego dalsze przetwarzanie. Zmieńmy jeszcze „row” na coś milszego dla oka… informatyka + 25

26 Klauzula FOR XML RAW z opcją ROOT
Opcja RAW także dopuszcza podanie w nawiasie nazwy elementu Opcja RAW pozwala także na określenie nazwy elementu odpowiadającego każdemu wierszowi. Niestety na tym kończą się możliwości manipulowania postacią dokumentu XML za pomocą tej opcji. informatyka + 26

27 Klauzula FOR XML RAW z opcją ELEMENTS
Aplikacja potrzebuje elementów a nie atrybutów! Co wtedy? Klauzula FOR XML RAW pozwala także na generowanie wartości kolumny nie jako atrybutu, ale jako elementu. Opcja ELEMENTS powoduje, że zamiast atrybutów, do umieszczenia zawartości kolumn wykorzystane są elementy o nazwach takich jak poszczególne kolumny. Pytanie: „Czy stosować elementy czy atrybuty?” jest jednym z częściej zadawanych pytań dotyczących planowania struktury dokumentów. Nie ma na nie jednoznacznej odpowiedzi, warto natomiast zdawać sobie sprawę, że korzystanie z atrybutów: zmniejsza rozmiar wynikowego dokumentu uniemożliwia nadawanie struktury zawartości atrybutu ogranicza liczebność wystąpień atrybutów o tej samej nazwie w ramach elementu do jednego Korzystanie z elementów: zwiększa rozmiar wynikowego dokumentu umożliwia w razie potrzeby nadawanie struktury wartościom elementu Przykładowo: Weźmy dwa elementy: <dane osoba=‘Jan Nowak’ /> i <dane><osoba>Jan Nowak</osoba></dane> Widać, że pierwszy wariant jest bardziej zwięzły. Nie można natomiast wykonać w nim: Dodania drugiej „osoby” do elementu dane, chyba, że w karkołomny sposób: <dane osoba=‘Jan Nowak’ osoba2=‘Tomasz Kowalski’ /> W drugim wariancie nie ma takiego problemu: <dane><osoba>Jan Nowak</osoba><osoba>Tomasz Kowalski</osoba></</dane> Podobnie gdy chcemy nadać zawartości atrybutu czy elementu „osoba” jakąś strukturę, to pierwszy wariant skutecznie to uniemożliwia. Drugi pozwala natomiast swobodnie to wykonać: <dane> <osoba> <imie>Jan</imie> <nazwisko>Nowak</nazwisko> </osoba> </dane> informatyka + 27

28 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 Klauzula AUTO ma możliwości zbliżone do RAW, z tą różnicą, że potrafi budować proste hierarchie w dokumencie XML. Proces budowania hierarchii jest oparty o heurystyki. Analizowane są kolejne wiersze i wartości kolumn. Pozwala to przy odpowiednim skonstruowaniu zapytania (sortowanie, kolejność złączeń) na sterowanie postacią wyjściowej hierarchii dokumentu XML. Pozwala także (podobnie jak RAW) na osadzenie w wyjściowym dokumencie XML wygenerowanego dla niego dokumentu XML Schema opisującego postać wyjściowego dokumentu XML. W przypadku pojawienia się w wyniku zapytania pól binarnych są one domyślnie kodowane metodą „URL Encode”. Jeżeli nie jest to odpowiednie rozwiązanie, można skorzystać z opcji BINARY BASE64. informatyka + 28

29 Klauzula FOR XML AUTO - przykład
Wpływa na hierarchię! Slajd prezentuje rezultat zastosowania klauzuli AUTO dla zapytania pobierającego dane z dwóch tabel (poprzez złączenie). Dane są posortowane według kolumny klientID, co umożliwia stworzenie hierarchii, w której dla każdego klienta zagnieżdżone w nim będą jego zamówienia. informatyka + 29

30 Klauzula FOR XML AUTO - przykład
Tym razem po ID zamówienia Sterowanie hierarchią dokumentu XML wygenerowanego przez klauzulę FOR XML AUTO jest dość proste. Można je łatwo stosować w prostszych przypadkach. Nie wystarcza jednak gdy konstrukcja XML wykracza poza prostą hierarchie bazująca na wartościach kolumn. informatyka + 30

31 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 Klauzula w wariancie FOR XML EXPLICIT posiada największe możliwości, ale jest tez najbardziej złożona i trudna w stosowaniu. Nie nadaje się w przeciwieństwie do RAW i AUTO do zastosowania w dowolnym zapytaniu. Żeby skorzystać z trybu EXPLICIT tabela wejściowa musi być tzw. tabelą uniwersalną. Omówiona zostanie na kolejnym slajdzie. Warto pamiętać, że podejście wykorzystane przy trybie EXPLICIT jest bardzo trudne w utrzymaniu i pojawienie się wymagania zmiany hierarchii generowanego dokumentu może prowadzić do pisania zapytania od podstaw. informatyka + 31

32 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 Składa się ona z kolumn o ustalonej kolejności, nazwach i znaczeniu. Przykładowo pierwszą kolumna musi być kolumna „tag” , która zawiera unikalny numer dla każdego elementu, który będzie generowany. Druga kolumna ma nazwę „parent” i określa wartość „tag” dla rodzica elementu. Kolejne kolumny definiują składowe elementów XML. Nazwy tych kolumn tworzone są w oparciu o schemat: „nazwaElementu!Tag!NazwaAtrybutu!Dyrektywa”. Pozwala to dokładnie sterować procesem definiowania struktury elementów i atrybutami. Dokładne omówienie mechanizmu działania trybu EXPLICIT wykracza poza zakres niniejszego opracowania. informatyka + 32

33 Klauzula FOR XML EXPLICIT
Spróbujmy sklecić przykład (podobny do tego z trybu AUTO) Zapytanie generujące tabelę uniwersalną dla listy klientów z zagnieżdżonymi zamówieniami. Warto zwrócić uwagę na złożoność zapytania (operatory union, odpowiednie nazwy kolumn, sortowanie). A przykład jest skrajnie prosty:) informatyka + 33

34 Klauzula FOR XML EXPLICIT
Rezultat zapytania z poprzedniego slajdu (bez klauzuli FOR XML): Rezultatem zapytania jest tabela uniwersalna. Na jej podstawie klauzula FOR XML EXPLICIT będzie w stanie wygenerować odpowiadająca jej hierarchię elementów XML. Musieliśmy zadbać nie tylko o właściwą kolejność wierszy ale także o wygenerowanie dodatkowych kolumn oraz odpowiednie nazwy dla pozostałych kolumn. informatyka + 34

35 Klauzula FOR XML EXPLICIT
Rezultat zapytania z poprzedniego slajdu (z klauzulą FOR XML): Wynik wykonania zapytania, tym razem z klauzulą FOR XML EXPLICIT, zawiera dokument XML o strukturze zaplanowanej przy tworzeniu zapytania. Warto zauważyć, że każda modyfikacja struktury XML powoduje konieczność modyfikowania zapytania w wielu miejscach, co nie należy do przyjemności. A przecież stworzony przez nas przykład jest skrajnie prosty… informatyka + 35

36 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ę) W SQL Server 2005 pojawiła się nowa możliwość – klauzula FOR XML PATH. Łączy ona w sobie prostotę klauzul RAW i AUTO z możliwościami EXPLICIT. Żeby w miarę wygodnie posługiwać się klauzula PATH należy poznać choćby podstawy języka XPath. informatyka + 36

37 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. W systemie plików, który także ma strukturę hierarchiczną, katalogi wskazuje się podając ścieżkę, którą należy pokonać od katalogu głównego aż do docelowego. Analogia XML -> system plików nie jest jednak do końca poprawna, gdyż w systemie plików na jednym poziomie (w obrębie jednego rodzica) nie mogą istnieć dwa katalogi o takiej samej nazwie, co w XML jest jak najbardziej dopuszczalne. Wyrażenie: \dane\adres\pocztowy\ulica wskazuje na katalog ulica i jego zawartość. informatyka + 37

38 Klauzula FOR XML PATH i język XPath
<dane> <adres> < > </ > </adres> <pocztowy> <kodPocztowy>00-950</kodPocztowy> <miejscowosc>Warszawa</miejscowosc> <ulica>Marszałkowska</ulica> <budynek>23</budynek> <lokal>1</lokal> </pocztowy> </dane> W dokumencie XML struktura elementów i atrybutów może być o wiele bardziej złożona niż struktura katalogów w systemie plików. Podobnie wyrażenia XPath mogą mieć bardziej złożoną postać w stosunku do ścieżek w systemie plików. Wyrażenie: /dane/adres/pocztowy/ulica wskazuje na element ulica i jego zawartość. informatyka + 38

39 Klauzula FOR XML PATH i język XPath
Przykłady wyrażeń XPath /dane/adres/ [2]/wartosc Element „wartosc” drugiego elementu „ ” będącego dzieckiem elementu „adres”, będacego dzieckiem elementu głównego „dane” // Elementy „ ” występujące w dowolnym miejscu w dokumencie Atrybuty dowolnych elementów będących dziećmi elementu „adres” 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” Język XPath pozwala na wskazywanie dowolnie zdefiniowanych zbiorów węzłów. Oprócz prostych wyrażeń zaprezentowanych na slajdzie, można także korzystać z określeń typu „rodzic”, „dziecko”, „rodzeństwo” , „potomkowie” oraz pokaźnego zbioru funkcji. XPath rzadko jest używany samotnie. Z reguły współgra z innymi narzędziami. Jest stosowany w XSLT, XQuery a także w TSQL :) informatyka + 39

40 informatyka + 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 W uproszczeniu, tryb FOR XML PATH bazuje na nazwach nadawanych kolumnom zapytania. Mają one postać zbliżona do wyrażeń XPath wskazujących elementy bądź atrybuty. Na ich podstawie budowana jest wyjściowa struktura XML. Można ja dodatkowo komplikować poprzez zagnieżdżanie zapytań. Pamiętać należy jedynie o odpowiedniej kolejności występowania kolumn w zapytaniu – te definiujące atrybuty elementu muszą wystąpić przed definiującymi kolejne lub zagnieżdżone elementy. informatyka + 40

41 informatyka + Klauzula FOR XML PATH
Obsługuje opcje znane z trybu RAW i AUTO Istotna jest kolejność kolumn w zapytaniu (najpierw atrybuty, potem elementy) Klauzula FOR XML PATH obsługuje wszystkie opcje omówione przy okazji RAW i AUTO. Ważna rzeczą jest pamiętanie o kolejności kolumn w zapytaniu. Ma to znaczenie w przypadku atrybutów, gdyż one muszą być w zapytaniu przed kolumnami mapowanymi na elementy zagnieżdżone. informatyka + 41

42 informatyka + Klauzula FOR XML PATH 42 Opcja TYPE!
Budowanie bardziej złożonej struktury XML może się odbywać poprzez stosowanie podzapytań. W takim przypadku ważne jest, aby w podzapytaniu generującym fragment dokumentu XML umieścić w klauzuli FOR XML opcję TYPE powodującą zwrócenie wyniku jako zmiennej typu XML Opcja TYPE! informatyka + 42

43 Klauzula FOR XML PATH – przykład 2
Z kolei znak * („gwiazdka”) powoduje, że w przypadku kolumny typu XML, jej zawartość będzie osadzona w wyniku zapytania wprost. Dla kolumn innych typów wstawiony będzie węzeł tekstowy z zawartością. informatyka + 43

44 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 Wszystkie opisane warianty klauzuli FOR XML posiadają jeszcze kilka opcji, z którymi warto się zapoznać. Jako przykład można podać opcję TYPE powodującą, że zwrócona wartość jest traktowana jak zmienna typu XML. Równie ciekawa jest opcja XSNIL, która umożliwia umieszczenie w wynikowym dokumencie XML elementów, które mają w wejściowym zapytaniu wartość null i domyślnie nie byłyby umieszczone w wyniku. Jest to szczególnie istotne przy przetwarzaniu zwróconych danych w aplikacji, która niekoniecznie ma skąd wziąć pełna listę dopuszczalnych elementów, które można w ramach przetwarzania uzupełnić. Oczywiście można próbować ten problem rozwiązać za pomocą osadzania XML Schemy, ale jest to bardziej złożone i pracochłonne informatyka + 44

45 informatyka + 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 + 45

46 informatyka + 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 Zanim skorzysta się z typu danych XML warto zapoznać się z jego dokumentacją. Szczególnie chodzi tu o sam sposób przechowywania dokumentu oraz o ograniczenia związane z samym typem danych. Warto również zastanowić się nad korzystaniem z kolekcji XML Schema oraz indeksów XML. Istotną informacja jest to, że dokument nie jest zapisywany w bazie wprost, tylko przechodzi proces normalizacji (modyfikacja dokumentu, kodowanie w Unicode, eliminowanie niepotrzebnych ciągów i znaków itp..). Eliminuje to możliwość korzystania z tego typu danych wszędzie tam, gdzie ważna jest oryginalna postać dokumentu (np. kwestie podpisu elektronicznego) informatyka + 46

47 informatyka + 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) Deklarowanie kolumn typu xml nie odbiega od deklarowania kolumn każdego innego typu. Dla kolumn typu xml bez skojarzonej kolekcji schem automatycznie jest sprawdzana jedynie poprawność sformułowania dokumentu (z odstępstwem od reguły dotyczącej jednego elementu root). W razie próby zapisania dokumentu XML zawierającego niepoprawnie sformułowany dokument XML wygenerowany zostanie błąd i operacja zostanie anulowana informatyka + 47

48 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 Przy deklarowaniu kolumn xml ze skojarzona schemą (typed) jedyną specyficzną rzeczą jest umieszczenie w nawiasie w deklaracji typu nazwy tej kolekcji. Sama kolekcja dokumentów XML Schema zawierać może jedną bądź wiele pojedynczych schem, które zapisuje się jedna pod drugą. Po skojarzeniu kolekcji z kolumną typu xml, każda wartość wpisywana do tej kolumny będzie walidowana pod kątem zgodności z którąś ze schem z kolekcji. W przypadku braku zgodności – operacja zapisu zostanie anulowana. informatyka + 48

49 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 Kiedy w praktyce należy stosować typ danych xml? W tej kwestii zdania są podzielone. Jedni z definicji odrzucają xml traktując go jako niepotrzebny a wręcz szkodliwy wodotrysk (stawiając m.in. zarzuty co do kiepskiej wydajności), drudzy używają go gdzie tylko się da zastępując jedną kolumną xml strukturę kilku tabel lub tworząc procedury składowane, którym przekazuje się tylko jeden parametr typu xml, z którego są potem „wydłubywane” konkretne wartości. W skrajnych przypadkach cała komunikacja z baza danych sprowadza się do wymiany dokumentów XML. Z aplikacji przychodzi żądanie z parametrami w postaci xml, na które baza odpowiada zwracając dokument xml z odpowiednią strukturą danych. Sprowadza to komunikację z bazą danych do postaci zbliżonej do korzystania z usług sieciowych (webservices), która staje się w ostatnich latach coraz bardziej modna. W naszym przypadku z typu danych xml skorzystaliśmy w dwóch tabelach. W pierwszej kolumna xml będzie służyła do przechowywania danych teleadresowych klienta (różne rodzaje adresów, identyfikatorów z komunikatorów itp.). W drugiej tabeli xml zastosowaliśmy do przechowywania specyfikacji produktu. Ze względu na to, że produkty różnych kategorii mogą być opisywane zupełnie innym zbiorem cech – zastosowanie xml w połączeniu z kolekcja schem zapewni wygodny mechanizm przechowywania specyfikacji produktów informatyka + 49

50 informatyka + 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 + 50

51 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, -e i identyfikatory z komunikatorów internetowych Na początku nie będziemy stosować kolekcji schem. Przyjdzie na to czas pod koniec wykładu Typ danych XML zawiera pięć metod, które mają za zadanie ułatwienie korzystania z danych zawartych wewnątrz dokumentu XML oraz modyfikowanie samego dokumentu. Dodatkowo dają one możliwość wykonania operacji odwrotnej do działania klauzuli FOR XML – czyli do przetransformowania danych z XML w wiersz zbioru wyników (rowset). Aby korzystać z metod typu XML należy opanować dodatkowo podstawy języka XQuery oraz XPath, gdyż wyrażenia zbudowane w oparciu o nie są stosowane w parametrach wywołania metod typu xml. informatyka + 51

52 Metody typu danych XML - przykłady
Wszystkie przykłady korzystania z metod typu danych XML będą przeprowadzane w oparciu o dokument XML: Przykłady korzystania z metod udostępnianych dla typu danych XML będą oparte na dokumencie zawierającym dane teleadresowe klienta. Dokument ten zawiera adres pocztowy, adres i adres komunikatora Skype. informatyka + 52

53 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: Zwróci wartość pierwszego elementu „wartosc” będącego dzieckiem elementu „ ”, który występuje gdziekolwiek w hierarchii dokumentu. Wartość ta będzie skonwertowana do typu varchar(100) Metoda value() pozwala na wybieranie pojedynczych węzłów dokumentu XML i konwertowanie ich wartości na inne wbudowane typy danych. W celu skorzystania z metody value() należy przekazać jej dwa parametry. Pierwszym jest wyrażenie XQuery wskazujące na jeden węzeł (singleton). Uzyskuje się je ujmując wyrażenie w nawias okrągły zakończony para nawiasów kwadratowych określających numer wystąpienia wskazanego węzła. Drugim argumentem jest nazwa typu danych, do którego ma być skonwertowana wskazana wartość w dokumencie XML. W przypadku niemożności skonwertowana danych do wskazanego typu zwrócony zostanie stosowny błąd. informatyka + 53

54 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 =’’ THEN 0 ELSE 1 END as czyZawiera Metody value() nie należy stosować do celów innych niż pobranie wartości konkretnego węzła i skonwertowanie jej na typ docelowy. Często popełnianym błędem jest stosowanie jej do sprawdzenia czy wartość istnieje w dokumencie. Do tego celu służy osobna metoda – exist(), która zapewnia wieksza wydajność. 54 informatyka +

55 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: as czyZawiera as czyZawiera e Metoda exist() pozwala na sprawdzenie czy wskazany węzeł istnieje. Nie ma przy niej wymogu by wyrażenie XQuery zwracało singleton. 55 informatyka +

56 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): Metoda query() pozwala na zwrócenie fragmentu dokumentu XML zdefiniowanego poprzez wyrażenie XQuery lub XPath. Tak spreparowany dokument może być dalej przetwarzany jak każdy inny. Stosowana jest ( w szczególności w połączeniu z wyrażeniami FLWOR) do wybierania danych z dokumentu XML według złożonych reguł, które ciężko zapisać w inny sposob 56 informatyka +

57 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 XQuery jest kolejną technologią rozwijaną przez organizację W3C, która przeznaczona jest do współpracy z XML. Głównym zadaniem XQuery jest umożliwienie „odpytywania” dokumentu XML. Często porównuje się XQuery do polecenia SELECT z SQL. 57 informatyka +

58 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): Metoda nodes() pozwala na przetworzenie danych zawartych w dokumencie XML na postać relacyjną. Za jej pomocą można wybrać węzły dokumentu, które będą tworzyły wiersz danych. Rezultatem działania metody nodes() jest zbiór wierszy zawierający logiczne kopie węzłów dokumentu XML wybranych przez wyrażenie XQuery. Nawigowanie po nich odbywa się poprzez podawanie w wyrażeniach XQuery i XPath względnych „ścieżek” informatyka + 58

59 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” Funkcja ta jest szczególnie użyteczna i wygodna gdy tworzymy zapytanie, które ma zawierać w kolumnach poszczególne informacje zaszyte w strukturze elementów i atrybutów dokumentu XML Przykładem niech będzie pobranie w formie relacyjnej danych klienta oraz jego adresu pocztowego. informatyka + 59

60 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 Metoda modify() pozwala na modyfikowanie zawartości dokumentu XML. Modyfikacje te są realizowanie za pomocą poleceń języka XML DML (XML Data Manipulation Language). W skład XML DML wchodzą trzy polecenia: insert – służące do dodawania nowych węzłów (elementów, atrybutów, węzłów tekstowych itp.) do dokumentu XML delete – służące do usuwania węzłów z dokumentu replace value of – służące do zastępowania zawartości węzła dokumentu inna zawartością Możliwości tych trzech poleceń są dość ograniczone i łatwe do zastosowania wyłącznie w przypadku prostych modyfikacji operujących z reguły na wartościach podawanych w formie stałych łańcuchów znaków. Gdy potrzebne są możliwości dynamicznego budowania wartości, która ma być wstawiona do dokumentu, to szybko okazuje się, że jest to trudne bądź wręcz niemożliwe. Dlatego też gdy wymagane są bardziej złożone operacje na dokumencie XML – realizowane są one po stronie aplikacji, a ich gotowy wynik jest przekazywany do bazy informatyka + 60

61 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 Polecenie insert służy do dodawania nowych węzłów do dokumentu XML przechowywanego w kolumnie typu xml. Jego wywołanie polega na: określeniu zawartości dodawanego węzła (węzłów), określeniu sposobu dodania węzła względem wskazanego celu (przed, po, jako pierwsze dziecko, jako ostatnie dziecko) określeniu celu (miejsca) dodania nowego węzła (wyrażenie XPath wskazujące na cel) W podanym przykładzie do dokumentu zostanie dodany nowy element „cena” z wartością „2.00”. Będzie on umieszczony jako ostatnie dziecko elementu „specyfikacja” informatyka + 61

62 Metody typu danych XML –modify() [insert]
Efekt wykonania polecenia insert: Tylko element główny Slajd prezentuje efekt wykonania polecenia insert na dokumencie XML informatyka + 62

63 Metody typu danych XML –modify() [insert]
Efekt wykonania polecenia insert: Zmienna typu XML Wstawienie zmiennej do zawartości dokumentu Polecenie insert umożliwia wstawianie dowolnych węzłów dokumentu XML (elementów, atrybutów, komentarzy itp.). Można także korzystać z funkcji sql:variable() i sql:column() pozwalających odpowiedni osadzić w dokumencie wartość zmiennej lub kolumny. informatyka + 63

64 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[ ] usuń wszystkie elementy „adres” zawierające w sobie element „ ” [cel] może wskazywać zarówno pojedynczy element jak i grupę elementów /atrybutów Polecenie delete służy do usuwania węzłów z dokumentu XML. Jako parametr podaje mu się wyrażenie XPath definiujące docelowy węzeł lub zbiór węzłów. W przeciwieństwie do polecenia insert, delete potrafi operować na wielu wezłach. informatyka + 64

65 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 Polecenie replace value of służy do zmiany zawartości węzłów dokumentu XML. Jako parametr podaje mu się wyrażenie XPath definiujące docelowy węzeł, którego zawartość ma zostać zmieniona, oraz nowa zawartość wskazanego węzła. informatyka + 65

66 informatyka + 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 + 66

67 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 ( ) 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ąć XML Schema jest potężnym narzędziem służącym do definiowania dopuszczalnej struktury dokumentów XML. Nabranie wprawy w modelowaniu dokumentów XML wymaga przyswojenia sporej ilości wiedzy, słów kluczowych oraz dobrych praktyk. W SQL Server 2008 umożliwiono korzystanie z XML Schema wraz z typem danych XML. informatyka + 67

68 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 Obecnie istnieje wiele rozwiązań bazujących na XML Schema. Począwszy od specyfikacji formatów plików XML przechowujących najrozmaitsze dane, do opisywania postaci komunikatów wysyłanych przez usługi WWW (webserwisy). Do tego stworzono cały szereg narzędzi pozwalających zarówno na walidowanie dokumentów XML, jak i na wygodne tworzenie rozbudowanych modeli dokumentów. Tworzenie dokumentów XML Schema (zwane też modelowaniem dopuszczalnej struktury dokumentów XML) jest zagadnieniem bardzo rozbudowanym i wykracza poza ramy niniejszego wykładu. Przy założeniu, że mamy już określoną postać dokumentu XML Schema, stworzenie kolekcji schem jest proste i ogranicza się do wykonania jednego polecenia. Od tego momentu można używać zdefiniowanej w ten sposób kolekcji przy deklaracjach kolumn typu xml. informatyka + 68

69 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) W dobrze zaprojektowanych bazach danych dąży się do zapewnienia jak najwyższej spójności danych. Dodanie obsługi typu danych xml pozornie mogło spowodować stworzenie mechanizmu pozwalającego na maskowanie niedoskonałości projektu bazy poprzez „upychanie” danych nie do końca zamodelowanych do kolumn xml. Istnieją rozwiązania, kiedy faktycznie jest to bardzo wygodne, lecz zwykle dąży się do nałożenia pewnych ograniczeń na dokumenty XML przechowywane w bazie. Do realizacji takich mechanizmów wykorzystuje się standard XML Schema. Jest on powszechnie stosowany wszędzie tam, gdzie przewija się XML, a co za tym idzie projektanci nie muszą uczyć się nowych narzędzi w celu korzystania z xml w SQL Server 2008. Dokumenty opisujące struktury dokumentów XML dodaje się do bazy danych w postaci XML Schema Collection (kolekcji schem). Kolekcja taka może zawierać jedna lub wiele schem, a odwoływać się do niej można przez nazwę. informatyka + 69

70 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 Korzystanie z kolekcji schem sprowadza się do dwóch kroków: - Utworzenia kolekcji schem (poleceniem create xml schema collection [nazwa] as N’[zawartosc]’ ) Zadeklarowania kolumny jako tzw typed XML (xml korzystający ze schem w celu walidowania struktury dokumentów) Od tego momentu serwer baz danych sam będzie wykonywał walidację dokumentów XML (w oparciu o schemy z kolekcji) przy każdej modyfikacji jego zawartości jak i przy dodawaniu nowego dokumentu. informatyka + 70

71 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 (…) ‘ Dokumenty XML Schema można wygodnie tworzyć w wielu istniejących narzędziach służących wyłącznie do tego celu. Już gotowe dokumenty XML Schema za pomocą polecenia CREATE XML SCHEMA COLLECTION osadza się w bazie danych. Od tej chwili można z niej korzystać przy deklarowaniu kolumn typu xml. informatyka + 71

72 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: Stworzona kolekcja schem została wykorzystana do nałożenia ograniczeń na zawartość kolumny xml. Kolumna DaneTeleadresowe ma przechowywać w założeniu różnego rodzaju informacje pozwalające na skontaktowanie się z klientem. Mogą to być zarówno adresy pocztowe jak i adresy czy identyfikatory z komunikatorów. Słowo kluczowe „DOCUMENT” oznacza, że kolumna będzie akceptowała tylko poprawnie sformułowane dokumenty a nie fragmenty dokumentów. Gdybyśmy chcieli dopuścić przechowywanie fragmentów dokumentów, należałoby użyć słowa „CONTENT”. informatyka + 72

73 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 . Adres 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 musi zawierać i jedną kropkę. Żeby zastosować XML Schema w praktyce, musimy zdefiniować problem, który rozwiążemy za jej pomocą. W naszym przypadku będzie to nałożenie ograniczeń na kolumnę DaneTeleadresowe tabeli Klient. Celem jest umożliwienie umieszczania tam jedynie właściwie opisanych adresów pocztowych i . Pozwoli to w dalszej perspektywie na łatwe wyszukanie np. adresu dostawy , pod który wysłane zostanie zamówienie klienta lub adresu do faktury, czy do informowania o statusie zamówienia. W przypadku pozostawienia dowolności struktury xml zawierającego adresy mogłoby się okazać, że ciężko jest stworzyć regułę pozwalająca na wyszukanie odpowiednich informacji. Użyte przez nas narzędzie Altova Xml Spy pozwala skupić się na wymaganiach stawianych strukturze dokumentu i modelować ją „graficznie” informatyka + 73

74 Korzystanie z XML Schema
Struktura schemy dla opisanego problemu (diagram z XML Spy) Graficzna reprezentacja schemy jest dość czytelna. Nietrudno na jej podstawie opisać wymagania stawiane dokumentowi: Składa się z głównego elementu „daneAdresowe”, którego zawartość stanowi sekwencja elementów „adres” (co najmniej jednego) Element „adres” może zawierać w sobie jeden z dwóch elementów: „pocztowy” i „ ” Element „ ” zawiera jeden element „wartosc” Element „pocztowy” zawiera zbiór dowolnie uporządkowanych elementów (kodPocztowy, miejscowosc- obowiązkowych oraz poczta, ulica, budynek i lokal – opcjonalnych) informatyka + 74

75 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 jako ciąg zawierajacy w sobie oraz kropkę Zaprezentowany fragment XML Schema ilustruje jedną z wielu możliwości definiowania dopuszczalnej zawartości elementu – poprzez ograniczenie (restriction) typu bazowego „string” (napisu). Skorzystaliśmy tu z elementu „pattern”, który umożliwia skorzystanie z wyrażeń regularnych do definiowania dopuszczalnej postaci ciągu informatyka + 75

76 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ą W ramach testowania poprawności działania mechanizmu kolekcji schem, spróbujemy dodać kilka wpisów z danymi teleadresowymi do tabeli klienci. Na pierwszy ogień pójdzie dokument zawierający jeden adres pocztowy. Powinno się udać, gdyż jest on zgodny ze schemą. informatyka + 76

77 Korzystanie z XML Schema
Kolejna próba – dokument z adresem Polecenie wykona się poprawnie, gdyż dokument jest zgodny ze schemą W tym przypadku polecenie wykona się również poprawnie, gdyż dokument jest jak najbardziej zgodny ze schemą. informatyka + 77

78 Korzystanie z XML Schema
Kolejna próba – dokument z dwoma adresami (pocztowym i ) Polecenie wykona się poprawnie, gdyż dokument jest zgodny ze schemą W tym przypadku polecenie także wykona się poprawnie, gdyż dokument jest zgodny ze schemą, która dopuszcza dowolną liczbę adresów każdego z rodzajów informatyka + 78

79 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. Mechanizm walidacji zadziałał i nie udało się zapisać w bazie dokumentu, który zawiera niepoprawny kod pocztowy informatyka + 79

80 Korzystanie z XML Schema
Kolejna próba – dokument z adresem (błędna wartość adresu ) Polecenie spowoduje błąd, gdyż dokument nie spełnia ograniczenia wynikającego ze schemy. Mechanizm walidacji zadziałał i nie udało się zapisać w bazie dokumentu, który zawiera niepoprawny adres informatyka + 80

81 Korzystanie z XML Schema
Kolejna próba – dokument z nadprogramowym elementem Polecenie spowoduje błąd, gdyż dokument zawiera dodatkowy element „bonus” Mechanizm walidacji zadziałał i nie udało się zapisać w bazie dokumentu, który zawiera dodatkowy, nieujęty w schemie element informatyka + 81

82 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” Mechanizm walidacji zadziałał i nie udało się zapisać w bazie dokumentu, który nie zawiera wymaganego elementu adres informatyka + 82

83 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! W tym przypadku do walidacji dokumentu nie doszło, gdyż dokument nie przeszedł procesu parsowania – nie jest poprawnie sformułowany, wiec nie ma mowy o poddaniu go walidacji. We wcześniejszych przykładach występował błąd „XML validation” w tym jest to „XML parsing”. informatyka + 83

84 informatyka + 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 + 84

85 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) W ramach niniejszego wykładu zaprezentowany został pokrótce język XML oraz rozważyliśmy możliwości korzystania z niego w relacyjnych bazach danych. Z racji rosnącej popularności XML oraz coraz bogatszego wsparcia ze strony producentów serwerów baz danych, warto się nim zainteresować aby móc rozważać go jako jedna z opcji przy projektowaniu baz danych. Jako przykład serwera baz danych oferującego wsparcie dla XML, wykorzystany został SQL Server W ramach omawiania jego możliwości w kontekście XML, zasygnalizowane zostały główne obszary, w których serwer oferuje narzędzia służące do obsługi dokumentów XML. Przyjrzeliśmy się klauzuli FOR XML stosowanej do zwracania wyników zapytania w postaci dokumentów lub fragmentów dokumentów XML. Zapoznaliśmy się także z typem danych xml, który pozwala nie tylko na przechowywanie danych w tym formacie, ale także na zaawansowane odpytywanie dokumentów XML oraz manipulowanie ich zawartością. Dodatkowo wspomnieliśmy o wykorzystywanych w ramach SQL Server 2008 innych technologiach i narzędziach wspierających XML. Warto tu wymienić choćby XQuery, XPath oraz XML Schema. Wszystkie te rozwiązania są otwarte, nie stanowią własności żadnej firmy i są rozwijane przez konsorcjum W3C i szeroko adoptowane w świecie IT. Pozwala to ekspertom od XML na łatwe wykorzystanie nabytej wiedzy także przy korzystaniu z serwerów baz danych. informatyka + 85

86 informatyka + Podsumowanie 86
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 ) Jest jednak także druga strona medalu. Jeśli zachłyśniemy się wsparciem dla XML w SQL Server 2008, to bardzo szybko może nas czekać zimny prysznic. Otóż mechanizmy wspierające XML na pierwszy rzut oka wyglądają na potężne i wygodne. Faktycznie jest tak, ale tylko w zakresie przewidzianym przez ich twórców. Okazuje się, że nie zaimplementowali oni w pełni standardów XQuery i XPath (można szybko natrafić na wiele nieobsługiwanych funkcji bądź ograniczeń). Podobnie jest w przypadku XML Schema. Nie wszystkie możliwości tej technologii są dopuszczalne w ramach SQL Server W zakresie manipulowania strukturą dokumentów XML również okazuje się, że metoda modify() z poleceniami XML DML ma bardzo dużo ograniczeń, szczególnie gdy chce się polecenia tworzyć bardziej dynamicznie. To wszystko nie umniejsza jednak faktu, ze wsparcie XML w relacyjnych bazach danych jest ciekawą możliwością, z której warto korzystać … oczywiście po uprzednim gruntownym zapoznaniu się z dokumentacją, aby uniknąć przykrych niespodzianek w trakcie realizacji projektu. informatyka + 86

87 <Koniec /> …czy są pytania? informatyka + 87

88


Pobierz ppt "XML w relacyjnych bazach danych"

Podobne prezentacje


Reklamy Google