Przykładowy dokument XML

Podobne dokumenty
Przykładowy dokument XML

Przykładowy dokument XML

XML w bazie danych IBM DB2

DB2 XML w relacyjnych bazach danych wstęp do wprowadzenia. Kuba Pochrybniak

Słowem wstępu. Część rodziny języków XSL. Standard: W3C XSLT razem XPath 1.0 XSLT Trwają prace nad XSLT 3.0

Modelowanie hierarchicznych struktur w relacyjnych bazach danych

Model semistrukturalny

Wprowadzenie do arkuszy stylistycznych XSL i transformacji XSLT

LABORATORIUM 5 WSTĘP DO SIECI TELEINFORMATYCZNYCH WPROWADZENIE DO XML I XSLT

XML extensible Markup Language 7

Język XSLT. UEK w Krakowie Janusz Stal & Grażyna Paliwoda-Pękosz. UEK w Krakowie Janusz Stal & Grażyna Paliwoda-Pękosz

WYKŁAD 1 METAJĘZYK SGML CZĘŚĆ 1

XML extensible Markup Language 3

Bazy danych. Polecenia SQL

Wykład 5. SQL praca z tabelami 2

SQL Server i T-SQL w mgnieniu oka : opanuj język zapytań w 10 minut dziennie / Ben Forta. Gliwice, Spis treści

1 XML w bazach danych

29. Poprawność składniowa i strukturalna dokumentu XML

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

Bazy danych. Bazy danych. Podstawy języka SQL. Dr inż. Paweł Kasprowski.

XML extensible Markup Language. Paweł Chodkiewicz

2017/2018 WGGiOS AGH. LibreOffice Base

Laboratorium nr 4. Temat: SQL część II. Polecenia DML

XML Path Language (XPath)

Służy do wybierania/wyszukiwania fragmentów dokumentu XML. Przypomina trochę ścieżki w systemie operacyjnym. Niech będzie dany dokument XML:

Plan prezentacji. Krótko o XML Arkusze stylów XSLT XSL XSL Path Przegląd konstrukcji języka i przykłady Narzędzia Podsumowanie Literatura

Extensible Markup Language (XML) Wrocław, Java - technologie zaawansowane

Bazy danych dokumentów XML wykład 3 modyfikacja dokumentów

Projektowanie systemów baz danych

Ref. 7 - Język SQL - polecenia DDL i DML

XQuery. sobota, 17 grudnia 11

Oracle PL/SQL. Paweł Rajba.

XML materiały dydaktyczne - Kurs Podstawowy XSL - wprowadzenie. XSL warstwa przekształcania (XSLT) oraz prezentacji informacji (XSL FO).

Relacyjne bazy danych a XML

SQL - Structured Query Language -strukturalny język zapytań SQL SQL SQL SQL

Przetwarzanie dokumentów XML za pomocą XSLT ( r.)

77. Modelowanie bazy danych rodzaje połączeń relacyjnych, pojęcie klucza obcego.

