XML und Datenbanken - Die DBS

Werbung
Kapitel 11
Kommerzielle Datenbanksysteme
für die XML-Verarbeitung
Oracle
DB2 mit XML Extender
Microsoft SQL Server
Tamino
Excelon
Poet
Infonyte
Beispiel:
XML-SchemaDokument
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="Buch" type="Buch"/>
<xsd:complexType name="Buch">
<xsd:sequence>
<xsd:element name="Autor" type="xsd:string"/>
<xsd:element name="Titel" type="xsd:string"/>
<xsd:element name="Untertitel" type="xsd:string"/>
<xsd:element name="Verlag">
<xsd:complexType>
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute name="Ort" type="xsd:string"/>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
</xsd:element>
<xsd:element name="Auflage" type="xsd:int" minOccurs="0"/>
<xsd:choice minOccurs="0">
<xsd:element name="Covertext" type="xsd:string"/>
<xsd:element name="Beschreibung" type="xsd:string"/>
</xsd:choice>
</xsd:sequence>
<xsd:attribute name="ISBN" type="xsd:string"/>
<xsd:attribute name="Jahr" type="xsd:gYear"/>
</xsd:complexType>
</xsd:schema>
Vorlesung "XML und Datenbanken" - WS 2003/2004 (Dr. C. Türker)
11-2
Beispiel: XML-Dokumente
<Buch ISBN="3-89864-148-1" Jahr="2003">
<Autor>Meike Klettke</Autor>
<Autor>Holger Meyer</Autor>
<Titel>XML & Datenbanken</Titel>
<Untertitel>
XML-Dokumente effizient speichern
und verarbeiten
</Untertitel>
<Verlag Ort="Heidelberg">dpunkt</Verlag>
<Beschreibung>Mit der wachsenden ...
</Beschreibung>
</Buch>
XML-Dokument buch1.xml
<Buch ISBN="3-8266-00258-7" Jahr="1997">
<Autor>Gunter Saake</Autor>
<Autor>Ingo Schmitt</Autor>
<Autor>Can Türker</Autor>
<Titel>Objektdatenbanken</Titel>
<Untertitel>
Konzepte, Sprachen, Architekturen
</Untertitel>
<Verlag Ort="Bonn">
International Thomson Publishing
</Verlag>
<Covertext>Dieses Lehrbuch ...</Covertext>
</Buch>
XML-Dokument buch2.xml
<Buch ISBN="3-89864-219-4" Jahr="2003">
<Autor>Can Türker</Autor>
<Titel>SQL:1999 & SQL:2003</Titel>
<Untertitel>
Objektrelationales SQL, SQLJ & SQL/XML
</Untertitel>
<Verlag Ort="Heidelberg">dpunkt</Verlag>
<Beschreibung>SQL ist ... </Beschreibung>
</Buch>
<Buch ISBN="3-89864-228-3" Jahr="2003">
<Autor>Gunter Saake</Autor>
<Autor>Kai-Uwe Sattler</Autor>
<Titel>Datenbanken & Java</Titel>
<Untertitel>JDBC, SQLJ, ODMG & JDO</Untertitel>
<Verlag>dpunkt</Verlag>
<Auflage>2</Auflage>
<Beschreibung> Das Zusammenspiel ...
</Beschreibung>
</Buch>
XML-Dokument buch4.xml
XML-Dokument buch3.xml
Vorlesung "XML und Datenbanken" - WS 2003/2004 (Dr. C. Türker)
11-3
Oracle9i: Architektur
Anwendung
XML-Dokumente
Oracle9i
Oracle verfolgt den
SQL/XML-Ansatz
Datenbank
Vorlesung "XML und Datenbanken" - WS 2003/2004 (Dr. C. Türker)
11-4
Oracle9i: Architekturübersicht (1)
Abbildung aus
"Oracle9i - XML Database
Developer’s Guide - Oracle XML
DB, Release 2 (9.2), March 2002"
Vorlesung "XML und Datenbanken" - WS 2003/2004 (Dr. C. Türker)
11-5
Oracle9i: Architekturübersicht (2)
Abbildung aus "Oracle9i - XML Database Developer’s
Guide - Oracle XML DB, Release 2 (9.2), March 2002"
Vorlesung "XML und Datenbanken" - WS 2003/2004 (Dr. C. Türker)
11-6
Oracle9i: Speicheroptionen
Abbildung aus
"Oracle9i - XML Database
Developer’s Guide - Oracle XML
DB, Release 2 (9.2), March 2002"
Vorlesung "XML und Datenbanken" - WS 2003/2004 (Dr. C. Türker)
11-7
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
DBMS_XMLSCHEMA-Paket mit Methoden zur Verwaltung und Generierung
von XML-Schemata
DBMS_XMLGEN-Paket mit Methoden zur Generierung von XML aus SQL
Speicherungsansätze
–
–
–
textbasiert (unstrukturierte Speicherung als CLOB)
strukturbasiert (objektrelationale Speicherung setzt XML-Schema voraus)
hybrid (semistrukturiert)
Vorlesung "XML und Datenbanken" - WS 2003/2004 (Dr. C. Türker)
11-8
Oracle9i: Speichervarianten
Abbildung aus
"Oracle9i - XML Database
Developer’s Guide - Oracle XML
DB, Release 2 (9.2), March 2002"
Vorlesung "XML und Datenbanken" - WS 2003/2004 (Dr. C. Türker)
11-9
XML-Column-Ansatz vs. XML-Table-Ansatz
Tabelle mit XML-Spalte
CREATE TABLE <Tabellenname> (<Spaltenname> XMLTYPE)
[XMLTYPE [COLUMN] <Spaltenname>
[STORE AS { OBJECT RELATIONAL | CLOB (<LOB-Parameter>) }]
[XMLSCHEMA <url> ELEMENT [<url>#]<Element>]]
strukturbasierte Speicherung
(erfordert Angabe eines
passenden XML-Schemas)
textbasierte
Speicherung
Default: CLOB
Tabelle mit XML-Zeile
CREATE TABLE <Tabellenname> OF XMLTYPE
[XMLTYPE STORE AS { OBJECT RELATIONAL | CLOB (<LOB-Parameter>) }]
[XMLSCHEMA <url> ELEMENT [<url>#]<Element>]]
Vorlesung "XML und Datenbanken" - WS 2003/2004 (Dr. C. Türker)
11-10
Benutzerdefinierte Funktion getDocument(datei)
zum Einlesen von XML-Dokumenten
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;
/
Vorlesung "XML und Datenbanken" - WS 2003/2004 (Dr. C. Türker)
11-11
XML-Column-Ansatz
z
Definition einer Tabelle zur Aufnahme von XML-Dokumenten
CREATE TABLE Buch
(
Inhalt XMLTYPE
);
z
Einfügen von Dokumenten
INSERT INTO Buch
VALUES (XMLTYPE('<Buch ISBN="3-89864-148-1" Jahr="2003">
<Autor>Meike Klettke</Autor>
<Autor>Holger Meyer</Autor> ...
</Buch>'));
INSERT INTO Buch
VALUES (XMLTYPE(getDocument('buch1.xml')));
Vorlesung "XML und Datenbanken" - WS 2003/2004 (Dr. C. Türker)
11-12
XML-Table-Ansatz
z
Definition einer Tabelle zur Aufnahme von XML-Dokumenten
CREATE TABLE Buch OF XMLTYPE ;
z
Einfügen von Dokumenten
INSERT INTO Buch
VALUES (XMLTYPE('<Buch ISBN="3-89864-148-1" Jahr="2003">
<Autor>Meike Klettke</Autor>
<Autor>Holger Meyer</Autor> ...
</Buch>'));
INSERT INTO Buch
VALUES (XMLTYPE(getDocument('buch1.xml')));
Vorlesung "XML und Datenbanken" - WS 2003/2004 (Dr. C. Türker)
11-13
Behandlung von XML-Schemata
z
Package DBMS_XMLSCHEMA bietet Routinen zum Registrieren,
Übersetzen, Generieren und Löschen von XML-Schemata
DBMS_XMLSCHEMA.registerSchema('Schema-URL', 'XML-Schema');
DBMS_XMLSCHEMA.compileSchema('Schema-URL');
DBMS_XMLSCHEMA.generateSchema('Schema', 'Typname');
DBMS_XMLSCHEMA.deleteSchema('Schema-URL', DeleteOption);
DELETE_RESTRICT
DELETE_INVALIDATE
DELETE_CASCADE
DELETE_CASCADE_FORCE
CONSTANT NUMBER := 1;
CONSTANT NUMBER := 2;
CONSTANT NUMBER := 3;
CONSTANT NUMBER := 4;
Vorlesung "XML und Datenbanken" - WS 2003/2004 (Dr. C. Türker)
11-14
Erzeugen einer schemabasierten XML-Tabelle
z
Registrierung des XML-Schemas
BEGIN
DBMS_XMLSCHEMA.registerSchema('buch.xsd', getDocument('buch.xsd'));
END;
/
z
Erzeugen der XML-Tabelle
CREATE TABLE Buch OF XMLTYPE
XMLSCHEMA "buch.xsd" ELEMENT "Buch";
ist äquivalent zu
CREATE TABLE Buch OF XMLTYPE
ELEMENT "buch.xsd#Buch";
Vorlesung "XML und Datenbanken" - WS 2003/2004 (Dr. C. Türker)
11-15
Methoden des XML-Datentyps XMLTYPE (1)
z
XMLTYPE(<Wertausdruck>) 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>) liefert 1 oder 0, je nach dem, ob der XPathAusdruck einen Knoten liefert oder nicht
z
extract(<XPath-Ausdruck>) extrahiert einen Teil des XML-Wertes
entsprechend eines XPath-Ausdruckes
Vorlesung "XML und Datenbanken" - WS 2003/2004 (Dr. C. Türker)
11-16
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 2003/2004 (Dr. C. Türker)
11-17
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 2003/2004 (Dr. C. Türker)
11-18
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 2003/2004 (Dr. C. Türker)
11-19
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 2003/2004 (Dr. C. Türker)
<Mitarbeiter Name="Joe">
<Gehalt>24000</Gehalt>
</Mitarbeiter>
<Mitarbeiter Name="Jim">
<Gehalt>42000</Gehalt>
</Mitarbeiter>
11-20
XMLTYPE (2)
SELECT XMLTYPE('<Autoren>' || EXTRACT(VALUE(b), '//Autor') || '</Autoren>')
AS Autorennamen
FROM Buch b;
AUTORENNAMEN
<Autoren>
<Autor>Meike Klettke</Autor>
<Autor>Holger Meyer</Autor>
</Autoren>
<Autoren>
<Autor>Gunter Saake</Autor>
<Autor>Ingo Schmitt</Autor>
<Autor>Can Türker</Autor>
</Autoren>
<Autoren>
<Autor>Can Türker</Autor>
</Autoren>
Vorlesung "XML und Datenbanken" - WS 2003/2004 (Dr. C. Türker)
<Autoren>
<Autor>Gunter Saake</Autor>
<Autor>Kai-Uwe Sattler</Autor>
</Autoren>
11-21
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 EXTRACTVALUE(VALUE(b), '//@ISBN') AS ISBNummer,
EXTRACTVALUE(VALUE(b), '//Titel') AS Buchtitel
FROM Buch b;
ISBNUMMER
BUCHTITEL
3-89864-148-1
XML & Datenbanken
3-8266-00258-7
Objektdatenbanken
3-89864-219-4
SQL:1999 & SQL:2003
3-89864-228-3
Datenbanken & Java
Vorlesung "XML und Datenbanken" - WS 2003/2004 (Dr. C. Türker)
11-22
EXTRACT
EXTRACT(<XML-Wertausdruck>, <XPath-Ausdruck>[, <Namensraum>])
extrahiert einen durch eine XPath-Anfrage definierten Ausschnitt des XML-Wertes
Beispiel:
SELECT EXTRACT(VALUE(b), '//@ISBN') AS ISBNummer,
EXTRACT(VALUE(b), '//Titel/text()') AS Titel_Inhalt,
EXTRACT(VALUE(b), '//Titel') AS Titel_Element
FROM Buch b;
ISBNUMMER
TITEL_INHALT
TITEL_ELEMENT
3-89864-148-1
XML & Datenbanken
<Titel>XML & Datenbanken</Titel>
3-8266-00258-7
Objektdatenbanken
<Titel>Objektdatenbanken</Titel>
3-89864-219-4
SQL:1999 & SQL:2003 <Titel>SQL:1999 & SQL:2003</Titel>
3-89864-228-3
Datenbanken & Java
Vorlesung "XML und Datenbanken" - WS 2003/2004 (Dr. C. Türker)
<Titel>Datenbanken & Java</Titel>
11-23
EXISTSNODE
EXISTSNODE(<XML-Wertausdruck>, <XPath-Ausdruck> [, <Namensraum>])
ergibt 1, wenn die Anfrage auf dem XML-Wert ein nicht-leeres Ergebnis liefert
Beispiel:
SELECT EXTRACTVALUE(VALUE(b), '//Titel') AS Buchtitel,
EXTRACTVALUE(VALUE(b), '//Verlag') AS Verlagsname,
EXTRACTVALUE(VALUE(b), '//Autor[1]') AS Erstautor
FROM Buch b
WHERE EXISTSNODE(VALUE(b), '//Buch[@ISBN="3-8266-00258-7"]') = 1;
BUCHTITEL
VERLAGSNAME
Objektdatenbanken International Thomson Publishing
Vorlesung "XML und Datenbanken" - WS 2003/2004 (Dr. C. Türker)
Erstautor
Gunter Saake
11-24
XMLELEMENT
XMLELEMENT(NAME <Elementname>
[, XMLATTRIBUTES(<XML-Attributliste>)]
[, <Wertausdrucksliste>])
<XML-Attribut> := <Wertausdruck> [AS <Attributname>]
erzeugt ein XML-Element
Beispiel: SELECT XMLELEMENT(NAME "ISBNummer",
XMLATTRIBUTES(EXTRACTVALUE(VALUE(b), '//Titel') AS TITEL),
EXTRACT(VALUE(b), '//@ISBN')) AS ISBN_Element
FROM Buch b;
ISBN_ELEMENT
<ISBNummer TITEL="XML & Datenbanken">3-89864-148-1</ISBNummer>
<ISBNummer TITEL="Objektdatenbanken">3-8266-00258-7</ISBNummer>
<ISBNummer TITEL="SQL:1999 & SQL:2003">3-89864-219-4</ISBNummer>
<ISBNummer TITEL="Datenbanken & Java">3-89864-228-3</ISBNummer>
Vorlesung "XML und Datenbanken" - WS 2003/2004 (Dr. C. Türker)
11-25
XMLCOLATTVAL
XMLCOLATTVAL(<XML-Spaltenwerteliste>)
<XML-Spaltenwerte>:=<Wertausdruck> [AS <Elementname>]
erzeugt XML-Elemente aus SQL-Wertausdrücken
Beispiel:
SELECT XMLCOLATTVAL(EXTRACTVALUE(VALUE(b), '//Titel') AS Buchtitel,
EXTRACTVALUE(VALUE(b), '//Autor[1]') AS Erstautor)
AS Buchtitelautor
FROM Buch b
WHERE EXISTSNODE(VALUE(b), '//Autor[text()="Gunter Saake"]') = 1;
BUCHTITELAUTOR
<column name="BUCHTITEL">Objektdatenbanken</column>
<column name="ERSTAUTOR">Gunter Saake</column>
<column name="BUCHTITEL">Datenbanken & Java</column>
<column name="ERSTAUTOR">Gunter Saake</column>
Vorlesung "XML und Datenbanken" - WS 2003/2004 (Dr. C. Türker)
11-26
XMLFOREST
XMLFOREST(<XML-Forest-Elementliste>)
<XML-Forest-Element>:=<Wertausdruck> [AS <Elementname>]
erzeugt einen Wald von XML-Elementen mit optionalen Attributen
Beispiel:
SELECT XMLFOREST(EXTRACTVALUE(VALUE(b), '//Titel') AS Buchtitel,
EXTRACTVALUE(VALUE(b), '//Autor[1]') AS Erstautor)
AS Buchtitelautor
FROM Buch b
WHERE EXISTSNODE(VALUE(b), '//Autor[text()="Gunter Saake"]') = 1;
BUCHTITELAUTOR
<BUCHTITEL>Objektdatenbanken</BUCHTITEL>
<ERSTAUTOR>Gunter Saake</ERSTAUTOR>
<BUCHTITEL>Datenbanken & Java</BUCHTITEL>
<ERSTAUTOR>Gunter Saake</ERSTAUTOR>
Vorlesung "XML und Datenbanken" - WS 2003/2004 (Dr. C. Türker)
11-27
XMLCONCAT
XMLCONCAT(<XML-Wertausdrucksliste>)
konkateniert XML-Elemente zu einem Wald
Beispiel:
SELECT XMLCONCAT(EXTRACT(VALUE(b), '//Titel'),
EXTRACT(VALUE(b), '//Autor[1]'))
AS Buchtitelautor
FROM Buch b
WHERE EXISTSNODE(VALUE(b), '//Autor[text()="Gunter Saake"]') = 1;
BUCHTITELAUTOR
<Titel>Objektdatenbanken</Titel>
<Autor>Gunter Saake</Autor>
<Titel>Datenbanken & Java</Titel>
<Autor>Gunter Saake</Autor>
Vorlesung "XML und Datenbanken" - WS 2003/2004 (Dr. C. Türker)
11-28
XMLAGG
XMLAGG(<XML-Wertausdruck>[ORDER BY, <Sortierausdrucksliste>] )
aggregiert die XML-Elemente einer Gruppe
Beispiel:
SELECT EXTRACTVALUE(VALUE(b), '//Verlag') AS Verlag,
XMLAGG(EXTRACT(VALUE(b), '//Titel')) AS Titel
FROM Buch b
GROUP BY EXTRACTVALUE(VALUE(b), '//Verlag');
VERLAG
TITEL
International Thomson Publishing
XML & Datenbanken
dpunkt
<Titel>XML & Datenbanken</Titel>
<Titel>Datenbanken & Java</Titel>
<Titel>SQL:1999 & SQL:2003</Titel>
Vorlesung "XML und Datenbanken" - WS 2003/2004 (Dr. C. Türker)
11-29
XMLSEQUENCE
XMLSEQUENCE(<XML-Wertausdruck>)
erzeugt aus XML-Elementen ein Array von XML-Werten
Beispiel:
ISBN
SELECT EXTRACTVALUE(VALUE(b), '//@ISBN') AS ISBN,
XMLSEQUENCE(EXTRACT(VALUE(b), '//Autor')) AS Autoren
FROM Buch b
WHERE EXISTSNODE(VALUE(b), '//Autor[text()="Gunter Saake"]') = 1;
AUTOREN
3-8266-00258-7 XMLSEQUENCETYPE(XMLTYPE(<Autor>Gunter Saake</Autor>),
XMLTYPE(<Autor>Ingo Schmitt</Autor>),
XMLTYPE(<Autor>Can Türker</Autor>))
3-89864-228-3
XMLSEQUENCETYPE(XMLTYPE(<Autor>Gunter Saake</Autor>),
XMLTYPE(<Autor>Kai-Uwe Sattler</Autor>))
Vorlesung "XML und Datenbanken" - WS 2003/2004 (Dr. C. Türker)
11-30
Indexierung
z
Indexunterstützung
–
Volltextindex
CREATE INDEX xmlfulltextidx ON Buch b
(VALUE(b)) INDEXTYPE IS CTXSYS.CONTEXT;
–
Pfadindex
CREATE INDEX xmlpfadidx ON Buch b
(VALUE(b)) INDEXTYPE IS CTXSYS.CTXXPATH;
–
Funktionaler Index
(Wertindex)
CREATE INDEX xmlfunktionalidx ON Buch
(EXTRACTVALUE(VALUE(b),'//@Jahr'));
Vorlesung "XML und Datenbanken" - WS 2003/2004 (Dr. C. Türker)
11-31
Indexausnutzung
z
Anfrage, die den Pfadindex nutzt:
SELECT EXTRACTVALUE(VALUE(b), '//Titel') AS Titel
FROM Buch b
WHERE EXISTSNODE(VALUE(b),'/Buch/Verlag[text()="dpunkt"]') = 1;
z
Anfrage, die den Volltextindex nutzt:
SELECT SCORE(0), EXTRACT(VALUE(b), '//@ISBN') AS ISBN
FROM Buch b
WHERE CONTAINS(VALUE(b), 'Java', 0) > 0
ORDER BY SCORE(0) DESC;
z
Anfrage, die den funktionalen Index nutzt:
SELECT EXTRACTVALUE(VALUE(b), '//Titel') AS Titel
FROM Buch b
WHERE EXTRACTVALUE(VALUE(b),'//@Jahr') = 2003;
Vorlesung "XML und Datenbanken" - WS 2003/2004 (Dr. C. Türker)
11-32
Manipulation — UPDATEXML
UPDATEXML(<XML-Wertausdruck>, <Ersetzungsliste>[,<Namensraum>])
<Ersetzung> := <XPath-Ausdruck>,<Wert-Ausdruck>
ändert einen durch eine XPath-Anfrage definierten Ausschnitt des XML-Wertes
Beispiel: UPDATE Buch b
SET VALUE(b) = UPDATEXML(VALUE(b), '//Verlag[text()="dpunkt"]/@Ort', 'Zürich');
Buch
SYS_NC_ROWINFO$
<Buch ISBN="3-89864-148-1" Jahr="2003"> ...
<Verlag Ort="Zürich">dpunkt-Verlag</Verlag> ... </Buch>
<Buch ISBN="3-8266-00258-7" Jahr="1997"> ...
<Verlag Ort="Bonn">International Thomson Publishing</Verlag> ... </Buch>
<Buch ISBN="3-89864-219-4" Jahr="2003"> ...
<Verlag Ort="Zürich">dpunkt-Verlag</Verlag> ... </Buch>
<Buch ISBN="3-89864-228-3" Jahr="2003"> ...
<Verlag Ort="Zürich">dpunkt-Verlag</Verlag> ... </Buch>
Vorlesung "XML und Datenbanken" - WS 2003/2004 (Dr. C. Türker)
11-33
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 DpunktBuch OF XMLTYPE
WITH OBJECT ID DEFAULT
AS SELECT VALUE(b)
FROM Buch b
WHERE EXISTSNODE(VALUE(b), '//Verlag[text()="dpunkt"]') = 1;
Vorlesung "XML und Datenbanken" - WS 2003/2004 (Dr. C. Türker)
11-34
Export von Datenbankinhalten mit XML-Syntax
z
Standardabbildung: SQL ô XML mit
–
–
–
–
–
–
–
DBMS_XMLGEN.getXML('Anfrage')
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 2003/2004 (Dr. C. Türker)
11-35
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
Wert-/Funktionsindex
vorhanden
Volltextindex
vorhanden
Pfadindex
vorhanden
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 2003/2004 (Dr. C. Türker)
11-36
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 2003/2004 (Dr. C. Türker)
11-37
IBM DB2 mit XMLExtender: Architektur
Anwendung
XML-Dokumente
DAD –
Document
Access
Definition
DB2 XML
Extender
IBM DB2
Datenbank
Vorlesung "XML und Datenbanken" - WS 2003/2004 (Dr. C. Türker)
DateiDateisystem
Dateisystem
Dateisystem
system
11-38
Abbildung zwischen XML und SQL
Abbildungen aus
"IBM DB2 Universal Database XML Extender
Administration and Programming, Version 8 2002"
Vorlesung "XML und Datenbanken" - WS 2003/2004 (Dr. C. Türker)
11-39
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 als CLOBs gespeichert
XML-Dokumente als VARCHARs gespeichert
XML-Dokumente 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 2003/2004 (Dr. C. Türker)
11-40
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 oder Command Window
> dxxadm enable_db XMLDB
z
XMLDB heisst hier unsere Beispieldatenbank
Definition der Tabellen zur Aufnahme von XML-Dokumenten
–
–
Variante 1: Erzeugen mit dem XML Extender Admin Wizard
Variante 2: SQL
CREATE TABLE Buch
(
Inhalt DB2XML.XMLVARCHAR
)
z
Einfügen eines XML-Dokuments
INSERT INTO Buch (Inhalt)
VALUES (DB2XML.XMLVARCHARFromFile('C:\XMLDIR\buch01.xml'))
Vorlesung "XML und Datenbanken" - WS 2003/2004 (Dr. C. Türker)
11-41
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 werden die Seitentabellen und Trigger zu
deren Wartung automatisch erzeugt
C:\> dxxadm enable_column DBName Tabellenname XMl-Attributname DADName
z
Beispiel: C:\> dxxadm enable_column XMLDB Buchlob Inhalt buch.dad
Vorlesung "XML und Datenbanken" - WS 2003/2004 (Dr. C. Türker)
11-42
Beispiel für eine XML-Column-DAD
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE DAD SYSTEM "C:\XMLDIR\dad.dtd">
IBM's DTD für DAD's
<DAD>
<dtdid>buch.dtd</dtdid>
Angabe einer DTD, die
<validation>YES</validation>
das DAD erfüllen muss
<Xcolumn>
<table name="Buch">
<column name="ISBN"
type="VARCHAR(20)" path="/Buch/@ISBN"
multi_occurrence="NO"/>
<column name="Jahr"
type="VARCHAR(4)" path="/Buch/@Jahr"
multi_occurrence="NO"/>
<column name="Titel"
type="VARCHAR(80)" path="/Buch/Titel"
multi_occurrence="NO"/>
<column name="Untertitel" type="VARCHAR(80)" path="/Buch/Untertitel" multi_occurrence="NO"/>
<column name="Verlag"
type="VARCHAR(50)" path="/Buch/Verlag"
multi_occurrence="NO"/>
<column name="Verlagsort"type="VARCHAR(50)" path="/Buch/Verlag/@Ort" multi_occurrence="NO"/>
<column name="Auflage" type="VARCHAR(2)" path="/Buch/Auflage"
multi_occurrence="NO"/>
</table>
<table name="Buchautor">
<column name="Autor"
type="VARCHAR(50)" path="/Buch/Autor"
multi_occurrence="YES"/>
</table>
</Xcolumn>
Autoren können in
</DAD>
den Dokumenten
mehrfach auftreten
Vorlesung "XML und Datenbanken" - WS 2003/2004 (Dr. C. Türker)
11-43
XML-Column-Ansatz für die Beispiel-Dokumente
XML-Tabelle Buchlob
DADSpezifikation
ROOT_ID Inhalt
Aus der DAD generiert
das DBMS automatisch die
korrespondierenden Seitentabellen
1
<Buch>...</Buch>
2
<Buch>...</Buch>
Seitentabelle Buchautor
3
<Buch>...</Buch>
ROOT_ID SEQNO Autor
Trigger
überwachen
Laden der
Dokumente
1
1
Meike Klettke
1
2
Holger Meyer
2
1
Gunter Saake
...
...
...
Seitentabelle Buch
ROOT_ID ISBN
Jahr
Titel
1
3-89864-148-1
2003 XML & Datenbanken XML-Dok … dpunkt Heidelberg —
2
3-8266-0258-7 1997 Objektdatenbanken
3
3-89864-219-4 2003 SQL:1999 & SQL:2003 Objekt …
dpunkt Heidelberg —
4
3-89864-228-3 2003 Datenbanken & Java
dpunkt Heidelberg 2
Vorlesung "XML und Datenbanken" - WS 2003/2004 (Dr. C. Türker)
Untertitel
Verlag
Konzepte, … ITP
JDBC, …
Verlagsort Auflage
Bonn
—
11-44
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 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 2003/2004 (Dr. C. Türker)
11-45
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 2003/2004 (Dr. C. Türker)
11-46
Vorgehen: Abbildung von SQL nach XML
z
Spezifiziere XML-Collection-DAD (z.B. buchcol.dad; siehe nächste Folie)
z
Erzeuge entsprechende Zieltabelle, die eine XML-Spalte enthält
CREATE TABLE result_tab (Inhalt DB2XML.XMLVARCHAR)
z
Generiere XML-Collection (Fülle Zieltabelle mit generierten XML-Werten)
C:\> dxxgenx XMLDB C:\XMLDIR\buchcol.dad result_tab
Vorlesung "XML und Datenbanken" - WS 2003/2004 (Dr. C. Türker)
11-47
Beispiel für eine XML-Collection-DAD
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE DAD SYSTEM "C:\XMLDIR\dad.dtd">
<DAD>
<validation>NO</validation>
<Xcollection>
<SQL_stmt> SELECT ISBN, Titel, Verlag, Verlagsort FROM Buch ORDER BY ISBN </SQL_stmt>
<prolog>?xml version="1.0"?</prolog>
<root_node>
<element_node name="Buch">
<attribute_node name="ISBN"> <column name="ISBN"/> </attribute_node>
<element_node name="Titel">
<text_node><column name="Titel"/></text_node>
</element_node>
<element_node name="Verlag">
<attribute_node name="Ort"> <column name="Verlagsort"/> </attribute_node>
<text_node><column name="Verlag"/></text_node>
</element_node>
</element_node>
</root_node>
</Xcollection>
</DAD>
Vorlesung "XML und Datenbanken" - WS 2003/2004 (Dr. C. Türker)
11-48
Generierte XML-Collection
SELECT * FROM result_tab
<?xml version="1.0"?>
<Buch ISBN="3-8266-0258-7">
<Titel>Objektdatenbanken</Titel>
<Verlag Ort="Bonn">International Thomson Publishing</Verlag>
</Buch>
<?xml version="1.0"?>
<Buch ISBN="3-89864-148-1">
<Titel>XML & Datenbanken</Titel>
<Verlag Ort="Bonn">dpunkt</Verlag>
</Buch>
<?xml version="1.0"?>
<Buch ISBN="3-89864-219-4">
<Titel>SQL:1999 & SQL:2003</Titel>
<Verlag Ort="Bonn">dpunkt</Verlag>
</Buch>
<?xml version="1.0"?>
<Buch ISBN="3-89864-228-3">
<Titel>Datenbanken & Java</Titel>
<Verlag Ort="Bonn">dpunkt</Verlag>
</Buch>
Vorlesung "XML und Datenbanken" - WS 2003/2004 (Dr. C. Türker)
11-49
Anfragen
z
XML-Extender
–
–
XML-Erweiterung bietet Funktionen für Anfragen und Manipulationen
Extract-Funktionen:
DB2XML.EXTRACT<Datentyp>(<XML-Wertausdruck>, <XPath-Ausdruck>)
–
Beispiel:
SELECT a.RETURNEDVARCHAR
FROM Buchlob, TABLE(DB2XML.EXTRACTVARCHARS(Inhalt, '//Autor')) a
z
Begrenzte Unterstützung des SQL/XML-Standards
–
–
–
XMLAGG
XMLELEMENT
XMLATTRIBUTE
Vorlesung "XML und Datenbanken" - WS 2003/2004 (Dr. C. Türker)
11-50
ExtractXXX(<XML-Wertausdruck>, <XPath-Ausdruck>)
Abbildung aus
"IBM DB2 Universal Database XML Extender
Administration and Programming, Version 8, 2002"
Vorlesung "XML und Datenbanken" - WS 2003/2004 (Dr. C. Türker)
11-51
XMLVARCHAR
DB2XML.XMLVARCHAR(<Zeichenkettenausdruck> )
erzeugt einen XML-Wert
Beispiel:
SELECT DB2XML.XMLVARCHAR('<isbn>' || ISBN || '</isbn>') AS ISBN_Element
FROM Buch
ISBN_ELEMENT
<ISBNummer>3-89864-148-1</ISBNummer>
<ISBNummer>3-8266-00258-7</ISBNummer>
<ISBNummer>3-89864-219-4</ISBNummer>
<ISBNummer>3-89864-228-3</ISBNummer>
Vorlesung "XML und Datenbanken" - WS 2003/2004 (Dr. C. Türker)
11-52
XMLELEMENT
XMLELEMENT(NAME <Elementname>
[, XMLATTRIBUTES(<XML-Attributliste>)]
[, <Wertausdrucksliste>])
<XML-Attribut> := <Wertausdruck> [AS <Attributname>]
erzeugt ein XML-Element
Beispiel: SELECT VARCHAR(XML2CLOB(XMLELEMENT( NAME "ISBNummer",
XMLATTRIBUTES(Titel),
ISBN))) AS ISBN_Element
FROM Buch
ISBN_ELEMENT
<ISBNummer TITEL="XML & Datenbanken">3-89864-148-1</ISBNummer>
<ISBNummer TITEL="Objektdatenbanken">3-8266-00258-7</ISBNummer>
<ISBNummer TITEL="SQL:1999 & SQL:2003">3-89864-219-4</ISBNummer>
<ISBNummer TITEL="Datenbanken & Java">3-89864-228-3</ISBNummer>
Vorlesung "XML und Datenbanken" - WS 2003/2004 (Dr. C. Türker)
11-53
XMLAGG
XMLAGG(<XML-Wertausdruck>
aggregiert die XML-Elemente einer Gruppe
Beispiel:
SELECT Verlag,
VARCHAR(XML2CLOB(XMLAGG(XMLELEMENT(NAME "Titel", Titel))))
AS Titel
FROM Buch
GROUP BY BY Verlag
VERLAG
TITEL
International Thomson Publishing
XML & Datenbanken
dpunkt
<Titel>XML & Datenbanken</Titel>
<Titel>Datenbanken & Java</Titel>
<Titel>SQL:1999 & SQL:2003</Titel>
Vorlesung "XML und Datenbanken" - WS 2003/2004 (Dr. C. Türker)
11-54
Manipulation
z
Manipulationen über spezielle Methoden der XML-Typen möglich
z
Syntax:
DB2XML.UPDATE(<XML-Wertausdruck>, <XPath-Ausdruck>, <NeuerWert>)
z
Beispiel
UPDATE Buchlob
SET Inhalt = DB2XML.UPDATE(Inhalt, '//Verlag[text()="dpunkt"]/@Ort', 'Zürich')
z
Mit dem XML-Column-Ansatz werden die Änderungen automatisch auf
den Seitentabellen nachgezogen
Vorlesung "XML und Datenbanken" - WS 2003/2004 (Dr. C. Türker)
11-55
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 Inhalt
FROM Buchlob
WHERE contains(dscrHandel,
‘MODEL order SECTION(//Buch/Covertext) "Datenbank"‘) = 1
Retrievalmodell
Vorlesung "XML und Datenbanken" - WS 2003/2004 (Dr. C. Türker)
Pfadausdruck zur
Einschränkung der Suche
11-56
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 2003/2004 (Dr. C. Türker)
11-57
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 2003/2004 (Dr. C. Türker)
11-58
Herunterladen