Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Oracle und XML: Ein Überblick

Ähnliche Präsentationen


Präsentation zum Thema: "Oracle und XML: Ein Überblick"—  Präsentation transkript:

1 Oracle und XML: Ein Überblick
Rudolf Jansen Freiberuflicher Entwickler und Autor DOAG Regionaltreffen NRW, © 2003, Rudolf Jansen

2 Agenda Oracle XML-DB Generierung von XML XML-Repository
Einleitung Oracle XML-DB Generierung von XML XML-Repository XML Developer‘s Kits Zusammenfassung © 2003, Rudolf Jansen

3 Einleitung Warum XML-Integration?
- Zusammenfügen von zwei Standards: a) relationale Datenbanken b) XML als Datenaustauschformat - Konkurrenz durch reine XML-Datenbanken? Bisherige Integrationsansätze Speicherung von XML-Dokumenten als CLOB (Oracle 8i) Vorteil: Zentraler Speicherort für alle Daten (XML und Nicht-XML) Nachteile: Zugriff auf XML-Dokument nur als Ganzes Kombination mit relationalen Daten schwierig © 2003, Rudolf Jansen

4 Einleitung - XML DB Externe Tools Browser SQL-Net-Zugriff http
JDBC-Applikation Browser SQL-Net-Zugriff http ftp WebDAV Oracle 9i Rel.2 -Datenbank XML-DB XML-Repository XMLType-Tabellen © 2003, Rudolf Jansen

5 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

6 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> </Person> ')); © 2003, Rudolf Jansen

7 XML DB - Datentyp XMLType
select p.prs_data.getClobVal() from person p; P.PRS_DATA.GETCLOBVAL() <Prs_Data> <Prs_Vorname>Willi</Prs_Vorname> <Prs_Name>Schmitz</Prs_Name> <Prs_Adresse> <Adr_Strasse>Hauptstrasse</Adr_Strasse> <Adr_Hausnr>47</Adr_Hausnr> <Adr_Plz>12345</Adr_Plz> <Adr_Ort>Entenhausen</Adr_Ort> </Prs_Adresse> </Prs_Data> © 2003, Rudolf Jansen

8 XML DB - Datentyp XMLType
UPDATE von skalaren XML-Elementen: update person p set prs_data = UPDATEXML(prs_data, '/Prs_Data/Prs_Adresse/Adr_Plz/text()', '55555', '/Prs_Data/Prs_Adresse/Adr_Ort/text()', 'IBM-Stadt') where prs_nr=2; © 2003, Rudolf Jansen

9 XML DB - Datentyp XMLType
UPDATE von Teilbäumen: update person_xml p set value(p) = UPDATEXML(value(p),'/Person/Prs_Adresse', XMLTYPE(' <Prs_Adresse> <Adr_Strasse>DB2-Strasse</Adr_Strasse> <Adr_Hausnr>2</Adr_Hausnr> <Adr_Plz>55555</Adr_Plz> <Adr_Ort>IBM-Stadt</Adr_Ort> </Prs_Adresse> ')); © 2003, Rudolf Jansen

10 XML DB - XPath Standard zur Navigation durch XML-Dokumente
existsNode() select count(*) from person_xml p where existsNode( value(p), '/Person/Prs_Adresse/Adr_Plz')=1; extractValue(): Zugriff auf skalare Einträge in einer XMLType-Spalte select extractValue( value(p), '/Person/Prs_Id') as id_with_plz from person_xml p where existsNode( value(p), '/Person/Prs_Adresse/Adr_Plz')=1 © 2003, Rudolf Jansen

11 XML DB - XPath extract (): Zugriff auf Teilbaum einer XMLType-Spalte select extract( as erste_post_adresse from person_xml p where existsNode( value(p), '/Person/Prs_Adresse/Adr_Plz')=1 ERSTE_POST_ADRESSE <Prs_Adresse Adr_Id="1"> <Adr_Strasse>Hauptstrasse</Adr_Strasse> <Adr_Hausnr>47</Adr_Hausnr> <Adr_Plz>12345</Adr_Plz> <Adr_Ort>Entenhausen</Adr_Ort> </Prs_Adresse> © 2003, Rudolf Jansen

12 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

13 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

14 XML DB - XML-Schema 1.Schritt: Registrieren einer XML-Schema-Definition: DECLARE xmlschema_doc varchar2(1000) := '<schema targetNamespace= > <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(' xmlschema_doc); END; © 2003, Rudolf Jansen

