How To: Oracle XML DB Annegret Warnecke / Oracle, DOAG 2004 How To: Oracle XML DB Warnecke, Annegret Oracle Deutschland GmbH, Berlin - Listings Überblick über die Scripte: zu: Oracle XML DB Basics - XMLType in Oracle Tabellen 1. Einrichten einer Tabelle mit XMLType Spalte sowie Input in die Tabelle 2. Eingabe eines durch eine DTD definiertes XML Dokument; Eingabe wird abgewiesen, wenn Dokument nicht der DTD entspricht 3. Update eines gesamten XML Dokumentes bzw. gezielter Update einer Teilinformation eines bestimmten Dokumentes 4. Erweiterung einer bestehenden Tabelle um eine weitere Spalte 5. Beispiel für die Arbeitsweise von XMLType Tabellen (ohne Schemavalidierung) 6. Erzeugung von relationalen Stukturen aus XML Dokumenten 7. Beispiele für die Erstellung von XML Dokumenten (Tabellen oder Views) aus relationalen Tabellen zu: XML Schema und Oracle XML DB Repository 8. Repository Grundlagen - Einrichten eines Folders und Laden eines XML Dokumentes 9. Repository Grundlagen - verschiedene Sichten mit dem Resource_View auf das Repository sowie Löschen des Dokumentes "presentation.xml" 10. Anmeldung eines XML Schemas am Repository und Schemaprüfung 11. Generierung einer XMLType Tabelle mit Referenz zu einem XML Schema zu: XML Dokumente mit XSLT umwandeln und im Browser darstellen 12. Stylesheet presentation.xsl sowie URLs für die Darstellung im Browser 1. Einrichten einer Tabelle mit XMLType Spalte sowie Input in dieTabelle (Basisformatierungen in SQL/Plus setzen) set long 10000 set linesize 100; set pagesize 1000; column Adresse format A70; Tabelle erstellen und mit Inhalt füllen drop table Adr_List; 1 How To: Oracle XML DB Annegret Warnecke / Oracle, DOAG 2004 create table Adr_List ( lfd_Nr number (10), Adresse xmltype ); Tabelle wurde angelegt insert into Adr_List values(10,xmltype('<Adr><Name>Karin</Name><Ort>Hamburg</Ort></Adr>')); insert into Adr_List values(20,xmltype('<Adr><Name>Theo</Name><Ort>Hamburg</Ort></Adr>')); insert into Adr_List values(30,xmltype('<Adr><Name>Peter</Name><Ort>Hamburg</Ort></Adr>')); insert into Adr_List values(10,xmltype('<Adr><Name>Peter</Name><Ort>Bremen</Ort></Adr>')); insert into Adr_List values(50,xmltype('<Adr><Name>Petra</Name><Ort>Bremen</Ort></Adr>')); insert into Adr_List values(60,xmltype('<Adr><Name>Theo</Name><Ort>Bremen</Ort></Adr>')); insert into Adr_List values(70,xmltype('<Adr><Name>Karin</Name><Ort>Hannover</Ort></Adr>')); commit; Transaktion mit COMMIT abgeschlossen. Beispiel für ein nicht wohlgeformtes Dokument insert into Adr_List values(70,xmltype('<adr><Name>Karin</Name><Ort>Hannover</Ort></Adr>')); insert into Adr_List values(70,xmltype('<adr><Name>Karin</Name><Ort>Hannover</Ort></Adr>')) * FEHLER in Zeile 1: ORA-31011: XML-Parsing nicht erfolgreich ORA-19202: Fehler bei XML-Verarbeitung LPX-00225: end-element tag "Adr" does not match start-element tag "adr" Error at line 1 aufgetreten ORA-06512: in "SYS.XMLTYPE", Zeile 0 ORA-06512: in Zeile 1 Inhalt der Tabelle anzeigen lassen select a.lfd_Nr, a. Adresse.getClobVal() from Adr_List a; select * from Adr_List; LFD_NR ADRESSE 2 How To: Oracle XML DB Annegret Warnecke / Oracle, DOAG 2004 ---------- ---------------------------------------------------------------------10 <Adr><Name>Karin</Name><Ort>Hamburg</Ort></Adr> 20 <Adr><Name>Theo</Name><Ort>Hamburg</Ort></Adr> 30 <Adr><Name>Peter</Name><Ort>Hamburg</Ort></Adr> 10 <Adr><Name>Peter</Name><Ort>Bremen</Ort></Adr> 50 <Adr><Name>Petra</Name><Ort>Bremen</Ort></Adr> 60 <Adr><Name>Theo</Name><Ort>Bremen</Ort></Adr> 70 <Adr><Name>Karin</Name><Ort>Hannover</Ort></Adr> 7 Zeilen ausgewählt. 2. Eingabe eines durch eine DTD definiertes XML Dokument; Eingabe wird abgewiesen, wenn Dokument nicht der DTD entspricht Eingabe eines gültigen XML Dokumentes insert into Adr_List values(80, xmltype(' <!DOCTYPE Adr [ <!ELEMENT Adr (Name, Ort)> <!ELEMENT Name (#PCDATA)> <!ELEMENT Ort (#PCDATA)> ]> <Adr><Name>Uwe</Name><Ort>Hannover</Ort></Adr>')); 1 Zeile wurde erstellt. select a.Adresse.getClobVal() from Adr_List a where lfd_Nr=80; ADRESSE ---------------------------------------------------------------------<!DOCTYPE Adr [ <!ELEMENT Adr (Name, Ort)> <!ELEMENT Name (#PCDATA)> <!ELEMENT Ort (#PCDATA)> ]> <Adr><Name>Uwe</Name><Ort>Hannover</Ort></Adr> Eingabe eines nicht gültigen XML Dokumentes insert into Adr_List values(80, xmltype(' <!DOCTYPE Adr [ <!ELEMENT Adr (Name, Ort)> <!ELEMENT Name (#PCDATA)> <!ELEMENT Ort (#PCDATA)> ]> <adr><Name>Uwe</Name><Ort>Hannover</Ort></adr>')); 3 How To: Oracle XML DB Annegret Warnecke / Oracle, DOAG 2004 xmltype(' <!DOCTYPE Adr [ * FEHLER in Zeile 2: ORA-31011: XML-Parsing nicht erfolgreich ORA-19202: Fehler bei XML-Verarbeitung LPX-00104: Warning: element "adr" is not declared in the DTD Error at line 6 aufgetreten ORA-06512: in "SYS.XMLTYPE", Zeile 0 ORA-06512: in Zeile 1 SQL> 3. Update eines gesamten XML Dokumentes bzw. gezielter Update einer Teilinformation eines bestimmten Dokumentes ein ganzes XML Dokument verändern select a.lfd_Nr, a.Adresse.getClobVal() as Adresse from Adr_List a where lfd_Nr=30; LFD_NR ADRESSE ---------- ---------------------------------------------------------30 <Adr><Name>Peter</Name><Ort>Hamburg</Ort></Adr> update Adr_List set Adresse = XMLTYPE ('<Adr><Name>Gert</Name><Ort>Frankfurt</Ort></Adr>') where lfd_Nr = 30; 1 Zeile wurde aktualisiert. select a.lfd_Nr, a.Adresse.getClobVal() as Adresse from Adr_List a where lfd_Nr=30; LFD_NR ADRESSE ---------- ----------------------------------------------------------30 <Adr><Name>Gert</Name><Ort>Frankfurt</Ort></Adr> Teil eines XML Dokument verändern update Adr_List set Adresse = UPDATEXML (Adresse, '/Adr/Name/text()','Hugo') where lfd_Nr = 30; 1 Zeile wurde aktualisiert. 4 How To: Oracle XML DB Annegret Warnecke / Oracle, DOAG 2004 select a.lfd_Nr, a.Adresse.getClobVal() as Adresse from Adr_List a where lfd_Nr=30; ADRESSE ---------------------------------------------------------------------<Adr> <Name>Hugo</Name> <Ort>Frankfurt</Ort> </Adr> SQL> 4. Erweiterung einer bestehenden Tabelle um eine weitere Spalte weitere Spalte ergänzen und zusätzlichen Datensatz eingeben ALTER TABLE Adr_List add (Hobbies XMLType); Tabelle wurde geändert. desc Adr_List; Name Null? Typ ----------------------------------------------------- -------- ----------------LFD_NR NUMBER(10) ADRESSE XMLTYPE HOBBIES XMLTYPE insert into Adr_List values(10, xmltype('<Adr><Name>Karin</Name><Ort>Hamburg</Ort></Adr>'), xmltype('<Hobby>Lesen, Theater, Tennis</Hobby>')); 1 Zeile wurde erstellt. SQL> (Basisformatierungen in SQL/Plus setzen) column Adresse format A40; column Hobbies format A30; select a.lfd_Nr, a.Adresse.getClobVal() as Adresse, a.Hobbies.getClobVal() as Hobbies from Adr_List a where lfd_Nr=10; LFD_NR ADRESSE HOBBIES 5 How To: Oracle XML DB Annegret Warnecke / Oracle, DOAG 2004 ---------- ---------------------------------------- -----------------------------10 <Adr><Name>Karin</Name><Ort>Hamburg</Ort ></Adr> 10 <Adr><Name>Peter</Name><Ort>Bremen</Ort> </Adr> 10 <Adr><Name>Karin</Name><Ort>Hamburg</Ort></Adr> <Hobby>Lesen, Theater, Tennis< Hobby> SQL> -------------------------------------------------------------------------------------------Spalte wieder entfernen ALTER TABLE Adr_List drop (Hobbies); Tabelle wurde geändert. select a.lfd_Nr, a.Adresse.getClobVal() as Adresse, a.Hobbies.getClobVal() as Hobbies from Adr_List a where lfd_Nr=10; a.Hobbies.getClobVal() as Hobbies * FEHLER in Zeile 2: ORA-00904: Ungültiger Spaltenname select a.lfd_Nr, a.Adresse.getClobVal() as Adresse from Adr_List a where lfd_Nr=10; LFD_NR ADRESSE ---------- ---------------------------------------10 <Adr><Name>Karin</Name><Ort>Hamburg</Ort ></Adr> 10 <Adr><Name>Peter</Name><Ort>Bremen</Ort> </Adr> 10 <Adr><Name>Karin</Name><Ort>Hamburg</Ort ></Adr> SQL> -------------------------------------------------------------------------------------------- 5. Beispiel für die Arbeitsweise von XMLType Tabellen (ohne Schemavalidierung) 6 How To: Oracle XML DB Annegret Warnecke / Oracle, DOAG 2004 XML Type Tabelle erstellen und mit Inhalt füllen drop table Adr; create table Adr of xmltype; Tabelle wurde angelegt. insert into Adr values(xmltype('<Adr><Name>Theo</Name><Ort>Bremen</Ort></Adr>')); insert into Adr values(xmltype('<Adr><Name>Karin</Name><Ort>Hannover</Ort></Adr>')); 1 Zeile wurde erstellt. select sys_nc_rowinfo$ as Adressen from Adr; ADRESSEN ------------------------------------------------------<Adr><Name>Theo</Name><Ort>Bremen</Ort></Adr> <Adr><Name>Karin</Name><Ort>Hannover</Ort></Adr> SQL> 6. Erzeugung von relationalen Stukturen aus XML Dokumenten (Basisformatierungen in SQL/Plus setzen) column Name format A10; column Ort format A10; mit select statements auf Tabelle mit XML Type Informationen zugreifen select lfd_nr, extractValue(a.Adresse,'/Adr/Name') as Name, extractValue(a.Adresse,'/Adr/Ort') as Ort from Adr_List a where existsNode(a.Adresse, '/Adr[Ort="Bremen"]') = 1; LFD_NR NAME ORT ---------- -------------------- -------------------10 Peter Bremen 50 Petra Bremen 60 Theo Bremen SQL> SELECT a.lfd_nr, extract(a.Adresse,'/Adr/Name/text()').getStringVal() 7 How To: Oracle XML DB Annegret Warnecke / Oracle, DOAG 2004 Name FROM Adr_List a; LFD_NR NAME ---------- -------------------10 Karin 20 Theo 30 Peter 10 Peter 50 Petra 60 Theo 70 Karin 7 Zeilen ausgewählt. relationalen View auf XML Type Strukturen erzeugen drop view Pers_v; create view Pers_v as select lfd_nr, extractValue(n.Adresse,'/Adr/Name') as Name from Adr_List n; View wurde angelegt. select * from Pers_v; LFD_NR NAME ---------- -------------------10 Karin 20 Theo 30 Peter 10 Peter 50 Petra 60 Theo 70 Karin 9 Zeilen ausgewählt. relationale Tabelle erstellen und mit Inhalt füllen drop table Pers_relational; create table Pers_relational (Name varchar2(20), Ort varchar2(20)); Tabelle wurde angelegt. insert into Pers_relational 8 How To: Oracle XML DB Annegret Warnecke / Oracle, DOAG 2004 select extractValue(n.Adresse,'/Adr/Name'), extractValue(n.Adresse,'/Adr/Ort') from Adr_List n where n.lfd_Nr = 10; 3 Zeilen wurden erstellt. select * from Pers_relational; NAME ORT -------------------- -------------------Karin Hamburg Peter Bremen SQL> 7. Beispiele für die Erstellung von XML Dokumenten (Tabellen oder Views) aus relationalen Tabellen connect HR/HR Connect durchgeführt. Inhalt der relationalen Tabelle "employees" anzeigen lassen descr employees; Name Null? Typ ----------------------------------------- -------- ----------------------EMPLOYEE_ID NOT NULL NUMBER(6) FIRST_NAME VARCHAR2(20) LAST_NAME NOT NULL VARCHAR2(25) EMAIL NOT NULL VARCHAR2(25) PHONE_NUMBER VARCHAR2(20) HIRE_DATE NOT NULL DATE JOB_ID NOT NULL VARCHAR2(10) SALARY NUMBER(8,2) COMMISSION_PCT NUMBER(2,2) MANAGER_ID NUMBER(6) DEPARTMENT_ID NUMBER(4) select e.employee_id, e.first_name, e.last_name, e.hire_date, salary from employees e where employee_id >200; EMPLOYEE_ID FIRST_NAME SALARY LAST_NAME HIRE_DAT 9 How To: Oracle XML DB Annegret Warnecke / Oracle, DOAG 2004 ----------- -------------------- ------------------------- -------- ---------201 Michael Hartstein 17.02.96 13000 202 Pat Fay 17.08.97 6000 203 Susan Mavris 07.06.94 6500 204 Hermann Baer 07.06.94 10000 205 Shelley Higgins 07.06.94 12000 206 William Gietz 07.06.94 8300 6 Zeilen ausgewählt. XMLType Tabelle erstellen und mit Inhalt füllen drop table pers_data; create table pers_data of xmltype; Tabelle wurde angelegt. desc pers_data; Name Null? Typ ----------------------------------------------------- -------- ---------------------TABLE of XMLTYPE insert into pers_data SELECT XMLELEMENT(Employees, XMLATTRIBUTES ('Verschiedenes .....' as Erlaeuterung), XMLAGG(XMLELEMENT(Emp, XMLATTRIBUTES (EMPLOYEE_ID as ID), XMLELEMENT(name, e.first_name ||' '|| e.last_name), XMLELEMENT ( hiredate, e.hire_date)))) as Personaldaten FROM employees e WHERE employee_id > 204 ; 1 Zeile wurde erstellt. Anzeige des Inhalts der XMLType Tabelle (Nutzung Pseudo Column) select p.sys_nc_rowinfo$.getClobVal() as Personaldaten from pers_data p; SYS_NC_ROWINFO$ --------------------------------------------------------------------------------<EMPLOYEES ERLAEUTERUNG="Verschiedenes ....."> <EMP ID="205"><NAME>Shelley Higgins</NAME> <HIREDATE>07.06.94</HIREDATE> </EMP><EMP ID="206"><NAME>William Gietz</NAME> <HIREDATE>07.06.94</HIREDATE> </EMP></EMPLOYEES> column Name format A20; Anzeige des Inhalts der XMLType Tabelle (XPath) 10 How To: Oracle XML DB Annegret Warnecke / Oracle, DOAG 2004 select extractvalue(value(p), '/EMPLOYEES/EMP[@ID="205"]/NAME') as Name from pers_data p; NAME -------------------Shelley Higgins SQL> -------------------------------------------------------------------------------------------2. Beispiel für Erzeugung XMLType Tabelle drop table pers_data_single; create table pers_data_single of XMLType; Tabelle wurde angelegt. insert into pers_data_single SELECT XMLELEMENT(Emp, XMLATTRIBUTES (EMPLOYEE_ID as ID), XMLELEMENT(name, e.first_name ||' '|| e.last_name), XMLELEMENT ( hiredate, e.hire_date)) as Personaldaten FROM employees e WHERE employee_id > 200; 6 Zeilen wurden erstellt. select p.sys_nc_rowinfo$.getClobVal() as Personaldaten from pers_data_single p; PERSONALDATEN ---------------------------------------------------------------------------------------<EMP ID="201"><NAME>Michael Hartstein</NAME><HIREDATE>17.02.96</HIREDATE></EMP> <EMP ID="202"><NAME>Pat Fay</NAME><HIREDATE>17.08.97</HIREDATE></EMP> <EMP ID="203"><NAME>Susan Mavris</NAME><HIREDATE>07.06.94</HIREDATE></EMP> <EMP ID="204"><NAME>Hermann Baer</NAME><HIREDATE>07.06.94</HIREDATE></EMP> <EMP ID="205"><NAME>Shelley Higgins</NAME><HIREDATE>07.06.94</HIREDATE></EMP> <EMP ID="206"><NAME>William Gietz</NAME><HIREDATE>07.06.94</HIREDATE></EMP> 6 Zeilen ausgewählt. -------------------------------------------------------------------------------------------XMLType View erzeugen auf relationler Tabelle drop view Emp_view; 11 How To: Oracle XML DB Annegret Warnecke / Oracle, DOAG 2004 CREATE OR REPLACE VIEW Emp_view OF XMLTYPE WITH OBJECT ID (EXTRACT(sys_nc_rowinfo$,'/Emp/@empno').getnumberval()) AS SELECT XMLELEMENT("Emp", XMLAttributes(empno), XMLForest(e.fname ||' '|| e.lname AS "name", e.hire AS "hiredate")) AS "result" FROM emps e WHERE salary > 20000; View wurde angelegt. select e.SYS_NC_ROWINFO$.getClobVal() from emp_view e; SYS_NC_ROWINFO$ ---------------------------------------------------------------------------------------<Emp EMPNO="2100"><name>John Smith</name><hiredate>24.05.00</hiredate></Emp> <Emp EMPNO="2200"><name>Mary Martin</name><hiredate>01.02.96</hiredate></Emp> SQL> 8. Repository Grundlagen - Einrichten eines Folders und Laden eines XML Dokumentes connect xdb/xdb; desc resource_view; Name Null? Typ ----------------------------------------- -------- ---------------------------RES SYS.XMLTYPE(XMLSchema "http: //xmlns.oracle.com/xdb/XDBResource.xsd" Element "Resource") ANY_PATH VARCHAR2(4000) neuen Folder im XML DB Repository anlegen DECLARE retBool BOOLEAN; BEGIN retBool:=DBMS_XDB.createfolder('/public/DOAG'); END; / PL/SQL-Prozedur wurde erfolgreich abgeschlossen. commit; 12 How To: Oracle XML DB Annegret Warnecke / Oracle, DOAG 2004 Transaktion mit COMMIT abgeschlossen. SQL> XML Dokument in dem Repository hinterlegen(ohne Schemaprüfung) DECLARE retBool BOOLEAN; BEGIN retBool:=DBMS_XDB.createresource('/public/DOAG/presentation.xml', '<?xml-stylesheet type="text/xsl" href="presentation.xsl"?> <presentation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.oracle .com/presentation.xsd"> <veranstaltung>DOAG</veranstaltung> <termin>Nov 04</termin> <ort>Mannheim</ort> <thema>How To Oracle XML DB</thema> <referent> <name>Annegret Warnecke</name> <firma>Oracle Deutschland GmbH, Berlin</firma> <funktion>Senior Systemberaterin</funktion> </referent> </presentation> '); END; / PL/SQL-Prozedur wurde erfolgreich abgeschlossen. SQL> 9. Repository Grundlagen - verschiedene Sichten mit dem Resource_View auf das Repository sowie Löschen des Dokumentes "presentation.xml" set long 10000; Beschreibung des Resource Views für das neu eingestellte Dokument anzeigen lassen select r.res from resource_view r where under_path (r.res, '/public/DOAG')=1; RES ---------------------------------------------------------------------------------------------------<Resource xmlns="http://xmlns.oracle.com/xdb/XDBResource.xsd"> 13 How To: Oracle XML DB Annegret Warnecke / Oracle, DOAG 2004 <CreationDate>2004-11-11T07:28:22.551000</CreationDate> <ModificationDate>2004-11-11T07:28:22.551000</ModificationDate> <DisplayName>presentation.xml</DisplayName> <Language>en-US</Language> <CharacterSet>UTF-8</CharacterSet> <ContentType>text/xml</ContentType> <RefCount>1</RefCount> </Resource> SQL> gezielt Informationen aus dem Resource View anzeigen lassen select extractvalue(r.res, 'Resource/DisplayName') as Resourcen from resource_view r where under_path (r.res, '/public/DOAG')=1; RESOURCEN -----------------------------------------------------------------------presentation.xml SQL> select r.res.getClobVal() as presentation from RESOURCE_VIEW r where ANY_PATH = '/public/DOAG/presentation.xml'; PRESENTATION -------------------------------------------------------------------------------<Resource xmlns="http://xmlns.oracle.com/xdb/XDBResource.xsd" Hidden="false" Inv alid="false" Container="false" CustomRslv="false" VersionHistory="false" StickyR ef="true"> <CreationDate>2004-10-01T02:48:24.533000</CreationDate> <ModificationDate>2004-10-01T02:48:24.533000</ModificationDate> <DisplayName>presentation.xml</DisplayName> <Language>en-US</Language> <CharacterSet>UTF-8</CharacterSet> <ContentType>text/xml</ContentType> <RefCount>1</RefCount> <ACL> <acl description="Public:All privileges to PUBLIC" xmlns="http://xmlns.oracl e.com/xdb/acl.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:sch emaLocation="http://xmlns.oracle.com/xdb/acl.xsd http: //xmlns.oracle.com/xdb/acl.xsd"> <ace> <principal>PUBLIC</principal> <grant>true</grant> <privilege> <all/> </privilege> </ace> 14 How To: Oracle XML DB Annegret Warnecke / Oracle, DOAG 2004 </acl> </ACL> <Owner>XDB</Owner> <Creator>XDB</Creator> <LastModifier>XDB</LastModifier> <SchemaElement>http://www.oracle.com/presentation.xsd#presentation</SchemaElem ent> <Contents> <presentation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNa mespaceSchemaLocation="http://www.oracle.com/presentation.xsd"> <veranstaltung>DOAG</veranstaltung> <termin>10. u. 11. November 04</termin> <ort>Mannheim</ort> <thema>How to: Oracle XML DB</thema> <referent> <name>Annegret Warnecke</name> <firma>Oracle Deutschland GmbH, Berlin</firma> <funktion>Senior Systemberaterin</funktion> </referent> </presentation> </Contents> </Resource> SQL> Resource löschen call dbms_xdb.deleteResource('/public/DOAG/presentation.xml'); Aufruf wurde abgeschlossen. commit; Transaktion mit COMMIT abgeschlossen. 10. Anmeldung eines XML Schemas am Repository und Schemaprüfung ein XML Schema Dokument in das Repository stellen DECLARE retBool BOOLEAN; BEGIN retBool:=DBMS_XDB.createresource ('/public/DOAG/presentation.xsd', '<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xdb="http://xmlns.oracle.com/xdb" xdb:schemaURL="http: //www.oracle.com/presentation.xsd"> 15 How To: Oracle XML DB Annegret Warnecke / Oracle, DOAG 2004 <xs:element name="presentation"> <xs:complexType> <xs:sequence> <xs:element name="veranstaltung"/> <xs:element name="termin"/> <xs:element name="ort"/> <xs:element name="thema"/> <xs:element name="referent"> <xs:complexType> <xs:sequence> <xs:element name="name"/> <xs:element name="firma"/> <xs:element name="funktion"/> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element></xs:schema>'); END; / commit; PL/SQL-Prozedur wurde erfolgreich abgeschlossen. SQL> das XML Schema am Repository registrieren BEGIN DBMS_XMLSCHEMA.REGISTERSCHEMA(schemaurl=>'http://www.oracle.com /presentation.xsd', schemadoc=>sys.UriFactory.getUri('/public/DOAG/presentation.xsd'), local=>FALSE, gentypes=>TRUE, genbean=>FALSE, gentables=>TRUE, force=>FALSE, owner=>'XDB'); END; PL/SQL-Prozedur wurde erfolgreich abgeschlossen. SQL> Input eines gültigen XML Dokumentes mit Bezug auf das registrierte XML Schema insert into "presentation1364_TAB" values(xmltype( '<?xml-stylesheet type="text/xsl" href="presentation.xsl"?> <presentation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.oracle.com/presentation.xsd"> <veranstaltung>DOAG</veranstaltung> <termin>Nov. 04</termin> <ort>Mannheim</ort> <thema>How To Oracle XML DB</thema> 16 How To: Oracle XML DB Annegret Warnecke / Oracle, DOAG 2004 <referent> <name>Annegret Warnecke</name> <firma>Oracle Deutschland GmbH, Berlin</firma> <funktion>Senior Systemberaterin</funktion> </referent> </presentation> ')); 1 Zeile wurde erstellt. SQL> -------------------------------------------------------------------------------------------Input eines nicht gültigen XML Dokumentes mit Bezug auf das registrierte XML Schema insert into "presentation1364_TAB" values(xmltype( '<?xml-stylesheet type="text/xsl" href="presentation.xsl"?> <presentation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.oracle.com/presentation.xsd"> <veranstaltung>DOAG</veranstaltung> <termin>Nov. 04</termin> <Ort>Kiel</Ort> <thema> How To Oracle XML DB</thema> <referent> <name>Annegret Warnecke</name> <firma>Oracle Deutschland GmbH, Berlin</firma> <funktion>Senior Systemberaterin</funktion> </referent> </presentation> ')); insert into "presentation1352_TAB" values(xmltype( * FEHLER in Zeile 1: ORA-30937: No schema definition for 'Ort' (namespace '##local') in parent 'presentation' SQL> -------------------------------------------------------------------------------------------- 11. Generierung einer XMLType Tabelle mit Referenz zu einem XML Schema Anlegen einer XMLType Tabelle mit Referenz auf das registrierte XML Schema drop table Present; 17 How To: Oracle XML DB Annegret Warnecke / Oracle, DOAG 2004 create table Present of XMLType (CHECK (XMLIsValid(sys_nc_rowinfo$) = 1)) XMLSCHEMA "http://xmlns.oracle.com/xdb/schemas/XDB/www.oracle.com/presentation.xsd" ELEMENT "presentation"; Tabelle wurde angelegt. SQL> descr Present; Name Null? Typ ----------------------------------------- -------- ---------------------------TABLE of SYS.XMLTYPE(XMLSchema "http://www.oracle.com/presentation.xsd" Element "presentation") STORAGE Object-relational SQL> 11. Generierung einer XMLType Tabelle mit Referenz zu einem XML Schema <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match="/"> <html> <body bgcolor="#ffffff"> <table border="0"> <tr> <td><b>Veranstaltung:</b></td> <td> <xsl:value-of select="/presentation/veranstaltung"/> </td> </tr> <tr> <td><b>Termin:</b></td> <td> <xsl:value-of select="/presentation/termin"/> </td> </tr> <tr> <td><b>Ort:</b></td> <td> <xsl:value-of select="/presentation/ort"/> </td> </tr> <tr> <td><b>Thema:</b></td> <td> <xsl:value-of select="/presentation/thema"/> </td> </tr> </table> 18 How To: Oracle XML DB Annegret Warnecke / Oracle, DOAG 2004 <hr/> <p/> <b>Referentin: </b> <xsl:value-of select="/presentation/referent/name"/>, <xsl:value-of select="/presentation/referent/funktion"/>, <xsl:value-of select="/presentation/referent/firma"/> </body> </html> </xsl:template> </xsl:stylesheet> Sonstiges Zugriff auf Repository per ftp ftp://localhost:2100/public/ Zugriff auf Demo Tabelle emp des Benutzers Scott mittels DBUriServlet http://localhost:8080/oradb/SCOTT/EMP Stylesheettransformation mit dem in die Oracle integrierten XSLT Prozessor http://localhost:8080/public/Stylesheets/emp.xsl http://localhost:8080/oradb/SCOTT/EMP?transform=/public/Stylesheets/emp.xsl &contenttype=text/html Kontaktadresse: Annegret Warnecke Oracle Deutschland GmbH Schloßstr. 4 13507 Berlin Telefon: Fax: E-Mail Internet: +49 30 435795 476 +49 30 435 795 210 [email protected] www.oracle.com 19