• Nie Znaleziono Wyników

Klauzula FOR XML PATH – przykład 2

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

Powiązane dokumenty