15 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

16 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 ELEMENT "Person"; desc person_mit_xml_schema_spalte; Name Null? Typ PRS_ID NUMBER PRS_DATA SYS.XMLTYPE(XMLSchema Element "Person") STORAGE Object-relational TYPE "PersonType_T" © 2003, Rudolf Jansen

17 Agenda XML-DB Generierung von XML XML-Repository XML Developer‘s Kits
Einleitung XML-DB Generierung von XML XML-Repository XML Developer‘s Kits Zusammenfassung © 2003, Rudolf Jansen

18 Generierung von XML Aufgabenstellung: Generierung eines XML-Dokumentes aus relational abgespeicherten Daten Lösungsmöglichkeiten: Oracle-eigene SQL-Funktionen PL/SQL-Package DBMS_XMLGEN SQLX-Funktionen Datentyp UriType © 2003, Rudolf Jansen

19 Generierung von XML Oracle-eigene SQL-Funktionen SYS_XMLGEN()
SYS_XMLAGG() Beispiel: create table person_rel( prs_id number, prs_vorname varchar2(20), prs_nachname varchar2(20) ); © 2003, Rudolf Jansen

20 Generierung von XML SYS_XMLGEN()-Funktion
operiert auf Zeilenebene, also ein Rückgabewert pro Ergebniszeile select sys_xmlgen(prs_id) from person_rel; SYS_XMLGEN(PRS_ID) <PRS_ID>1</PRS_ID> <PRS_ID>2</PRS_ID> © 2003, Rudolf Jansen

21 Generierung von XML SYS_XMLGEN()-Funktion
Umwandlung von benutzerdefinierten Datentypen create or replace type telefon_t as object ( vorwahl varchar2(6), rufnr number(10) ); create or replace type telefon_list as VARRAY(2) OF telefon_t; create table adresse_rel( adr_id number, ... adr_telefon telefon_list ); © 2003, Rudolf Jansen

22 Generierung von XML SYS_XMLGEN()-Funktion
select sys_xmlgen(adr_telefon) from adresse_rel; SYS_XMLGEN(ADR_TELEFON) <ADR_TELEFON> <TELEFON_T> <VORWAHL>089</VORWAHL> <RUFNR>1111</RUFNR> </TELEFON_T> <TELEFON_T> <VORWAHL>0172</VORWAHL> <RUFNR> </RUFNR> </TELEFON_T> </ADR_TELEFON> © 2003, Rudolf Jansen

23 Generierung von XML SYS_XMLAGG()-Funktion
operiert nicht auf Zeilenebene, sondern auf der gesamten Ergebnismenge erzeugt ein XML-Dokument mit einem XML-Element pro Zeile Beispiel: select sys_xmlagg( sys_xmlgen(adr_telefon)) from adresse_rel; © 2003, Rudolf Jansen

24 Generierung von XML DBMS_XMLGEN-Package:
Anforderungen z.B. in Webanwendungen: Festlegung der Anzahl Datensätze pro Seite mehrmaliges Durchlaufen der Ergebnismenge (Scrollen) Konfiguration der XML-Dokumente (explizite Angabe von Tagnamen) SQL-Funktionen SYS_XMLGEN und SYS_XMLAGG sind dazu nicht flexibel genug © 2003, Rudolf Jansen

25 Generierung von XML DBMS_XMLGEN-Package:
declare queryContext DBMS_XMLGEN.ctxHandle; xmlResult XMLType; zaehler number := 1; begin Context mit Select-Abfrage initialisieren queryContext := DBMS_XMLGEN.newContext( 'select adr_id, adr_strasse, adr_plz, adr_ort from adresse_rel'); Anzahl der Zeilen pro Zugriff setzen DBMS_XMLGEN.setMaxRows(queryContext, 2); Tagnamen setzen DBMS_XMLGEN.setRowTag(queryContext,'PRS_ADRESSE'); DBMS_XMLGEN.setRowSetTag(queryContext, 'ADRESSENLISTE'); © 2003, Rudolf Jansen

