Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Wykład 5 XML w obiektowo-relacyjnej bazie danych

Podobne prezentacje


Prezentacja na temat: "Wykład 5 XML w obiektowo-relacyjnej bazie danych"— Zapis prezentacji:

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

2 Zastosowanie dokumentów XML
Zamieszczanie metadanych w dokumencie tekstowym. Oddzielenie prezentacji od struktury dokumentu, przez co umożliwienie różnych prezentacji tego samego dokumentu.   Ułatwienie wymiany danych biznesowych między aplikacjami. Integracja danych pochodzących z różnych baz danych i aplikacji.

3 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.

4 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.

5 Ułatwienie wymiany danych biznesowych między aplikacjami
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.

6 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).

7 Przykład HTML: Lista publikacji
<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> </BODY> </HTML>

8 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.

9 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>

10 Widok w postaci drzewa LISTA PUBLIKACJA PUBLIKACJA PUBLIKACJA FORMAT
AUTOR TYTUŁ ROK AUTOR TYTUŁ Identity 1998 The character of phy- sical law Hard- cover IMIĘ NAZWISKO IMIĘ NAZWISKO Milan Kundera Richard Feynman

11 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.

12 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>

13 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.

14 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.

15 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

16 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.

17 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).

18 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.

19 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>

20 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.

21 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>

22 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>

23 XQuery (c.d.) Dla każdego roku wyznacz nazwiska autorów, którzy opublikowali książkę w tym roku. FOR $p IN DISTINCT doc(www.ourbookstore.com/books.xml)/BOOKLIST/BOOK/PUBLISHED RETURN <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> ....

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

25 Konwersja: XQuery -> zapytanie SQL
FOR $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, AUTHOR WHERE BOOKLIST.id = BOOK.booklistid AND BOOK.id=AUTHOR.bookid AND BOOK.published=’1980’ GROUP BY BOOK.id;

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

27 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.

28 Model wektorowy Zawiera informacje: termin j występuje k razy w dokumencie i. docid Agent Bond Chain James Mobile movie 1 2 3 6 4

29 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.

30 Wyszukiwanie w tekstach - pliki odwrócone
Mobile agent 2 Agent James 1 Dokument DID 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. <2> Mobile <1> James <1,2> Agent Lista odwrócona Słowo

31 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.

32 Oracle Text Przeszukiwanie zbiorów dokumentów takich jak: strony WWW
magazyny dokumentów 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. In a basic text query application, users enter query words or phrases and expect the application to return a list of documents that best match the query. Such an application involves creating a CONTEXT index and querying it with CONTAINS. The queries for this type of application are best served with a CONTEXT index on your document table. To query this index, your application uses the SQL CONTAINS operator in the WHERE clause of a SELECT statement. A typical text query application on a document collection enables the user to enter a query. The application issues a CONTAINS query and returns a list, called a hitlist, of documents that satisfy the query. The results are usually ranked by relevance. The application enables the user to view one or more documents in the hitlist. For example, an application might index URLs (HTML files) on the World Wide Web and provide query capabilities across the set of indexed URLs. Hitlists returned by the query application are composed of URLs that the user can visit. An important factor for this type of application is retrieving documents that are relevant to a user query while retrieving as few non-relevant documents as possible. The most relevant documents must be ranked high in the result list.

33 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>');

34 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. CREATE INDEX idx_docs ON docs(text) INDEXTYPE IS CTXSYS.CONTEXT PARAMETERS ('FILTER CTXSYS.NULL_FILTER SECTION GROUP CTXSYS.HTML_SECTION_GROUP'); Use the NULL_FILTER because you do not need to filter HTML documents during indexing. However, if you index PDF, Microsoft Word, or other formatted documents, use the CTXSYS.AUTO_FILTER (the default) as your FILTER preference. This example also uses the HTML_SECTION_GROUP section group which is recommended for indexing HTML documents. Using HTML_SECTION_GROUP enables you to search within specific HTML tags, and eliminates from the index unwanted markup such as font information.

