Wyk ł ad 5 XML w obiektowo-relacyjnej bazie danych

Post on 25-Jan-2016

46 views 0 download

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

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>Jan.Kowalski@praca.pl</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@praca.plAnna.Nowak@praca.pl

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>Jan.Kowalski@praca.pl</EMAIL><EMAIL>Anna.Nowak@praca.pl</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="Jan.Kowalski@praca.pl"]/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="Jan.Kowalski@praca.pl"]/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;