<?xml version=“1.0“> <!doctype Präsentation [ <!element Speaker (Name)> <!element Name (#pcdata)> <!element Thema (#pcdata)> ]> <Präsentation> <Speaker> <Name> Katerina Mpalaska Systemberatung Stuttgart Oracle Deutschland GmbH [email protected] </Name> </Speaker> <Thema> Oracle XML Database </Thema> </Präsentation> Geschichte 8i Release 1 Release 2 Page 1 1 Geschichte y y y y XML Werkzeuge relational / CLOB XSQL Servlet XML SQL Utility Release 1 Release 2 Geschichte y y y y XML Werkzeuge relational / CLOB XSQL Servlet XML SQL Utility y y y y XML Datentyp dokumentbasiert XPath Zugriffe Indizes y y y y XML Werkzeuge relational / CLOB XSQL Servlet XML SQL Utility Release 2 Page 2 2 Geschichte y y y y XML Werkzeuge relational / CLOB XSQL Servlet XML SQL Utility y Objektrelational y XML Schema y Zugriffe mit WebDAV, DOM y y y y XML Datentyp dokumentbasiert XPath Zugriffe Indizes y y y y XML Datentyp dokumentbasiert XPath Zugriffe Indizes y y y y XML Werkzeuge relational / CLOB XSQL Servlet XML SQL Utility y y y y XML Werkzeuge relational / CLOB XSQL Servlet XML SQL Utility XML Schema y DTD Unzulänglichkeiten – – y y y y y Datentypen andere Syntax DDL für XML in XML Strukturen Bedingungen (Constraints) Datentypen OO-Konzepte Page 3 3 XML Schema "annotated" XML Schema y XML Schema mit "Zusatzinformationen" y Herstellerspezifische Tags und Attribute zur Steuerung der Persistenz y Namespace-Konzept y bei der Schema-Prüfung ignoriert der Parser gemäß W3C "alle Namespaces, die er nicht kennt" – – Datenbankunabhängige Parser beachten nur das allgemeine XML Schema Bei Registrieren in der Datenbank beachtet diese nur das allgemeine XML Schema und die eigenen "Annotations" Page 4 4 annotated XML Schema http://xmlns.microsoft.com/xml http://www.w3.org/2001/XMLSchema Ein XML Schema kann Annotations für verschiedene Datenbanken enthalten, da die jeweiligen Datenbanken fremde Annotations gemäß W3C ignorieren sollen http://xmlns.oracle.com/xdb Mehrbenutzerzugriff Tabelle depttable Deptno Employees Deptname Release 2 Name Addr Age Street City Tabelle Tabelle Page 5 5 Oracle XML Datenbank JDBC NET8 HTTP WEBDAV XML Service: –Schema Validation –Transformation –CREATE TABLE in LOB oder OO DB Schema –DML –Indizierung –Zugriff über Java/SQL und PL/SQL XML Repository FTP Repository Service: –Foldering –Versionierung –ACL – Zugriff über Java/SQL und PL/SQL Die Folder-Hierarchie Page 6 6 XML Schema registrieren y XML Schema mit Annotations – – – – W3C-Standard Objektnamen Objekttabellen Speicherstrukturen y PL/SQL Paket – – DBMS_XMLSCHEMA.REGISTERSCHEMA DBMS_XMLSCHEMA.DELETESCHEMA XML Dokumente in Tabellen y dokumentbasierter Speicherung – – Schemabindung keine Schemabindung y modellbasierte Speicherung – Schemabindung create table order_tab of xmltype xmlschema "http//www.fonds.de/order.xsd" element "order" Page 7 7 XML Tabellen TABLE OF XMLTYPE XMLSCHEMA.... XML Tabellen TABLE OF XMLTYPE XMLSCHEMA.... XMLDATA order customer funds name wkn street city name amount Page 8 8 SELECT select extract(value(e), '/order/customer') from orders_tab where existsnode(value(e),'/order[funds/wkn="471100"]')=1 y XPath-Ausdruck in der WHERE-Klausel selektiert die in Frage kommenden Dokumente y XPath-Ausdruck in der SELECT-Liste selektiert innerhalb des Dokumentes Update update orders_tab e set value(e) = updatexml (value(e),'/order/funds/wkn/text()','471100') where existsnode(value(e),'/orders[funds/wkn="081500"])=1 y updateXML()-Funktion y XPath Ausdruck y Update findet auf den gespeicherten Objekten statt – KEIN DOM-Parsing Page 9 9 Integration durch relationale Views Tabelle Kunden Name Strasse Ort Franz Must Heike Müller : : Musterstr. 1 Müllerstr. 2 : : 80981 Muster... 20000 Hamburg : : Integration durch XML Views Tabelle Kunden Name Strasse Ort Franz Must Heike Müller : : Musterstr. 1 Müllerstr. 2 : : 80981 Muster... 20000 Hamburg : : Page 10 10 Http-Zugriff in Oracle9i y relationale und XML Tabellen y Suche mit XPath-Ausdrücken Http-Zugriffe y Stylesheet-Transformationen in der Datenbank Page 11 11 WebDAV Page 12 12 Zugriff durch SQL SQL> SQL> select select r.res.getclobval() r.res.getclobval() from from path_view path_view rr where where 22 path=('/home/SIG_Po01a.xml') path=('/home/SIG_Po01a.xml') R.RES.GETCLOBVAL() R.RES.GETCLOBVAL() ------------------------------------------------------------------------------------------------------------------------<Resource <Resource xmlns="http://xmlns.oracle.com/xdb/XDBResource.xsd" xmlns="http://xmlns.oracle.com/xdb/XDBResource.xsd" Hidden="false" Hidden="false" Invalid="false" Invalid="false" Container="false" Container="false" CustomRslv="false" CustomRslv="false" VersionHistory="false"> VersionHistory="false"> <CreationDate>2002-04-11T10:31:32.896783000</CreationDate> <CreationDate>2002-04-11T10:31:32.896783000</CreationDate> <ModificationDate>2002-04 <ModificationDate>2002-04 11T10:31:32.896783000</ModificationDate> 11T10:31:32.896783000</ModificationDate> <DisplayName>SIG_Po01a.xml</DisplayName> <DisplayName>SIG_Po01a.xml</DisplayName> <Language>en</Language> <Language>en</Language> <CharacterSet>utf-8</CharacterSet> <CharacterSet>utf-8</CharacterSet> <ContentType>text/xml</ContentType> <ContentType>text/xml</ContentType> <RefCount>1</RefCount> <RefCount>1</RefCount> .... .... Laden mit FTP ftp> ftp> open open stusunmuc1 stusunmuc1 2222 2222 Connected Connected to to stusunmuc1.de.oracle.com. stusunmuc1.de.oracle.com. 220 220 stusunmuc1 stusunmuc1 FTP FTP Server Server (XDB/Oracle9i (XDB/Oracle9i Enterprise Enterprise Edition Edition Release Release 9.2.0.1.0 9.2.0.1.0 -Production) Production) ready. ready. User User (stusunmuc1.de.oracle.com:(none)): (stusunmuc1.de.oracle.com:(none)): system system 331 331 pass pass required required for for SYSTEM SYSTEM Password: Password: 230 230 SYSTEM SYSTEM logged logged in in ftp> mput *.xml ftp> mput *.xml mput mput SIG_PO01.xml? SIG_PO01.xml? yy 200 200 PORT PORT Command Command successful successful 150 150 ASCII ASCII Data Data Connection Connection 226 226 ASCII ASCII Transfer Transfer Complete Complete ftp: ftp: 2367 2367 bytes bytes sent sent in in 0,00Seconds 0,00Seconds 2367000,00Kbytes/sec. 2367000,00Kbytes/sec. SQL> SQL> select select count(*) count(*) from from po01; po01; COUNT(*) COUNT(*) ------------------11 Page 13 13 Ordner anlegen y Webfolder im Explorer oder mit FTP y PL/SQL: dbms_xdb.createfolder() declare declare result result boolean; boolean; begin begin result result := := dbms_xdb.createFolder('/home/SCOTT'); dbms_xdb.createFolder('/home/SCOTT'); dbms_xdb.setAcl('/home/SCOTT','/sys/acls/all_owner_acl.xml'); dbms_xdb.setAcl('/home/SCOTT','/sys/acls/all_owner_acl.xml'); end; end; // COMMIT; COMMIT; SQL: Update Kommando SQL>update SQL>update purchaseorder purchaseorder pp set set value(p) value(p) == 22 updateXml(value(p),'/PurchaseOrder/User/text()','ulrike') updateXml(value(p),'/PurchaseOrder/User/text()','ulrike') 33 where where existsNode(value(p), existsNode(value(p), 4'/PurchaseOrder/Actions/Action[position()= 4'/PurchaseOrder/Actions/Action[position()= 11 and and User="BLAKE"]')= User="BLAKE"]')= 11 // SQL>select SQL>select ** from from purchaseorder purchaseorder pp where where existsNode(value(p), existsNode(value(p), 22 '/PurchaseOrder/Actions/Action[position()= '/PurchaseOrder/Actions/Action[position()= 11 and and User="BLAKE"]')=1 User="BLAKE"]')=1 SYS_NC_ROWINFO$ SYS_NC_ROWINFO$ --------------------------------------------------------------------------------------------------------------------------------------<PurchaseOrder <PurchaseOrder xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://sig.de.oracle.com/PurchaseOrders/xsd/SIG_PO xsi:noNamespaceSchemaLocation="http://sig.de.oracle.com/PurchaseOrders/xsd/SIG_PO 01.xsd"> 01.xsd"> <Reference>ALLEN-2001102110211602PDT</Reference> <Reference>ALLEN-2001102110211602PDT</Reference> <Actions>..... <Actions>..... <Reject/> <Reject/> <Requestor>Michael <Requestor>Michael L. L. Allen</Requestor> Allen</Requestor> <User>ulrike</User> <User>ulrike</User> Page 14 14 FTP Constraint Beispiel SQL> SQL> alter alter table table po01 po01 add add constraint constraint reference_is_unique reference_is_unique unique unique (xmldata."Requestor") (xmldata."Requestor") // <PurchaseOrder01 xmlns:xdb="http://xmlns.oracle.com/xdb" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://sig.de.oracle.com/PurchaseOr ders/xsd/SIG_po01.xsd"> <PurchaseOrder01 xmlns:xdb="http://xmlns.oracle.com/xdb" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://sig.de.oracle.com/Purchase Orders/xsd/SIG_po01.xsd"> <Reference>ADAMS-20011127121040988PST</Reference> <Reference>BLAKE-55511127121040988PST</Reference> <Actions> <Actions> <Action> <Action> <User>SIG_USER</User> <User>SIG_USER</User> <Date xsi:nil="true"/> <Date xsi:nil="true"/> /Action> /Action> </Actions> </Actions> <Reject> <Reject> <User>SIG_USER</User> <User>SIG_USER</User> <Date xsi:nil="true"/> <Date xsi:nil="true"/> <Comments>Invalid Order</Comments> <Comments>ok</Comments> </Rejec t> <Requestor>Ulrike Schwinn</Requestor>... </Rejec t> <Requestor>Ulrike Schwinn</Requestor>... FTP Constraint Beispiel ftp> ftp> open open Connected Connected stusunmuc1 stusunmuc1 2100 2100 to to stusunmuc1.de.oracle.com. stusunmuc1.de.oracle.com. 220 220 stusunmuc1 stusunmuc1 FTP FTP Server Server (XDB/Oracle9i (XDB/Oracle9i Enterprise Enterprise Edition Edition Release Release 9.2.0.1.0 Production) ready. 9.2.0.1.0 - Production) ready. User User (stusunmuc1.de.oracle.com:(none)): (stusunmuc1.de.oracle.com:(none)): sig_user sig_user 331 pass 331 pass required required for for SIG_USER SIG_USER Password: Password: 230 230 SIG_USER SIG_USER logged logged in in ftp> mput sig*.xml ftp> mput sig*.xml mput mput SIG_Po01a.xml? SIG_Po01a.xml? yy 200 PORT 200 PORT Command Command successful successful 150 150 ASCII ASCII Data Data Connection Connection 550Error 550- Error Response Response ORA-00604: ORA-00604: ORA-00001: ORA-00001: error error occurred occurred at at unique unique constraint constraint recursive recursive SQL SQL level level 11 (SIG_USER.REFERENCE_IS_UNIQUE) (SIG_USER.REFERENCE_IS_UNIQUE) violated violated 550 550 End End Error Error Response Response ftp: 1452 ftp: 1452 bytes bytes sent sent in in 0,00Seconds 0,00Seconds 1452000,00Kbytes/sec. 1452000,00Kbytes/sec. Page 15 15 Inhalt der Objektabelle SQL> SQL> select select count(*) count(*) from from po01; po01; COUNT(*) COUNT(*) ------------------11 Protokolle: Installation y Beim Aufruf des DBCAs wird automatisch die XDB mitinstalliert und die Protokolle konfiguriert y Konfigurationsdatei: /xdbconfig.xml y Default: – – WEBDAV: Port: 8080 FTP : Port: 2100 y init.ora Eintrag: dispatchers="(PROTOCOL=TCP) dispatchers="(PROTOCOL=TCP) (SERVICE=<sid>XDB)" (SERVICE=<sid>XDB)" Page 16 16 EM- Unterstützung XMLType: Native Speicherung von XML Dokumenten • • • • • • !" # $ % & '& (& ) &* +&,-#./0-1%2# 3! !"24 24 Page 17 17 XMLType: Erweiterungen in Oracle 9i Release 2 240&* ( 4 5 5 $ 673 $ 6 5 5 $ ( $ • 8 • 3 & 3 & (( • - 4 $2- - 4 $ - • • • &* SQL und XML: zwei Welten ... XML Server SQL XML RDBMS Page 18 18 ... wachsen zusammen! Oracle9i SQL Indizes XML Ansichten Integrität Weitere Informationen y Informationen – http://otn.oracle.com/tech/xml/xmldb/content.html y Dokumentation – Oracle XML database Developers Guide http://otn.oracle.com/docs/products/oracle9i/doc_ library/release2/appdev.920/a96620/toc.htm – Oracle XML API Reference http://otn.oracle.com/docs/products/oracle9i/doc_ library/release2/appdev.920/a96616/toc.htm Page 19 19 Q& A Q U E S T I O N S A N S W E R S Page 20 20