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