1SZB, L.Banachowski
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.
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.
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.
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.
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).
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>
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.
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>
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
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.
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>
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.
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.
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
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.
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).
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.
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>
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.
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>
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>
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> ....
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)
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;
26SZB, L.Banachowski
Prezentacja danych relacyjnych w postaci dokumentu XML <ROWSET Table="Emp"> <ROW><EMPNO>2345</EMPNO> <ENAME>SCOTT</ENAME> ... </ROW> <ROW> .... </ROW> ....</ROWSET>
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.
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
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.
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
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.
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.
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>');
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.
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>
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);
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;
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);
39SZB, L.Banachowski
Wstawianie do kolumn typu XMLType
INSERT INTO Kontakty VALUES ('NOWAK', XMLType(BFILENAME('XMLDIR', 'JanNowak.xml'), Sysdate);
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
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]
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>
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';
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
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';
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';
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.
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;
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
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>
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>'))
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;
Top Related