26 Generierung von XML DBMS_XMLGEN-Package: -- Schleife für die Zugriffe (2 Zeilen pro Schleifendurchlauf) loop xmlResult := DBMS_XMLGEN.getXMLType(queryContext); Schleifenende, wenn alle Zeilen der Select-Abfrage bearbeitet wurden exit when DBMS_XMLGEN.getNumRowsProcessed(queryContext) = 0; Ergebnis verarbeiten insert into query_Results values (zaehler, xmlResult); zaehler := zaehler + 1; end loop; -- Context schließen DBMS_XMLGEN.closeContext(queryContext); end; / © 2003, Rudolf Jansen

27 Generierung von XML SQLX-Standard:
SQLX (SQL/XML): Versuch, die Schnittstelle zwischen SQL und XML zu standardisieren SQLX-Standard ist noch in der Entwicklung Oracle 9i Rel. 2 bietet erste Auswahl von SQLX-Funktionen: - XMLElement() - XMLForest() - XMLAgg() - XMLConcat() Ähnlich den Oracle-eigenen Funktionen SYS_XMLGEN() und SYS_XMLAGG() © 2003, Rudolf Jansen

28 Agenda XML-DB Generierung von XML XML-Repository XML Developer‘s Kits
Einleitung XML-DB Generierung von XML XML-Repository XML Developer‘s Kits Zusammenfassung © 2003, Rudolf Jansen

29 XML-Repository Ziel: „Einsatz der Datenbank als Dateisystem“
Zugriff über FTP, HTTP, WebDAV (Web Distributed Authoring and Versioning) © 2003, Rudolf Jansen

30 XML-Repository Installation:
HTTP-Zugriff über Oracle XML DB Protokoll Server: Session-Pool für FTP-, HTTP- und WebDAV-Zugriffe © 2003, Rudolf Jansen

31 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

32 XML-Repository HTTP-Zugriff auf neu angelegten Ordner über Webbrowser:
© 2003, Rudolf Jansen

33 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

34 XML-Repository Externe Anwendung (Explorer, Browser, FTP-Client)
Http-, FTP-, WebDAV-Zugriff Oracle 9i - Datenbank XML-Repository-Ressource adressenliste.xml adressen_view XMLType-View Relationale Tabellen adresse_rel person_rel © 2003, Rudolf Jansen

35 XML-Repository © 2003, Rudolf Jansen

36 XML-Repository © 2003, Rudolf Jansen

37 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

38 XML-Repository © 2003, Rudolf Jansen

39 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

40 Agenda XML-DB Generierung von XML XML-Repository XML Developer‘s Kits
Einleitung XML-DB Generierung von XML XML-Repository XML Developer‘s Kits Zusammenfassung © 2003, Rudolf Jansen

41 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

42 XML Developer‘s Kits (XDK)
© 2003, Rudolf Jansen

43 XML Developer‘s Kits (XDK)
XML Parser: DOM 2.0 SAX 2.0 JAXP 1.1 DTD-Validierung XML-Schema-Validierung Aufruf über Java-Klassen DOMParser bzw. SAXParser oder über Kommandozeilentool oraxml Grundlage bzw. Bestandteil der weiteren XDK-Komponenten © 2003, Rudolf Jansen

44 XML Developer‘s Kits (XDK)
XML Schema Prozessor: baut auf XML Parser auf Aufruf über DOMParser.setSchemaValidationMode() XSLT Prozessor: Formatumwandlung von XML-Dateien Vielzahl von Zielformaten: HTML, ASCII, XML, ... Aufruf über Java-Klassen XSLProcessor oder Kommandozeilentool oraxsl XML Class Generator: Automatische Generierung von Java-/C++-Klassen auf der Basis von DTD- oder XML-Schema-Definitionen Aufruf über Java-Klassen SchemaClassGenerator bzw DTDClassGenerator oder Kommandozeilentool oracg © 2003, Rudolf Jansen

