Oracle XML Datenbank Ralf Mueller Server Technologies Oracle Corporation Agenda XML in der Datenbank Speicherformen für XML-Dokumente, Datenbankansätze, Oracle XML Technologie, Architektur der Oracle XML-Datenbank, Installation + Konfiguration XML-Speicherstrukturen Festlegung der Speicherungsform, XML Schema, Registrierung, objektrelationale Strukturen Umgang mit XML-Dokumenten Speichern und Abrufen von XML-Dokumenten; Verbindung mit SQL; Protokollzugriff XML in der Praxis – Szenarien und Implementierung Implementierung der Szenarien mit der XML-Datenbank, Zusammenspiel mit OracleTechnologie Warum XML in der Datenbank ...? ... und nicht einfach im Dateisystem? Warum XML in der Datenbank ... ... und nicht im Dateisystem? relationale Daten bereits vorhanden – – Kombination mit XML Dokumenten Ausgabe als XML-Dokument Erweiterung des XML-Datenmodells – – – – – Zusätzliche Datenbankvalidierung Transaktionskonzept Datennahe Sicherheitskonzepte Datennahe Logik ... XML Standards XML – W3C DOM – W3C XPath – W3C XML Schema – W3C XSL and XSLT – W3C WebDAV - IETF SQL/XML – ANSI/ISO Wie speichert man XML-Dokumente in Datenbanken ...? Herausforderungen Abruf als XML relationale Datenbestände Beispiele: - heterogene Systeme - XML Schnittstellen - Versorgung des Workflow - Abruf per HTTP oder FTP Herausforderungen Abruf mit SQL Beispiele: - XML als Austauschformat im e-Business - Sammlung und Aggregation im DWH - DWH-Versorgung aus heterogenen Systemen XML-Dokumente Überführung in DWH oder andere Anwendung Herausforderungen Beispiele: - XML Dokumente nativ speichern (jur. Gründe) - Validitätsprüfung gegen Stammdaten in einer relationalen Datenbank - Validierung im laufenden Workflow Integritätsbedingungen relationale Datenbestände XML Datenbestände Herausforderungen Referentielle Integrität in XML XML-Datenmodell referentielle Integrität – – – ID IDREF IDREFS Dokumentbezogen Herausforderungen Referentielle Integrität in XML XML-Datenmodell referentielle Integrität – – – ID IDREF IDREFS Dokumentbezogen Das Dokument kann ohne weiteres nicht verlassen werden 1. Lösungsansatz relationale Speicherung Zwei-Tabellen-Modell ID 1 2 3 4 5 6 TYPE VALUE ELE ELE ELE TEX ATT TEXT Order Kunde Name Mustermann id 4711 ID 1 2 3 4 5 6 PARENT_ID NULL 1 2 3 1 5 1. Lösungsansatz • Semantik aus Tabellen nicht nachvollziehbar • Schwierige Integration • z.B. Stammdatentabellen • • • • Tuning schwierig Indizierung schwierig Volltextsuche schwierig Komplexe JOIN-Operationen 2. Lösungsansatz relationale Speicherung Fachliches Datenmodell KUNDEN ID NAME DEPOT 1 Muster 2 Meier 3 Schmitt 4711 4712 4713 ID WERTPAPIER 1 VW AG 2 Oracle Corp. 3 Sun Microsys. 2. Lösungsansatz • • • • • • Semantik nachvollziehbar einfache Integration mit anderen Tabellen Tuning für bestimmte Abfragen möglich Volltextsuche schwierig Komplexe Logik (Dokumentzerlegung) Informationsverluste gute Eignung, wenn XML als reines Transportformat dient und die relationale Tabellenform im Vordergrund steht. 3. Lösungsansatz • • • • • • Reine XML-Datenbank "native" XML-Speicherung für XML Strukturen optimiert gute XML Schnittstellen gute XML-Indizierung Integration mit relationalen Daten schwierig • • Locking-Verhalten Referentielle Integrität Native XML-Speicherung XML:DB Initiative Definition – Unterstützt das XML-Datenmodell Elemente, Attribute, PCDATA, Kommentare, ... – – – Garantiert 1:1-Wiederherstellung des XMLDokumentes Unterstützt standardkonforme Abfragesprachen Ist unabhängig von physikalischer Speicherung! Oracle XML DB: Architektur User XDB: XML DB Repository HTTP FTP XML Schema User SCOTT: XML Dokumente SQL*NET Oracle Shared Server WebDAV FTP Installation der XML DB Softwareinstallation – Keine Besonderheiten, automatisch bei der DBKonfiguration, zusätzliches Schema XDB, FTP und HTTP-Portkonfiguration Datenbankerstellung Installation der XML DB Installation der XML DB Voraussetzungen: – – – R2 Standard oder Enterprise Edition Oracle Java VM Shared Server um Protokolle zu nutzen Manuelle Installation in eine bestehende Datenbank – – $ORACLE_HOME/rdbms/admin/catqm.sql [XDB-Passwort] [XDB-TS] [TEMP-TS] $ORACLE_HOME/rdbms/admin/catxdbj.sql Deaktivieren der XML DB – – $ORACLE_HOME/rdbms/admin/catnoqm.sql Datenbank neu starten TCP/IP Port für FTP und HTTP TCP/IP Port für FTP und HTTP Manuelle Änderung der Ports über Skripts – $ORACLE_HOME/rdbms/admin/catxdbdbca.sql [ftp-port] [http-port] Protokollserver abschalten – Jeweiligen Port auf "0" setzen XML DB Repository xdb$resource Table Name ACL Property Property Property 1 N N Resource_view FTP HTTP B Tree Index Text Index Hierarchical Index XML Tabellen im User Schema Das Repository RESOURCE_VIEW SQL> desc path_view Name ----------------------------------------PATH RES LINK SQL> desc resource_view Name ----------------------------------------RES ANY_PATH PATH_VIEW Null? Type -------- -------------------------VARCHAR2(1024) SYS.XMLTYPE SYS.XMLTYPE Null? Type -------- ------------------------SYS.XMLTYPE VARCHAR2(4000) Folder anlegen PL/SQL declare result boolean; begin result := dbms_xdb.createFolder('/public/<Ein Name>'); end; COMMIT; per FTP oder im WebDAV-Client Unterschiedliche Speicherarten Die Speicherart richtet sich nach den Anforderungen der Anwendung: Clob Nativ als Dokument Relational Nativ Objektrelational • Konkurrierender Zugriff • Vokabularänderung • Ladeperformance • Abfrage-Performance • Redundanzen • XML Schema Support Unterschiedliche Speicherarten Die Speicherart richtet sich nach den Anforderungen der Anwendung: Clob Nativ als Dokument Relational Nativ Objektrelational • Konkurrierender Zugriff • Vokabularänderung • Ladeperformance • Abfrage-Performance • Redundanzen • XML Schema Support Dokumentorientiertes XML Dokument im Vordergrund Dokument-Transformationen Dokument als kleinste Einheit – Lesen und Schreiben als Ganzes Dokumentteile nur selten Skalare Daten nur selten – Häufig Volltextsuche XML als medienneutrales Speicherformat Datenorientiertes XML Daten im Vordergrund Dokumentkontext nicht unbedingt wichtig Häufig strukturierte Suche – größer-als und kleiner-als Abfragen XML als Austauschformat – – Standardisierung der Werkzeuge Integration in die IT-Landschaft Mischformen Beide Konzepte in einem Dokument Beispiele: – Zeitungsartikel mit strukturierten Zusatzinformationen Autor, Zeitung, Erscheinungsdatum ... – Kreditanträge Strukturierte Kunden- und Kreditdaten Unstrukturierte Begründungen Technologie-Stack XML-Dokumentspeicherung OS-Blöcke System Calls Technologie-Stack XML-Dokumentspeicherung relationale Tabellen (Oracle 1.0) SQL OS-Blöcke System Calls Technologie-Stack XML-Dokumentspeicherung Objektrelationale Datenbank (Oracle 8.0) SQL – Objektrelationale Syntax (SQL99) relationale Tabellen SQL OS-Blöcke System Calls Technologie-Stack XML-Dokumentspeicherung XML DB (Oracle 9.2) XML-Navigation XPath Objektrelationale Datenbank SQL – Objektrelationale Syntax (SQL99) relationale Tabellen SQL OS-Blöcke System Calls Technologie-Stack rein dokumentorientiertes XML XML DB XML-Navigation XPath CLOB-Datentyp relationale Tabellen SQL OS-Blöcke System Calls Beispiel: Börsennachrichten Beispiel: Börsennachrichten Beschreibung als XML Schema Beispiel: Börsennachrichten Überlegungen ... Strukturierte Informationen – – – – (WKN, Reuters-Code, Quelle, Kontakte, Datum) Zugriff auf Elemente im Vordergrund Kombination mit bspw. Kursdatenbank Strukturierte Speicherung Unstrukturierte Informationen – – – Zugriff auf den vollständigen Text im Vordergrund Volltextsuche Unstrukturierte Speicherung Beispiel Börsennachricht Registrierung des XML Schemas 1. Ansatz: – – W3C XML Schema wird unverändert in Oracle registriert Oracle Enterprise Manager Beispiel Börsennachricht Registrierung des XML Schemas Schema-URL zur Identifizierung des XML Schemas in der Datenbank URL sinnvoll jeder String möglich Beispiel Börsennachricht Ergebnisse: Feingranulares Mapping Abbildung nach Objektmodell darüberhinaus „BODY“-Element SQL-Datentypen Systemgenerierte SQL-Namen – – – Case-Sensitiv Sequence-Element für Eindeutigkeit über Namespaces hinweg Neue Namen bei neuer Schema-Registrierung Tabellen für XML-Dokumente bereits angelegt "annotated" XML Schema XML Schema mit "Zusatzinformationen" Herstellerspezifische Tags und Attribute zur Steuerung der Persistenz Namespace-Konzept bei der Schema-Prüfung ignoriert der Parser gemäß W3C "alle Namespaces, die er nicht kennt" – – Datenbankunabhängige Parser beachten nur das allgemeine XML Schema Bei Registrieren in der Datenbank beachtet diese nur das allgemeine XML Schema und die eigenen "Annotations" annotated XML Schema http://xmlns.microsoft.com/xml http://www.w3.org/2001/XMLSchema Ein XML Schema kann Annotations für verschiedene Datenbanken enthalten, da die jeweiligen Datenbanken fremde Annotations gemäß W3C ignorieren sollen http://xmlns.oracle.com/xdb Beispiel Börsennachricht Schema Annotations <xs:complexType name="aktie_t"> <xs:attribute name="wkn" use="required" type="xs:string"> <xs:attribute name="name" use="required" type="xs:string"> <xs:attribute name="reuters" use="required" type="xs:string"> <xs:attribute name="branche" use="required" type="xs:string"> </xs:complexType> Das XML Schema beschreibt die Struktur des XML-Dokumentes, nicht deren physikalische Speicherung in einer Datenbank. Die Oracle XML DB macht daher Standard-Annahmen bei der Nachbildung des XML-Datenmodells mit Objekttypen. Beispiel Börsennachricht Schema Annotations <xs:complexType name="aktie_t" xdb:SQLType="NR_AKTIE_T"> <xs:attribute name="wkn" use="required" xdb:SQLName="AKT_WKN"> <xs:attribute name="name" use="required" xdb:SQLName="AKT_NAME"> <xs:attribute name="reuters" use="required" xdb:SQLName="AKT_REUTERSCODE"> <xs:attribute name="branche" use="required" xdb:SQLName="AKT_BRANCHE"> </xs:complexType> SQLType: Abbildung von XML-Datentypen auf Oracle-Datentypen SQLName: Benennung von Elementen in Oracle Der XML-Komplexe Typ „aktie_t“ wird in der Datenbank als Objekttyp „NR_AKTIE_T“ nachgebildet. Beispiel Börsennachricht Schema Annotations <xs:element name="body" xdb:SQLName="NR_BODY"> <xs:complexType mixed="true" xdb:SQLType="CLOB"> <xs:choice minOccurs="0" maxOccurs="unbounded"> </xs:complexType> </xs:element> SQLType: Abbildung von XML-Datentypen auf Oracle-Datentypen SQLName: Benennung von Elementen in Oracle Der komplexe Typ für den Nachrichten-Body wird nicht als Objekttyp, sondern als CLOB abgebildet. Beispiel Börsennachricht Schema Annotations <xs:element name="kontakt" type="kontakt_t" minOccurs="0" maxOccurs="unbounded" xdb:SQLName="NR_KONTAKT" xdb:defaultTable="NR_KONTAKT_TAB" xdb:SQLInline="false" /> SQLInline: Speicherung in einer separaten Tabelle (true = nein; false = ja) defaultTable: Name der Objekt-Tabelle Die Kontakte werden in einer separaten Tabelle NR_KONTAKT_TAB gespeichert Beispiel: Börsennachrichten Beschreibung als XML Schema Speicherung als Ganzes Beispiel Börsennachricht Registrierung des XML Schemas 2. Ansatz: – – – – Oracle-Annotations SQLType SQLName ... Beispiel Börsennachricht Ergebnisse: Anforderung genaues Mapping Abbildung nach Objektmodell BODY Element als Fließtext (CLOB) abgebildet SQL-Datentypen Eigene SQL-Namen – – – Hier: case-insensitiv Ohne Sequence-Element Bei jeder Schema Registrierung gleich Tabellen für Nachrichten und Kontakte angelegt Weitere Schema-Annotations maintainDOM <xs:complexType name="aktie_t" xdb:SQLType="NR_AKTIE_T" xdb:maintainDOM="false"> <xs:attribute name="wkn" use="required" xdb:SQLName="AKT_WKN"> <xs:attribute name="name" use="required" xdb:SQLName="AKT_NAME"> <xs:attribute name="reuters" use="required" xdb:SQLName="AKT_REUTERSCODE"> <xs:attribute name="branche" use="required" xdb:SQLName="AKT_BRANCHE"> </xs:complexType> maintainDOM: Ein/Ausschalten der "DOM-Fidelity" Steuert die Speicherung von Kommentaren, Processing Instructions, Mixed Content Wenn "native XML Speicherung" nicht benötigt wird, kann die "DOM-Fidelity" so ausgeschaltet werden. Die Performance verbessert sich. Schema Annotations maintainDOM Schema Annotations maintainDOM Informationsverlust – – – Kommentare Processing Instructions Mixed Content Sinnvoll .... – – Wenn "native XML-Speicherung" nicht nötig ist Ladeperformance ist "Bottle-Neck" Beispiel Börsennachrichten Neue Tabellen anlegen – XMLTYPE als Datentyp CREATE TABLE nachrichten_tab ( nr_id number(10), nr_nachricht xmltype ); Ohne Angabe eines bereits registrieren XML Schemas fehlen die Angaben zur Objektrelationalen Speicherung, daher wird dokumentbasiert als CLOB gespeichert. Beispiel Börsennachrichten Neue Tabellen anlegen – XMLTYPE als Datentyp CREATE TABLE nachrichten_tab ( nr_id number(10), nr_nachricht xmltype ) xmltype column nr_nachricht store as object relational xmlschema "<schema-url>" element "<root element>" Tabellen partitionieren Prinzip – – Aufteilung in mehrere physikalische Einheiten Nach außen eine normale Tabelle Nutzen: Performance – – Abfragen können auf einzelne Partitionen beschränkt werden (Optimizer) Partitionen können als Einheit gelöscht oder verschoben werden Tabellen partitionieren für XML-Tabellen Voraussetzungen: – – Objektrelationale Speicherung Lizenzierung (Datenbank-Option) Partitionierungskriterien – – Range, Hash, List Partitionierungsschlüssel Indizes – – Globale Indizes Lokale Indizes Beispiel Börsennachrichten Partitionierte Tabelle Neue Tabellen anlegen create table nachrichten_part_tab of xmltype xmlschema "http://www.oracle.com/aktie/nachrichten.xsd" element "nachricht" partition by range (xmldata.nr_datum) ( partition nachrichten_before_1999 values less than (to_date('01-01-1999','DD-MM-YYYY')), : partition nachrichten_2004 values less than (to_date('01-01-2005','DD-MM-YYYY')) ) / Beispiel Börsennachrichten: XML-Datenmodell In XML ist das Dokument die zentrale Einheit Integritätsbedingungen ohne weiteres nur innerhalb des Dokumentes möglich Referenz zu anderen Dokumenten oder Daten muss programmiert werden nachricht: aktie datum quelle kontakte titel body 1 1 1 * aktie: wkn name branche reuters kontakte: ziel art adresse Beispiel Börsennachrichten: Reales Datenmodell Überschreiten der Dokumentgrenze Durch Datenbank-Constraints Integritätsbedingungen möglich zu ... – – relationalen Tabellen anderen XML-Dokumenten nachricht: aktie datum quelle kontakte titel body 1 1 * * aktie: wkn name branche reuters kontakte: ziel art adresse XML Schema referenzieren <nachricht xmlns="http://www.oracle.com/aktie/nachrichten.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" typ="Unternehmensmeldung" xsi:schemaLocation="http://www.oracle.com/aktie/nachrichten.xsd C:\nachrichten.xsd" > W3C-Standardkonforme Verknüpfung von XML Dokument und XML Schema. Das Dokument wird häufig als "Instanz" des XML Schemas bezeichnet. Gut zu erkennen ist die Lage des Schemadokumentes im Dateisystem. XML Schema referenzieren <nachricht xmlns="http://www.oracle.com/aktie/nachrichten.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" typ="Unternehmensmeldung" xsi:schemaLocation="http://www.oracle.com/aktie/nachrichten.xsd http://www.oracle.com/aktie/nachrichten.xsd" > Unter dieser URL wurde das XML Schema in Oracle mit dem Enterprise Manager registriert. Beispiel Börsennachrichten Status .... XML Schema – – Oracle Annotations vorhanden Schema in der Datenbank registriert Speicherungsmodell objektrelational – – Objekttypen vorhanden Tabelle vorhanden Laden objektrelationale Speicherung – – – XML Schema muss in XML-Dokument referenziert sein FTP und WebDAV SQL und SQL*Loader Beispiel Börsennachrichten Laden mit FTP oder WebDAV Referenz auf Nein XML Schema? Ohne Schema-Referenz ist keine Tabellenzuordnung und somit keine objektrelationale Speicherung möglich. Oracle kann nicht wissen, ob dieses XML Dokument gültig ist oder nicht und speichert es daher als Datei ins XML DB Repository. dokumentbasiert im XML DB Repository Beispiel Börsennachrichten Laden mit FTP oder WebDAV Ja XML Schema registriert? Referenz auf XML Schema? Nein Wenn das XML Schema nicht registriert wurde, kann Oracle ebenfalls nicht prüfen, ob das XML Dokument gültig ist oder nicht. Es wird daher ebenfalls als Datei ins XML DB Repository abgelegt. dokumentbasiert im XML DB Repository Beispiel Börsennachrichten Laden mit FTP oder WebDAV Ja Ja XML Schema registriert? Ja Verstoß gegen Constraints? Dokument wird abgewiesen Referenz auf XML Schema? Wenn die Inhalte des XML-Dokuments gegen hinterlegte Integritätsbedinungen verstoßen, wird es abgelehnt. Es ist für die Datenbank ungültig. Beispiel Börsennachrichten Laden mit FTP oder WebDAV Ja Ja Referenz auf XML Schema? XML Schema registriert? Verstoß gegen Nein Constraints? objektrelational in XMLTYPE-Tabelle Beispiel Börsennachrichten SQL INSERT INSERT INTO NR_NACHRICHT_TAB VALUES ( XMLTYPE ( '<?xml version="1.0"?><nachricht xmlns........ ) ); Schemavalidierung "leichte Schemaprüfung" – – – beim Einfügen Strukturprüfung Performancegründe vollständige Schemavalidierung – – aktivierbar RDBMS-Trigger Beispiel Börsennachrichten Zugriff mit HTTP Zugriff mit URL – – Protokoll Hostname und TCP/IP Port http://localhost:9080/ Beispiel Börsennachrichten Zugriff mit HTTP Zugriff mit URL – – – Protokoll Hostname und TCP/IP Port Datenbank-Kürzel http://localhost:9080/oradb/ Beispiel Börsennachrichten Zugriff mit HTTP Zugriff mit URL – – – – Protokoll Hostname und TCP/IP Port Datenbank-Kürzel Datenbankschema http://localhost:9080/oradb/<User-ID> Beispiel Börsennachrichten Zugriff mit HTTP Zugriff mit URL – – – – – Protokoll Hostname und TCP/IP Port Datenbank-Kürzel Datenbankschema Tabelle http://localhost:9080/oradb/<User-ID>/ NR_NACHRICHT_TAB Beispiel Börsennachrichten Zugriff mit HTTP Zugriff mit URL – – – – – – Protokoll Hostname und TCP/IP Port Datenbank-Kürzel Datenbankschema Tabelle Optional: XPath Einschränkung http://localhost:9080/oradb/<User-ID>/ NR_NACHRICHT_TAB/ ROW/nachricht/kontakt[ziel="Finanzen.net"] Zugriff mit SQL Zugriff auf XML-Elemente XPath SQL-Funktionen – – – EXTRACT EXTRACTVALUE EXISTSNODE Zugriff mit SQL Gib mir von allen Nachrichten das Datum, die Aktiengesellschaft und den Titel select extractvalue (value(e), '/nachricht/datum') as datum ,extractvalue (value(e), '/nachricht/aktie/@name') as ag ,extractvalue (value(e), '/nachricht/titel') as titel from nr_nachricht_tab e Zugriff mit SQL Gib mir von allen Oracle-Nachrichten das Datum und den Titel select extractvalue (value(e), '/nachricht/datum') as datum ,extractvalue (value(e), '/nachricht/aktie/@name') as ag ,extractvalue (value(e), '/nachricht/titel') as titel from nr_nachricht_tab e where existsnode ( value(e), '/nachricht/aktie[@wkn="871460"]' ) = 1 Ohne „Query Rewrite“ SELECT extractvalue ... FROM nr_nachricht_tab e XML-Dokument DOM-Baum wkn Mit „Query Rewrite“ SELECT extractvalue ... FROM nr_nachricht_tab e Query Rewrite SELECT e.xmldata. ... FROM nr_nachricht_tab e Objektrelational gespeichertes XML-Dokument nachricht: aktie datum quelle kontakte titel body aktie: wkn name branche reuters kontakte: ziel art adresse Query Rewrite Optimizer Funktionalität nicht möglich bei ... – – – – XPath Funktionen XPath Variablen Wildcards UNION Operator Technologie-Stack XML-Dokumentspeicherung XML DB (Oracle 9.2) Objektrelationale Datenbank relationale Tabellen OS-Blöcke Q U E XML-Navigation R XPath Y R E SQL – Objektrelationale W Syntax (SQL99) R I T E SQL System Calls Beispiel-Börsennachricht B-Tree Index Einfaches Beispiel create index idx_aktie_wkn on nr_nachricht_tab e (extractvalue(value(e),'/nachricht/aktie@wkn') / Voraussetzung – Objektrelationale Speicherung Beispiel-Börsennachricht B-Tree Index NR_NACHRICHT_TAB Objekt vollständig in einer Tabellenzeile abgelegt Arrays werden intern als Bytestrom gespeichert B-Tree Indizes auf Elemente im Array nicht möglich Default-Abbildung eines XML-Dokumentes mit 1:n Hierarchien Beispiel-Börsennachricht B-Tree Index NR_NACHRICHT_TAB NR_KONTAKTE_TAB Auslagerung der 1:n Beziehung in eine eigene Tabelle mit Schema Annotations. Beispiel-Börsennachricht B-Tree Index Indizierung eines Elementes in einer 1:n Hierarchie Voraussetzungen: – – – Objektrelationale Speicherung 1:n Hierarchie wird in eigene Tabelle ausgelagert Schema Annotation "storeVarrayAsTable" wird auf "true" gesetzt. create index idx_kontaktart on nr_kontakte_tab e (extractvalue(value(e),'/kontakt@art') / Piecewise Update XML Dokumentknoten gezielt ändern kein Ersetzen des Gesamtdokumentes nur auf SQL-Ebene – FTP und WebDAV sind dateiorientiert SQL-Funktion updateXML() Durch Query Rewrite direkte Änderung der Objektrelationalen Tabellenspalten Piecewise Update Ändere den Firmennamen bei den Nachrichten mit der WKN 871460 auf "Oracle Corporation" update nr_nachricht_tab e set value(e) = updatexml ( value(e), ,'/nachricht/aktie/@name' ,'Oracle Corporation' ) where existsnode ( value(e) ,'/nachricht/aktie[@wkn="871460"]' ) = 1 Piecewise Update Ändere die Kontaktart "email" nach "Mail" update nr_kontakte_tab e set value(e) = updatexml ( value(e) ,'/konkakt/@art' ,'Mail' ) where existsnode ( value(e), ,'/kontakt[@art="email"]' ) = 1 Einsatzgebiete für die Praxis Layoutneutrale Dokumentspeicherung Datenaustausch und Integration – – – DWH-Integration mit relationalen Sichten auf XML-Dokumente Datenaustausch mit XML-Sichten auf relationale Datenbestände XML-Messaging Layoutneutrale Dokumentspeicherung Dokumente als XMLTYPE unstrukturiert – – u.U. strukturierte Teile Börsennachrichten Volltextsuche Stylesheet-Transformationen Volltextsuche mit Oracle TEXT Volltextindex auf jedes XML-Dokument möglich Oracle TEXT Index – – – – – – Wildcard Suche (links und rechts) Phrasensuche Unscharfe Suche (Fuzzy) Wortstamm Stopwort-Listen Thesaurus-Unterstützung Volltextsuche mit Oracle TEXT Index anlegen ctx_ddl.create_section_group ( group_name => 'nachrichten_sec_group' ,group_type => 'PATH_SECTION_GROUP' ); create index idx_nachrichten_volltext on nr_nachricht_tab e (value(e)) indextype is CTXSYS.CONTEXT parameters ('section group nachrichten_sec_group') Volltextsuche mit Oracle TEXT Volltextrecherche ... select score(1), value(e) from nr_nachricht_tab e where CONTAINS ( value(e) ,' (Software and Kooperation) INPATH (/nachricht/body) ' ,1 )>0 Stylesheet Transformationen Datenbankintern – Stylesheet muss in der Datenbank vorliegen SQL-Funktion – XMLTransform() Aggregat über mehrere Dokumente – XMLAgg() Stylesheet-Transformationen 1:1-Transformation ... n:1 Transformation ... select xmltransform ( value(e) ,xdburitype ( '/public/idevelop/nachricht_html.xsl' ).getxml() ) from nr_nachricht_tab e Stylesheet-Transformationen View-Definition TABLE VIEW HTTP-Zugriff 1:1 Transformation HTTP-Zugriff n:1 Transformation Einsatzgebiete für die Praxis Layoutneutrale Dokumentspeicherung Datenaustausch und Integration – – – DWH-Integration mit relationalen Sichten auf XML-Dokumente Datenaustausch mit XML-Sichten auf relationale Datenbestände XML-Messaging Beispiel Börsennachrichten Kontaktinformationen – – – relationale Tabelle schneller Zugriff Herausforderung: eine Nachricht hat viele Kontakte WKN GESELLSCHAFT KONTAKTART ADRESSE Beispiel Börsennachrichten Kontakt-View create or replace view nr_kontakte as select extractvalue (value(e), '/nachricht/aktie/@wkn') as wkn ,extractvalue (value(e), '/nachricht/aktie/@name') as gesellschaft ,extractvalue (value(k), '/kontakt/@art') as kontaktart ,extractvalue (value(k), '/kontakt/ziel') as kontaktziel ,extractvalue (value(k), '/kontakt/adresse') as adresse from nr_nachricht_tab e ,table(xmlsequence(extract(value(e),'/nachricht/kontakt'))) k Einsatzgebiete für die Praxis Layoutneutrale Dokumentspeicherung Datenaustausch und Integration – – – DWH-Integration mit relationalen Sichten auf XML-Dokumente Datenaustausch mit XML-Sichten auf relationale Datenbestände XML-Messaging Beispiel Aktienkurse relationales Tabellenschema aktien_tab: wkn name 1 * kurse_tab: wkn datum kurs Beispiel Aktienkurse XML Views Erstellen der View create or replace view aktienkurse_xml as select XMLElement( "Aktienkurse", XMLElement("Aktie", XMLAttributes( wkn as "WKN", ak.name as "Gesellschaft")), XMLElement("Kurse", XMLAgg( XMLElement( "Kurs" ,XMLAttributes( k.datum as "vom"), k.kurs)))) as kurse_dokument from aktien_tab ak join kurse_tab k using (wkn) group by wkn, ak.name XML Views Nutzbar wie XMLType Tabellen Stylesheet-Transformationen Zugriff durch HTTP einfacher Austausch relational vorliegender Daten XML-Datenaustausch mit Views Kommunikation mit Internet-Protokollen HTTP, FTP INSTEAD-OF Trigger Einsatzgebiete für die Praxis Layoutneutrale Dokumentspeicherung Datenaustausch und Integration – – – DWH-Integration mit relationalen Sichten auf XML-Dokumente Datenaustausch mit XML-Sichten auf relationale Datenbestände XML-Messaging Oracle Advanced Queuing Datenbankinternes Messaging Asynchron Point-to-Point / Publish-Subscribe Nutzung der Oracle Datenbank – Backup / Recovery, Datenintegrität, Skalierbarkeit, Nachrichten-Persistenz Transaktionskonzept SQL-Zugriff Oracle Advanced Queuing Messaging auf einem Rechnerknoten Point-to-Point Oracle Anwendung Enqueue Dequeue Advanced Queueing Anwendung Anwendung Oracle Advanced Queuing Messaging auf einem Rechnerknoten publish-subscribe Oracle publish subscribe Anwendung Advanced Queueing Anwendung publish Anwendung Anwendung subscribe Oracle Advanced Queuing Messaging über Rechnergrenzen Oracle Propagate Dequeue Anwendung Advanced Queues Enqueue Anwendung Oracle Anwendung Advanced Queues Enqueue Oracle Propagate Dequeue Advanced Queues Anwendung Oracle AQ Fähigkeiten Nachrichten – – – – – Nachrichten können nach dem Dequeue behalten werden Nachrichten-Historie Nachrichten-Transformation Kombination mit Oracle DWH-Fähigkeiten Business-Intelligence API-Unterstützung – – SQL, PL/SQL (DBMS_AQ) Java (JMS, Oracle AQ API, JDBC) Oracle AQ – PL/SQL Pakete DBMS_AQADM – – – – Administrative Aufgaben Einrichten von Queues Einrichten von Queue Tabellen Rechteverwaltung DBMS_AQ – – – Umgang mit Queues Einstellen von Nachrichten (ENQUEUE) Auslesen von Nachrichten (DEQUEUE) Oracle AQ Nachrichten-Transformation Oracle Propagate Dequeue Anwendung Enqueue Advanced Queues Oracle Anwendung Transform Anwendung Enqueue Advanced Queues Oracle Anwendung Propagate Advanced Queues Transform Dequeue Oracle AQ - Transformationen PL/SQL oder Java-Funktion Aktiv ... – – – direkt nach dem ENQUEUE direkt vor dem DEQUEUE direkt vor oder nach dem PROPAGATE Oracle AQ und XML DB Definition des Queue-Payload als XMLType Nachrichten-Transformation mit XSLT ENQUEUE / DEQUEUE mit – – AQ Servlet Oracle XML DB und RDBMS Trigger Zugriff auf Dokumentteile Integration mit Views – – Relationale Views auf Queue Tabelle XML-Views auf relationale Tabellen mit anschließendem ENQUEUE des virtuellen Dokumentes Oracle AQ und XML DB Datenbank II [Order] Oracle Anwendung FTP HTTP Datenbank I Datenbank III [DWH] Oracle AQ und XML DB Datenbank II [Order] Oracle Anwendung Log FTP HTTP Enqueue Datenbank I Datenbank III [DWH] Oracle AQ und XML DB Datenbank II [Order] Propagate Oracle Anwendung Log Dequeue FTP HTTP Enqueue Datenbank I Propagate Datenbank III [DWH] Oracle AQ und XML DB Datenbank II [Order] Dequeue Propagate Oracle Anwendung Log Dequeue FTP HTTP Enqueue Datenbank I Dequeue Propagate Datenbank III [DWH] Zusammenfassung: Oracle XML DB: zwei Welten ... XML Server SQL XML RDBMS ... wachsen zusammen! Oracle SQL Indizes Integrität XML Ansichten XML-Technologie mit Oracle Ansichten Indizes Integrität Messaging mit Oracle AQ Weitere Informationen Oracle Technology Network – http://otn.oracle.com/tech/xml/xmldb/content.html – http://otn.oracle.com/products/aq/index.html Dokumentation – Oracle XML database Developers Guide http://download-west.oracle.com/docs/cd/B10501_01 /appdev.920/a96620/toc.htm – Oracle Application Developer's Guide - Advanced Queuing http://download-west.oracle.com/docs/cd/B10501_01 /appdev.920/a96587/toc.htm Oracle8, the O/R Database for VLDB Ralf Müller Oracle Technology Center 30. Mai, 1997 Ralf Müller, semjena.ppt, 26-May-97 ADT Order: more detailed Order id customer entry_d ol_cnt order_lines has lines OrderLine id quantity stock order refers to Stock ... (customer ADT) item quantity dist_01 dist_02 in Stock Item id name price data ADT Order: modelling in Oracle8 CREATE TYPE Item_t AS OBJECT ( i_id NUMBER, i_name VARCHAR2(24), i_price NUMBER, i_data VARCHAR2(50), standard Oracle7 types MEMBER FUNCTION getPricewithVAT RETURN NUMBER ); CREATE TYPE BODY Item_t AS MEMBER FUNCTION getPricewithVAT RETURN NUMBER IS BEGIN RETURN i_price * 1.15; END getPricewithVAT; END; CREATE TABLE items of Item_t; create table from ADT ADT Order: modelling in Oracle8 (cont.) CREATE TYPE Stock_t AS OBJECT ( s_item REF Item_t, s_quantity NUMBER, reference to item_t s_dist_01 CHAR(24), s_dist_02 CHAR(24), MAP MEMBER FUNCTION item_name RETURN VARCHAR2 ); CREATE TYPE BODY Stock_t AS MAP MEMBER FUNCTION item_name RETURN VARCHAR2 IS BEGIN RETURN s_item.i_name; END item_name; dereference s_item END; CREATE TABLE stocks of Stock_t; ADT Order: modelling in Oracle8 (cont.) CREATE TYPE Order_line_t AS OBJECT ( ol_id NUMBER, ol_quantity NUMBER, ol_stock REF stock_t, ol_order REF order_t ); CREATE TYPE order_line_nt AS TABLE OF Order_line_t;