Speicherung von XMLDokumenten in Oracle Prof. Dr. Thomas Kudraß HTWK Leipzig SIG Development (Tools), Oracle & XML Kassel, 04.06.2002 © Prof. T. Kudraß, HTWK Leipzig Daten oder Dokumente [Bourret] Dokumentenzentrische Dokumente (document-centric) – – – – – für Menschen lesbare Dokumente Reihenfolge wichtig sinntragende Daten auf allen Ebenen, auch mixed content zumeist Volltextsuche bzw. Retrieval-Operationen Beispiele: – Zeitschriftenartikel, Bücher Gebrauchsanweisungen, Handbücher e-Mail, News-Artikel und Forumsbeiträge Präsentationen Verträge Anteil: 70% der Informationen in Textdokumenten (Schätzwert) © Prof. T. Kudraß, HTWK Leipzig Daten oder Dokumente (Forts.) Datenzentrische Dokumente (data-centric) – – – – – – – Daten im herkömmlichen Sinne Reihenfolge oft nicht wichtig einheitliche und einfache Struktur Daten haben Datentypen sinntragende Elemente in Blattelementen oder Attributen mixed content nicht üblich Beispiele: Telefonbücher wissenschaftliche Daten (Meßreihen) Fahrpläne, Flugpläne Bestellungen © Prof. T. Kudraß, HTWK Leipzig Daten und Dokumente XML für beide Dokumenttypen geeignet XML erlaubt Mischformen, z.B. – – Produktkataloge Krankenakten Daten: Geburtsdatum, Adresse, etc. binäre Daten: Röntgenbilder Textdokumente: Diagnose, Krankengeschichte Binäre Daten in XML – – external entities CDATA sections © Prof. T. Kudraß, HTWK Leipzig Warum XML in Datenbanken? XML als SGML-Nachfolger – Speicherung von Dokumenten XML als Austauschformat – Transformation der Originaldaten nach XML Speicherung der Austauschdaten ebenfalls erforderlich (z.B. beim Empfänger) Nutzung der Funktionalität eines DBMS – – – mächtige und effiziente Suchfunktionen transaktionsorientierte Speicherung Mehrbenutzerbetrieb © Prof. T. Kudraß, HTWK Leipzig Speichern und Liefern von Dokumenten Round-Trip-Eigenschaft – Der ganze Inhalt – – – Ausgabe des gespeicherten Dokuments in unveränderter Form Prolog Kommentare Processing Instructions “unverändert“ – – unveränderte Reihenfolge der Elemente identisches Aussehen gegenüber Original © Prof. T. Kudraß, HTWK Leipzig XML in Datenbanken - Optionen zur Realisierung Relational – inhaltsorientiert zerlegt – – strukturorientiert zerlegt opaque Ansatz (Large Objects) Objektorientiert (Objektrelational) – – generisch definitorisch benutzerdefinierte Objekte vordefinierte Objekte, basierend auf Large Objects (CLOBS) “native“ XML-DBMS – Oracle-Konkurrenzprodukte © Prof. T. Kudraß, HTWK Leipzig Inhaltsorientierte Zerlegung Überblick generisch vs. definitorisch Beispiel (generisch): – Oracle XML SQL Utility (XSU): Queries Insert Update Delete Bewertung © Prof. T. Kudraß, HTWK Leipzig Inhaltsorientierte Zerlegung außerhalb der Datenbank – Oracle XML SQL Utility for Java macht vorhandene Datenbanken im XML-Format zugänglich 2 Ansätze: generisch vs. definitorisch generisch – vorgefundene Strukturen werden nach einem allgemeingültigen Konzept in XML-Strukturen umgesetzt gilt analog auch für Generierung einer DTD aus relationalem Schema definitorisch – die Abbildung der existierenden Strukturen in XML-Strukturen (und umgekehrt) wird jeweils spezifiziert © Prof. T. Kudraß, HTWK Leipzig XML SQL Utility (XSU) Beispiel für inhaltsorientierte Zerlegung (generisch) Generierung von XML aus Daten einer Oracle Datenbank Generierung von XML-Dokumenten in ihrer StringDarstellung bzw. als DOM-Modell aus SQL-Abfragen heraus Extrahieren von Daten aus XML-Dokumenten und Verwendung dieser für: – – – Einfügeoperationen (INSERT) Änderungsoperationen (UPDATE) Löschoperationen (DELETE) © Prof. T. Kudraß, HTWK Leipzig Beispiel Generierung von XMLDokumenten mit XSU CREATE TABLE emp ( EMPNO NUMBER, ENAME VARCHAR2(20), JOB VARCHAR2(20), MGR NUMBER, HIREDATE DATE, SAL NUMBER, DEPTNO NUMBER ); Ausführen einer SQL-Abfrage Bsp.: SELECT * FROM emp WHERE EMPNO=7369; © Prof. T. Kudraß, HTWK Leipzig Beispiel Generierung von XMLDokumenten mit XSU (SELECT) Analyse der Metadaten der Ergebnismenge Konvertierung in folgende Form: <?xml version='1.0'?> <ROWSET> <ROW num="1"> <EMPNO>7369</EMPNO> <ENAME>Smith</ENAME> <JOB>CLERK</JOB> <MGR>7902</MGR> <HIREDATE>12/17/1980 0:0:0</HIREDATE> <SAL>800</SAL> <DEPTNO>20</DEPTNO> </ROW> </ROWSET> © Prof. T. Kudraß, HTWK Leipzig Einfügen aus XML (INSERT) Analyse der Metadaten der Zieltabelle Generierung eines Statements der Form: INSERT INTO emp (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,DEPTNO) VALUES (?,?,?,?,?,?,?); Extrahieren der zu den Metadaten passenden Elemente aus dem XML-Dokument Ausführen des generierten SQL-Statements unter Verwendung der extrahierten Daten © Prof. T. Kudraß, HTWK Leipzig Aktualisieren mit XML (UPDATE) Festlegung von Schlüsselattributen, die zur Identifizierung der zu aktualisierenden Datensätze dienen Festlegung der zu aktualisierenden Attribute; sonst erfolgt Aktualisierung aller Attribute Analyse der Metadaten der Zieltabelle Generierung eines Update-Statements Extrahieren der Daten aus XML-Dokument © Prof. T. Kudraß, HTWK Leipzig Aktualisieren mit XML (UPDATE) Bsp.: EMPNO ← Schlüsselspalte SAL ← zu aktualisierende Spalte <?xml version='1.0'?> <ROWSET> <ROW num="1"> <EMPNO>7369</EMPNO> <JOB>CLERK</JOB> <SAL>800</SAL> <DEPTNO>20</DEPTNO> </ROW> </ROWSET> UPDATE emp SET SAL=800 WHERE EMPNO=7369; © Prof. T. Kudraß, HTWK Leipzig Löschen mit XML (DELETE) Festlegung von Schlüsselattributen, die zur Identifizierung der zu löschenden Datensätze dienen Analyse der Metadaten der Zieltabelle Generierung eines DELETE-Statements Extrahieren der Daten aus XML-Dokument Ausführung des generierten SQL-Statements unter Verwendung der extrahierten Daten © Prof. T. Kudraß, HTWK Leipzig Inhaltsorientierte Zerlegung definitorisch (Shredding) Definition einer Abbildungsvorschrift zwischen XML-Dokument und Datenbanktabellen Elemente und Attribute können auf Zeilen/Spalten verschiedener Tabellen abgebildet werden Oracle-Ansatz: – Internet File System (iFS): Parsen und Speichern von XML-Dokumenten in relationaler DB © Prof. T. Kudraß, HTWK Leipzig Inhaltsorientierte Zerlegung Bewertung Dokumentstruktur ist starr (durch relationales Schema gegeben) – Beschränkungen in der Abbildung – – Rekursion mixed content Informationsverlust (Round-Trip-Problem) – – – somit keine beliebigen (nicht vordefinierten) XML-Dokumente speicherbar Kommentare, Processing Instructions Reihenfolge der Elemente Element vs. Attribute (wie war es im Original?) Anfragesprache ist immer SQL (erfordert Übersetzung) © Prof. T. Kudraß, HTWK Leipzig Strukturorientierte Zerlegung Überblick Prinzip Vorstellung eines selbstentwickelten Werkzeugs auf Basis Oracle 8i – – – Datenmodell Algorithmus Verarbeitung von Anfragen Bewertung – Vor- und Nachteile © Prof. T. Kudraß, HTWK Leipzig Relationale Strukturorientierte Zerlegung Prinzip – Speicherung in generischen Tabellen – Zerlegung eines XML-Dokumentes in kleine Einheiten (Elemente) und Speichern in der Datenbank 1 XML-Dokument n Datensätze – feststehendes Datenbankschema benötigt nur eine relationale Datenbank Informationsverlust möglich (Kommentare, mixed content) Vorteil: Keine Schemadefinition durch Benutzer notwendig – – hohe Flexibilität bei dynamisch erzeugten XML-Dokumenten verwendete relationale Strukturen für Benutzer unbrauchbar (keine Anwendungssemantik) © Prof. T. Kudraß, HTWK Leipzig Relationale Strukturorientierte Zerlegung (Forts.) Vielzahl von Mapping-Methoden – – Abspeichern der Kanten und Knoten des zum XML-Dokument gehörenden Strukturbaums Speichern der Kanten in einer Tabelle – Kantenverfahren (Florescu, Kossmann) Universalverfahren Normalisiertes Universalverfahren Model-based Fragmentation Monet XML-Modell Speichern der Kanten in mehreren Tabellen Attributverfahren © Prof. T. Kudraß, HTWK Leipzig Speichermethode [Krumbein] XML-QL Datenmodell 1 tree 2 pe rso n 4 [age= 38] Mary Peter s re s na m e p on e rs ad <tree> <person age=’55‘> <name>Peter</name> </person> <person age=’38‘> <name>Mary</name> <address>Fruitdale Ave. </address> 3 [age= 55] </person> </tree> na m e 4711 Fruitdale Ave. © Prof. T. Kudraß, HTWK Leipzig Datenmodell tblDocs DocId url 1 n tblEdge SourceId TargetId LeafId AttrId DocId EdgeName Type Depth 1 0/1 0/1 tblLeafs LeafId 1 tblAttrs Value AttrId Value © Prof. T. Kudraß, HTWK Leipzig Import-Algorithmus <baum> LeafId Value <person alter=“36“> 1 Peter <name>Peter</name> 2 Hauptstr <adresse> asse 4 <strasse>Hauptstrasse 4</strasse> 3 04236 4 Leipzig <PLZ>04236</PLZ> <Ort>Leipzig</Ort> Source Target Leaf Attr Doc EdgeName Type Depth </adresse> Id Id Id Id Id </person> 0 1 -1 -1 1 baum ref 3 </baum> 1 2 -1 -1 1 person ref 2 DocId 1 AttrId 1 url Beispiel.xml Value 36 2 2 2 5 5 5 3 4 5 6 7 8 -1 1 -1 2 3 4 1 -1 -1 -1 -1 -1 1 1 1 1 1 1 alter name adresse strasse PLZ Ort attr leaf ref leaf leaf leaf 0 0 1 0 0 0 © Prof. T. Kudraß, HTWK Leipzig Anfragemethode XML-QL Anfrage Parser ObjektStruktur Generierung des SQL Statement Mit welcher Anfragesprache? – XML-Anfragesprache auf XML-Dokumente sinnvoll – Datenmodell ausgehend von XML-QL erstellt Konstruktion des Ergebnisdokuments DB Ausführung des SQL Statement Row Set XML Dokument SQL Statement Datenbank versteht nur SQL – Transformation von XML-QL nach SQL notwendig – Erzeugen eines ErgebnisDokumentes aus Tupeln © Prof. T. Kudraß, HTWK Leipzig Erzeugen eines SQL-Statements XML-QL Anfrage SQL-Statement SELECT DISTINCT CONSTRUCT <result> { B.Type AS n_Type, WHERE B.TargetId AS n_TargetId, <person> B.Depth AS n_Depth, <name>$n</name> C.Value AS n_Value, <adresse>$a</adresse> D.Type AS a_Type, </person> D.TargetId AS a_TargetId, D.Depth AS a_Depth, CONSTRUCT E.Value AS a_Value <person> FROM <name>$n</name> tblEdge A,tblEdge B,tblLeafs C, <adresse>$a</adresse> tblEdge D,tblLeafs E </person> WHERE } </result> (A.EdgeName (A.TargetId (B.EdgeName (B.LeafId = (A.TargetId (D.EdgeName (D.LeafId = = ‘person’) AND = B.SourceId) AND = ‘name’) AND C.LeafId(+)) AND = D.SourceId) AND = ‘adresse’) AND E.LeafId(+)) © Prof. T. Kudraß, HTWK Leipzig Konstruktion des ErgebnisDokumentes Ergebnistupel n_Type n_Target n_Depth Id leaf 4 0 n_Value Peter a_Type a_Target a_Depth a_Value Id ref 5 1 SELECT Teilbaum-Rekonstruktion A.EdgeName, A.Type, EdgeName Al.Value AS A_LeafVal, Aa.Value AS A_AttrVal strasse FROM tblEdge A, PLZ tblLeafs Al, Ort tblAttrs Aa WHERE A.SourceId=5 AND A.leafId=Al.leafId(+) AND A.attrId=Aa.attrId(+) • Type A_LeafVal leaf Hauptstrasse 4 04236 Leipzig leaf leaf A_Attr Val © Prof. T. Kudraß, HTWK Leipzig Anfrageergebnis XML-Ergebnis-Dokument <result> <person> <name>Peter</name> <adresse> <strasse>Hauptstrasse 4</strasse> <PLZ>04236</PLZ> <Ort>Leipzig</Ort> </adresse> </person> </result> © Prof. T. Kudraß, HTWK Leipzig Strukturorientierte Zerlegung Vorteile Herstellerunabhängigkeit – Stabilität Hohe Flexibilität der Anfragen – – benutzt keine spezifischen DBMS-Eigenschaften Lesen und Ändern einzelner Werte volle SQL-Funktionalität nutzbar Gute Eignung für strukturorientierte Anfragen – Strukturen in Tabellen repräsentiert © Prof. T. Kudraß, HTWK Leipzig Strukturorientierte Zerlegung Nachteile Informationsverlust – – – – – Comments Processing Instructions Prolog CDATA Sections Entities Restriktionen des Abbildungsalgorithmus – nur ein Text (Inhalt) pro Element <element> Text1 <subelement/> Text2 geht verloren </element> – Element-Text als VARCHAR(n); n <= 4000 © Prof. T. Kudraß, HTWK Leipzig Strukturorientierte Zerlegung Nachteile (2) Anfragesprache: nur SQL – – – keine XML-adäquaten Anfragekonstrukte Anfrageformulierung schwierig Änderungen auf SQL-Ebene können Struktur des Dokuments zerstören Schlechte Performance – lange Ladezeit – – Beispiel-Dokument: 3.3. MB, 130.000 Zeilen, 13 Minuten komplexe Joins Sortierung in Anfragen (wegen Reihenfolgeerhaltung) © Prof. T. Kudraß, HTWK Leipzig Opaque Ansatz (CLOB Ansatz) Prinzip Oracle interMedia Text XPath-Anfragen (XML Developer Kit) Anfragemöglichkeiten: – interMediaText vs. XPath Prototyp Bewertung © Prof. T. Kudraß, HTWK Leipzig Opaque Ansatz (CLOB Ansatz) Merkmale – – XML-Dokument gespeichert als Large Object (LOB) Dokument bleibt vollständig erhalten Speicherung DocId url 1 person.xml content <person> <name>Mary</name> </person> Insert into tblXMLClob values (1,‘person.xml‘,‘ <person> <name>Mary</name> </person>‘ ); © Prof. T. Kudraß, HTWK Leipzig Oracle interMedia Text Anfragen mit interMedia Text – – – Volltext-Retrieval (nur wortorientierte Suche) Pfadangaben nur in Verbindung mit Wortsuche keine Bereichsanfragen Beispiel in interMedia Text: SELECT DocId FROM tblXMLClob WHERE CONTAINS(content,‘(Mary WITHIN name) WITHIN person‘)>0 XML Volltext-Index – – – Autosectioner Index XML Sectioner Index WITHIN operator text_subquery WITHIN elementname sucht den vollständigen Textinhalt innerhalb der genannten Tags © Prof. T. Kudraß, HTWK Leipzig XPath Anfragen mit PL/SQL Voraussetzung: XDK für PL/SQL auf Server vorhanden Übersetze CLOB in eine DOM-Darstellung XPath Anfrage Ermittle Document IDs aller CLOBs der XML-Tabelle serverseitig DB Doc IDs Ausführen der XPath Anfrage auf dem DOMBaum für jedes CLOB Objekt der Doc IDs Doc IDs mit Ergebnis XMLDokument © Prof. T. Kudraß, HTWK Leipzig Vergleich der Anfragemöglichkeiten interMedia Text liefert Dokument-IDs Wordsuche (Default) kein Existenztest für Elemente oder Attribute Pfadausdrücken beschränkt möglich durch WITHIN e.g.: (xml WITHIN title) WITHIN book XPath erlaubt begrenzt Attributwertsuche, keine Verschachtelung von Attributsuchen numerische und Datumswerte werde nicht konvertiert keine Bereichsanfragen auf Attributwerten findet Dokument-Fragmente Substring-Suche Suche nach vorhandenen Elementen oder Attributen Pfadausdrücke strukturorientierte Anfragen //Book/Title/[contains(..‘xml‘)] Suche nach Attributwerten und Element-Text kann kombiniert werden berücksichtigt auch Dezimalwerte Bereichsanfragen möglich mittels Filter © Prof. T. Kudraß, HTWK Leipzig CLOB Ansatz Vorteile Bewahrung der Informationen des Dokuments Behandlung großer Dokumente – geeignet für dokumentenzentrische Dokumente mit wenig Struktur und textreichen Elementen Verschiedene XML Document APIs – – interMedia Text: eingeschränkte Menge von XPathFunktionalität generiere ein DOM des Dokuments vor Anwendung von XPath-Queries © Prof. T. Kudraß, HTWK Leipzig CLOB Ansatz Nachteile Beschränkte Ausdrucksfähigkeit von Text-Anfragen Performance vs. Genauigkeit der Anfrage-Ergebnisse – – Restriktionen der Indexe – Maximale Länge der Tag-Namen fürs Indexieren (inkl. Namespace): 64 Bytes Probleme mit Markup – interMedia Text Queries auf CLOBs schneller als DOM-API Beispiel-Dokument: 12.5 MB, Übersetzungszeit 3 Min., Ladezeit 5 Min. Character Entities: Dekodieren oder nicht? Stabilität – – maximale Dokumentgröße: 50 MB Speicherfehler bereits bei kleineren Dokumenten möglich © Prof. T. Kudraß, HTWK Leipzig Prototyp: User Interface © Prof. T. Kudraß, HTWK Leipzig Objektrelationaler Ansatz Überblick benutzerdefinierte Objekte – – – Transformation DTD Relationenschema Transformation DTD objektrelationales Schema Vorstellung eines selbstentwickelten Werkzeugs – Bewertung Alternative: Oracle Object Views vordefinierte Objekte (basierend auf CLOBs) – Ausblick auf Oracle 9i © Prof. T. Kudraß, HTWK Leipzig Objektrelationaler Ansatz Motivation Einbeziehung mehrfach geschachtelter XMLDokumente Schema des Dokuments vorhanden und bekannt Umgang mit komplexen Objekten – – XML-Dokument = komplexes Objekt Vermeiden Dekomposition (vgl. relationaler Ansatz) Objektrelationale Technologie sehr gut geeignet für Darstellung komplexer Objekte – – benutzerdefinierte Typen (Object Types) Objekt-Sichten (Object Views) © Prof. T. Kudraß, HTWK Leipzig Verarbeitung von DTD and XML XML Dokument Überprüfung, ob wohlgeformt / valid ----------------------------------------------------------------------------- -------------------------------------------------------------------------------- DTD Syntax Check XML V2 Parser DTD Parser XML DOM Baum DTD DOM Baum Schema Definition XML2 Oracle JDBC / ODBC DBMS Oracle © Prof. T. Kudraß, HTWK Leipzig 1 2 3 4 5 6 7 8 9 10 11 12 13 14 <!ELEMENT <!ELEMENT <!ATTLIST <!ELEMENT <!ELEMENT <!ENTITY <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT University (StudyCourse,Student*)> Student (LName,FName,Course*)> Student StudNr CDATA #REQUIRED> Course (Name,Professor*,CreditPts?)> Professor (PName,Subject+,Dept)> cs “Computer Science“> LName (#PCDATA)> FName (#PCDATA)> Name (#PCDATA)> CreditPts (#PCDATA)> PName (#PCDATA)> Subject (#PCDATA)> Dept (#PCDATA)> StudyCourse (#PCDATA)> © Prof. T. Kudraß, HTWK Leipzig Transformation von DTD in Relationenschema [Bourret] Grundidee: – – Erzeugung von Klassen aus DTD Abbildung der Klassen auf Tabellen entsprechend Regeln DTD <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT A C D B (B,C)> (D)> (#PCDATA)> (#PCDATA)> Klassen CLASS A STRING C CLASS C STRING { b; c;} { d;} Tabellen CREATE TABLE A ( a_pk INTEGER NOT NULL, b VARCHAR2(30) NOT NULL); CREATE TABLE C ( c_pk INTEGER NOT NULL, a_fk INTEGER NOT NULL, d VARCHAR2(10) NOT NULL); Veränderung des Algorithmus von Bourret – – Keine Klassenbildung (Klassen und Tabellen verschmolzen) Nutzung der Objekte des DTD-Baumes © Prof. T. Kudraß, HTWK Leipzig Abbildungsregeln DTD Relationenschema [Bourret] Schritt 1 • Jedes komplexe Element Tabelle • Jedes mengenwertige Element Tabelle • Primärschlüssel in jeder Tabelle Schritt 2 Andere Elemente & Attribute Spalten 1 <!ELEMENT 2 <!ELEMENT 3 <!ATTLIST 4 <!ELEMENT 5 <!ELEMENT 6 <!ENTITY 7 <!ELEMENT 8 <!ELEMENT 9 <!ELEMENT 10 <!ELEMENT 11 <!ELEMENT 12 <!ELEMENT 13 <!ELEMENT 14 <!ELEMENT Schritt 3 Beziehungen zwischen Elementen Fremdschlüssel University (StudyCourse,Student*)> Student (LName,FName,Course*)> Student StudNr CDATA #REQUIRED> Course (Name,Professor*,CreditPts?)> Professor (PName,Subject+,Dept)> cs “Computer Science“> LName (#PCDATA)> FName (#PCDATA)> Name (#PCDATA)> CreditPts (#PCDATA)> PName (#PCDATA)> Subject (#PCDATA)> Dept (#PCDATA)> StudyCourse (#PCDATA)> © Prof. T. Kudraß, HTWK Leipzig Beispiel-Transformation 1 <!ELEMENT 2 <!ELEMENT 3 <!ATTLIST 4 <!ELEMENT 5 <!ELEMENT 6 <!ENTITY 7 <!ELEMENT 8 <!ELEMENT 9 <!ELEMENT 10 <!ELEMENT 11 <!ELEMENT 12 <!ELEMENT 13 <!ELEMENT 14 <!ELEMENT University (StudyCourse,Student*)> Student (LName,FName,Course*)> Student StudNr CDATA #REQUIRED> Course (Name,Professor*,CreditPts?)> CREATE TABLE TabUniversity ( Professor (PName,Subject+,Dept)> cs “Computer Science“> IDUniversity INTEGER NOT NULL, LName (#PCDATA)> attrStudyCourse VARCHAR(4000) NOT NULL, FName (#PCDATA)> PRIMARY KEY (IDUniversity)); Name (#PCDATA)> CreditPts (#PCDATA)> CREATE TABLE TabStudent ( PName (#PCDATA)> IDStudent INTEGER NOT NULL, Subject (#PCDATA)> Dept (#PCDATA)> IDUniversity INTEGER NOT NULL, StudyCourse (#PCDATA)> attrStudNr VARCHAR(4000) NOT NULL, attrLName VARCHAR(4000) NOT NULL, attrFName VARCHAR(4000) NOT NULL, PRIMARY KEY (IDStudent), CONSTRAINT conStudent FOREIGN KEY (IDUniversity) REFERENCES TabUniversity (IDUniversity)); ... © Prof. T. Kudraß, HTWK Leipzig Tool zur objektrelationalen Speicherung von XML Grundidee: – – – Darstellung eines XML-Dokuments durch Kombination von benutzerdefinierten Typen Generiere ein objekt-relationales Schema aus der DTD Generiere Programm zum Laden des Dokuments in Oracle-DB Abbildungsregeln: – – – – Attribute und einfache Elemente Komplexe Elemente Mengenwertige Elemente Komplexe mengenwertige Elemente © Prof. T. Kudraß, HTWK Leipzig XML Attribute & Einfache Elemente Elemente vom Typ #PCDATA und XML Attribute Attribut eines Objekttyps Wertebereich einfacher Elemente: – Keine Typ-Information in der DTD – numerisch vs. alphanumerisch? Länge? Beschränkungen des DBMS (z.B. VARCHAR 4000 Zeichen) Abbildung eines XML-Attributes eines einfachen Elements Definition eines Objekttyps für Attribut und Element © Prof. T. Kudraß, HTWK Leipzig XML Attribute & Einfache Elemente <!ELEMENT <!ATTLIST <!ELEMENT <!ELEMENT <!ELEMENT <!ATTLIST Professor (PName,Subject,Dept)> Professor PAddress CDATA #REQUIRED> PName (#PCDATA)> Subject (#PCDATA)> Dept (#PCDATA)> Dept DAddress CDATA #REQUIRED> CREATE TABLE TabProfessor OF Type_Professor; CREATE TYPE Type_Professor AS OBJECT ( attr PAddress VARCHAR(4000), attrPName VARCHAR(4000), attrSubject VARCHAR(4000), attrDept Type_Dept); CREATE TYPE Type_Dept AS OBJECT ( attrDept VARCHAR(4000), attrDAddress VARCHAR(4000)); © Prof. T. Kudraß, HTWK Leipzig Komplexe Elemente CREATE TABLE TabUniversity ( attrStudyCourse VARCHAR(4000), attrStudent Type_Student ); CREATE TYPE Type_Student AS OBJECT ( attrStudNr VARCHAR(4000), attrLName VARCHAR(4000), attrFName VARCHAR(4000), attrCourse Type_Course ); CREATE TYPE Type_Course AS OBJECT ( attrName VARCHAR(4000), attrProfessorType_Professor, attrCreditPts VARCHAR(4000)); CREATE TYPE Type_Professor AS OBJECT ( attrPName VARCHAR(4000), attrSubject VARCHAR(4000), attrDept VARCHAR(4000)); Verschachtelung durch zusammengesetzte Object Types INSERT INTO TabUniversity VALUES ( ‘Computer Science' , Type_Student('23374','Conrad','Matthias', Type_Course(‘Databases II‘, Type_Professor(‘Kudrass‘ , ‘Database Systems‘', ‘Computer Science‘), '4'))); SELECT u.attrStudent.attrLname FROM TabUniversity u WHERE u.attrStudent.attrCourse.attrProfessor.attrPName = ‘Kudrass'; © Prof. T. Kudraß, HTWK Leipzig Mengenwertige Elemente Mehrfaches Auftreten eines Elements (DTD): + oder * Beschränkungen des DBMS (Oracle 8i) – – Kollektionstypen nur anwendbar auf textwertige Subelemente, z.B. ARRAY OF VARCHAR Was ist mit komplexen Subelementen? Subelemente können wiederum mengenwertig sein Lösung – – Oracle ab Release 9i verwenden Beziehungen über Objektreferenzen realisieren (aufwendig!) © Prof. T. Kudraß, HTWK Leipzig Mengenwertige Elemente CREATE TYPE TypeVA_Student AS VARRAY(100) OF Type_Student; CREATE TYPE TypeVA_Course AS VARRAY(100) OF Type_Course; CREATE TYPE TypeVA_Professor AS VARRAY(100) OF Type_Professor; CREATE TYPE TypeVA_Subject AS VARRAY(100) OF VARCHAR(4000); CREATE TABLE TabUniversity ( attrStudyCourse VARCHAR(4000), attrStudent TypeVA_Student ); CREATE TYPE Type_Student AS OBJECT ( attrStudNr VARCHAR(4000), attrLName VARCHAR(4000), attrFName VARCHAR(4000), attrCourse TypeVA_Course ); CREATE TYPE Type_Course AS OBJECT ( attrName VARCHAR(4000), attrProfessor TypeVA_Professor, attrCreditPts VARCHAR(4000)); CREATE TYPE Type_Professor AS OBJECT ( attrPName VARCHAR(4000), attrSubject TypeVA_Subject, attrDept VARCHAR(4000)); University Student Course Professor Subject © Prof. T. Kudraß, HTWK Leipzig Einfügen der Dokument-Daten (Beispiel) INSERT INTO TabUniversity VALUES ( ‘Computer Science' , TypeVA_Student ( Type_Student('23374','Conrad','Matthias', TypeVA_Course ( Type_Course(‘Databases II‘, TypeVA_Professor ( Type_Professor(‘Kudrass‘ , TypeVA_Subject ( ‘Database Systems,‘Operating Systems‘), ‘Computer Science‘)),‘4‘), Type_Course(‘CAD Intro‘, TypeVA_Professor ( Type_Professor(‘Jaeger‘ , TypeVA_Subject ( ‘CAD‘,‘CAE‘), ‘Computer Science‘)),‘4‘), ...)), Type_Student(‘00011',‘Meier',‘Ralf', … ) … ) ...); © Prof. T. Kudraß, HTWK Leipzig Probleme mit CHECK Constraints (Beispiel) Restriktionen bei NOT NULL – – Definiere NOT NULL in Tabelle - nicht im Objekttyp! NOT NULL nicht anwendbar auf Kollektionstypen Objektwertige Attribute: – NOT NULL durch CHECK-Constraint ausdrücken <!ELEMENT Course (Name, Address?)> <!ELEMENT Address (Street, City?)> CREATE TYPE Type_Address AS OBJECT ( attrStreet VARCHAR(4000), attrCity VARCHAR(4000)); CREATE TYPE Type_Course AS OBJECT ( attrName VARCHAR(4000), attrAddress Type_Address); CREATE TABLE TabCourse OF Type_Course ( attrName NOT NULL, CHECK (attrAdress.attrStreet IS NOT NULL)); // ORA-02290: Erwünschter Fehler 1. INSERT INTO TabCourse ( VALUES (‘CAD Intro’,Type_Address (NULL,’Leipzig’); // ORA-02290: Unerwünschter Fehler 2. INSERT INTO TabCourse ( VALUES ('RN', NULL) © Prof. T. Kudraß, HTWK Leipzig Objektrelationale Alternative: Object Views strukturierte logische Views auf Tabellen, die strukturierte Datensätze liefern setzt relationales Schema voraus nutzbar für Retrieval und Insert CREATE VIEW OView_University AS SELECT Type_University (u.attrStudyCourse, Type_Student (s.attrStudNr, s.attrLName, s.attrFName, Type_Course (c.attrName, Type_Professor (p.attrPName,p.attrSubject,p.attrDept)))) AS University FROM tabUniversity u, tabStudent s, tabCourse c, tabProfessor p WHERE s.IDStudNr = c.IDStudNr AND c.IDCourse = p.IDCourse; © Prof. T. Kudraß, HTWK Leipzig Zugriff auf Object Views Transformation eines mengenwertigen Elements, das als separate Tabelle gespeichert ist, beim Retrieval Beispiel: Ausgabe eines Professors und seiner Fachgebiete ...Type_Professor (p.attrPName, CAST (MULTISET (SELECT s.attrSubject FROM tabSubject s WHERE p.IDProfessor = s.IDProfessor) AS TypeVA_Subject), p.attrDept), ... SELECT p.attrPName, Verarbeitung durch Oracle XSU CURSOR (SELECT s.attrSubject FROM tabSubject s WHERE p.IDProfessor = s.IDProfessor) AS Subject FROM tabProfessor; © Prof. T. Kudraß, HTWK Leipzig Oracle 9i Objektrelationaler Ausblick Weiterentwicklung des CLOB-Ansatzes – spezieller Datentyp XMLType mit vordefinierten Funktionen createXML() extract() existsNode() Ausgabe von Anfrageergebnissen im XML-Format – Funktionen innerhalb von SQL-Anfragen SYS_XMLGEN() SYS_XMLAGG() © Prof. T. Kudraß, HTWK Leipzig Fazit Vielzahl von Speicherungsmethoden verfügbar – Unterschiedliche Anforderungen (je nach Dokumenttyp) – – – jeweils Vor- und Nachteile Skalierbarkeit Performance Anfragemöglichkeiten Semantik (Information aus Dokumenten bewahren!) Auswahl der günstigsten Methode? Werkzeugunterstützung für XML-Datenbankentwurf? © Prof. T. Kudraß, HTWK Leipzig Quellen Steve Muench: Building Oracle XML Applications, O‘Reilly, 2000. Ron Bourret: XML and Databases, http://www.rpbourret.com/xml/XMLAndDatabases.htm Tobias Krumbein: Speicher- und Anfragemethoden für XML-Dokumente ohne Schema in objektrelationalen Systemen am Beispiel Oracle, Diplomarbeit, HTWK Leipzig, 2001. Matthias Conrad: Speicherungsmöglichkeiten von XML-Dokumenten mit bekanntem Schema in objektrelationalen Systemen am Beispiel Oracle, Diplomarbeit, HTWK Leipzig, 2001.