Wyk ł ad 5 XML w obiektowo-relacyjnej bazie danych

52
SZB, L.Banachowski Wykład 5 XML w obiektowo-relacyjnej bazie danych

description

Wyk ł ad 5 XML w obiektowo-relacyjnej bazie danych. Zastosowanie dokumentów XML. Zamieszcz a nie metadanych w dokumencie tekstowym . Oddzielenie prezentacji od struktury dokumentu , przez co umożliwienie różnych prezentacji tego samego dokumentu.   - PowerPoint PPT Presentation

Transcript of Wyk ł ad 5 XML w obiektowo-relacyjnej bazie danych

Page 1: Wyk ł ad 5 XML w obiektowo-relacyjnej bazie danych

1SZB, L.Banachowski

Wykład 5

XML w obiektowo-relacyjnej bazie danych

Page 2: Wyk ł ad 5 XML w obiektowo-relacyjnej bazie danych

2SZB, L.Banachowski

Zastosowanie dokumentów XML

1. Zamieszczanie metadanych w dokumencie tekstowym.

2. Oddzielenie prezentacji od struktury dokumentu, przez co umożliwienie różnych prezentacji tego samego dokumentu.  

3. Ułatwienie wymiany danych biznesowych między aplikacjami. Integracja danych pochodzących z różnych baz danych i aplikacji.

Page 3: Wyk ł ad 5 XML w obiektowo-relacyjnej bazie danych

3SZB, L.Banachowski

Od dokumentów tekstowych do oznakowanych dokumentów – dokumentów XML

• Do każdego dokumentu tekstowego można dodać

oznakowanie w celu wprowadzenia dodatkowych

informacji takich jak autor, słowa kluczowe, powiązania

z innymi dokumentami bądź w celu odzwierciedlenia

jego wewnętrznej struktury.

• Internet zmienił pojęcie dokumentu – teraz to pojęcie

obejmuje również obrazy, klipy video – tekst często

pojawia się tylko w deskryptywnych znacznikach.

Page 4: Wyk ł ad 5 XML w obiektowo-relacyjnej bazie danych

4SZB, L.Banachowski

Dostosowywanie prezentacji danych

• Poprzez rozdzielenie danych od ich prezentacji –

koncentracja uwagi w aplikacjach biznesowych jest na

operacjach biznesowych abstrahując od urządzeń, jakie

zostaną użyte teraz lub w przyszłości do wyświetlenia

danych.

• Prezentację danych dokumentu można zmienić

poprzez zmianę towarzyszącego dokumentowi arkusza

stylów – bez konieczności modyfikowania logiki

biznesowej czy reprezentacji danych w bazie danych.

Page 5: Wyk ł ad 5 XML w obiektowo-relacyjnej bazie danych

5SZB, L.Banachowski

Ułatwienie wymiany danych biznesowych między aplikacjami.

Integracja informacji.

• Łatwiej jest wymienić dane między aplikacjami –

wystarczy skupić się na danych i ich strukturze

abstrahując od konkretnych protokołów sieciowych i

komunikacyjnych, bez konieczności interpretowania

wewnętrznych i wzajemnie niezgodnych formatów

przesyłania danych w sieci.

Page 6: Wyk ł ad 5 XML w obiektowo-relacyjnej bazie danych

6SZB, L.Banachowski

Problem integracji informacji

• Powiązane dane istnieją w różnych miejscach i może zaistnieć

potrzeba jednoczesnego ich użycia przez jedną aplikację.

• Ale bazy danych mogą się różnić:

modelem (np. relacyjny, obiektowo-relacyjny, pliki MS Excel),

schematem (np. znormalizowany, nieznormalizowany),

terminologią (np. czy konsultanci firmy są pracownikami, czy

emerytowani pracownicy są pracownikami),

konwencjami (np. stopnie Celsjusza lub Fahrenheita).

