How To: Oracle XML DB

Werbung
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
Herunterladen