Przetwarzanie dokumentów XML i zaawansowane techniki WWW Przetwarzanie dokumentów XML za pomocą procesora XSLT (Zajęcia r.

DECLARE VARIABLE zmienna1 typ danych; BEGIN

Oracle11g: Wprowadzenie do SQL

KOLEKCJE - to typy masowe,zawierające pewną liczbę jednorodnych elementów

15. Funkcje i procedury składowane PL/SQL

Przykłady najlepiej wykonywać od razu na bazie i eksperymentować z nimi.

Generowanie dokumentów XML z tabel relacyjnych - funkcje SQLX

Bazy danych. Dr inż. Paweł Kasprowski

Oracle PL/SQL. Paweł Rajba.

Plan. Formularz i jego typy. Tworzenie formularza. Co to jest formularz? Typy formularzy Tworzenie prostego formularza Budowa prostego formularza

Bazy danych i strony WWW

Przestrzenne bazy danych Podstawy języka SQL

Intro. I.Wojnicki, ZTB:XML ZTB: XML. Igor Wojnicki. Katedra Informatyki Stosowanej, Akademia Górniczo-Hutnicza w Krakowie.

Po zakończeniu rozważań na temat World Wide Web, poznaniu zasad organizacji witryn WWW, przeczytaniu kilkudziesięciu stron i poznaniu wielu nowych

Wykład 2. Relacyjny model danych

Oracle PL/SQL. Paweł Rajba.

Bazy danych SQL Server 2005

Podstawy języka T-SQL : Microsoft SQL Server 2016 i Azure SQL Database / Itzik Ben-Gan. Warszawa, Spis treści

SQL (ang. Structured Query Language)

Pakiety podprogramów Dynamiczny SQL

PHP: bazy danych, SQL, AJAX i JSON

Plan dzisiejszego wykładu. Narzędzia informatyczne w językoznawstwie. XML - Definicja. Zalety XML

Systemy GIS Tworzenie zapytań w bazach danych

1 Podstawy c++ w pigułce.

XPath XML Path Language. XPath. XSLT część 1. XPath data model. Wyrażenia XPath. Osie (axes) Location paths

Wstęp 5 Rozdział 1. Podstawy relacyjnych baz danych 9

Cechy języka XQUERY. o na wejściu dokument lub fragment względnie kolekcja dokumentów lub fragmentów o na wyjściu dokument lub fragment.

Extensible Markup Language III

Instrukcja podwaja zarobki osób, których imiona zaczynają się P i dalsze litery alfabetu zakładamy, że takich osbób jest kilkanaście.

XPath XML Path Language. XPath. XSLT część 1. XPath data model. Wyrażenia XPath. Location paths. Osie (axes)

2 Podstawy tworzenia stron internetowych

XQuery. XQuery. Przykład. dokument XML. XQuery (XML Query Language) XQuery 1.0: An XML Query Language. W3C Recommendation

XML w bazach danych i bezpieczeństwie

Zakres tematyczny dotyczący kursu PHP i MySQL - Podstawy pracy z dynamicznymi stronami internetowymi

Dlaczego GML? Gdańsk r. Karol Stachura

Instrukcje DML INSERT, UPDATE, DELETE. COPY

Krzysztof Kadowski. PL-E3579, PL-EA0312,

Prezentacja i transformacja

T-SQL dla każdego / Alison Balter. Gliwice, cop Spis treści. O autorce 11. Dedykacja 12. Podziękowania 12. Wstęp 15

Procedury i funkcje składowane

SQL 4 Structured Query Lenguage

1. Przypisy, indeks i spisy.

Podstawy JavaScript ćwiczenia

Sprawdzenie czy połączenie przebiegło poprawnie if (mysqli_connect_errno()) { echo Błąd; Połączenie z bazą danych nie powiodło się.

Język XQuery jako narzędzie do integracji danych Oracle XML Data Synthesis

Wprowadzenie do baz danych

Blaski i cienie wyzwalaczy w relacyjnych bazach danych. Mgr inż. Andrzej Ptasznik

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

Systemy baz danych 2 laboratorium Projekt zaliczeniowy

Bazy danych. Plan wykładu. Diagramy ER. Podstawy modeli relacyjnych. Podstawy modeli relacyjnych. Podstawy modeli relacyjnych

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery

E.14 Bazy Danych cz. 18 SQL Funkcje, procedury składowane i wyzwalacze

252 Bazy danych. Praca z językiem XML

koledzy, Jan, Nowak, ul. Niecała 8/23, , Wrocław, , ,

Systemy baz danych. mgr inż. Sylwia Glińska

Składowane procedury i funkcje

Microsoft SQL Server Podstawy T-SQL

Autor: dr inż. Katarzyna Rudnik

Oracle PL/SQL. Paweł Rajba.

Podstawowe pojęcia dotyczące relacyjnych baz danych. mgr inż. Krzysztof Szałajko

Rola języka XML narzędziem

Transkrypt:

Język XML XML (extensible Markup Language, czyli rozszerzalny język znaczników) to specyfikacja dotycząca przechowywania informacji. Jest to również specyfikacja opisujaca strukturę tych informacji. XML jest językiem znaczników, jak HTML, XML nie posiada swoich własnych znaczników, można tworzyć własne znaczniki według potrzeb, tworząc nowe znaczniki, należy trzymać się specyfikacji XML-a.

Język XML XML (extensible Markup Language, czyli rozszerzalny język znaczników) to specyfikacja dotycząca przechowywania informacji. Jest to również specyfikacja opisujaca strukturę tych informacji. XML jest językiem znaczników, jak HTML, XML nie posiada swoich własnych znaczników, można tworzyć własne znaczniki według potrzeb, tworząc nowe znaczniki, należy trzymać się specyfikacji XML-a. Literatura uzupełniająca: [1] K.H. Goldberg, XML. Szybki start. Wydanie II (Helion, 2014). [2] P. Walmsley, XQuery (O Reilly Media, Inc., 2007).

Przykładowy dokument XML <?xml version="1.0"?> <book> <authors> <author id="47">włodzimierz Krysicki</author> <author id="58">lech Włodarski</author> </authors> <title>analiza matematyczna w zadaniach</title> <price>69.00</price> <keywords> <keyword>pochodna</keyword> <keyword>całka</keyword> </keywords> </book>

Przykładowy dokument XML <?xml version="1.0"?> <book> <authors> <author id="47">włodzimierz Krysicki</author> <author id="58">lech Włodarski</author> </authors> <title>analiza matematyczna w zadaniach</title> <price>69.00</price> <keywords> <keyword>pochodna</keyword> <keyword>całka</keyword> </keywords> </book>

Wady i zalety XML-a Zalety Łatwy do odczytania, zarówno dla człowieka, jak dla maszyny (zwykły tekst). Zawiera dane i jednocześnie opisuje znaczenie danych (self-documenting). Może reprezentować praktycznie dowolny rodzaj danych: hierarchie, rekordy, listy (elastyczność, uniwersalność). Sformalizowany zapis pozwala na komputerowe przetworzenie, weryfikacje dokumentów XML (well-formed). Wady Nadmiarowość informacji (powtarzające się znaczniki, zagnieżdżone elementy). Nie wszystko da się wyrazić elastycznie w postaci struktury hierarchicznej (np. albo Film->Aktor, albo Aktor->Film)

Zastosowanie XML-a Elektroniczna wymiana danych Usługi e-biznesu: transakcje zakodowane w postaci XML-a (XML jako podstawa Web Serwisów), wiele formatów pochodnych. Komunikacja w sferze publicznej (np. podatnik urząd podatkowy, systemy celne, NFZ - świadczeniodawcy, itp.). Do zapisu informacji o luźnej strukturze, trudnej do jednoznacznego opisana w momencie projektowania, np. formularze WWW, wymagające częstych zmian. Format przechowywania dokumentów.

Zasady pisania dokumentów XML Reguły, aby dokument XML był poprawny składniowo: 1. element główny jest wymagany; zawsze musi być dokładnie jeden element główny; wszystkie pozostałe elementy dokumentu są zawarte w elemencie głównym; przed elementem głównym dopuszczalne są komentarze i instrukcje przetwarzania; 2. znaczniki zamykajace są niezbędne; każdy element musi mieć znacznik zamykający; 3. elementy muszą być odpowiednio zagnieżdżone; 4. wielkość liter ma znaczenie; 5. wartość atrybutu musi być zamykana w dwóch takich samych znakach pojedynczego lub podwójnego cudzysłowu.

Zasady tworzenia dokumentów XML Elementy składowe XML-a to znaczniki określające elementy, wartości tych elementów oraz atrybuty. Element XML to podstawowa jednostka dokumentu. Może zawierać: tekst, atrybuty, inne znaczniki. Każdy element ma znacznik otwierający: <nazwa_elementu> oraz znacznik zamykający: </nazwa_elementu>. Pusty element może składać się z pojedynczego znacznika otwierającego i zamykającego, np. <obrazek plik="mapa.jpg"/> Atrybuty elementu umieszczane są w obrębie znacznika otwierającego, w postaci par nazwa-wartość, np. <wysokosc jednostka="metr">33</wysokosc>. Opisują zawartość i przeznaczenie elementu. Informacje zawarte w atrybutach to metadane. Element może mieć wiele atrybutów, ich nazwy muszą być unikalne

Zasady tworzenia dokumentów XML Dokument XML powinien rozpoczynać się deklaracją, która wskazuje zastosowaną wersję XML-a. Przykładowa deklaracja XML: <?xml version="1.0"?> Deklarację umieszczamy na początku, przed wszystkimi innymi elementami. Znaczniki rozpoczynające się od <? i kończące się?> to instrukcje przetwarzania. Służą do deklarowania wersji XML, określania kodowania znaków, arkuszy stylów.

Zasady tworzenia dokumentów XML Dokument XML powinien rozpoczynać się deklaracją, która wskazuje zastosowaną wersję XML-a. Przykładowa deklaracja XML: <?xml version="1.0"?> Deklarację umieszczamy na początku, przed wszystkimi innymi elementami. Znaczniki rozpoczynające się od <? i kończące się?> to instrukcje przetwarzania. Służą do deklarowania wersji XML, określania kodowania znaków, arkuszy stylów. Komentarze XML: warto opisywać dokumenty XML, aby określić co oznacza dany element. Komentarz zaczyna się za pomocą <!, a kończy >. Nie wolno zagnieżdżać komentarzy, ani używać znaku wewnątrz komentarza.

Przykładowy dokument XML <?xml version="1.0"?> <book> <authors> <author id="47">włodzimierz Krysicki</author> <author id="58">lech Włodarski</author> </authors> <title>analiza matematyczna w zadaniach</title> <! cena ksiażki na podstawie platformy Ceneo > <price>69.00</price> <keywords> <keyword>pochodna</keyword> <keyword>całka</keyword> </keywords> </book>

Predefiniowane encje XML-a: pięć znaków specjalnych Predefiniowane encje XML-a: & tworzy znak & < tworzy znak < > tworzy znak > " tworzy znak &apos; tworzy znak

Przekształcanie dokumentów XML za pomoca XSLT 2.0 Język XSLT służy do przekształcanie dokumentów XML na inny format, np. HTML. Przekształcanie dokumentu XML polega na zastosowaniu XSLT do analizy jego zawartości, a następnie podjęcie konkretnych działań w zależności od tego, jakie elementy zostaną znalezione. XSLT można użyć także do zmiany kolejności danych wynikowych na podstawie pewnych kryteriów, do wyświetlenia tylko określonych fragmentów informacji. W procesie przekształcania biorą udział dwa dokumenty: źródłowy dokument XML oraz arkusz stylów XSLT opisujący reguły przekształcania. Arkusze stylów to pliki tekstowe, zapisywane są z rozszerzeniem.xsl. Każdy arkusz stylów też jest plikiem XML. Do wykonania przekształcenia potrzebujemy: procesora XSLT lub przeglądarki, obsługującej XSLT (większość ma wbudowaną obsługę).

1. Powiązanie dokumentu XML z arkuszem stylów XSLT 2.0: dodajemy instrukcję (po deklaracji xml): <?xml-stylesheet type="text/xsl" href="booksstyl.xsl"?>

1. Powiązanie dokumentu XML z arkuszem stylów XSLT 2.0: dodajemy instrukcję (po deklaracji xml): <?xml-stylesheet type="text/xsl" href="booksstyl.xsl"?> 2. Przeglądarka (lub procesor XSLT) następnie wykona transformację pliku XML, zanim zostanie on wyświetlony. Pierwszy etap: konwersja dokumentu XML do drzewa węzłów, które jest hierarchiczną reprezentacją. Każdy węzeł odpowiada jednemu z elementów dokumentu XML, atrybutowi lub zawartości tekstowej. 3. Kolejny etap to odwołanie się do arkusza stylów XSLT w celu znalezienia instrukcji, określających sposób wyświetlania węzłów. Instrukcje te są zawarte w tzw. szablonach, które składają się z etykiety, która identyfikuje węzły, do których ma zastosowanie dany szablon i z instrukcji określających, jak te węzły mają być przekształcone.

Dokument XML i jego drzewo węzłów <?xml version="1.0"?> <books> <book> <authors> <author id="47">włodzimierz Krysicki</author> <author id="58">lech Włodarski</author> </authors> <title>analiza matematyczna w zadaniach</title> <price>69.00</price> <keywords> <keyword>pochodna</keyword> <keyword>całka</keyword> </keywords> </book> </books>

Dokument XML i jego drzewo węzłów!"" #$% #% # #

Inicjowanie arkusza stylów XSLT: deklarujemy, że to dokument XML: <?xml version="1.0"?> następnie deklarujemy przestrzeń nazw XSLT i jej prefiks oraz wersję XSLT <xsl:stylesheet xmlns:xsl="http://www.w3.org/ 1999/XSL/Transform" version="2.0"> określamy typ pliku wynikowego (html): <xsl:output method="html"/> tworzymy szablon główny: <xsl:template match="/"> w szablonie głównym określamy poszczególne elementy dokumentu HTML Zamykamy szablon główny: </xsl:template> i kończymy arkusz stylów: </xsl:stylesheet>

Tworzenie szablonu głównego: <xsl:template match="/"> Szablon główny określa reguły stosowane do węzła głównego dokumentu XML. Opisuje sposób przetwarzania zawartości z węzła głównego w nowe dane wynikowe. Aby utworzyć plik wyjściowy w formacie html, należy zastosować instrukcję: <xsl:output method="html"/> W obrębie szablonu głównego należy teraz określić poszczególne elementy dokumentu HTML (head, title, body, itp.). Wszystko w obrębie szablonu głównego, co nie jest instrukcją XSLT (czyli elementy literalne), będzie wyświetlane w takiej formie, w jakiej zostało zapisane. W ten sposób można dodać znaczniki i tekst html do pliku wynikowego.

Wyświetlanie wartości węzła Aby wyświetlić wartość węzła XML, używamy instrukcji <xsl:value-of>: <xsl:value-of select="wyrażenie"/> Wyrażenie XPath identyfikuje zbiór węzłów, który ma być wyświetlany. Uwagi instrukcja select="." służy do wybrania bieżącego węzła. Jeżeli wyrażenie select odpowiada więcej, niż jednemu węzłowi, wyświetlana jest zawartość pierwszego węzła. Można zwrócić tylko te węzły, dla których określony atrybut ma daną wartość, np.: select="books/book[@language= polski ]" Jeżeli wyrażenie select odpowiada węzłowi, który posiada węzły potomne, ich zawartość też jest wyświetlana. Jeżeli odpowiada pustemu zbiorowi węzłów - nic nie jest wyświetlane.

Zapętlanie węzłów Element xsl:for-each pozwala działać na wszystkich węzłach, do których pasuje. Aby przetwarzać węzły partiami, należy: w obrębie reguły szablony wpisujemy <xsl:for-each select="wyrażenie"> podajemy reguły przetwarzania węzłów, które mają być przetworzone (identyfikuje je wyrażenie XPath) kończymy instrukcję znacznikiem </xsl:for-each> Uwagi znacznik xsl:for-each powinno się umieszczać przed regułami, które mają być powtarzane dla każdego znalezionego węzła jeżeli chcemy umieścić zawartość węzłów w tabeli, znacznik <table> otwierający tabelę powinien być przed instrukcją <xsl:for-each>, a znacznik zamykający tabelę po niej.

Język XPath XPath jest językiem służącym do wybierania węzłów i zbioru węzłów poprzez określanie ścieżek ich lokalizacji w dokumencie XML. XPath można też użyć do dalszego przetworzenia zbioru zwróconych węzłów, za pomocą wbudowanych funkcji do obliczeń matematycznych, przetwarzania ciągów znaków i testowania warunków w dokumencie XML. U podstaw języka XPath leży możliwość stosowania ścieżek lokalizacji, w celu odwołania się do węzłów dokumentu XML (węzeł to każdy indywidualny fragment dokumentu XML: element, atrybut, zawartość tekstowa). XPath widzi dokument XML w postaci drzewa węzłów.

Dokument XML i jego drzewo węzłów <?xml version="1.0"?> <books> <book> <authors> <author id="47">włodzimierz Krysicki</author> <author id="58">lech Włodarski</author> </authors> <title>analiza matematyczna w zadaniach</title> <price>69.00</price> <keywords> <keyword>pochodna</keyword> <keyword>całka</keyword> </keywords> </book> </books>

Dokument XML i jego drzewo węzłów!"" #$% #% # #

Ścieżki lokalizacji Dwa rodzaje ścieżek lokalizacji: względna ścieżka: składa się z sekwencji kroków lokalizacji, rozdzielonych znakiem /. Każdy krok określa węzeł (lub zbiór węzłów) wzgl. węzła bieżącego. W kolejnym kroku każdy węzeł w tym zbiorze jest użyty w roli węzła bieżącego dla kolejnego kroku; bezwględna ścieżka: zaczyna się od znaku /, po którym może następować względna ścieżka lokalizacji. Znak / określa węzeł główny. Węzeł bieżący to element lub węzeł, który jest aktualnie przetwarzany.

Wyrażenia XPath Wybieranie dzieci danego węzła: jeżeli bieżący węzeł zawiera elementy, które chcemy znaleźć, należy podać nazwę elementu - dziecka, aby odwołać się do dalszych potomków, należy użyć znaku / i podać nazwę dalszego potomka, itp. Znak * określa wszystkie dzieci bieżącego węzła, np. /book/authors/author /book/title Wybieranie rodzica danego węzła: za pomocą.. Można potem odwołać się do innych dzieci węzła, będącego tym rodzicem, np.../title spowoduje wybranie węzła - dziecka (o nazwie title) dla węzła będącego rodzicem węzła bieżącego;../* to wybranie wszystkich elementów-dzieci rodzica węzła bieżącego. Wybieranie atrybutów węzła: stosujemy znak @. Wpisz ścieżkę lokalizacji dla danego węzła, następnie /@nazwa atrybutu, np. /book/authors/author[@id=100]

Wyrażenia XPath Wybieranie wszystkich potomków: skrót // Aby wybrać wszystkich potomków węzła głównego użyj // Aby wybrać pewnych potomków danego węzła użyj ścieżka lokalizacji do węzła//nazwa elementu, który nas interesuje. Aby wybrać wszystkie węzły o danej nazwie, bez względu na ich położenie w dokumencie XML, użyj //nazwa elementu. Warunkowe wybieranie węzłów: w XPath można tworzyć wyrażenia logiczne (tzw. predykaty), do testowania warunków, na podstawie których można wybrac tylko pewien podzbiór ze znalezionego zbioru węzłów. Podajemy je w nawiasach kwadratowych, np. /book/authors/author[@id=200] Wybranie tylko wartości tekstowej elementu: funkcja text(), np. /book/authors/author/text()

Język XQuery Język XQuery 1.0 jest wykorzystywany do selekcji zawartości z danych źródłowych XML, przekształcania jej wg określonych reguł, a następnie zwracania w postaci np. pliku XML, HTML lub innej. XQuery stosuje składnię języka XPath 2.0 do wybierania zawartości źródłowej XML i modyfikacji tej zawartości w razie potrzeby.

Wyrażenia FLWOR Wyrażenie FLWOR zawiera następujące klauzule (od początkowych liter klauzul powstała nazwa wyrażenia:) F: for (dokonuje iteracji wiążąc zmienną z elementem) L: let (wiąże zmienną z sekwencją) W: where (eliminuje elementy do iteracji) O: order by (porządkuje elementy do iteracji) R: return (buduje wynik zapytania) xquery for $cust in db2-fn:xmlcolumn("customer.info")/customerinfo let $tel :=$cust/phone where $tel/@type= work order by $cust return ($cust/name/text(), $tel);

XML w relacyjnych bazach danych Model XML jest modelem hierarchicznym, natomiast dane relacyjne mają płaską strukturę. Dane XML opisują swoje znaczenie, a dane relacyjne nie. Dane XML mają określoną kolejność, a dane relacyjne nie. Konwersja z formatu XML na relacyjny jest kłopotliwa, w drugą stronę nieco łatwiejsza.

XML w relacyjnych bazach danych Dane XML można przechowywać w relacyjnej bazie danych na kilka sposobów: całe dokumenty XML, jako duże obiekty (CLOB / BLOB) - duża elastyczność w przechowywaniu dokumentów XML o różnej strukturze, kosztem wydajności zapytań. Szybkie wstawianie oraz pobieranie całych dokumentów Swoboda definiowania struktury dokumentu (schematu) Koniecznosc parsowania dokumentu w momencie realizowania zapytan przy odwołaniu do elementów nie poindeksowanych (niska wydajność zapytań) rozbite na kilka tabel bazy (mimo stosunkowo dobrej wydajnosci wyszukiwania, tracimy to co motywuje do korzystania z formatu XML elastyczność). Stosunkowo szybkie wyszukiwanie, nawet mimo konwersji XQuery na SQL Konieczność definiowania struktury (schematu) dokumentu przed wstawieniem - problem ze zmianą schematu

XML w DB2: Technologia PureXML Dokument jest wstawiany do pola o typie XML, w tle wezły dokumentu są dekomponowane do hierarchicznej postaci (do drzewa węzłów). Duża elastyczność, brak wymogu wcześniejszego definiowania schematu Szybkie wyszukiwanie, bez koniecznosci dynamicznego parsowania Spowolnione przy wstawianiu dokumentu. Hybrydowa architektura serwera DB2 pozwala zachować elastyczność formatu XML przy zachowaniu odpowiedniej wydajności.

XML w DB2 Dostęp do danych XML: języki SQL/XML oraz XQuery. Obsługa XML wbudowana w DB2: Wysoka wydajność dzięki głębokiej integracji XML w silnik DB2. Zoptymalizowane przechowywanie XML: Nowy sposób składowania oraz indeksowania dokumentów XML silnik hierarchiczny.

Zapytania na danych XML Istnieją dwa sposoby konstruowania zapytań XML w DB2: (1) przy użyciu XQuery: XQuery jako język podstawowy. (2) Przy użyciu SQL z rozszerzeniami XML (SQL/XML): SQL jako język podstawowy, umożliwia złączenie danych XML z relacyjnymi.

Odpytywanie danych XML za pomoca XQuery XQuery jest użyty jako język podstawowy, można używać SQL osadzonego wewnątrz XQuery (za pomocą funkcji db2-fn: sqlquery lub db2-fn:xmlcolumn).

Odpytywanie danych XML za pomoca XQuery XQuery jest użyty jako język podstawowy, można używać SQL osadzonego wewnątrz XQuery (za pomocą funkcji db2-fn: sqlquery lub db2-fn:xmlcolumn). Przykład: xquery db2-fn:xmlcolumn("customer.info"); Wyrażenia XQuery zawsze poprzedzamy prefiksem xquery, aby DB2 wiedział, że należy użyć parsera XQuery.

Odpytywanie danych XML za pomoca XQuery XQuery jest użyty jako język podstawowy, można używać SQL osadzonego wewnątrz XQuery (za pomocą funkcji db2-fn: sqlquery lub db2-fn:xmlcolumn). Przykład: xquery db2-fn:xmlcolumn("customer.info"); Wyrażenia XQuery zawsze poprzedzamy prefiksem xquery, aby DB2 wiedział, że należy użyć parsera XQuery. Funkcja db2-fn:xmlcolumn: zwraca dokumenty XML z kolumny podanej w parametrze. Powyższe zapytanie odpowiada wyrażeniu SQL: SELECT contact FROM clients

Odpytywanie danych XML za pomoca XQuery XQuery jest użyty jako język podstawowy, można używać SQL osadzonego wewnątrz XQuery (za pomocą funkcji db2-fn: sqlquery lub db2-fn:xmlcolumn). Przykład: xquery db2-fn:xmlcolumn("customer.info"); Wyrażenia XQuery zawsze poprzedzamy prefiksem xquery, aby DB2 wiedział, że należy użyć parsera XQuery. Funkcja db2-fn:xmlcolumn: zwraca dokumenty XML z kolumny podanej w parametrze. Powyższe zapytanie odpowiada wyrażeniu SQL: SELECT contact FROM clients Przy funkcji db2-fn:xmlcolumn można podać wyrażenie XPath, aby wybrać dane XML w odpowiedni sposób.

Przykładowe zapytania xquery db2-fn:xmlcolumn("customer.info")/ customerinfo/ name/text(); xquery db2-fn:xmlcolumn("customer.info")/ customerinfo[@cid >= 1001]/name; xquery db2-fn:xmlcolumn("customer.info")/ customerinfo/count(phone); xquery db2-fn:xmlcolumn("customer.info")/ customerinfo/ (<dane> {name/text(), liczba nr tel:, count(phone)}</dane>);

Odpytywanie danych XML za pomoca XQuery Przykład - użycie wyrażenia FLWOR z funkcją db2-fn:xmlcolumn: xquery for $y in db2-fn:xmlcolumn( CLIENTS.CONTACT )/Client/fax return $y

Odpytywanie danych XML za pomoca XQuery Funkcja db2-fn:sqlquery wykonuje zapytanie SQL i zwraca tylko wybrane dane XML. Zapytania SQL przekazane do db2-fn:sqlquery muszą zwracać tylko dane XML. Te dane XML mogą być następnie przetwarzane przez XQuery.

Odpytywanie danych XML za pomoca XQuery Funkcja db2-fn:sqlquery wykonuje zapytanie SQL i zwraca tylko wybrane dane XML. Zapytania SQL przekazane do db2-fn:sqlquery muszą zwracać tylko dane XML. Te dane XML mogą być następnie przetwarzane przez XQuery. xquery for $cust in db2-fn:sqlquery( "SELECT info FROM customer WHERE cid = 1005" )/customerinfo let $phone :=$cust/phone return (<info> {$cust/name/text(), $phone} </info>);

Odpytywanie danych XML za pomoca SQL/XML Zapytanie SQL może być wykorzystane do pracy z całymi dokumentami XML, ale nie pozwala na dostęp jedynie do wybranych fragmentów dokumentu. W takiej sytuacji można wykorzystać rozszerzenie SQL - SQL/XML.

Odpytywanie danych XML za pomoca SQL/XML Zapytanie SQL może być wykorzystane do pracy z całymi dokumentami XML, ale nie pozwala na dostęp jedynie do wybranych fragmentów dokumentu. W takiej sytuacji można wykorzystać rozszerzenie SQL - SQL/XML. Podstawowe funkcje SQL/XML (zgodnie ze standardem SQL 2006): Nazwa funkcji Opis XMLPARSE Analizuje ciąg znaków lub obiekt binarny zwraca dokument XML XMLSERIALIZE Tłumaczy dokument XML na ciąg znaków lub obiekt binarny XMLVALIDATE Waliduje dokument XML według schematu XMLEXISTS Określa, czy polecenie XQuery zwraca wynik XMLQUERY Wykonuje polecenie XQuery XMLTABLE Wykonuje polecenie XQuery zwraca wynik w postaci tabeli relacyjnej XMLCAST Rzutuje z lub na dokument XML

Funkcja XMLQUERY Funkcja XMLQUERY - umożliwia wykonanie wyrażenia XQuery z poziomu SQL; zwraca wyrażenie XML - sekwencję XML, będącą wynikiem wyrażenia XQuery dla każdego wiersza zapytania SQL; zwracana sekwencja może zawierać wiele elementów, lub być pusta.

Funkcja XMLQUERY Funkcja XMLQUERY - umożliwia wykonanie wyrażenia XQuery z poziomu SQL; zwraca wyrażenie XML - sekwencję XML, będącą wynikiem wyrażenia XQuery dla każdego wiersza zapytania SQL; zwracana sekwencja może zawierać wiele elementów, lub być pusta. Wykorzystując XMLQUERY: mamy możliwość wykonywania zapytań na danych XML; dane XML mogą być użyte w obrębie zapytania SQL; dostęp jednocześnie do danych relacyjnych i XML; dane XML zwrócone przez XQUERY można następnie wykorzystać w zapytaniu SQL, aby np. uporządkować wynik (należy je najpierw zrzutować na odpowiedni relacyjny typ danych za pomocą XMLCAST).

XMLQUERY SELECT XMLQuery( $i/customerinfo/name PASSING INFO as "i") FROM customer where CID IN (1003,1001,1004); W tym zapytaniu XQuery, zmienna $i zawiera dokument XML zapisany w tabeli customer w kolumnie INFO (typu XML). Przypisanie dokumentu do zmiennej następuje w klauzuli PASSING INFO as "i" (można związać więcej niż jedną zmienną). Wyrażenie XPath wykorzystane w funkcji wskazuje na element name w dokumencie XML.

XMLQUERY SELECT XMLQuery( $i/customerinfo/name PASSING INFO as "i") FROM customer where CID IN (1003,1001,1004); W tym zapytaniu XQuery, zmienna $i zawiera dokument XML zapisany w tabeli customer w kolumnie INFO (typu XML). Przypisanie dokumentu do zmiennej następuje w klauzuli PASSING INFO as "i" (można związać więcej niż jedną zmienną). Wyrażenie XPath wykorzystane w funkcji wskazuje na element name w dokumencie XML. Wynik: <name>kathy Smith</name> <name>robert Shoemaker</name> <name>matt Foreman</name>

W funkcji XMLQUERY można użyć także wyrażenia FLWOR XQuery, np. SELECT XMLQuery( for $c in $i/customerinfo let $p := $c/phone return ($c/name, $p) PASSING INFO as "i") as dane FROM customer where CID =1004;

W funkcji XMLQUERY można użyć także wyrażenia FLWOR XQuery, np. SELECT XMLQuery( for $c in $i/customerinfo let $p := $c/phone return ($c/name, $p) PASSING INFO as "i") as dane FROM customer where CID =1004; Wynik (tylko jeden wiersz): DANE --------------------------------------------------------------------- <name>matt Foreman</name><phone type="work">905-555-4789</phone> <phone type="home">416-555-3376</phone>

Funkcja XMLTable Funkcję XMLTable można wykorzystać, jeżeli chcemy prezentować dane XML w postaci tabeli, np. select c.cid, cinfo.name,cinfo.city, cinfo.phone, cinfo.type from customer c, xmltable( $cust/customerinfo passing c.info as "cust" columns name char(30) path name, city char(12) path addr/city, phone char(12) path phone[1], type char(6) path phone[1]/@type ) cinfo;

Wynik poprzedniego zapytania: CID NAME CITY PHONE TYPE --- --------------- -------- -------- ---- 1000 Kathy Smith Toronto 416-555-1358 work 1001 Kathy Smith Markham 905-555-7258 work 1002 Jim Noodle Markham 905-555-7258 work 1003 Robert Shoemaker Aurora 905-555-7258 work 1004 Matt Foreman Toronto 905-555-4789 work 1005 Larry Menard Toronto 905-555-9146 work

XMLTable z wykorzystaniem wyrażenia FOR w XPath select c.cid, cinfo.name,cinfo.city, cinfo.phone, cinfo.type from customer c, xmltable( $cust/customerinfo passing c.info as "cust" columns name char(30) path name, city char(12) path addr/city, phone char(12) path for $p in phone return $p, ) cinfo;

XMLExists Funkcja XMLExists może być wykorzystana w klauzuli WHERE zapytania SQL, aby sprawdzić, czy zapytanie XQuery zwraca wyniki, np. select cid, xmlquery( $INFO/customerinfo/name/text() ) from customer where xmlexists( $INFO/customerinfo/phone[@type="home"] );

XMLExists Funkcja XMLExists może być wykorzystana w klauzuli WHERE zapytania SQL, aby sprawdzić, czy zapytanie XQuery zwraca wyniki, np. select cid, xmlquery( $INFO/customerinfo/name/text() ) from customer where xmlexists( $INFO/customerinfo/phone[@type="home"] ); Powyższe zapytanie zwróci informacje tylko o tych klientach, którzy podali domowy numer telefonu. Uwaga. w funkcjach XMLQuery i XMLExists w przykładzie wykorzystano uproszczoną składnię.

Przykład bazy z wykorzystaniem XML Schemat bazy danych:

Przykład bazy z wykorzystaniem XML Przykładowy dokument XML z kolumny author.info

Przykład bazy z wykorzystaniem XML Przykładowy dokument XML z kolumny edition.translations

Dodawanie danych XML do tabel Dodawanie dokumentów XML do bazy danych DB2 może zostać wykonane za pomocą polecenia INSERT języka SQL, albo polecenia IMPORT. (1) Dodawanie nowego wiersza do tabeli author za pomocą INSERT (w poleceniu INSERT przekazujemy dokument XML jako ciąg znaków zawarty w cudzysłowie): INSERT INTO author VALUES (DEFAULT, Joanne Rowling, <Info> <Email>jr@jr.com</Email> <Country>England</Country> <YearOfBirth>1965</YearOfBirth> </Info> );

Dodawanie danych XML do tabel Dodawanie dokumentów XML do bazy danych DB2 może zostać wykonane za pomocą polecenia INSERT języka SQL, albo polecenia IMPORT. (2) Ładowanie (wielu) wierszy do tabeli author za pomocą polecenia IMPORT (importujemy dane z pliku authors.del (plik ASCII z separatorami), dodatkowo wskazujemy lokalizację dokumentu XML, do którego odnosi się authors.del): IMPORT FROM "C:\xml\authors.del" OF DEL XML FROM "C:\xml\xxx" METHOD P ( 1, 2 ) INSERT INTO ANIAF.AUTHOR ( NAME, INFO ); W pliku authors.del mamy zapisane dwa wiersze danych: "Joanna Chmielewska","<XDS FIL= a1.01.xml />" "Frank Herbert","<XDS FIL= a1.02.xml />" W pliku authors.del, instrukcja XDS FIL= dokumentu XML. służy do wskazania

Operacje aktualizacji i usuwania Operacje aktualizacji (UPDATE) i usuwania (DELETE) w dokumentach XML mogą być wykonane na dwa sposoby: (1) Użycie operacji SQL: UPDATE, DELETE (2) Użycie wyrażenia XQuery TRANSFORM Korzystając z pierwszego sposobu, czyli SQL UPDATE i DELETE, aktualizacja lub usunięcie dotyczy całego dokumentu. Oznacza to, że cały dokument XML zostaje usunięty lub zaktualizowany, np. update author set info= <Info> <Email>joankr@jr.com</Email> <Country>England</Country> <YearOfBirth>1965</YearOfBirth> </Info> where id=41;

Polecenie TRANSFORM Przy użyciu drugiego sposobu, można wykonywać częściową aktualizację za pomocą wyrażenia TRANSFORM (od DB2 9.5), co jest o wiele bardziej efektywne. Dzięki temu można zastąpić, wstawić, usunąć lub zmienić nazwy węzłów w dokumencie XML. Można zmienić wartość węzła bez zastępowania całego węzła, ale zwykle przy zmianach wartości lub nazwy węzła zamieniany jest cały węzeł. Wyrażenie TRANSFORM jest częścią języka XQuery. Można go używać wszędzie tam, gdzie normalnie używamy XQuery, na przykład w wyrażeniach FLWOR lub w funkcjach XMLQUERY w zapytaniach SQL/XML. Najczęściej wykorzystywane jest w instrukcji SQL UPDATE, aby zmodyfikować dokument XML w kolumnie XML.

Polecenie TRANSFORM tworzy kopię wartości XML, zmienia ją, a następnie zwraca wynik, czyli zmodyfikowaną kopię. Polecenia TRANSFORM używamy wewnątrz funkcji XMLQUERY (albo wyrażenia XQuery). Słowo kluczowe PASSING może być wykorzystane aby przekazać wartość XML z kontekstu SQL do kontekstu XML. Wynik polecenia TRANSFORM staje się wynikiem funkcji XMLQUERY. Polecenie TRANSFORM nie zmienia wartości XML, która została przekazana (za pomocą PASSING) - należy użyć instrukcji SQL UPDATE, aby umieścić zmodyfikowaną wartość w tablicy, np. UPDATE author SET info = XMLQuery( transform copy $res := $i modify do insert element Website {"www.jkr.com"} as last into $res/info return $res PASSING info AS "i") where id=41;

Polecenie TRANSFORM Polecenie transform ma trzy (wymagane) klauzule: transform copy variable assignment modify modify expression return return expression Wyrażenie copy jest używane, aby przypisać do zmiennej dokument XML, z którym chcemy pracować. W wyrażeniu modify, możemy podać wyrażenie do insert, do delete, do rename lub do replace. Wyrażenia te pozwalają nam na dokonywanie modyfikacji w naszych dokumentach XML: insert dla dodania nowego węzła, delete - usunięcia węzła, rename - zmiany nazwy elementu lub atrybutu; aby zastąpić element nowym elementem, lub ciągiem kilku nowych elementów, należy użyć wyrażenia replace. Wyrażenie replace może być użyte tylko do zmiany elementu lub atrybutu. Wyrażenie return zwraca wynik transformacji.

Dodawanie nowych węzłów Wyrażenie do insert - aby dodać nowy węzeł. Miejsce wstawienia nowego węzła jest określana na podstawie wyrażenia XPath oraz podanego słowa kluczowego określającego pozycję (before, after, as last into, as first into). UPDATE author SET info = XMLQuery( transform copy $res := $i modify do insert <Email>nowymail@hm.com</Email> before $res/info/country return $res PASSING info AS "i") where id=41;

Usuwanie węzłów Wyrażenie do delete - aby usunąć węzły. Jeżeli wyrażenie XPath podane po "do delete" zwraca więcej niż jeden węzeł, wszystkie te węzły będą usunięte, np. UPDATE author SET info = XMLQuery( transform copy $res := $i modify do delete $res/info/email return $res PASSING info AS "i") WHERE id=41; Powyższe wyrażenie usunie wszystkie węzły Email (w dokumencie XML Info dla autora o id=41).

Zmiana nazwy węzła Wyrażenie do rename - aby zmienić nazwę węzła, nie zmieniając jego pozycji ani wartości, np. chcemy dla każdego autora zmienić w dokumencie Info węzeł Country na BirthCountry: UPDATE author SET info = XMLQUERY( transform copy $res := $i modify do rename $res/info/country as "BirthCountry" return $res PASSING info AS "i") Wyrażenie XPath podane po "do rename" musi zwracać dokładnie jeden węzeł, w przeciwnym przypadku dostaniemy błąd.

Zmiana nazwy węzła Jeżeli wyrażenie XPath podane po "do rename" zwraca wiele węzłów, można wykorzystać FLOWR, by zmienić nazwy wszystkich pasujących elementów, np. aby zmienić nazwę każdego węzła Translation (których może być zero lub kilka) na Version w dokumencie translations (w tabeli edition): UPDATE edition SET translations = XMLQUERY( transform copy $res := $trans modify for $t in $res//translation return do rename $t as "Version" return $res PASSING translations AS "trans")

Zmiana nazwy atrybutu Wyrażenie do rename - aby zmienić nazwę atrybutu. Dodajmy do węzła Info nowy węzeł NewEmail z atrybutem Type, z kopią wartości z węzła Email (ale tylko dla autora z id=41): UPDATE author SET info = XMLQuery( transform copy $res := $i modify do insert <NewEmail Type="work"> {$res/info/email/text()} </NewEmail> after $res/info/email return $res PASSING info AS "i") where id=41; Zmiana nazwy atrybutu Type na status: UPDATE author SET info = XMLQUERY( transform copy $res := $i modify do rename $res/info/newemail/@type as "status" return $res PASSING info AS "i") where id=41;

Zamiana węzła Wyrażenie do replace - może być użyte, aby zamienić węzeł na inny. Wyrażenie XPath podane w replace identyfikuje węzeł (musi wskazywać dokładnie jeden węzeł) i następnie zamienia go na węzeł (albo sekwencję węzłów). Np. zamiana węzła Email na węzeł Skype (dla autora z id=41): UPDATE author SET info = XMLQUERY( transform copy $res := $info modify do replace $res//email with element Skype {"j.k.rowling.author"} return $res PASSING info AS "info") WHERE id=41;

Zamiana węzła Wyrażenie do replace - może być użyte, aby zamienić węzeł na inny. Wyrażenie XPath podane w replace identyfikuje węzeł (musi wskazywać dokładnie jeden węzeł) i następnie zamienia go na węzeł (albo sekwencję węzłów). Np. zamiana węzła Email na sekwencję (dla autora z id=41): UPDATE author SET info = XMLQUERY( transform copy $res := $info modify do replace $res//email with (element Skype {"carl.sagan.author"}, element Phone {"1234"}) return $res PASSING info AS "info") WHERE id=41;

Zamiana wartości węzła Wyrażenie do replace - może być też użyte, aby zamienić wartość węzła (elementu lub atrybutu). Należy użyć polecenia do replace value of. Np. aby zmienić datę urodzenia, czyli wartość węzła YearOfBirth autora o id=41, można użyc polecenia: UPDATE author SET info = XMLQUERY( transform copy $res := $i modify do replace value of $res/info/yearofbirth with 1914 return $res PASSING info AS "i") WHERE id=41;