Page 7: Wyk ł ad 5 XML w obiektowo-relacyjnej bazie danych

7SZB, L.Banachowski

Przykład HTML: Lista publikacji

<HTML> <BODY> Fikcja: <UL><LI>Autor: Milan Kundera</LI> <LI>Tytuł: Identity</LI> <LI>Rok: 1998</LI> </UL> Nauka: <UL><LI>Autor: Richard Feynman</LI> <LI>Tytuł: The Character of Physical Law</LI> <LI>Twarda okładka</LI> </UL> </BODY></HTML>

Page 8: Wyk ł ad 5 XML w obiektowo-relacyjnej bazie danych

8SZB, L.Banachowski

Rodzielenie danych od ich prezentacji: XML i XSL

Rozszerzalny język znaczników (Extensible

Markup Language) XML - opisuje

semistrukturalne dane.

Rozszerzalny język arkuszy stylów (Extensible

Stylesheet Language) XSL - prezentacja danych

poprzez użycie arkuszy stylów.

Page 9: Wyk ł ad 5 XML w obiektowo-relacyjnej bazie danych

9SZB, L.Banachowski

Przykład XML: Lista publikacji

<LISTA>  <PUBLIKACJA>    <AUTOR>      <IMIĘ>Milan</IMIĘ ><NAZWISKO>Kundera</NAZWISKO>    </AUTOR>    <TYTUŁ>Identity</TYTUŁ>    <ROK>1998</ROK>   </PUBLIKACJA>   <PUBLIKACJA>    <AUTOR>       <IMIĘ>Richard</IMIĘ><NAZWISKO>Feynman</NAZWISKO>    </AUTOR>    <TYTUŁ>The Character of Physical Law</TYTUŁ>    <FORMAT>Twardy</FORMAT>  </PUBLIKACJA>

</LISTA>

Page 10: Wyk ł ad 5 XML w obiektowo-relacyjnej bazie danych

10SZB, L.Banachowski

Widok w postaci drzewa

Milan Kundera

Identity 1998

PUBLIKACJA

AUTOR TYTUŁ ROK AUTOR FORMATTYTUŁ

Richard Feynman

The characterof phy-sical law

Hard-cover

PUBLIKACJA

PUBLIKACJA

LISTA

IMIĘ NAZWISKOIMIĘ NAZWISKO

Page 11: Wyk ł ad 5 XML w obiektowo-relacyjnej bazie danych

11SZB, L.Banachowski

Modelowanie powiązań między obiektami w ramach jednego dokumentu XML

• Model danych XML umożliwia powiązania między obiektami. Na

przykład: jedna publikacja ma wielu autorów; jeden autor jest

autorem wielu publikacji.

• Typ danych ID pozwala wprowadzić identyfikatory dla obiektów.

Typy danych IDREF i IDREFS pozwalają korzystać ze wskaźników

do obiektów. IDREF oznacza pojedynczy wskaźnik; IDREFS

oznacza listę wskaźników.

• Ta cecha pozwala definiować semistrukturalne dane w postaci

dowolnego grafu nie tylko drzewa.

Page 12: Wyk ł ad 5 XML w obiektowo-relacyjnej bazie danych

12SZB, L.Banachowski

Przykład: publikacje i autorzy<LISTA>      <AUTOR Id_autora="LB" Lista_pub="BD1,BD2,BD3">      <IMIĘ>Lech</IMIĘ ><NAZWISKO>Banachowski</NAZWISKO> </AUTOR> <AUTOR Id_autora="KS" Lista_pub="BD1,BD2,SO">      <IMIĘ>Krzysztof</IMIĘ ><NAZWISKO> Stencel</NAZWISKO> </AUTOR>

