• Nie Znaleziono Wyników

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:)

24

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

25

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:

26

No tak. Ale potrzebujmy te dane w postaci XML!

• Nie ma problemu – skorzystamy z klauzuli FOR XML • Zaczniemy od najprostszego wariantu : FOR XML RAW

27

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!

28

informatyka +

<dane>

Klauzula FOR XML RAW z opcją ROOT

• Oczywiście da się to poprawić

29

informatyka +

Klauzula FOR XML RAW z opcją ROOT

• Opcja RAW także dopuszcza podanie w nawiasie nazwy elementu

30

Klauzula FOR XML RAW z opcją ELEMENTS

• Aplikacja potrzebuje elementów a nie atrybutów! Co wtedy?

31

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

32

Klauzula FOR XML AUTO - przykład

33

informatyka +

Wpływa na hierarchię!

Klauzula FOR XML AUTO - przykład

34

informatyka +

Tym razem po ID zamówienia

Coraz więcej możliwości:) Co jeszcze da się zrobić?

35

informatyka +

• Da się zrobić wszystko. Kwestia czasu i nakładu pracy. • Do tej pory podejście do generowania XML polegało na:

– Dodaniu do DOWOLNEGO zapytania klauzuli FOR XML (AUTO lub RAW)

– Skorzystaniu z ich opcji do „dopracowania” postaci dokumentu

• Gdy to za mało – sięgamy po FOR XML EXPLICIT

– Specjalnie skonstruowane zapytanie Złożona konstrukcja.

– Trudne modyfikowanie Ogromne możliwości

Klauzula FOR XML EXPLICIT

36

informatyka +

• Największe możliwości w zakresie budowania złożonych struktur XML

• Precyzyjne wymagania co do struktury wyniku

zapytania, które ma być przetworzone na XML (tabela uniwersalna)

• Skomplikowany mechanizm definiowania tabeli

Klauzula FOR XML EXPLICIT

37

informatyka +

• Spróbujmy sklecić przykład (podobny do tego z trybu AUTO)

Klauzula FOR XML EXPLICIT

38

informatyka +

• Rezultat zapytania z poprzedniego slajdu (bez klauzuli FOR XML):

Klauzula FOR XML EXPLICIT

39

informatyka +

• Rezultat zapytania z poprzedniego slajdu (z klauzulą FOR XML):

Klauzula FOR XML EXPLICIT – fajna ale żmudna

40

informatyka +

• Jest jakiś sposób na uniknięcie jej stosowania?

• TAK:) Klauzula FOR XML PATH

– O wiele przyjemniejsza w stosowaniu Porównywalne możliwości

Łatwiejsze modyfikowanie (znacznie lepsza czytelność zapytań)

• Wady? A owszem…

Klauzula FOR XML PATH i język XPath

41

informatyka +

• Język XPath służy do wskazywania węzłów lub grup węzłów w dokumencie XML

• Wyrażenia XPath można porównać do ścieżek w systemie plików.

Wyrażenie: \dane\adres\pocztowy\ulica

Klauzula FOR XML PATH i język XPath

42

informatyka +

Wyrażenie: /dane/adres/pocztowy/ulica

wskazuje na element ulica i jego zawartość.

<dane> <adres> <email> <wartosc>jan.nowak@pocza.pl</wartosc> </email> </adres> <adres> <pocztowy> <kodPocztowy>00-950</kodPocztowy> <miejscowosc>Warszawa</miejscowosc> <ulica>Marszałkowska</ulica> <budynek>23</budynek> <lokal>1</lokal> </pocztowy> </adres> </dane>

Klauzula FOR XML PATH i język XPath

43

informatyka +

• Przykłady wyrażeń XPath

• /dane/adres/email[2]/wartosc

Element „wartosc” drugiego elementu „email” będącego

dzieckiem elementu „adres”, będacego dzieckiem elementu głównego „dane”

• //email

Elementy „email” występujące w dowolnym miejscu w dokumencie

• //adres/*/@typ

Atrybuty „@typ” dowolnych elementów będących dziećmi elementu „adres”

• /dane/adres/*[@typ=‘skype’]/text()

Zawartośc tekstowa dowolnego elementu, który ma atrybut „typ” o wartości „skype”, będącego dzieckiem elementu adres,

Klauzula FOR XML PATH

44

informatyka +

• Kompromis pomiędzy możliwościami a prostotą korzystania

• Znacznie łatwiejsza od EXPLICIT

• Pozwala na definiowanie złożonych struktur przy wykorzystaniu odpowiednich nazw kolumn

(przypominających wyrażenia XPath)

• Pozwala na zagnieżdżanie zapytań i uzyskiwanie tą droga złożonej struktury XML

• Istotna jest kolejność kolumn (najpierw te definiujące atrybuty, potem kolejne elementy)

• Możliwość wykorzystania znaku * (gwiazdka) jako nazwy kolumny

Klauzula FOR XML PATH

45

informatyka +

• Obsługuje opcje znane z trybu RAW i AUTO

• Istotna jest kolejność kolumn w zapytaniu (najpierw atrybuty, potem elementy)

Klauzula FOR XML PATH

46

informatyka +

Opcja TYPE!

Powiązane dokumenty