XML und die Oracle Datenbank

Werbung
<Insert Picture Here>
XML und die Oracle Datenbank
Ulrike Schwinn ([email protected])
ORACLE Deutschland B.V. & Co.KG
Realisierung mit der Datenbank
• Ein einziges zentrales Repository
• Einheitlicher Administrationsbereich
• Nutzung der Backup/Recovery- und Security•
•
•
•
Funktionen (Kontrolle!) der Datenbank
Einfache Werkzeuge
Einfache Integration aller Techniken über SQL
Massendatenverarbeitung und Performance
• Indizierung, Partitionierung, Parallelisierung, Laden
der Daten usw.
Alles ohne zusätzliche Installation in der Datenbank
enthalten
Der integrierte Ansatz
Gib mir alle stornierten Aufträge, bei denen von
"Lieferkosten" die Rede ist und der Kunde nicht mehr als
20km von der Niederlassung "1234" entfernt wohnt
SELECT p.id, p.name,
xmlquery('po/quantity' passing po_xml returning content)
quantity
FROM product p, order_queue oq, customer c, store s
WHERE s.store_id = 1234
Relational
Message
AND oq.msg_state = 'CANCELED'
XML
AND xmlquery('/po/product_id‘ passing po_xml returning
content)= p.id
Text
AND xmlquery('/po/cust_id‘ passing o_xml)= c.cust_ids
AND contains(p.notes,fuzzy('Lieferkosten'), 1) > 0
AND sdo_within_distance(c.location,
s.location,'distance=20')='TRUE'
Location
All Your Information in der Datenbank
• Früher:
• Speicher für relationale Daten
• Spezialisierte Daten ausserhalb
des Datenbanksystems
• Heute:
• Spezielle Datentypen und Indizes
für Informationssysteme
verschiedenster Arten
• Methoden zur Verarbeitung
• Realisierung:
• Nutzung von Objekttypen und
speziellen Indizes (Domain
Indizes)
XML DB
Spatial & Ontologien
Multimedia
Text & Mining
Relationale Daten
XML in der Oracle Datenbank - Kurzprofil
• XML und SQL innerhalb der Datenbank
• Standardkonform ( W3C, SQL:2003…)
• XML/SQL
• XQuery
• XML Schema, DOM
• Verfügbar ab Oracle 9i Release 2
• Alle Datenbank Editionen – keine Lizenz erforderlich
• Keine zusätzliche Installation erforderlich – geringer
Konfigurationsaufwand
Oracle XML DB: Die Versionen
Binary XML
&
XML Index
XQuery
XML
API’s
O/R Speicherung
TEXT Speicherung
&
XML DB Repository
1998
2001
2004
2007
Oracle XML DB - Schnittstellen
Oracle XML DB
XQuery
XPath
SQL
Transformationen
XML- Sichten
SQL*Net
HTTP / WebDAV
FTP
Recherchen
Relationale Sichten
Zugriffe: HTTP
Zugriffe: WEBDAV
• WebDAV Protocol Specification, http://www.ietf.org/rfc/rfc2518.txt
Zugriffe: FTP
• Per default ist FTP disabled
• Kommandos wie pwd,quit,del,rmd,user,type
Das XMLDB Repository
• File/Folder-Sicht auf eine Repository-Tabelle
• PL/SQL-Zugriff via DBMS_XDB
• Basis für FTP und WebDAV
• Zugriffskontrolle mit ACL
• Versionierung
• Links
• Metadatenverwaltung
XML DB Installation
•
Überprüfen ob Funktionalität installiert ist
mit dba_registry
•
Falls Funktionalität nicht installiert
1. XML DB Repository installieren mit
$ORACLE_HOME/rdbms/admin/catqm.sql
2. HTTP- und FTP -Listener aktivieren
$ORACLE_HOME/rdbms/admin/catxdbdbca.sql
XML DB Konfiguration
Administration im Enterprise Manager
Welche Speichermöglichkeiten für XML?
1. Relationale Speicherung
2. Large Object (speziell als CLOB)
3. „XML aware“ Speicherung mit speziellem Datentyp
Datentypen
Oracle
Datentypen
Built-In
Datentypen
CHAR(n), NCHAR(n)
VARCHAR2(n), NVARCHAR2(n)
RAW(n), LONG RAW
ROWID, UROWID
NUMBER
BINARY_FLOAT, BINARY_DOUBLE
DATE
BLOB, CLOB, NCLOB, BFILE
TIMESTAMP
INTERVAL
Supplied
Data Types
XML Type
Media Types
Spatial Types
Any Types
User-Defined
Types
Object types
Varying Array
(VARRAY)
Nested Table
Ref
Der Datentyp XMLTYPE
• Verwendbar wie jeder andere Datentyp
• in der Spalten- oder Tabellendefinition
• in PL/SQL Logik
• Unterstützt unterschiedliche Speicherformen
Eigenschaften von XMLTYPE
•
•
•
•
•
•
Ist ein Oracle "build in" Datentyp
Zugriff mit XPATH Funktionen und anderen Schnittstellen
möglich
Enthält wohlgeformtes XML Dokument
Kann als CLOB, Objektrelational oder Binary XML
gespeichert werden
Kann Schema konform gespeichert werden
Besitzt XMLTYPE Methodenfunktionen/Konstruktoren in
PL/SQL, C oder Java
•
Beispiel: Enthält Methoden um Schema Validierung und XSL
Transformation durchzuführen
Datentyp XMLTYPE - Beispiele
• Tabelle anlegen
CREATE TABLE xml_tab (x_doc XMLTYPE)
XMLTYPE COLUMN x_doc
STORE AS [clob | object relational | binary xml]
• Beispiel: Objektrelationale Speicherung
CREATE TABLE order_tab(
id
number(10),
order_doc xmltype
)
xmltype column order_doc store as object relational
xmlschema "http://xmldb.oracle.com/purchaseOrder"
element "purchaseOrder"
Intern: Textbasierte Speicherung
SQL> SELECT object_value FROM xml_text WHERE rownum=1;
OBJECT_VALUE
--------------------------------------------------------<PurchaseOrder xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://localhost:8080/home/SCOTT/poSource/
xsd/purchaseOrder.xsd">
<Reference>EABEL-20031209123338324PDT</Reference>
<Actions>
<Action>...
SQL> SELECT e.xmldata FROM xml_text e WHERE rownum=1;
OBJECT_VALUE
--------------------------------------------------------<PurchaseOrder xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://localhost:8080/home/SCOTT/poSource/
xsd/purchaseOrder.xsd">
<Reference>EABEL-20031209123338324PDT</Reference>
<Actions>
<Action>...
Intern: Objektrelationale Speicherung
SQL> SELECT object_value FROM xml_struct WHERE rownum=1;
OBJECT_VALUE
--------------------------------------------------------<PurchaseOrder xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://localhost:8080/home/SCOTT/poSource/
xsd/purchaseOrder.xsd">
<Reference>EABEL-20031209123338324PDT</Reference>
<Actions>
<Action>...
SQL> SELECT e.xmldata FROM xml_struct e WHERE rownum=1;
XMLDATA(SYS_XDBPD$, REFERENCE, ACTIONS(SYS_XDBPD$, ACTION(SYS_XDBPD$,
ACTIONED_B
--------------------------------------------------------------PURCHASEORDER_T(XDB$RAW_LIST_T('23FF0102008400008801003F687474703A2F2F6C6
F63616C686F73743A383038302F686F6D652F53434F54542F706F536F757263652F787364
2F70757263686173654F726465722E787364000102030405060708'),
'EABEL20031209123338324PDT', ACTION
Intern: Binary XML Speicherung
SQL> SELECT object_value FROM xml_bin WHERE rownum=1;
OBJECT_VALUE
--------------------------------------------------------<PurchaseOrder xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://localhost:8080/home/SCOTT/poSource/
xsd/purchaseOrder.xsd">
<Reference>EABEL-20031209123338324PDT</Reference>
<Actions>
<Action>...
SQL> SELECT e.xmldata FROM xml_bin e WHERE rownum=1;
XMLDATA
---------------------------------------------------------------9F01639E000000B203000000030001787369C85DA1DD0001C03E0015687474703A2F2F6C6
F63616C686F73743A383038302F686F6D652F53434F54542F706F536F757263652F787364
2F70757263686173654F726465722E787364C01956E1454142454C2D32303033313230393
13233333338333234504454C83A7CC81AAAC007033F455A4C4F544B4559D9D9C08F3AB8C0
0C1F54456C6C656E20532E204162
Speicherungsformen – Überlegungen I
1. Zugriffe
Nur auf ganze
Dokumente
<document id="2">
<element date="2007-0
<action>
<member name="Ora
:
Textbasierte
Speicherung
Auf einzelne
Dokumentknoten
2. XML Schema ...
Speicherungsformen – Überlegungen II
2. XML Schema
Nicht
vorhanden
110100100100111000100
100101010111010001110
111001000111100001111
100010011110100001000
111100011100011111001
Binary XML
vorhanden
3. Flexibilität ...
Speicherungsformen – Überlegungen III
XML Schema
wird sich
häufig ändern
3. Flexibilität
XML Schema
wird stabil sein
110100100100111000100
100101010111010001110
111001000111100001111
100010011110100001000
111100011100011111001
Binary XML
Objektrelational
Entscheidung über Speicherungsform
• Drei Fragen führen zur richtigen Speicherungsform
• Zugriffe auf ganze Dokumente oder auf Dokumentteile?
• Liegt ein XML Schema vor oder nicht?
• Wird sich das XML Schema ändern oder stabil bleiben?
• Richtige Speicherungsform ist entscheidend!
• Performance-Unterschied: Faktoren
• Durch Tuning (Index, I/O) nicht einzuholen
Beispiel XML: PURCHASEORDER
Objektrelationale Speicherung
XML Schema in der Datenbank
• XML_Schema "Registrierung„ über
• PL/SQL Paket (DBMS_XMLSCHEMA)
• Oracle Enterprise Manager
⇒ Nachbildung der XML-Strukturen als Oracle
Objekttypen
CREATE OR REPLACE
TYPE
"SCOTT"."PURCHASEORDER_T" AS
OBJECT(..."XDB"."XDB$RAW_LIST_T","
Reference" VARCHAR2(26
CHAR),"Actions"
"ACTION_T","Reject"
"REJECT_T","LineItems"
"LINEITEMS_T") FINAL INSTANTIABLE
...
CREATE TABLE
"SCOTT"."PURCHASEORDER" OF
SYS.XMLTYPE XMLSCHEMA
http://www,oracle.com/xdb/po.xsd
...
Abfrageoptimierung mit Query Rewrite
SELECT
xmlquery(...),
...
FROM PURCHASEORDER
Objektrelational gespeicherte
Query Rewrite
SELECT
SYS_NC000015$,
...
FROM PURCHASEORDER
XML-Dokumente
PurchaseOrder
PurchaseOrder
PurchaseOrder
PurchaseOrder
PurchaseOrder
* *LineItem
LineItem
* *LineItem
LineItem
LineItem
11User
11User
User
User
User
Ausführung ohne Query Rewrite
DOM Parsing
SELECT
xmlquery(...),
...
FROM PURCHASEORDER
DOM-Baum
wkn
XML-Dokument
XML Index
• XML Index für Speicherungsformen ...
• Textbasiert und Binary XML
• Nicht für objektrelationale Speicherung
hier wie schon immer: B-Tree Indizes
CREATE INDEX xml_index ON
purchaseorder(object_value)
indextype is xdb.xmlindex parameters (
'PATHS (INCLUDE (/PurchaseOrder/User)
(/PurchaseOrder/LineItems)'
)
Indizierung
• B-Tree Index (Nur objektrelationale Speicherung)
• Indizierung einzelner Knoten oder Attribute
• Function Based Index (Alle Speicherungsformen)
• Oracle TEXT-Index (Alle Speicherungsformen)
• Volltextrecherche, aber keine Bereichssuche
• XML Index (Text- und Binary XML-Speicherung)
• Fragment-Indizierung möglich
• Auch ohne spezielles Vorwissen der XPATH Ausdrücke zu
verwenden
Relationale Sichten auf XML Dokumente
Oracle XML DB
XQuery
XPath
SQL
Transformationen
XML- Sichten
SQL*Net
HTTP / WebDAV
FTP
Recherchen
Relationale Sichten
Relationale Sichten
PURCHASEORDER
Reference
Username
SBELL-20030709333763PDT SBELL
.
.
:
:
:
:
:
:
:
Beispiel
SQL Funktionen – Lesender Zugriff
• Nutzung von Funktionen wie XMLQUERY(),
XMLTABLE(), XMLEXISTS() etc.
• Beispiel für XMLQUERY
SELECT xmlquery('for $i in
/PurchaseOrder/LineItems/LineItem
return $i' PASSING object_value RETURNING CONTENT)
as ausgabe
FROM purchaseorder
WHERE rownum=1;
Zugriff mit SQL – XMLQUERY
• Das Ergebnis
AUSGABE
-----------------------------------------------------------<LineItem ItemNumber="1">
<Description>The Night Porter</Description>
<Part Id="37429145227" UnitPrice="29.95" Quantity="1"/>
</LineItem>
<LineItem ItemNumber="2">
<Description>Rififi</Description>
<Part Id="37429155622" UnitPrice="29.95" Quantity="3"/>
</LineItem>
<LineItem ItemNumber="3">
Zugriff mit SQL – XMLTABLE
• Beispiel
SELECT
x.reference, x.username, x.costcenter
FROM purchaseorder p, xmltable(
'/PurchaseOrder'
passing object_value
columns
reference varchar2(30) path '/PurchaseOrder/Reference',
username
varchar2(30) path '/PurchaseOrder/User',
costcenter varchar2(10) path '/PurchaseOrder/CostCenter'
) x
Zugriff mit SQL – XMLTABLE
• Das Ergebnis
REFERENCE
USERNAME
COSTCENTER
------------------------------ ---------- ---------SBELL-2003070912333763PDT
SBELL
S30
SKING-20030709123336952PDT
SKING
A10
SMCCAIN-20030709123336972PDT
SMCCAIN
A10
LSMITH-20031209123338535PDT
LSMITH
R20
PTUCKER-20031209123338565PDT
PTUCKER
S30
SBELL-20031209123338304PDT
SBELL
S30
SBELL-20031209123338505PDT
SBELL
S30
...
SQL Funktionen zum Bearbeiten
• DML-Kommandos für XML
•
•
•
•
•
updateXML()
insertChildXML()
appendChildXML()
insertXMLbefore()
deleteXML
deleteXML()
• Piecewise Updates = Performance!
• Bei objektrelationaler Speicherung
XML- Sichten auf relationale Dateien
Oracle XML DB
XQuery
XPath
SQL
Transformationen
XML- Sichten
SQL*Net
HTTP / WebDAV
FTP
Recherchen
Relationale Sichten
XML-Sichten
... ganz einfach
EMP
EMPNO
ENAME
JOB
7369
.
:
SMITH
.
:
CLERK
:
http://server:port/oradb/database_schema/table_name
XML-Sichten
Ein Beispiel ... EMP und DEPT
DEPT
1
*
EMP
SQL/XML-Funktionen
• XMLElement()
• XMLAttributes()
• XMLForest
• XMLAgg()
• XMLConcat()
• XMLComment()
• XMLCDATA()
• XMLPI()
• XMLRoot()
• XMLSerialize()
• ...
XML-Sichten ... mit SQL
SELECT xmlelement("Department",
xmlattributes(deptno as "id"),
xmlelement("name", d.dname),
xmlagg(xmlelement ("DepartmentWorker",
xmlattributes(e.empno as "id"),
xmlforest(e.ename as "ename",e.sal as "salary"))))
AS xml_spalte
FROM scott.dept d LEFT OUTER JOIN scott.emp e
USING (deptno)
GROUP BY deptno, d.dname;
XML-Sichten
XML-Sichten mit XQuery
sql> xquery
for $dept in ora:view("dept")/ROW
return <department id="{$dept/DEPTNO}">
<name>{$dept/DNAME/text()}</name>
{for $emp in ora:view("emp")/ROW
where $emp/DEPTNO = $dept/DEPTNO
return <employee id="{$emp/EMPNO}">
<ename>{$emp/ENAME/text()} </ename>
<salary>{$emp/SAL}</salary> </employee>}
</department>
XML-Sichten auch mit Stylesheet
http://server:port/oradb/<db-user>/<table_name>/ROW
?transform=/oradb/<db-user>/<stylesheet table>/...
&contenttype=text/html...
Exkurs: Weitere Funktionen
"Original und Fälschung" ... für XML
• 1. Dokument ...
<vortrag xmlns
xmlns=
=„bookstore"
titel=
titel="Oracle XML DB"/>
DB"/>
• 2. Dokument ...
<s:vortrag xmlns:s
xmlns:s=
=„bookstore"
titel=
titel="Oracle XML DB">
DB">
</s:vortrag>
Welche Unterschiede gibt es
zwischen diesen Dokumenten ...?
Deltas erkennen ... aber wie?
• XML: Das Gleiche unterschiedlich aussagen ...
•
•
•
•
Namespace-Präfix
XML-Tags ohne Inhalt
Whitespace
Entity-Referenzen
<vortrag xmlns=
xmlns=„bookstore"/>
„bookstore"/>
<vortrag></vortrag>
xmlns:s=
<s:vortrag
xmlns:s="oracle"oracle-sig"/>
sig"/>
<vortrag>
</vortrag>
<vortrag/>
<vortrag>"
"</vortrag>
<vortrag>
"</vortrag>
<vortrag>
</vortrag>
<vortrag>"
<vortrag>
"</vortrag>
• Einfacher Textvergleich greift zu kurz!
Deltas erkennen mit SQL
• SQL-Funktionen XMLDiff und XMLPatch
• Deltas erkennen (XMLDiff) ...
... und auf andere Dokumente anwenden (XMLPatch)
• Deltas zwischen Systemen übertragen ...
... mit Rücksicht auf XML-Besonderheiten!
<xd:xdiff
xsi:schemaLocation="http://xmlns.oracle.com/xdb/xdiff.xsd
http://xmlns.oracle.com/xdb/xdiff.xsd"
xmlns:xd="http://xmlns.oracle.com/xdb/xdiff.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<?oracle-xmldiff operations-in-docorder="true" outputmodel="snapshot" diff-algorithm="global"?>
<xd:delete-node xd:node-type="text"
xd:xpath="/email[1]/body[1]/text()[1]"/>
</xd:xdiff>
XML Features - Zusammenfassung
•
•
•
•
•
•
•
•
XMLTYPE Datentyp
XML Schema Support
XML SQL Duality
XPath und XQuery
DOM Fidelity
Web Services
XML Index
...
Weitere Informationen
• Oracle XML DB Developer's Guide 11g:
http://docs.oracle.com/cd/E11882_01/appdev.112/
e23094/toc.htm
• OTN
http://www.oracle.com/technetwork/database/feat
ures/xmldb/index-093086.html
Herunterladen