45 XML Developer‘s Kits (XDK)
XML SQL Utility (XSU): Sammlung von Java-Klassen für Umwandlungen zwischen XML-Welt und Datenbank Kernfunktionalitäten: Generierung von XML-Dokumenten basierend auf SQL-Abfragen Ausführung von DML-Operationen (Insert, Update, Delete) ausgehend von einem XML-Dokument Generierung von XML-Schema-Definitionen und DTDs, die die Tabellenstruktur eines Datenbankschemas nachbilden Ausführung über Java-API PL/SQL-API Kommandozeilentool © 2003, Rudolf Jansen

46 XML Developer‘s Kits (XDK)
Generierung von XML-Dokumenten: conn = DriverManager.getConnection( user, password); OracleXMLQuery xmlQuery = new OracleXMLQuery( conn, "select * from adresse_rel"); System.out.println(" XML-Ergebnis:\n" xmlQuery.getXMLString()); xmlQuery.close(); © 2003, Rudolf Jansen

47 XML Developer‘s Kits (XDK)
Generierung von XML-Dokumenten: conn = DriverManager.getConnection( user, password); Statement stmt = conn.createStatement(); resSet = stmt.executeQuery("select * from adresse_rel"); OracleXMLQuery xmlQuery = new OracleXMLQuery( conn, resSet); // Maximal zwei Adressen pro Ausgabe xmlQuery.setMaxRows(2); System.out.println(" Erste Seite:\n" + xmlQuery.getXMLString()); // die naechste Adresse ueberpringen xmlQuery.setSkipRows(1); System.out.println(" Zweite Seite:\n" + xmlQuery.getXMLString()); xmlQuery.close(); © 2003, Rudolf Jansen

48 XML Developer‘s Kits (XDK)
Insert-Operationen: OracleXMLSave xmlSave = new OracleXMLSave( conn, "person_rel"); xmlSave.insertXML(xmlSave.getURL(argv[0])); xmlSave.close(); © 2003, Rudolf Jansen

49 XML Developer‘s Kits (XDK)
Update-Operationen: OracleXMLSave xmlSave = new OracleXMLSave( conn, "person_rel"); // Schlüsselspalte(n) für den Update-Befehl festlegen String[] pkColumnNames = new String[1]; pkColumnNames[0] = "PRS_ID"; xmlSave.setKeyColumnList(pkColumnNames); xmlSave.updateXML(xmlSave.getURL(argv[0])); xmlSave.close(); © 2003, Rudolf Jansen

50 XML Developer‘s Kits (XDK)
Update-Operationen: Input: <ROWSET> <ROW num="1"> <PRS_ID>1</PRS_ID> <PRS_NACHNAME>Schmidt</PRS_NACHNAME> </ROW> <ROW num="2"> <PRS_ID>2</PRS_ID> <PRS_VORNAME>Heinz</PRS_VORNAME> </ROW> </ROWSET> Durchgeführte UPDATE-Befehle: UPDATE person_rel SET prs_nachname=‘Schmidt‘ WHERE prs_id=1; UPDATE person_rel SET prs_vorname=‘Heinz‘ WHERE prs_id=2; © 2003, Rudolf Jansen

51 XML Developer‘s Kits (XDK)
XSQL-Servlet Web-Server HTTP XSQL-Servlet Client XMLParser SQL XML-SQL- JDBC-Datenbank HTML, XML, ... XSLT-Prozessor Utility (XSU) Stylesheets © 2003, Rudolf Jansen

52 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_tabelle.xsl"?> <xsql:query connection="testdbconnection" xmlns:xsql="urn:oracle-xsql"> SELECT prs_id, prs_vorname, prs_nachname from person_rel </xsql:query> © 2003, Rudolf Jansen

53 XML Developer‘s Kits (XDK)
XSQL-Servlet Servlet-Engine-Konfiguration: Registrieren der Dateiendung .xsql mit XSQL-Servlet Aufruf: Konsolenaufruf: java oracle.xml.xsql.XSQLCommandLine person_select_mit_xslt.xsql person_select_mit_xslt_ergebnis.html © 2003, Rudolf Jansen

54 XML Developer‘s Kits (XDK)
XSQL-Servlet © 2003, Rudolf Jansen

55 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

56 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 Seiten ISBN © 2003, Rudolf Jansen


Herunterladen ppt "Oracle und XML: Ein Überblick"

Ähnliche Präsentationen


Google-Anzeigen