Kapitel 11 Kommerzielle Datenbanksysteme für die XML-Verarbeitung IBM DB2 mit XML Extender Microsoft SQL Server Oracle Tamino Excelon Poet Infonyte Beispiel-Dokumente <book> <title> Datenmodelle, Datenbanksprachen und Datenbank-Management-Systeme </title> <author> <firstname> Gottfried </firstname> <lastname> Vossen </lastname> </author> <isbn>3-89319-566-1 </isbn> <publisher> Addison-Wesley </publisher> <summary>...</summary> </book> XML-Dokument book1.xml <book> <title> Datenbanken-Handbuch </title> <editor> <firstname> Peter C.</firstname> <lastname> Lockemann </lastname> </editor> <editor> <firstname> Joachim W.</firstname> <lastname> Schmidt </lastname> </editor> <isbn>3-540-10741-X</isbn> <publisher> Springer Verlag </publisher> <summary>...</summary> </book> XML-Dokument book2.xml <book> <title> Objektdatenbanken </title> <author> Gunter Saake </author> <author> Can Türker </author> <author> Ingo Schmitt</author> <isbn>3-8266-00258-7 </isbn> <publisher> Thomson </publisher> <summary>...</summary> </book> XML-Dokument book3.xml Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 11-2 IBM DB2 mit XMLExtender: Architektur Anwendung XML-Dokumente DAD – Document Access Definition DB2 XML Extender IBM DB2 Datenbank Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) DateiDateisystem Dateisystem Dateisystem system 11-3 Speicherungsstruktur: Abbildung von XML auf Datenbanken z Varianten zur Abbildung von XML auf Datenbanken – – z XML-Column-Ansatz: basiert auf XML-Datentyp XML-Collection-Ansatz: basiert auf Zerlegung der XML-Dokumente in Datenbanktabellen und -spalten Tabellen mit XML-Spalten (Ansatz: XML Column) – Diverse XML-Datentypen – XML-Dokumente werden als CLOBs gespeichert XML-Dokumente werden als VARCHARs gespeichert XML-Dokumente werden im Dateisystem gespeichert Zusätzliche materialisierte Sichten: – XMLCLOB: XMLVARCHAR: XMLFILE: Extraktion von ausgewählten XML-Inhalten aus den Dokumenten Materialisierung dieser Inhalte in sog. Seitentabellen Seitentabellen werden in der Document Access Definition (DAD) definiert Methoden zur Verarbeitung von XML-Dokumenten ergänzen XML-Datentypen besprechen wir später Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 11-4 Erzeugen der Tabellen mit XML-Typen und Einfügen von Dokumenten z Einrichten der XML-Erweiterungen für die Datenbank über XML Extender Admin Wizard z Definition der Tabellen zur Aufnahme von XML-Dokumenten – – Variante 1: Erzeugen mit dem XML Extender Admin Wizzard Variante 2: SQL CREATE TABLE xmltable ( docid BIGINT, doctext DB2XML.XMLVARCHAR ) z Einfügen von Dokumenten INSERT INTO xmltable (doctext) VALUES (DB2XML.XMLVARCHARFromFile('book1.xml')) Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 11-5 Definition der Abbildung durch eine DAD mit dem XML-Column-Ansatz z Document Access Definition (DAD) – z Beschreibung der Abbildungen zwischen XML und Datenbanktabellen über ein XML-Dokument, das sog. DAD-Dokument (im Dateisystem) Syntax für den XML-Column-Ansatz (spezifiziert in DAD.dtd von IBM): – Tabellen-Element: <table> – name="tabname" Spalten-Element: <column> z Attribut Tabellenname: Attribut Spaltenname: Attribut Datentyp: Attribut Pfad im XML-Dokument: name="colname" type="typespecifier" path="XPath-" multi_occurrence="boolean" Beim Registrieren der DAD (über ein Shell-Programm!!!) werden die Seitentabellen und Trigger zu deren Wartung automatisch erzeugt C:\> dxxadm enable_column xmldb xmltable doctext bookstore.dad Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 11-6 Beispiel für eine XML-Column-DAD <?xml version="1.0"?> <!DOCTYPE DAD SYSTEM "dad.dtd"> <DAD> <validation>NO</validation> <Xcolumn> <table name="book"> <column name="publisher" type="varchar(50)" path="//book/publisher" multi_occurrence="NO"/> <column name="title" type="varchar(3000)" path="//book/title" multi_occurrence="NO"/> <column name="isbn" type="varchar(15)" path="//book/isbn" multi_occurrence="NO"/> </table> <table name="author_ln"> <column name="lastname" type="varchar(200)" path="//book/author/lastname" multi_occurrence="YES"/> </table> Autoren können in den </Xcolumn> Dokumenten mehrfach </DAD> auftreten Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 11-7 XML-Column-Ansatz für die Beispiel-Dokumente Seitentabelle book DADSpezifikation root_id publisher title isbn 1 Addison Wesley Datenmodelle 3-89319-566-1 2 Springer DatenbankHandbuch 3-540-10741-X 3 Thomson Objektdatenbanken 3-8266-0258-7 XML-Dokumente xmltable Trigger beim Laden der Dokumente docid doctext 1 <book>...</book> 2 <book>...</book> root_id seq_no lastname 3 <book>...</book> 1 1 Seitentabelle author_ln Vossen Automatisch vom System aufgrund der DAD generiert Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 11-8 Definition der Abbildung durch eine DAD mit dem XML-Collection-Ansatz z Zerlegung von XML-Dokumenten z Abbildung von XML auf Datenbank – – z dxxInsertXML() dxxShredXML() arbeitet auf XML-Kollektionen mit fester DAD arbeitet auf XML-Kollektionen mit variabler DAD Abbildung von Datenbank auf XML – – dxxRetrieveXML() dxxGenXML() arbeitet auf XML-Kollektionen mit fester DAD arbeitet auf XML-Kollektionen mit variabler DAD z Aufruf aller dieser Stored Procedures nur aus einem Anwendungsprogramm möglich!!! z Aufruf aus dem Anwendungsprogramm ist nicht akzeptabel, daher hier nicht weiter ausgeführt. Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 11-9 Definition der Abbildung durch eine DAD mit dem XML-Collection-Ansatz z DAD-DTD stellt verschiedene XML-Elemente zur Verfügung, um die Abbildung zwischen Datenbank und XML festzulegen – – – Element SQL_stmt: Element prolog: Element element_node: – Element attribute_node: – z Attribut name: Attribut name: Element column: Angabe einer SQL-Anfrage Angabe des Prologs zum XML-Dokument Definition von Zielelementen Tag des Zielelements dito XML-Attribute Name des Zielattributs Bezug zur Spalte im Anfrageergebnis Umgekehrte Abbildung von XML auf Datenbankinhalten ist auch möglich – – Element RDB_node anstelle von SQL_stmt Angabe von Tabellennamen und evtl. Join-Bedingungen Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 11-10 Beispiel für eine XML-Collection-DAD <?xml version="1.0"?> <!DOCTYPE DAD SYSTEM "dad.dtd"> <DAD> <validation>NO</validation> <Xcollection> <SQL_stmt> SELECT title, publisher, isbn FROM book </SQL_stmt> <prolog> ?xml version="1.0"? </prolog> <element_node name="book"> <attribute_node name="title"/> <column name="title"/> <attribute_node name="isbn"/> <column name="isbn"/> <attribute_node name="publisher"/> <column name="publisher"/> </element_node> </Xcollection> </DAD> Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 11-11 Indexierung z Indexunterstützung – – z Wertindexe (B-Baum, Bitmap, etc.) auf den Seitentabellen Volltextindex (mit Text Extender) auf den XML-Typen Erweiterung des Volltextindex für IR auf XML – – – Mitführen der Pfadinformation im Index Unterstützung für Pfadausdrücke Beispiel: contains-Ausdruck enthält im zweiten Parameter eine Query für den Text Extender SELECT x_docid FROM xmltable WHERE contains(dscrHandel, ‘MODEL order SECTION(//book/summary) "Datenbank" Datenbank ‘) = 1 Retrievalmodell Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) Pfadausdruck zur Einschränkung der Suche 11-12 Anfragen z XML-Extender – – XML-Erweiterung bietet Funktionen für Anfragen und Manipulationen Anfragen: DB2XML.EXTRACT<Datentyp>(<Spalte>, <XPath-->) SELECT RETURNEDVARCHAR FROM xmltable AS x, TABLE(DB2XML.EXTRACTVARCHARS(x.doctext, '//firstname')) AS xmlresult; z Begrenzte Unterstützung des SQL/XML-Standards – – – XMLAGG XMLELEMENT XMLATTRIBUTE SELECT VARCHAR(XML2CLOB( XMLELEMENT(name "publisher", publisher))) FROM book Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 11-13 Manipulation z Manipulationen über spezielle Methoden der XML-Typen möglich z Syntax: DB2XML.UPDATE(<Spalte>, <XPath-->, <NeuerInhalt>) z Beispiel UPDATE xmltable SET doctext = DB2XML.UPDATE(doctext, '//firstname', 'Torsten') z Mit dem XML-Column-Ansatz werden die Änderungen automatisch auf den Seitentabellen nachgezogen Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 11-14 Zusammenfassung IBM DB2 XML-Unterstützung XML-Speicherung Modell erweiterbar, objektrelational Schemabeschreibung Validierung bei Import möglich Art der Speicherung textbasiert oder benutzerdefiniert-strukturbasiert Abbildungen von DB auf XML durch DAD XML-Datentyp vorhanden Indexe Wertindex Standard-DBS-Indexe auf Seitentabellen Volltextindex mit TextExtender Pfadindex nur im TextExtender Anfragen und Manipulation Anfragen SQL-Methoden mit XPath-Dialekt Volltextsuche mit TextExtender Manipulationen SQL-Methoden mit XPath-Dialekt Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 11-15 Kritik des Ansatzes von DB2 z Schlechte Unterstützung von Standards – – – z Schlechte Integration der Tools mit dem Komplettsystem bzw. SQL – z DAD statt XML-Schema Eigener XPath-Dialekt anstatt XPath 1.0 Keine volle Unterstützung von SQL/XML Umständliches Aktivieren von XML-Unterstützung für Datenbanken, Tabellen Unnötige Koexistenz verschiedener, teilweise redundanter Ansätze – Beispiel: XML-Unterstützung durch XML Extender vs. SQL/XML-Funktionalität z Keine Unterstützung modellbasierter Abbildungen z Vieles befindet sich offensichtlich noch im Beta-Stadium, auch wenn es offiziell schon lange released ist! Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 11-16 Microsoft SQL Server 2000: Architektur Anwendung XML-Dokumente Internet Information Server (IIS) ADO Middleware SQLOLEDB MS SQL Server 2000 Datenbank Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 11-17 Speicherstruktur: Abbildung von XML auf Datenbanken z Drei Varianten zur Speicherung von XML-Dokumenten z Variante 1: Modellbasierte Speicherung nach dem EDGE-Ansatz – z SQL-Erweiterung um einen XML-Parser, der eine Ausgabe nach dem EDGEFormat generiert Variante 2: Strukturbasierte Speicherung über STORED-Queries – SQL-Erweiterung um einen XML-Parser, der STORED-Queries verarbeitet z Variante 3: XML-Dokumente können auch als CLOBs gespeichert werden – textbasierter Ansatz z Speicherung der XML-Inhalte (EDGE oder strukturbasierte Daten) über INSERT-SQL-Befehle in der Datenbank Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 11-18 Modellbasierte Speicherung mit EDGE (1) z Aufruf von OPENXML ohne WITH-Klausel liefert EDGE-Tabelle Spalte Datentyp Funktion id bigint Eineindeutige Knoten-ID parentid bigint ID des Vaterknotens nodetype int Unterscheidet Elemente, Attribute, Kommentare localname nvarchar Tag prefix nvarchar Präfix des XML-Namensraums namespaceuri nvarchar URI des XML-Namensraums datatype nvarchar Datentyp (abgeleitet aus DTD oder XML-Schema) prev bigint ID des Vorgängerknotens (in Dokumentordnung) text ntext Inhalt des Knotens Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 11-19 Modellbasierte Speicherung mit EDGE (2) EXEC sp_xml_preparedocument @hdoc OUTPUT, @xmldoctext INSERT INTO EDGE SELECT * FROM OpenXML (@hdoc, '', 0) EXEC sp_xml_removedocument @hdoc EDGE-Tabelle id parentid nodetype localname prefix namespaceuri datatype prev 0 NULL text 1 book NULL NULL NULL NULL NULL 3 #text NULL NULL NULL NULL ' Vossen ' ... 17 6 Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 11-20 Strukturbasierte Speicherung mit STORED-Queries z SQL-Erweiterung mit OPENXML z OPENXML transformiert XML-Inhalte zu Datenbanktabellen (Shredding) z OPENXML ermöglicht es damit auch, STORED-Queries zu implementieren z Beispiel für die Umsetzung einer STORED-Query: EXEC sp_xml_preparedocument @hdoc OUTPUT, @xmldoctext INSERT INTO book SELECT * FROM OpenXML (@hdoc, '//book/', 0) WITH ( title NVARCHAR(3000) ‘./title', publisher NVARCHAR(200) ‘./publisher‘, isbn NVARCHAR(15) ‘./isbn‘ ) EXEC sp_xml_removedocument @hdoc Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 11-21 Strukturbasierte Speicherung: Beispiel z Ergebnistabelle erzeugen: CREATE TABLE ( publisher NVARCHAR(200) , title NVARCHAR(3000), isbn NVARCHAR(15) ) z Nach STORED-Query von der vorigen Seite ergibt sich der Tabelleninhalt: publisher title isbn Addison Wesley Datenmodelle 3-89319-566-1 Springer DatenbankHandbuch 3-540-10741-X Thomson Objektdatenbanken 3-8266-0258-7 Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 11-22 Speicherstruktur: Abbildung von Datenbanken auf XML z Variante 1: Standardabbildung mit SQL SELECT und FOR XML-Klausel – – FOR XML RAW: Umsetzung in ROW-XML-Elemente und XML-Attribute FOR XML AUTO: – z Semantisch reiche XML-Element-Namen Fremdschlüssel-Beziehungen werden in Hierarchien umgesetzt FOR XML EXPLICIT: Nutzer steuert XML-Aufbau durch Metadaten (EDGE) Variante 2: Benutzerdefinierte XML-Sicht – – – Verwendung eines (vorhandenen) XML-Schemas Annotation des Schemas mit Informationen über Tabellen und Spalten Zugriff der Anwendung auf die XML-Sicht über: IIS-Funktionalität ADO (ActiveX Data Objects) – Middleware zum DB-Zugriff Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 11-23 Variante 1: FOR XML-Klausel SELECT title, publisher, isbn, lastname FROM book, author WHERE book.id = author.bookid FOR XML AUTO, ELEMENT XML-Elemente statt Attribute verwenden XML_XXXX: NTEXT (CLOB) <book> <title> Datenmodelle </title> <author> <lastname> Vossen </lastname> </author> <isbn>3-89319-566-1 </isbn> <publisher> Addison-Wesley </publisher> </book> ... Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 11-24 Variante 2: Benutzerdefinierte XML-Sichten z Annotiertes XML-Schema – – – – – z Zusätzlicher Namensraum: xmlns:sql="urn:schemas-microsoft-com:mapping-schema" Konform zum XML-Schema-Standard des W3C Annotation sql:relation: Bezug zwischen XML und einer Tabelle Annotation sql:field: Bezug zwischen XML und einer Tabellenspalte Annotation sql:relationship: Schlüssel-Fremdschlüssel-Beziehung in der DB Zugriff auf die XML-Sicht über XPath ist möglich – – – – aus dem Browser über IIS aus Applikationen via ActiveX Data Object (ADO) – Middleware zum DB-Zugriff Nicht alle XPath-Konstrukte können abgedeckt werden XPath wird in äquivalentes SQL auf der Datenbank übersetzt Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 11-25 Benutzerdefinierte XML-Sicht: Beispiel <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sql="urn:schemas-microsoft-com:mapping-schema"> <xsd:element name= "Book" sql:relation= "book" type= "BookType"/> <xsd:complexType name= "BookType" > <xsd:sequence> <xsd:element name= "Title" sql:field= "title"/> <xsd:element name= "ISBN" sql:field= "isbn"/> <xsd:element name= "Publisher" sql:field= "publisher"/> </xsd:sequence> </xsd:complexType> </xsd:schema> Definition der XML-Struktur Definition der Tabellenspalten Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 11-26 Benutzerdefinierte XML-Sicht: Beispiel publisher title isbn Addison Wesley Datenmodelle 3-89319-566-1 Springer DatenbankHandbuch 3-540-10741-X Thomson Objektdatenbanken 3-8266-0258-7 <Book> <Title> Datenmodelle </Title> <ISBN> 3-89319-566-1 </ISBN> <Publisher> Addision Wesley</Publisher> </Book> ... <Book> <Title> Objektdatenbanken </Title> <ISBN>3-8266-00258-7 </ISBN> <Publisher> Thomson </Publisher> </Book> Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) SichtDefinition Sichten können als XML-Dokumente über den IIS abgerufen werden, um sie dann weiterzuverarbeiten 11-27 Manipulationen z SQL Server 2000 bietet keine Funktion zur Manipulation von XMLDokumenten, die als CLOB gespeichert sind z Dadurch deutliche Einschränkung des textbasierten Ansatzes z Manipulationen bei strukturbasierten Abbildungen sind möglich über sogenannte Updategrams – – – Aufbauend auf annotierte XML-Schemas Formulierung der Änderungen in einem XML-Dokument: Neuer Namensraum: xmlns:updg="urn:schemas-microsoft-com:xml-updategram" – Definition eines vorigen (abzuändernden) Zustandes Definition des neuen Zustandes Unterschiedliche Änderungsoperationen durch verschiedene Elementinhalte z Element before: Element after: Einfügen : Löschen: Update: before-Element wird leer gelassen after-Element wird leer gelassen beide Elemente haben nicht-leeren Inhalt Automatische Durchführung der erforderlichen Datenbankoperationen Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 11-28 Manipulationen: Beispiel für Updategrams z Datenbestand mit XML-Sicht wie im vorigen Beispiel z Änderungsoperation: Update der Verlagsinformation <ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram"> <updg:sync > <updg:before> <Book> <Title> Objektdatenbanken </Title> <ISBN>3-8266-00258-7 </ISBN> <Publisher> Thomson </Publisher> </Book> </updg:before> <updg:after> <Book> <Title> Objektdatenbanken </Title> <ISBN>3-8266-00258-7 </ISBN> <Publisher> International Thomson Publishing </Publisher> <Book> </updg:after> </updg:sync> </ROOT> Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 11-29 Zusammenfassung SQL Server 2000 XML-Unterstützung XML-Speicherung Modell relational Schemabeschreibung inline DTD oder XML-Schema Art der Speicherung textbasiert: CLOB-Spalte modellbasiert: mit OPENXML benutzerdefiniert strukturbasiert: mit OPENXML – STORED Queries Abbildungen von DB auf XML automatisch: FOR XML-Klausel benutzerdefiniert: XSD-Annotationen XML-Datentyp Indexe Wertindex Standard-DBS-Indexe Volltextindex keine XML-spezifischen Funktionen Pfadindex Anfragen und Manipulation Anfragen SQL-Erweiterungen, XPath-Dialekt Manipulationen mit Updategrams Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 11-30 Kritik des Ansatzes von SQL Server 2000 z Zu eingeschränkte Unterstützung von XML im DBS-Kern – – – z Viele Möglichkeiten, XML auf DB-Strukturen abzubilden – z Unterstützung von STORED-Queries positiv Benötigte Infrastruktur zu komplex – z kein XML-Datentyp vorhanden keine Unterstützung für Updates durch XML-Prozessor im DBS Unterstützung für SQL/XML fehlt komplett Internet Information Server ist hier eigentlich unnötig Positiv: Annotation von Standard-XML-Schemas für die Sichtenbildung Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 11-31 Oracle9i: Architektur Anwendung XML-Dokumente Oracle9i Oracle verfolgt den SQL/XML-Ansatz Datenbank Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 11-32 Oracle9i: Detailliertere Architekturübersicht Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 11-33 Speicherungsstruktur: Abbildung von XML auf Datenbanken z Varianten zur Abbildung von XML auf Datenbanken – – z Ausnutzung der objektrelationalen Erweiterung von Oracle – – – z XML-Column-Ansatz: Spalte basiert auf XML-Datentyp XML-Table-Ansatz: Tabelle basiert auf XML-Datentyp XMLTYPE als vordefinierter Objekttyp mit SQL/XML-Funktionen als Methoden Intermedia-Text-Paket mit Volltextfunktionalität DBMS_XMLDOM-Paket mit DOM-Methoden Speicherungsansätze – – – textbasiert (unstrukturierte Speicherung als CLOB) strukturbasiert (objektrelationale Speicherung setzt XML-Schema voraus) hybrid (semistrukturiert) Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 11-34 XML-Column-Ansatz z Definition einer Tabelle zur Aufnahme von XML-Dokumenten CREATE TABLE Berichte ( ID INTEGER, Inhalt XMLTYPE ); z Einfügen von Dokumenten INSERT INTO Berichte VALUES (123, XMLTYPE('<Bericht> ... <Autor>Jim Beam</Autor> <Titel>Beam Dir einen Whisky</Titel> ... <Datum>16.11.2001</Datum> </Bericht>')); Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 11-35 XML-Table-Ansatz z Definition einer Tabelle zur Aufnahme von XML-Dokumenten CREATE TABLE XMLBerichte OF XMLTYPE ; z Einfügen von Dokumenten INSERT INTO XMLBerichte VALUES (XMLTYPE('<Bericht> ... <Autor>Jim Beam</Autor> <Titel>Beam Dir einen Whisky</Titel> ... <Datum>16.11.2001</Datum> </Bericht>')); Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 11-36 Benutzerdefinierte Funktion getDocument(...) zum Einlesen von XML-Dokumten als CLOBs CREATE DIRECTORY xmldir AS 'c:\xmldir'; GRANT READ ON DIRECTORY xmldir TO PUBLIC WITH GRANT OPTION; CREATE FUNCTION getDocument(filename VARCHAR2) RETURN CLOB AUTHID CURRENT_USER IS xbfile BFILE; xclob CLOB; BEGIN xbfile := BFILENAME('xmldir', filename); DBMS_LOB.OPEN(xbfile); DBMS_LOB.CREATETEMPORARY(xclob, TRUE, DBMS_LOB.session); DBMS_LOB.LOADFROMFILE(xclob, xbfile, DBMS_LOB.getLength(xbfile)); DBMS_LOB.CLOSE(xbfile); RETURN xclob; END; / INSERT INTO xmltable (doctext) VALUES (XMLTYPE(getDocument('Berichte.xml'))); Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 11-37 XMLTYPE-Eigenschaften CREATE TABLE <Tabellenname> ( <Spaltenname> XMLTYPE [<XML-Property>] ); CREATE TABLE <Tabellenname> OF XMLTYPE [<XML-Property>] <XML-Property> := [XMLTYPE [COLUMN] <Spaltenname> [STORE AS {OBJECT RELATIONAL | CLOB (<LOB-Parameter>)}] [XMLSCHEMA <url> ELEMENT [<url>#]<Element>] textbasierte Speicherung Default: CLOB CREATE TABLE XMLBerichte OF XMLTYPE XMLSCHEMA "http://www.dbs.ethz.ch/Berichte.xsd" ELEMENT "Bericht"; ist äquivalent zu strukturbasierte Speicherung (erfordert Angabe eines passenden XML-Schema) CREATE TABLE XMLBerichte OF XMLTYPE ELEMENT "http://www.dbs.ethz.ch/Berichte.xsd#Bericht"; Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 11-38 Methoden des XML-Datentyps XMLTYPE (1) z XMLTYPE(<Wertausdruck>[,<Schema-URL>[, <Validated>]] [,<Wellformed>]) ist der Konstruktor – Wertausdruck kann eine Zeichenkette oder eine Instanz eines benutzerdefinierten Typs sein z getClobVal() liefert XML-Wert als CLOB z getStringVal() liefert XML-Wert als Zeichenkette z getNumVal() ist nur anwendbar auf einem XML-Wert, der einen Textknoten darstellt, dessen Zeichenkette einer Nummer entspricht z isFragment() liefert 1, wenn Instanz mehr als ein Wurzelelement hat z existsNode(<XPath-Ausdruck>[, <Namensraum>]) liefert 1 oder 0, je nach dem, ob der XPath-Ausdruck einen Knoten liefert oder nicht z extract(<XPath-Ausdruck>[, <Namensraum>]) extrahiert einen Teil des XML-Wertes entsprechend eines XPath-Ausdruckes Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 11-39 Methoden des XML-Datentyps XMLTYPE (2) z transform(<XML-Wertausdruck>) transformiert einen XML-Wert gemäss einem anderen XML-Wert, der ein Stylesheet repräsentiert z toObject() konvertiert einen XML-Wert in einen Objektwert z isSchemaBased() liefert 1, wenn der XML-Wert aus einen vorgegebenen Schema basiert z getSchemaURL() liefert die URL des Schemas z getRootElement() liefert das Wurzelelement (bei XML-Fragmenten Null) z createSchemaBasedXML(<Schema-URK>) fügt dem XML-Wert ein Schema hinzu z createNonSchemaBasedXML() hebt die Assoziation zu einem Schema auf (falls eine vorhanden war) Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 11-40 Indexierung z Indexunterstützung – Wertindexe Volltextindex – Pfadindex CREATE INDEX xmlpfadidx ON Berichte(Inhalt) INDEXTYPE IS CTXSYS.CTXXPATH; – Funktionaler Index CREATE INDEX xmlfunktionalidx ON Berichte (Inhalt.EXTRACT('//Autor/text()').getStringVal()); – z Anfrage, die den funktionalen Index nutzt: CREATE INDEX xmlfulltextidx ON Berichte(Inhalt) INDEXTYPE IS CTXSYS.CONTEXT; SELECT ID FROM Berichte WHERE EXTRACT(Inhalt, '//Autor/text()').getStringVal() = 'Jim Beam'; Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 11-41 Anfragen z Unterstützung des SQL/XML-Standards – – – – z Plus weitere Funktionen wie – – – – z XMLAGG XMLELEMENT XMLATTRIBUTE XMLFOREST XMLSEQUENCE XMLCOLATTVAL EXTRACT EXISTSNODE etc. Volltextsuche durch Einbindung des Intermedia-Text-Pakets Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) SELECT SCORE(1), doctext FROM xmltable WHERE CONTAINS(doctext, 'Jim') > 0 ORDER BY SCORE(1); 11-42 XML-Funktionen z basieren auf den XMLTYPE-Methoden z Auswahl von Oracle-XML-Funktionen – – – – – – – – – – – – XMLTYPE erzeugt einen XML-Wert aus einem CLOB EXTRACT extrahiert Knoten mittels eines XPath-Ausdruckes EXTRACTVALUE extrahiert einen Knoten mittels eines XPath-Ausdruckes EXISTSNODE überprüft, ob ein bestimmter Knoten existiert XMLELEMENT erzeugt ein XML-Element aus einer Werteliste XMLATTRIBUTES erzeugt XML-Attribute XMLCOLATTVAL liefert einen Wald von XML-Elementen mit Tag <column> XMLFOREST erzeugt einen Wald von XML-Elementen XMLCONCAT konkateniert mehrere XML-Elemente zu einem Wald XMLAGG aggregriert die XML-Elemente einer Gruppe XMLUPDATE manipuliert einen XMLWert … Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 11-43 XMLTYPE (1) XMLTYPE(<Zeichenkettenausdruck> ) erzeugt einen XML-Wert Beispiel: Mitarbeiter Name Gehalt Joe 2000 Jim 3500 SELECT XMLTYPE('<Mitarbeiter Name="' || Name || '"> <Gehalt>' || 12 * Gehalt || '</Gehalt> </Mitarbeiter>') AS Angestellte FROM Mitarbeiter; Angestellte Simulation von XMLGEN partiell möglich (beschränkt auf XPathAusdrücke; kein XQuery)! Vergleiche mit dem entsprechenden Beispiel aus Kapitel 7 (SQL/XML) Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) <Mitarbeiter Name="Joe"> <Gehalt>24000</Gehalt> </Mitarbeiter> <Mitarbeiter Name="Jim"> <Gehalt>42000</Gehalt> </Mitarbeiter> 11-44 XMLTYPE (2) Berichte ID 123 Inhalt <Bericht> ... <Autor>Jim Beam</Autor> <Titel>Beam Dir einen Whisky</Titel> ... <Datum>16.11.2001</Datum> </Bericht> 234 <Bericht><Autor>Johnny Walker</Autor><Datum>14.11.2002</Datum> <Titel>Whisky, Walking and Talking</Titel> ... </Bericht> 872 <Bericht> <Titel>Great Single Malts</Titel> ... <Autor>Jack</Autor> <Autor>Jim Beam</Autor> <Datum>21.11.2002</Datum> </Bericht> SELECT ID, XMLTYPE('<Autoren>' || EXTRACT(Inhalt, '//Autor/text()').getClobVal() || '</Autoren>') AS Autorennamen FROM Berichte; ID Autorennamen 123 <Autoren>Jim Beam</Autoren> 234 872 <Autoren>Johnny Walker</Autoren> <Autoren>JackJim Beam</Autoren> Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 11-45 EXTRACTVALUE EXTRACTVALUE(<XML-Wertausdruck>, <XPath-Ausdruck>[,<Wertausdruck>]) extrahiert einen durch eine XPath-Anfrage definierten Ausschnitt des XML-Wert, der einem einzelnen Knotenwert entspricht Beispiel: SELECT ID, XMLTYPE('<Titel>' || EXTRACTVALUE(Inhalt, '//Titel') || '</Titel>') AS Berichttitel FROM Berichte; ID Berichttitel 123 <Titel>Beam Dir einen Whisky</Titel> 234 <Title>Whisky, Walking and Talking</Title> 872 <Title>Great Single Malts</Title> Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 11-46 EXTRACT EXTRACT(<XML-Wertausdruck>, <XPath-Ausdruck>[, <Namensraum>]) extrahiert einen durch eine XPath-Anfrage definierten Ausschnitt des XMLWertes Beispiel: SELECT ID, EXTRACT(Inhalt, '//Titel') AS Berichttitel FROM Berichte; ID Berichttitel 123 <Titel>Beam Dir einen Whisky</Titel> 234 <Title>Whisky, Walking and Talking</Title> 872 <Title>Great Single Malts</Title> Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 11-47 EXISTSNODE EXISTSNODE(<XML-Wertausdruck>, <XPath-Ausdruck> [, <Namensraum>]) ergibt 1 (True), wenn die Anfrage auf dem XML-Wert ein nicht-leeres Ergebnis liefert Beispiel: Berichte ID 123 Inhalt <Bericht> ... <Autor>Jim Beam</Autor> <Titel>Beam Dir einen Whisky</Titel> ... <Datum>16.11.2001</Datum> </Bericht> 234 <Bericht><Autor>Johnny Walker</Autor><Datum>14.11.2002</Datum> <Titel>Whisky, Walking and Talking</Titel> ... </Bericht> 872 <Bericht> <Titel>Great Single Malts</Titel> ... <Autor>Jack</Autor> <Autor>Jim Beam</Autor> <Datum>21.11.2002</Datum> </Bericht> SELECT ID FROM Berichte WHERE EXISTSNODE(Inhalt, '//Autor[text()="Jack"]') = 1; Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) ID 872 11-48 XMLELEMENT XMLELEMENT(NAME <Elementname> [, XMLATTRIBUTES(<XML-Attributliste>)] [, <Wertausdrucksliste>]) <XML-Attribut> := <Wertausdruck> [AS <Attributname>] erzeugt ein XML-Element Beispiel: Mitarbeiter Name Gehalt Joe 2000 Jim 3500 SELECT XMLELEMENT(NAME "Mitarbeiter", XMLATTRIBUTES(Gehalt), Name) AS Element FROM Mitarbeiter; Element <Mitarbeiter GEHALT="2000">Joe</Mitarbeiter> <Mitarbeiter GEHALT="3500">Jim</Mitarbeiter> Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 11-49 XMLCOLATTVAL XMLCOLATTVAL(<XML-Spaltenwerteliste>) <XML-Spaltenwerte>:=<Wertausdruck> [AS <Elementname>] erzeugt XML-Elemente aus SQL-Wertausdrücken Beispiel: Mitarbeiter Name Gehalt Joe 2000 Jim 3500 SELECT XMLCOLATTVAL(Name, 12*Gehalt AS Gehalt) AS Mitarbeitergehalt FROM Mitarbeiter; Mitarbeitergehalt <column name="NAME">Joe</column> <column name="GEHALT>24000</column> <column name="NAME">Jim</column> <column name="GEHALT>4200</column> Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 11-50 XMLFOREST XMLFOREST(<XML-Forest-Elementliste>) <XML-Forest-Element>:=<Wertausdruck> [AS <Elementname>] erzeugt einen Wald von XML-Elementen mit optionalen Attributen Beispiel: Mitarbeiter Name Gehalt Joe 2000 Jim 3500 SELECT XMLFOREST(Name, XMLELEMENT(NAME "Euro", 12*Gehalt) AS Einkommen) AS Mitarbeitergehalt FROM Mitarbeiter; Mitarbeitergehalt <NAME>Joe</NAME> <Einkommen> <Euro>24000</Euro> </Einkommen> <NAME>Jim</NAME> < Einkommen> <Euro>42000</Euro> </Einkommen> Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 11-51 XMLCONCAT XMLCONCAT(<XML-Wertausdrucksliste>) konkateniert XML-Elemente zu einem Wald Beispiel: Mitarbeiter Name Gehalt Joe 2000 Jim 3500 SELECT XMLCONCAT( XMLELEMENT(NAME "Name", Name), XMLELEMENT(NAME "Euro", 12*Gehalt)) AS Mitarbeitergehalt FROM Mitarbeiter; Mitarbeitergehalt <Name>Joe</Name> <Euro>24000</Euro> <Name>Jim</Name> <Euro>42000</Euro> Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 11-52 XMLAGG XMLAGG(<XML-Wertausdruck>[ORDER BY, <Sortierausdrucksliste>] ) aggregiert die XML-Elemente einer Gruppe Beispiel: Mitarbeiter Name Gehalt Joe 2000 Jim 3500 Jim 5000 SELECT Name, XMLAGG( XMLELEMENT(NAME "Gehalt", Gehalt)) AS Einkommen FROM Mitarbeiter GROUP BY Name; Name Einkommen Joe <Gehalt>2000</Gehalt> Jim <Gehalt>3500</Gehalt> <Gehalt>5000</Gehalt> Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 11-53 XMLSEQUENCE XMLSEQUENCE(<XML-Wertausdruck>) erzeugt aus XML-Elementen ein Array von XML-Werten Beispiel: SELECT ID, XMLSEQUENCE(EXTRACT(Inhalt, '//Autor')) AS Autoren FROM Berichte; ID Autoren 123 XMLSEQUENCETYPE(XMLTYPE(<Autor>Jim Beam</Autor>)) 234 XMLSEQUENCETYPE(XMLTYPE(<Autor>Johnny Walker</Autor>)) 872 XMLSEQUENCETYPE(XMLTYPE(<Autor>Jack</Autor>), XMLTYPE(<Autor>Jim Beam</Autor>)) Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 11-54 Manipulation — UPDATEXML UPDATEXML(<XML-Wertausdruck>, <Ersetzungsliste>[,<Namensraum>]) <Ersetzung> := <XPath-Ausdruck>,<Wert-Ausdruck> manipuliert einen durch eine XPath-Anfrage definierten Ausschnitt des XMLWertes Beispiel: UPDATE Berichte SET Inhalt = UPDATEXML(Inhalt, '//Autor[text()="Jim Beam"]/text()', 'Glenn'); Berichte ID 123 Inhalt 234 <Bericht><Autor>Johnny Walker</Autor><Datum>14.11.2002</Datum> <Titel>Whisky, Walking and Talking</Titel> ... </Bericht> 872 <Bericht> <Titel>Great Single Malts</Titel> ... <Autor>Jack</Autor> <Autor>Glenn</Autor> <Datum>21.11.2002</Datum> </Bericht> <Bericht> ... <Autor>Glenn</Autor> <Titel>Beam Dir einen Whisky</Titel> ... <Datum>16.11.2001</Datum> </Bericht> Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 11-55 XML-Sichten z ermöglichen XML-basierte Sicht auf SQL- bzw. XML-Werte z basieren auf dem Prinzip der Objektsichten – z der Objekttyp ist hier XMLTYPE Beispiel: CREATE VIEW BerichteSicht OF XMLTYPE WITH OBJECT ID DEFAULT AS SELECT VALUE(x) FROM XMLBerichte x WHERE EXTRACT(VALUE(x), '//Autor/text()').getStringVal() = 'Jack'; Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 11-56 Export von Datenbankinhalten mit XML-Syntax z Standardabbildung von SQL nach XML – – – – – – – Spalten ergeben Elemente der ersten Ebene (top level) Einfache Typen (mit skalaren Werten) als Elemente mit PCDATA Strukturierte Typen und ihre Attribute auf Elemente mit Subelementen für die Attribute abgebildet Komplexe Attribute als hierarchisch geschachtelte Elemente Aus Kollektionstypen werden Listen von Elementen Objektreferenzen und referenzielle Integritätsbedingungen werden auf ID/IDREF innerhalb eines Dokuments abgebildet Tabelleninhalt wird auf ROWSET-Elemente abgebildet <ROWSET> <ROW num="1"> … </ROW> … <ROW num="n"> … </ROW> </ROWSET> z Benutzerdefinierte Transformation von SQL nach XML mit XSLT möglich Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 11-57 Zusammenfassung Oracle-XML-Unterstützung XML-Speicherung Modell erweiterbar, objektrelational Schemabeschreibung Validierung möglich Art der Speicherung text- oder strukturbasiert Abbildungen von DB auf XML durch XML-Funktionen, Schemageneratoren, XML-Sichten XML-Datentyp vorhanden Indexe Wertindex Volltextindex Pfadindex Anfragen und Manipulation Anfragen SQL-Methoden mit XPath 1.0 Volltextsuche mit dem Intermedia-Text-Erweiterungspaket Manipulationen SQL-Methoden mit XPath 1.0 Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 11-58 Kritik des Ansatzes von Oracle z Gute Unterstützung von Standards – – – z Besonderheiten: – – – – z XPath 1.0 XML-Schema SQL/XML XML-Sichten Tools für Export und Import von XML-Schemata XSLT-Prozessor, XML-Prozessoren (DOM, SAX), XML-Schema Validator Problem: zu viele parallele, redundante Ansätze – – Konsolidierung erforderlich! Hier nicht weiter betrachtet! Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 11-59 Excelon - Architektur Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 11-60 Zusammenfassung Excelon XML-Speicherung Modell objektorientiert (DOM) Schemabeschreibung Validierung möglich Art der Speicherung modellbasiert Abbildungen von DB auf XML nativ XML-Datentyp — Indexe Wertindex Volltextindex Pfadindex Anfragen und Manipulation Anfragen XQL, XPath 1.0 + Teile von XQuery 1.0 Volltextsuche Manipulationen XUpdate (SQL-ähnlich mit XPath 1.0) Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 11-61 Tamino - Architektur (1) Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 11-62 Tamino - Architektur (2) XML Parser: Wohlgeformtheit & Korrektheit Object Processor: Speichert XML und SQL Daten Query Interpreter: X-Query (XPath-ähnlich) Interpretation gemäß Data Map Objekt Composer: Generiert XML Dokumente aus Anfragen Utilities: Beschleunigung beim Laden Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 11-63 Zusammenfassung Tamino XML-Speicherung Modell nativ Schemabeschreibung Validierung möglich Art der Speicherung modellbasiert Abbildungen von DB auf XML nativ XML-Datentyp — Indexe Wertindex Volltextindex Pfadindex Anfragen und Manipulation Anfragen XQL, XPath 1.0 mit Erweiterungen Volltextsuche Manipulationen ? Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 11-64 Poet - Architektur Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 11-65 Zusammenfassung Poet XML-Speicherung Modell objektorientiert Schemabeschreibung für strukturierte Speicherung erforderlich Art der Speicherung modellbasiert, strukturiert Abbildungen von DB auf XML über Java-Methoden XML-Datentyp — Indexe Wertindex Volltextindex — Pfadindex Anfragen und Manipulation Anfragen OQL Volltextsuche — Manipulationen OQL Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 11-66 Infonyte-DB - Architektur Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 11-67 Zusammenfassung Infonyte-DB XML-Speicherung Modell nativ (DOM) Schemabeschreibung Validierung möglich Art der Speicherung modellbasiert Abbildungen von DB auf XML nativ XML-Datentyp Indexe Wertindex Volltextindex Pfadindex Anfragen und Manipulation Anfragen XPath 1.0 + Teile von XQuery 1.0 Volltextsuche — Manipulationen über DOM-Methoden Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 11-68