EAI mit XML

Werbung
Einsatz der XML-Features der Oracle 9i DB
zur Systemintegration
Rudolf Jansen
Freiberuflicher Entwickler und Autor
[email protected]
http://www.rudolf-jansen.de
DOAG-SIG Development, 11.11.2003
© 2003, Rudolf Jansen
Agenda
• Oracle XML DB
• Oracle XML Repository
• XML Developer`s Kits (XDK)
• Zusammenfassung
© 2003, Rudolf Jansen
Einleitung - XML DB
JDBC-Applikation
Browser
SQL-NetZugriff
http
Externe Tools
ftp WebDAV
Oracle 9i Rel.2 -Datenbank
XML-DB
XML-Repository
XMLType-Tabellen
© 2003, Rudolf Jansen
XML DB - Datentyp XMLType
•XMLType als Spaltentyp
create table person (
prs_nr number,
prs_data XMLTYPE
);
•XMLType als Tabellentyp ( ab 9i
Rel.2 )
CREATE TABLE person_xml of XMLTYPE;
© 2003, Rudolf Jansen
XML DB - Datentyp XMLType
INSERT INTO person_xml VALUES
(XMLType('
<Person>
<Prs_Id>1</Prs_Id>
<Prs_Vorname>Willi</Prs_Vorname>
<Prs_Name>Schmitz</Prs_Name>
<Prs_Adresse>
<Adr_Strasse>Hauptstrasse</Adr_Str
asse>
<Adr_Hausnr>47</Adr_Hausnr>
<Adr_Plz>12345</Adr_Plz>
<Adr_Ort>Entenhausen</Adr_Ort>
</Prs_Adresse>
© 2003, Rudolf Jansen
</Person>
XML DB - Datentyp XMLType
• Indexbildung
CREATE INDEX plz_index ON person
(prs_data.extract
('/PRS_DATA//PRS_ADRESSE/ADR_PLZ/text()').getNumberVal());
• Validierungsmöglichkeiten
- Constraints
create table person (
prs_nr number,
prs_data XMLTYPE NOT NULL
);
- Trigger
© 2003, Rudolf Jansen
XML DB - Datentyp XMLType
Speicheroptionen
• Unstrukturiert als LOB
+ Zugriff auf Gesamtdokument performant
+ Einfügen von XML mit variabler Struktur möglich
- SELECT und UPDATE von einzelnen Elementen
aufwendig
• Strukturiert über objektrelationale Tabellen
Voraussetzung: XML-Schema-Definition
-> Definition von SQL-Objekten, die dem XML-Schema
entsprechen
+ Zugriff auf einzelne Elemente schneller
+ geringerer Speicherbedarf (Tagnamen brauchen nicht
gespeichert werden)
© 2003, Rudolf Jansen
XML DB - XML-Schema
• W3C-Standard zur Festlegung von Inhalt und Struktur
von XML-Dokumenten
• Voraussetzung für strukturierte Speicherung
• Vorteil: Struktur der XML-Dokumente, die in eine Spalte
eingetragen werden sollen, ist bereits bekannt
-> passende Speicherobjekte können im voraus angelegt
werden
• Bei Eintrag von Daten, die auf dem XML-Schema beruhen:
- Aufsplitten der Daten in einzelne Bestandteile
- (objekt-)relationale Speicherung dieser Einzelbestandteile
- spätere UPDATEs nicht auf dem Gesamtdokument,
sondern nur in den betroffenen Bestandteilen
© 2003, Rudolf Jansen
XML DB - XML-Schema
• 1.Schritt: Registrieren einer XML-Schema-Definition:
•DECLARE
xmlschema_doc varchar2(1000) := '<schema targetNamespace=http://www.xyz.de/person.xsd
...>
<complexType name="PersonType">
<sequence>
<element name="Prs_Id" type="decimal"/>
...
<element name="Prs_Adresse">
<complexType>
<sequence>
<element name="Adr_Strasse" type="string"/>
...
<element name="Adr_Ort" type="string"/>
</sequence>
</complexType>
</element>
</sequence>
</complexType>
<element name="Person" type="adr:PersonType"/>
</schema>';
BEGIN
DBMS_XMLSCHEMA.REGISTERSCHEMA('http://www.xyz.de/person.xsd', xmlschema_doc);
END;
© 2003, Rudolf Jansen
XML DB - XML-Schema
•2.Schritt: (Automatische) Erzeugung passender Speicherobjekte
create type PersonType_t (
Prs_Id
NUMBER,
Prs_Vorname VARCHAR2(4000),
Prs_Nachname VARCHAR2(4000),
Prs_Adresse TEST.Prs_Adresse_t
);
create type Prs_Adresse_t (
Adr_Strasse VARCHAR2(4000),
Adr_Hausnr NUMBER,
Adr_Plz
NUMBER,
Adr_Ort
VARCHAR2(4000)
);
© 2003, Rudolf Jansen
XML DB - XML-Schema
3.Schritt: XML-Schema-Angabe bei Tabellendefinition
create table person_mit_xml_schema_spalte(
prs_id number,
prs_data XMLType
) XMLType column prs_data
XMLSCHEMA http://www.xyz.de/person.xsd
ELEMENT "Person";
desc person_mit_xml_schema_spalte;
Name
Null?
Typ
--------- -------- -------------------------------PRS_ID
NUMBER
PRS_DATA
SYS.XMLTYPE(XMLSchema
http://www.xyz.de/person.x
STORAGE Object-relational
TYPE "PersonType_T"
© 2003, Rudolf Jansen
Agenda
• Oracle XML DB
• Oracle XML Repository
• XML Developer`s Kits (XDK)
• Zusammenfassung
© 2003, Rudolf Jansen
XML-Repository
• Ziel: „Einsatz der Datenbank als Dateisystem“
• Zugriff über FTP, HTTP, WebDAV (Web Distributed Authoring
and Versioning)
© 2003, Rudolf Jansen
XML-Repository
• Installation:
• HTTP-Zugriff über Oracle XML DB Protokoll Server:
Session-Pool für FTP-, HTTP- und WebDAV-Zugriffe
© 2003, Rudolf Jansen
XML-Repository
• XML-Repository : Hierarchische Verzeichnisstruktur
• Verzeichnisse enthalten Ressourcen (XMLType-Instanzen)
• PL/SQL-Package DBMS_XDB zum Anlegen und Verwalten
von Ressourcen.
• Beispiele:
DBMS_XDB.createfolder('/home');
DBMS_XDB.createfolder('/home/xmltest');
• Ähnlichkeit zu UNIX-Dateisystemen
© 2003, Rudolf Jansen
XML-Repository
•HTTP-Zugriff auf neu angelegten Ordner über Webbrowser:
© 2003, Rudolf Jansen
XML-Repository
•Anlegen von Inhalten:
DECLARE
retValue BOOLEAN;
xmlDoc SYS.XMLType;
BEGIN
select SYS_XMLAGG(value(a))
into xmldoc
from adressen_view a;
retValue:= DBMS_XDB.createresource(
'/home/xmltest/adressenliste.xml', xmldoc);
commit;
END;
© 2003, Rudolf Jansen
XML-Repository
Externe Anwendung
(Explorer, Browser, FTP-Client)
Http-, FTP-,
WebDAV-Zugriff
Oracle 9i - Datenbank
adressenliste.xml
adressen_view
adresse_rel
person_rel
XMLRepositoryRessource
XMLTypeView
Relationale
Tabellen
© 2003, Rudolf Jansen
XML-Repository
© 2003, Rudolf Jansen
XML-Repository
© 2003, Rudolf Jansen
XML-Repository
• Externer Eintrag von Dateien in das XML-Repository
• Beispiel:
Datei neue_adressenliste.xml aus dem Windows-Dateisystem
• Eintrag per Drag&Drop in den XML-Repository-Ordner des
Windows Explorers
© 2003, Rudolf Jansen
XML-Repository
© 2003, Rudolf Jansen
XML-Repository
Weitere Funktionen (analog UNIX)
• Anlegen von Links
DBMS_XDB.link('/home/xmltest/adressenliste.xml',
'/public', 'adressenliste.xml');
• Sicherheitskonzept:
– Rechtevergabe über Access Control Lists (ACL)
– Rechte pro Ressource oder auch für komplette Teilbäume
• XML DB Versioning:
– „Versionskontrolle in der Datenbank“
– Verwaltung mehrerer Versionen von
XML-Repository-Ressourcen
– derzeit noch keine Versionskontrolle von normalen
relationalen Datenbankinhalten
© 2003, Rudolf Jansen
Agenda
• Oracle XML DB
• Oracle XML Repository
• XML Developer`s Kits (XDK)
• Zusammenfassung
© 2003, Rudolf Jansen
XML Developer‘s Kits (XDK)
• Sammlung von Tools für die Schnittstelle von XML und
(Oracle-)Datenbank
• Einsatzgebiete:
– Anbindung von XML-Systemen an bestehende
Datenbanken mit relational gespeicherten Daten
– Neue Projekte: lose Kopplung zwischen XML und DB
• Programmiersprachen: Java, C, C++, PL/SQL
• Einsatz mit jeder Datenbank, für die es JDBC-Treiber gibt
• Vorteil: Klare Trennung zwischen XML und SQL
– Portabilität (Datenbankwechsel)
– KnowHow-Trennung
(XML-Entwickler und DB-Entwickler)
© 2003, Rudolf Jansen
XML Developer‘s Kits (XDK)
XDK-Komponente
Java
C++
C
PL/SQL
XML Parser
X
X
X
X
XSLT Prozessor
X
X
X
X
XML Schema Prozessor
X
X
X
x
XML Class Generator
X
X
XML SQL Utility
X
XSQL Servlet
X
XML Transviewer Java Beans x
TransXUtility
x
Oracle SOAP
X
XML Compressor
x
© 2003, Rudolf Jansen
X
XML Developer‘s Kits (XDK)
XSQL-Servlet
Web-Server
HTTP
Client
HTML, XML, ...
XSQL-Servlet
XMLParser
XSLT-Prozessor
XML-SQLUtility (XSU)
Stylesheets
© 2003, Rudolf Jansen
SQL
JDBCDatenbank
XML Developer‘s Kits (XDK)
XSQL-Servlet
•Ausgangsbasis: XSQL-Page
•Beispiel: Datei person_select_mit_xslt.xsql
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="person
<xsql:query connection="testdbconnection"
xmlns:xsql="urn:oracle-xs
SELECT prs_id, prs_vorname, prs_nachname
</xsql:query>
© 2003, Rudolf Jansen
XML Developer‘s Kits (XDK)
XSQL-Servlet
•Servlet-Engine-Konfiguration:
Registrieren der Dateiendung .xsql mit XS
• Aufruf:
– http://localhost:8080/xsql/person_select_m
– Konsolenaufruf:
java oracle.xml.xsql.XSQLCommandLine
person_select_mit_xslt.xsql
person_select_mit_xslt_ergebnis.html
© 2003, Rudolf Jansen
XML Developer‘s Kits (XDK)
XSQL-Servlet
© 2003, Rudolf Jansen
Zusammenfassung
•Vielzahl von Integrationsmöglichkeiten
• Lose Kopplung (XML Developer‘s Kit)
• Enge Kopplung (Datentyp XMLType)
• Entscheidungskriterien:
– Bindung an DB-Hersteller kritisch?
(Migrationsarbeiten)
– Entwickler-KnowHow (XML und/oder SQL)
– Zentrale Administration durch XML-Repository
(„Datenbank als Dateisystem“)
© 2003, Rudolf Jansen
Literatur
• OTN-Webseiten http://otn.oracle.com
– Dokumentation
– XML Developer‘s Kits (aktuelle Version)
– Sourcecode-Beispiele
• „Oracle, Java, XML. Integration in Oracle 9i“
Rudolf Jansen
Software&Support Verlag
360 Seiten
ISBN 3-935042-33-7
© 2003, Rudolf Jansen
Herunterladen