Wykład 5 XML w obiektowo-relacyjnej bazie danych

Slides:



Advertisements
Podobne prezentacje
Indeksy w bazie danych Oracle
Advertisements

Przekształcanie dokumentów XML - XSL
Procedury wyzwalane Procedura wyzwalana (ang. trigger) - stanowi kod użytkownika przechowywany wewnątrz bazy i uruchamiany w określonych sytuacjach np.
Projektowanie bazy danych
Rafał Hryniów Tomasz Pieciukiewicz
INDEKSY I SORTOWANIE ZEWNĘTRZNE
Ludwik Antal - Numeryczna analiza pól elektromagnetycznych –W10
SQL INJECTION Wykorzystanie błędów w językach skryptowych
Bazy danych II Instrukcja SELECT Piotr Górczyński 25/08/2001.
Bazy danych 8. SQL podstawy P. F. Góra semestr letni 2004/05.
Funkcje wyszukiwania i odwołań
WPROWADZENIE DO BAZ DANYCH
XPath XSLT – część XPath. XSLT – część 12 XPath – XML Path Language Problem: –jednoznaczne adresowanie fragmentów struktury dokumentu XML.
XPath. XSLT – część XPath. XSLT – część 12 XPath – XML Path Language Problem: –jednoznaczne adresowanie fragmentów struktury dokumentu XML.
XSL – część 2.
Definiowanie typów dokumentów Część 2. Przestrzenie nazw, XML Schema.
XSL Extensible Stylesheet Language 6 listopada 2003.
XPath. XSL – część 1..
Bazy danych II Instrukcja INSERT Piotr Górczyński 25/08/2001.
Ksantypa2: Architektura
XPath, XSLT, (and XSL:FO)
(c) 1999, Instytut Informatyki Politechniki Poznańskiej Rozdział 2: Język bazy danych - SQL Proste zapytania.
Co to jest studium przypadku?
Zapytania SQL: wydajność i optymalizacja
Wykład 8 Wojciech Pieprzyca
Wykład 5 Wojciech Pieprzyca
Projektowanie fizycznej bazy danych
WYKONYWANIE ZAPYTAŃ Przygotował Lech Banachowski na podstawie: 1.Raghu Ramakrishnan, Johannes Gehrke, Database Management Systems, McGrawHill, 2000 (książka.
Modele baz danych - spojrzenie na poziom fizyczny
Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego Relacyjne Bazy Danych (Oracle) Prezentacja jest współfinansowana.
Język SQL – ciąg dalszy DML (Data Manipulation Language)
Język SQL (Structured Query Language) DDL (Data Definition Language)
Przykład włamania do aplikacji internetowej poprzez modyfikację zapytań SQL Skrypty ASP Serwer bazy danych MS SQL Server Piotr Kuźniacki BDi.
Structured Query Language
Wprowadzenie do JSP Copyright © Politecnico di Milano September 2003 Translation: Kamil Żyła, Politechnika Lubelska.
SQL – Structured Query Language (3)
XML – eXtensible Markup Language 4. XSL transformations (XSLT) XSLT (ang. eXtensible Stylesheet Language Transformations) jest opartym na XML językiem.
dr hab. Ryszard Walkowiak prof. nadzw.
KOLEKTOR ZASOBNIK 2 ZASOBNIK 1 POMPA P2 POMPA P1 30°C Zasada działanie instalacji solarnej.
SQL - Structured Query Language
XML – eXtensible Markup Language
Zarządzanie informacją
Wybrane zagadnienia relacyjnych baz danych
Autor: Joanna Barańska Promotor: dr inż. Paweł Figat Konsultant:
Komendy SQL do pracy z tabelami i bazami
Bazy danych Microsoft access 2007.
PL/SQL – dalsza wędrówka
Projektowanie relacyjnych baz danych – postacie normalne
1 SBD, L.Banachowski Podstawy SQL - języka relacyjnych i obiektowo-relacyjnych baz danych (SQL2, SQL'1999, Oracle) Powtórzenie wyk ł adu 3.
Systemy Baz Danych Wykład III
Systemy dynamiczne 2014/2015Obserwowalno ść i odtwarzalno ść  Kazimierz Duzinkiewicz, dr hab. in ż. Katedra In ż ynierii Systemów Sterowania 1 Obserwowalność.
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski informatyka +
1 SBD, L.Banachowski Zaawansowane cechy SQL Powtórzenie wyk ł adu 5.
Autor: Damian Urbańczyk
Projektowanie relacyjnych baz danych – diagramy związków encji
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski 1 informatyka +
1 SBD, L.Banachowski Oprogramowanie strony serwera cz. 1 Powtórzenie wyk ł adu 6.
Komendy SQL do pracy z danymi
XML w bazach danych.
Waldemar Bartyna 1 Programowanie zaawansowane LINQ to XML.
.NET i Bazy Danych Projekt: Wadim Grasza.
Bazy Danych Wprowadzenie
Aplikacje internetowe XML Paweł Lenkiewicz. Aplikacje internetowe – XML2 eXtensible Markup Language Uniwersalny język opisu danych Często używany we współpracy.
ASP.NET Dostęp do bazy danych z poziomu kodu Elżbieta Mrówka-Matejewska.
Oracle Data Modeler (4.1). Aplikacja Wymagania biznesowe Tworzenie systemu informacyjnego Procesy Informacje Analiza Projektowanie Browser: Hollywood.
Temat: Tworzenie bazy danych
Transformacja modelu EER do modelu relacyjnego
Strukturalny język zapytań SQL - historia
Technologie Informacyjne Bazy danych
Modele baz danych - spojrzenie na poziom fizyczny
Zapis prezentacji:

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

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.

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.

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.

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.

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

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>

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.

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>

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

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.

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>

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.

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.

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

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.

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

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.

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>

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.

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>

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>

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

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)

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;

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

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.

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

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.

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

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.

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.

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

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.

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

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

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

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); Instancję typu XMLType tworzy się z wartości VARCHAR2, CLOB lub BFILE przy użyciu konstruktora XMLType:

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

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

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.pl Anna.Nowak@praca.pl

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>

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

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 0 NOWAK 1 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).

Aktualizacja kolumny XMLType UPDATE Kontakty w SET w.Karta = UpdateXML(w.Karta, '/KARTA[EMAIL="Jan.Kowalski@praca.pl"]/TEL_DOM/text()', '9999-10') WHERE w.Nazwisko='KOWALSKI';

Aktualizacja kolumny XMLType UPDATE Kontakty w SET 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';

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.

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;

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

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>

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

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;