35 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 <HTML>France is in Europe.</HTML> <HTML>Paris is a city in France.</HTML> Inverse frequency scoring assumes that frequently occurring terms in a document set are noise terms, and so these terms are scored lower. For a document to score high, the query term must occur frequently in the document but infrequently in the document set as a whole.

36 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);

37 Oracle: Typ obiektowy XMLType
CREATE TABLE Kontakty(     Nazwisko VARCHAR2(50),     Karta XMLTYPE,     Data_utworzenia DATE); lub CREATE TABLE Obj_Kontakty OF XMLType;

38 Wstawianie do kolumn typu XMLType
INSERT INTO Kontakty VALUES ('KOWALSKI',   XMLType('<KARTA>                           <TEL_PRACA>33-456</TEL_PRACA>              <TEL_DOM>28-991</TEL_DOM>              <TEL_KOM> </TEL_KOM>              <ADRES>                 <ULICA>Wygodna 9m1</ULICA>                 <MIASTO>Warszawa</MIASTO>                 <KOD>02-782</KOD>              </ADRES>            </KARTA>'), Sysdate); Instancję typu XMLType tworzy się z wartości VARCHAR2, CLOB lub BFILE przy użyciu konstruktora XMLType:

39 Wstawianie do kolumn typu XMLType
INSERT INTO Kontakty VALUES ('NOWAK',   XMLType(BFILENAME('XMLDIR', 'JanNowak.xml'), Sysdate);

40 Wyszukiwanie w dokumentach XML
Przy wydobywaniu danych z obiektu typu XMLType korzystamy z metod konwersji : GetStringval(): XMLType -> VARCHAR2 GetClobval(): XMLType -> CLOB GetNumberval: XMLType -> NUMBER

41 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/ /text()').GetStringVal() " " FROM Kontakty w; W wyniku otrzymujemy kolumnę wartości typu VARCHAR2:

42 Bez funkcji text() na końcu wyrażenia ścieżkowego:
SELECT w.Karta.Extract('/KARTA/ ').GetStringVal() " " FROM Kontakty w; otrzymamy wartości typu VARCHAR2:

43 Aby wziąć cały dokument XML i przesłać go jako duży dokument tekstowy typu CLOB:
SELECT w.Karta.GetClobval() as KartaKow FROM Kontakty w WHERE w.Nazwisko = 'KOWALSKI';

44 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 w WHERE w.Karta IS NOT NULL; Wynik: NAZWISKO Ma stronę WWW KOWALSKI NOWAK Zauważmy, że gdybyśmy opuścili warunek w.Karta IS NOT NULL, w wyniku znalazłyby się nazwiska wszystkich osób. Dla tych, które nie mają przyporządkowanej karty, otrzymalibyśmy NULL w kolumnie Karta, co sygnalizowałoby niemożliwość zastosowania metody ExistsNode do nieokreślonego obiektu (NULL).

45 Aktualizacja kolumny XMLType
UPDATE Kontakty w SET w.Karta = UpdateXML(w.Karta, ' ') WHERE w.Nazwisko='KOWALSKI';

46 Aktualizacja kolumny XMLType
UPDATE Kontakty w SET w.Karta = UpdateXML       XMLType('<ADRES>                 <ULICA>Aksamitna 90m10</ULICA>                 <MIASTO>Warszawa</MIASTO>                 <KOD>12-782</KOD>              </ADRES>')) WHERE w.Nazwisko='KOWALSKI';

47 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.

48 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 p WHERE CONTAINS(p.doc, 'Pentium WITHIN desc') > 0;

49 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 XMLType XMLSchema "http://myschema.pl/test.xsd" ELEMENT "Emplist"; -- Tabela obiektowa EmpTable dokumentów XML

50 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>

51 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>'))

52 Generowanie strony WWW z XML i XSL
CREATE OR REPLACE PROCEDURE xslt_test IS doc XMLType; BEGIN    SELECT p.OBJECT_VALUE.transform(t.OBJECT_VALUE) INTO doc    FROM XMLemp p, xslemp t    WHERE ….;    htp.print(doc.getclobval); END;


Pobierz ppt "Wykład 5 XML w obiektowo-relacyjnej bazie danych"

Podobne prezentacje


Reklamy Google