<PUBLIKACJA Id_publikacji="BD1" Lista_autor="LB, KS"> <TYTUŁ>Bazy danych Projektowanie aplikacji</TYTUŁ>    <ROK>2001</ROK> </PUBLIKACJA>   <PUBLIKACJA Id_publikacji="BD2" Lista_autor="LB,KS,AC,EM,KM">        <TYTUŁ>Bazy danych Wykłady i ćwiczenia</TYTUŁ>    <FORMAT>Twardy</FORMAT>  </PUBLIKACJA>........ </LISTA>

Page 13: Wyk ł ad 5 XML w obiektowo-relacyjnej bazie danych

13SZB, L.Banachowski

ID, IDEREF i IDEREFS

• Wartością atrybutu ID musi być nazwa. Wszystkie wartości ID w

dokumencie muszą być różne. Wartości ID jednoznacznie określają

poszczególne elementy w dokumencie. Element może mieć tylko

jeden atrybut typu ID.

• Wartością atrybutu IDREF musi być nazwa występująca jako

wartość atrybutu ID w ramach dokumentu.

• Wartością atrybutu IDREFS musi być lista nazw występujących

jako wartości atrybutów ID w ramach dokumentu.

Page 14: Wyk ł ad 5 XML w obiektowo-relacyjnej bazie danych

14SZB, L.Banachowski

Metody reprezentowania dokumentów

• Dokumenty tekstowe mogą być w bazie danych

reprezentowane za pomocą nowego obiektowego typu

danych – TextType lub XMLType, którego wartości

mogą się pojawić jako wartości kolumny w tabeli.

• Może być zastosowana struktura CLOB.

• Dokumenty XML o ustalonym schemacie mogą być

reprezentowane przez zbiór zwykłych tabel relacyjnych.

Page 15: Wyk ł ad 5 XML w obiektowo-relacyjnej bazie danych

15SZB, L.Banachowski

XQuery

• Język zapytań dla dokumentów XML - XQuery jest

standardem rekomendowanym przez organizację W3C.

• Niezależnie inna organizacja zajmująca się standardem

języka SQL opracowała wersję języka SQL obejmującą

dokumenty XML – SQL/XML. (http://sqlx.org).

Rekomendowany przez W3C od 23.01.2007

Page 16: Wyk ł ad 5 XML w obiektowo-relacyjnej bazie danych

16SZB, L.Banachowski

XQuery: zapytania na dokumentach XML

Cel: deklaratywny język wysokiego poziomu umożliwiający przetwarzanie dokumentów XML.

XQuery – zapytania dotyczące danych w dokumentach XML, tłumaczenia danych XML przy integracji danych pochodzących z różnych źródeł.

Obejmuje wyrażenia XPath wyznaczające elementy w dokumencie XML.

Page 17: Wyk ł ad 5 XML w obiektowo-relacyjnej bazie danych

17SZB, L.Banachowski

Użycie wyrażeń XPath do wyszukiwania

XPath jest standardem W3C służącym do nawigowania

po dokumentach XML. XPath używa modelu drzewa dla

dokumentu XML. Dostarcza bogatego zbioru operacji do

poruszania się po drzewie. Umożliwia stosowanie

predykatów i funkcji w odniesieniu do węzłów. Wynikiem

zastosowania wyrażenia XPath do dokumentu XML jest

zbiór węzłów (w szczególności pusty lub

jednoelementowy).

Page 18: Wyk ł ad 5 XML w obiektowo-relacyjnej bazie danych

18SZB, L.Banachowski

Przykłady wyrażeń XPath

/BOOKLIST/BOOK wyznacza wszystkie elementy BOOK, które są następnikami głównego elementu BOOKLIST.

//AUTHOR /LASTNAME wyznacza wszystkie elementy LASTNAME, które są następnikami dowolnego elementu AUTHOR osiągalnego z głównego elementu.

W nawiasach [ ] są formułowane predykaty. Można używać spójników logicznych jak OR, AND i NOT np./BOOKLIST/BOOK[PUBLISHED=2001 OR PUBLISHED=2002]/AUTHOR/LASTNAME wyznacza wszystkie elementy LASTNAME autorów książek opublikowanych albo w 2001 albo w 2002.

Page 19: Wyk ł ad 5 XML w obiektowo-relacyjnej bazie danych

19SZB, L.Banachowski

XQuery: Zapytania na danych XML

Zapytanie– FOR

$l IN doc(www.books.com/books.xml)//AUTHOR /LASTNAME

RETURN <RESULT> $l </RESULT>– wyznacza nazwiska wszystkich autorów.

 Klauzula RETURN służy do zbudowania wyniku zapytania w postaci dokumentu XML: <RESULT><LASTNAME>Kowalski</LASTNAME></RESULT> <RESULT><LASTNAME>Borowski</LASTNAME></RESULT>

Page 20: Wyk ł ad 5 XML w obiektowo-relacyjnej bazie danych

20SZB, L.Banachowski

XQuery (c.d.)

Podstawową postacią zapytania XQuery jest wyrażenie FLWR:FOR – określa zmienną, której wartości przebiegają

zbiór elementów określony przez wyrażenie XPath,

LET – określa zmienną, której wartością jest cały zbiór elementów,

WHERE – filtr na zwracane wartości, RESULT – wynikowy dokument XML.

Page 21: Wyk ł ad 5 XML w obiektowo-relacyjnej bazie danych

21SZB, L.Banachowski

XQuery (c.d.)

LET $l IN doc(www.ourbookstore.com/books.xml)//AUTHOR/LASTNAME

RETURN <RESULT> $l </RESULT> daje wynik:

<RESULT> <LASTNAME>Kowalski</LASTNAME> <LASTNAME>Borowski</LASTNAME></RESULT>

Page 22: Wyk ł ad 5 XML w obiektowo-relacyjnej bazie danych

22SZB, L.Banachowski

XQuery (c.d.)FOR $b IN doc(www.ourbookstore.com/books.xml)/BOOKLIST/BOOK

WHERE $b/PUBLISHED=’1980’RETURN <RESULT> $b/AUTHOR/FIRSTNAME,

$b/AUTHOR/LASTNAME</RESULT>daje wynik:<RESULT><FIRSTNAME>Jan</FIRSTNAME> <LASTNAME>Kowalski</LASTNAME></RESULT> <RESULT><FIRSTNAME>Andrzej</FIRSTNAME>

<LASTNAME>Borowski</LASTNAME></RESULT>

Page 23: Wyk ł ad 5 XML w obiektowo-relacyjnej bazie danych

23SZB, L.Banachowski

XQuery (c.d.)Dla każdego roku wyznacz nazwiska autorów, którzy

opublikowali książkę w tym roku. FOR $p IN DISTINCTdoc(www.ourbookstore.com/books.xml)/BOOKLIST/BOOK/PUBLISHEDRETURN <RESULT> $p, FOR $a IN DISTINCT

/BOOKLIST/BOOK[PUBLISHED=$p]/AUTHOR/LASTNAME RETURN $a </RESULT> daje w wyniku<RESULT><PUBLISHED>1980</PUBLISHED> <LASTNAME>Kowalski</LASTNAME> <LASTNAME>Borowski</LASTNAME></RESULT> ....

Page 24: Wyk ł ad 5 XML w obiektowo-relacyjnej bazie danych

24SZB, L.Banachowski

Alternatywna reprezentacja danych XML w bazie danych

odwzorowanie elementów dokumentu XML na tabele

 BOOKLIST(id:integer)BOOK(id:integer, booklist:integer, title: string, published: string, genre: string,

format: string)AUTHOR(bookid:integer, firstname: string,

lastname: string)

Page 25: Wyk ł ad 5 XML w obiektowo-relacyjnej bazie danych

25SZB, L.Banachowski

Konwersja: XQuery -> zapytanie SQLFOR $b IN doc(www.ourbookstore.com/books.xml

)/BOOKLIST/BOOK WHERE $b/PUBLISHED=’1980’RETURN <RESULT> $b/AUTHOR/FIRSTNAME,

$b/AUTHOR/LASTNAME</RESULT>

na:

SELECT BOOK.id, AUTHOR.firstname, AUTHOR.lastname, FROM BOOK, BOOKLIST, AUTHORWHERE BOOKLIST.id = BOOK.booklistid AND

BOOK.id=AUTHOR.bookid AND BOOK.published=’1980’GROUP BY BOOK.id;

Page 26: Wyk ł ad 5 XML w obiektowo-relacyjnej bazie danych

26SZB, L.Banachowski

Prezentacja danych relacyjnych w postaci dokumentu XML <ROWSET Table="Emp"> <ROW><EMPNO>2345</EMPNO> <ENAME>SCOTT</ENAME> ... </ROW> <ROW> .... </ROW> ....</ROWSET>

Page 27: Wyk ł ad 5 XML w obiektowo-relacyjnej bazie danych

27SZB, L.Banachowski

Tekstowa baza danych

Tekstowa baza danych: zbiór dokumentów tekstowych

Ważna klasa zapytań – wyszukiwania po słowach kluczowych– Zapytania boolowskie: Składniki zapytania są

powiązane spójnikami AND, OR i NOT. Wynikiem zapytania jest lista dokumentów, które spełniają wyrażenie boolowskie np.

Database AND (Microsoft OR Oracle)– Zapytania rankingowe: Wynikiem zapytania jest lista

dokumentów, które spełniają wyrażenie boolowskie, uporządkowane według stopnia istotności danego dokumentu dla zapytania.

Page 28: Wyk ł ad 5 XML w obiektowo-relacyjnej bazie danych

28SZB, L.Banachowski

Model wektorowy

Zawiera informacje: termin j występuje k razy w dokumencie i.

docid Agent Bond Chain James Mobile movie

1 2 3 1 1 0 1

2 0 0 6 0 3 0

3 2 0 0 0 2 0

4 1 2 0 2 0 3

Page 29: Wyk ł ad 5 XML w obiektowo-relacyjnej bazie danych

29SZB, L.Banachowski

Miary istotności

Precyzja (precision) – procent zwracanych dokumentów, które są istotne dla zapytania.

Zwracalność (recall)- procent istotnych dokumentów zwracanych w odpowiedzi na zapytanie.

Zwrócenie wszystkich dokumentów gwarantuje dobrą zwracalność ale bardzo słabą precyzję. Problemem jest osiągnięcie jednocześnie dobrej zwracalności i precyzji.

Page 30: Wyk ł ad 5 XML w obiektowo-relacyjnej bazie danych

30SZB, L.Banachowski

Wyszukiwanie w tekstach - pliki odwrócone

Dla każdego terminu zapisujemy listę odwróconą identyfikatorów DID dokumentów, w których występuje ten termin.

Wyznaczenie wyniku zapytania: przecięcie lub suma list odwróconych.

Przykład: Agent AND James - przecięcie dwóch list odwróconych.

Mobile agent2

Agent James1

DokumentDID

<2>Mobile

<1>James

<1,2>Agent

Lista odwrócona

Słowo

Page 31: Wyk ł ad 5 XML w obiektowo-relacyjnej bazie danych

31SZB, L.Banachowski

Zastosowanie funkcji haszującej

h(k) – wektor bitowy dla słowa kluczowego k Niech dokument D zawiera słowa kluczowe k1,…,kn.

Sygnatura dokumentu H(D)=h(k1) OR … OR h(kn) Jeśli zapytanie dotyczy koniunkcji słów kluczowych

z1,…, zi liczymy sygnaturę zapytania: H(Z)=h(z1) OR … OR h(zi)

Szukamy wszystkich dokumentów D takich, że H(Z) AND H(D) = H(Z) (czyli H(D) zawiera H(Z)) (ograniczając się do sygnatur dokumentów) i tylko dla nich sprawdzamy czy D należy do wyników zapytania Z tj. czy wszystkie słowa kluczowe zapytania Z zawierają się w zbiorze słów kluczowych dokumentu D.

Page 32: Wyk ł ad 5 XML w obiektowo-relacyjnej bazie danych

32SZB, L.Banachowski

Oracle TextPrzeszukiwanie zbiorów dokumentów takich jak:1. strony WWW2. magazyny dokumentów3. biblioteki cyfrowe

• Najpierw indeksuje się zawartość zbioru dokumentów.• Dokumenty mogą być różnych formatów jak HTML, PDF, MS

Word. • Dokumenty są przechowywane w tabeli dokumentów. • Zapytania składają się zwykle ze słów i fraz oraz operatorów

takich jak OR i AND. • Wyniki mogą być uporządkowane względem stopnia

odpowiedniości.

Page 33: Wyk ł ad 5 XML w obiektowo-relacyjnej bazie danych

33SZB, L.Banachowski

Utworzenie tabeli z dokumentami

CREATE TABLE docs (id NUMBER PRIMARY KEY, text VARCHAR2(200));

Wstawienie dokumentów tekstowych

INSERT INTO docs VALUES(1, '<HTML>California is a state in the US.</HTML>'); INSERT INTO docs VALUES(2, '<HTML>Paris is a city in France.</HTML>'); INSERT INTO docs VALUES(3, '<HTML>France is in Europe.</HTML>');

Page 34: Wyk ł ad 5 XML w obiektowo-relacyjnej bazie danych

34SZB, L.Banachowski

Tworzenie indeksu typu CONTEXT

CREATE INDEX idx_docs ON docs(text) INDEXTYPE IS CTXSYS.CONTEXT;

Indeksuje wszystkie słowa zbioru dokumentów.Używa struktury danych list odwróconych.

Page 35: Wyk ł ad 5 XML w obiektowo-relacyjnej bazie danych

35SZB, L.Banachowski

Zapytanie rankingowe

Znajdź dokumenty zawierające słowo France:

COLUMN text FORMAT a40;

SELECT SCORE(1), id, text FROM docs WHERE CONTAINS(text, 'France', 1) > 0;

SCORE(1) ID TEXT ------------ ---- ----------------------------------------------------------- 4 3 <HTML>France is in Europe.</HTML>4 2 <HTML>Paris is a city in France.</HTML>

Page 36: Wyk ł ad 5 XML w obiektowo-relacyjnej bazie danych

36SZB, L.Banachowski

Odwołania do dwóch wyszukiwań

SELECT title, body, SCORE(1), SCORE(2) FROM news WHERE CONTAINS (news.title, 'Oracle', 1) > 0 OR CONTAINS (news.body, 'java', 2) > 0 ORDER BY SCORE(1), SCORE(2);

Page 37: Wyk ł ad 5 XML w obiektowo-relacyjnej bazie danych

37SZB, L.Banachowski

Oracle: Typ obiektowy XMLType

CREATE TABLE Kontakty(    Nazwisko VARCHAR2(50),    Karta XMLTYPE,    Data_utworzenia DATE);

lub

CREATE TABLE Obj_Kontakty OF XMLType;

Page 38: Wyk ł ad 5 XML w obiektowo-relacyjnej bazie danych

38SZB, L.Banachowski

Wstawianie do kolumn typu XMLType INSERT INTO Kontakty VALUES ('KOWALSKI',   XMLType('<KARTA>             <EMAIL>[email protected]</EMAIL>              <TEL_PRACA>33-456</TEL_PRACA>             <TEL_DOM>28-991</TEL_DOM>             <TEL_KOM>600-345</TEL_KOM>             <ADRES>                <ULICA>Wygodna 9m1</ULICA>                <MIASTO>Warszawa</MIASTO>                <KOD>02-782</KOD>             </ADRES>            </KARTA>'), Sysdate);

Page 39: Wyk ł ad 5 XML w obiektowo-relacyjnej bazie danych

39SZB, L.Banachowski

Wstawianie do kolumn typu XMLType

INSERT INTO Kontakty VALUES ('NOWAK',   XMLType(BFILENAME('XMLDIR', 'JanNowak.xml'), Sysdate);

Page 40: Wyk ł ad 5 XML w obiektowo-relacyjnej bazie danych

40SZB, L.Banachowski

Wyszukiwanie w dokumentach XML

Przy wydobywaniu danych z obiektu typu XMLType korzystamy z metod konwersji :– GetStringval(): XMLType -> VARCHAR2– GetClobval(): XMLType -> CLOB– GetNumberval: XMLType -> NUMBER

Page 41: Wyk ł ad 5 XML w obiektowo-relacyjnej bazie danych

41SZB, L.Banachowski

Wyszukiwanie w dokumentach XML

Metoda Extract z użyciem argumentu będącym wyrażeniem XPath wyznacza wszystkie elementy dokumentu XML opisane przez podaną ścieżkę.

SELECT w.Karta.Extract('/KARTA/EMAIL/text()').GetStringVal() "EMail" FROM Kontakty w;

W wyniku otrzymujemy kolumnę wartości typu VARCHAR2: EMail------------------------------Jan.Kowalski@[email protected]

Page 42: Wyk ł ad 5 XML w obiektowo-relacyjnej bazie danych

42SZB, L.Banachowski

Bez funkcji text() na końcu wyrażenia ścieżkowego: SELECT

w.Karta.Extract('/KARTA/EMAIL').GetStringVal() "EMail" FROM Kontakty w;

otrzymamy wartości typu VARCHAR2: EMail -----------------------------------------------------------<EMAIL>[email protected]</EMAIL><EMAIL>[email protected]</EMAIL>

Page 43: Wyk ł ad 5 XML w obiektowo-relacyjnej bazie danych

43SZB, L.Banachowski

Aby wziąć cały dokument XML i przesłać go jako duży dokument tekstowy typu CLOB:

SELECT w.Karta.GetClobval() as KartaKowFROM Kontakty wWHERE w.Nazwisko = 'KOWALSKI';

Page 44: Wyk ł ad 5 XML w obiektowo-relacyjnej bazie danych

44SZB, L.Banachowski

Aby sprawdzić czy w dokumencie XML występuje element <WWW> stosujemy metodę ExistsNode:

SELECT w.Nazwisko, w.Karta.ExistsNode('/KARTA/WWW') "Ma stronę WWW"FROM Kontakty wWHERE w.Karta IS NOT NULL; Wynik:

NAZWISKO Ma stronę WWW ----------------- ----------------------- KOWALSKI 0 NOWAK 1

Page 45: Wyk ł ad 5 XML w obiektowo-relacyjnej bazie danych

45SZB, L.Banachowski

Aktualizacja kolumny XMLType

UPDATE Kontakty wSET w.Karta = UpdateXML(w.Karta,'/KARTA[EMAIL="[email protected]"]/TEL_DOM/text()','9999-10')WHERE w.Nazwisko='KOWALSKI';

Page 46: Wyk ł ad 5 XML w obiektowo-relacyjnej bazie danych

46SZB, L.Banachowski

Aktualizacja kolumny XMLType

UPDATE Kontakty wSET w.Karta = UpdateXML(w.Karta,'/KARTA[EMAIL="[email protected]"]/ADRES',      XMLType('<ADRES>                <ULICA>Aksamitna 90m10</ULICA>                <MIASTO>Warszawa</MIASTO>                <KOD>12-782</KOD>             </ADRES>'))WHERE w.Nazwisko='KOWALSKI';

Page 47: Wyk ł ad 5 XML w obiektowo-relacyjnej bazie danych

47SZB, L.Banachowski

Indeksy funkcyjne na kolumnach typu XMLType

W celu przyśpieszenia wykonywania zapytania

SELECT w.Nazwisko FROM Kontakty w WHERE w.Karta.Extract('/KARTA/ADRES/MIASTO/text()').GetStringVal()= 'WARSZAWA';

indeksuje się zawartości elementu MIASTO w dokumentach XML kolumny Karta.

CREATE INDEX Miasto_index ON Kontakty w (w.Karta.Extract('/KARTA/ADRES/MIASTO/text()').GetStringVal());

Zapytanie SQL użyje tego indeksu funkcyjnego, zamiast parsować dokumenty XML wiersz po wierszu i obliczać wartości wyrażeń XPath.

Page 48: Wyk ł ad 5 XML w obiektowo-relacyjnej bazie danych

48SZB, L.Banachowski

Zastosowanie indeksu typu CONTEXT

Korzystając z Oracle Text, można utworzyć indeks typu CONTEXT na kolumnie zawierającej dane XML. Aby wyznaczyć wszystkie zamówienia zawierające słowo Pentium w elemencie DESC, możemy użyć operatora WITHIN operator as follows:SELECT p.id FROM po_tab pWHERE CONTAINS(p.doc, 'Pentium WITHIN desc') > 0;

Page 49: Wyk ł ad 5 XML w obiektowo-relacyjnej bazie danych

49SZB, L.Banachowski

XML Schema - poprawność dokumentów XML

Najpierw rejestracja definicji XML Schema:

definition = ' ......';

DBMS_XMLSCHEMA.RegisterSchema('http://myschema.pl/test.xsd', definition);

Następnie utworzenie tabeli z zapewnieniem sprawdzania poprawności przechowywanych dokumentów:

CREATE TABLE EmpTable OF XMLTypeXMLSchema "http://myschema.pl/test.xsd"ELEMENT "Emplist";

-- Tabela obiektowa EmpTable dokumentów XML

Page 50: Wyk ł ad 5 XML w obiektowo-relacyjnej bazie danych

50SZB, L.Banachowski

Konwersja: dane relacyjne -> XML

CREATE TABLE XmlEmp OF XMLType;

query := 'SELECT empno, ename, sal, dname FROM emp JOIN dept USING (deptno)';

INSERT INTO Xmlemp SELECT DBMS_XMLGEN.getxmltype(query) FROM dual;

SELECT t.OBJECT_VALUE FROM xmlemp t; -- daje:

OBJECT_VALUE---------------------------<ROWSET><ROW><EMPNO>7369</EMPNO><ENAME>SMITH</ENAME> ...</ROW><ROW> ...>/ROWSET>

Page 51: Wyk ł ad 5 XML w obiektowo-relacyjnej bazie danych

51SZB, L.Banachowski

Transformacja XSL

CREATE TABLE xslemp OF XMLType;

INSERT INTO xslemp VALUES(XMLType( '<?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="ROWSET"> <wml> <card id="init" title="Test XML->WML”> <p align="center"><small><b>Employees:</b> <table> column="2"> <tr> <td><b>Person</b></td> <td><b>Dept</b></td></tr> <xsl:appply-templates/> </table></small></p></card></wml> </xsl:template> <xsl:template match="/ROWSET/ROW"> <tr> <td><xsl:value_of select="ENAME"/></td> <td><xsl:value_of select="DEPTNO"/></td></tr> </xsl:template> </xsl:stylesheet>'))

Page 52: Wyk ł ad 5 XML w obiektowo-relacyjnej bazie danych

52SZB, L.Banachowski

Generowanie strony WWW z XML i XSL

CREATE OR REPLACE PROCEDURE xslt_test ISdoc XMLType;BEGIN   SELECT p.OBJECT_VALUE.transform(t.OBJECT_VALUE) INTO doc   FROM XMLemp p, xslemp t   WHERE ….;   htp.print(doc.getclobval);END;