360 likes | 486 Views
XML-Dokumente in objektrelationalen Datenbanksystemen. Meike Klettke Universität Rostock meike@informatik.uni-rostock.de www.xml-und-datenbanken.de. Ein Titel ... und ein Untertitel. XML-Dokumente in objektrelationalen Datenbanksystemen –
E N D
XML-Dokumente in objektrelationalen Datenbanksystemen Meike Klettke Universität Rostock meike@informatik.uni-rostock.de www.xml-und-datenbanken.de
Ein Titel ... und ein Untertitel XML-Dokumente in objektrelationalen Datenbanksystemen – Möglichkeiten in DB2 und Oracle, Kombination von XQuery und SQL, hybride Speicherung
Motivation • XML als Format zur Dokumentdarstellung existiert seit 10 Jahren • als Schlagwort sehr populär (gewesen) • mittlerweile gibt es viele Anwendungen, die XML-Dokumente erzeugen oder verwenden • häufig ist eine dauerhafte Speicherung notwendig • Datenbanksysteme wurde erweitert, um XML-Dokumente verarbeiten zu können
... in der Vorlesung heute ... Erweiterungen von Datenbankmanagementsystemen, um XML- Dokumente zu speichern, anzufragen und zu verändern, dazu • Realisierung in objekt-relationalen Datenbanksystemen • Speicherung • Anfragen in DB2 und Oracle • Updates und Schemaevolution • Einsatz und Verwendung dieser Speicherungsvarianten
Hybride Ansätze • für daten- als auch dokumentzentrierte Anteile • Auswahl unterschiedlicher Speicherungsmethoden für verschiedene Dokumentanteile <nachricht id="ID0001" bedeutung="4"> <autor autor_id="A0001"> <nachname>Fürst</nachname> <vorname>Christian</vorname> <agentur>dpa</agentur> <e-mail>fuerst@dpa.de</e-mail> </autor> <einordnung> <rubrik>Mozartjahr 2006</rubrik> … <inhalt> <ueberschrift>Ein Vermarktungsfest </ueberschrift> <text>Als Wolfgang Amadeus Mozart im Alter von 35 Jahren starb, .. </text> </inhalt> </nachricht> nachricht: autor: <inhalt> <ueberschrift>Ein Vermarktungsfest </ueberschrift> <text>Als Wolfgang Amadeus Mozart im Alter von 35 Jahren starb, .. </text> </inhalt>
3) Realisierung in objektrelationalen Datenbanken • verschiedene Speicherungsmöglichkeiten werden unterstützt: • Speicherungsmöglichkeiten bei Oracle: • DB2: Abbildung nach Ulrike Schwinn, Oracle
Realisierung in objektrelationalen Datenbanken Abbildung: DB2, aus einem Artikel von Holger Seubert
3.1) Verwenden des XML-Typs • XML als nativer Datentyp, kann einzelnen Attributen zugeordnet sein • Beispiel: create table nachricht ( id integer not null primary key, titel varchar(30) not null, autor varchar(30) not null, datum date, agentur varchar(10), text xml, kontext xml ); • also hybride Speicherung
Werte einfügen insert into nachricht values(1, 'Ein Vermarktungsfest', 'Christian Fürst', '2006-12-12', 'dpa', '<text>Als Wolfgang Amadeus Mozart im Alter von 35 Jahren starb, war er bettelarm. Jetzt, zu seinem 250. Geburtstag, zeigen insbesondere österreichische PR-Experten, wie man mit dem Namen des Salzburger Genies Millionen machen kann... </text>', '<einordnung> <ort> <land>Österreich</land> <stadt>Salzburg</stadt> <stadt>Wien</stadt> </ort> <zeit> ... </zeit> <rubrik>Festakte</rubrik> <kategorie>Mozart</kategorie> <kategorie>Musik</kategorie> <kategorie>Kultur</kategorie> </einordnung>'); es erfolgt: Test auf Wohlgeformtheit
Gültigkeitstest beim Einfügen von Werten Test auf Gültigkeit ist möglich: • dazu Schemazuordnung REGISTER XMLSCHEMA http://www.informatik.uni-rostock/~meike/testschema_text.xsd FROM /users/db01/meike/public_html/testschema_text.xsd AS text_schema COMPLETE; insert into nachricht values(1, 'Ein Vermarktungsfest', 'Christian Fürst', '2006-12-12', 'dpa', XMLVALIDATE ( XMLPARSE(document'<text>Als Wolfgang Amadeus Mozart im Alter von 35 Jahren starb, war er bettelarm. Jetzt, zu seinem 250. Geburtstag, zeigen insbesondere österreichische PR-Experten, wie man mit dem Namen des Salzburger Genies Millionen machen kann... </text>' ) ACCORDING TO XMLSCHEMA ID text_schema)), ... );
3.2) Anfragen • Anfragesprache für relationale: SQL • Anfragesprache für XML-Dokumente: XQuery • Anfragemöglichkeiten (Kombination dieser Anfragen): • SQL • SQL mit eingebettetem XQuery • XQuery • XQuery mit eingebettetem SQL • Verwendung von build-in-functions zum Zugriff auf die XML-Anteile bzw. SQL-Anteile
Zugriff auf die XML-Anteile über build-in-functions innerhalb von SQL-Anweisungen • Dazu verfügbare build-in-functions (für die Einbettung von XQuery in SQL): • xmlquery • xmlexists • xmltable • ... • Ergebnis der build-in-functions: • Relation (xmltable) oder • Wert (contains, xmlexists, xmlquery) • XML-Element (XMLELEMENT) • XML-Attribut (XMLATTRIBUTE)
Relationale Anfragen /1 select * from nachricht; select titel, text from nachricht; Liefert als Ergebnis: TITEL TEXT ------------------------------------------------------------ Ein Vermarktungsfest <text>Als Wolfgang Amadeus Mozart im Alter von 35 Jahren starb, ... </text> Mozartjahr eröffnet <text>Mit einem Fest für Mozart haben Salzburg und Wien am ... </text>
Relationale Anfragen /2 • In den Anfragen werden XML-Attribute nur als “Ganzes” behandelt, das heißt vollständig ausgegeben oder vollständig in Bedingungen verglichen • Will man Bedingungen an die XML-Attribute formulieren, lässt sich die Funktion contains einsetzen, Beispiel: select titel from nachricht where contains(text, 'Mozart')=1; • DB2 Net Search Extender muss dafür verfügbar sein, • unterstützt werden: • Schlüsselwortsuche, • Stammwortsuche, • fuzzy search in 37 Sprachen, ..
SQL mit eingebetteten XQuery-Anfragen /1 select titel, xmlquery( 'for $e in $i/einordnung/ort/stadt/text() return $e' passing kontext as "i ") as Ortsbezug from nachricht; • Ergebnis: • TITEL ORTSBEZUG -------------------- -------------------------------Ein Vermarktungsfest Salzburg Wien Augsburg Mozartjahr eröffnet Salzburg Wien Augsburg
SQL mit eingebetteten XQuery-Anfragen /2 • Verwendet wird also eine Funktion xmlquery, • die als Eingabeparameter eine XQuery-Anfrage hat, weiterer Parameter beschreibt die Belegung einer XQuery-Variablen mit einem Datenbankattribut • Ergebnis der Funktion ist ein Wert (String), der als Attribut ausgegeben wird
XQuery-Anfragen /1 xquery for $e in db2-fn:xmlcolumn('NACHRICHT.KONTEXT') where $e/einordnung/ort/stadt/text()="Wien" return $e; • Anmerkung: Großschreibung der Bezeichnungen NACHRICHT und KONTEXT notwendig, sonst werden Relation und Attribut nicht gefunden
XQuery-Anfragen /2 Ergebnis: 1 -----------------------------------------------------------<einordnung><ort><land>Österreich</land><land>Deutschland</land><stadt>Salzburg</stadt><stadt>Wien</stadt><stadt>Augsburg</stadt></ort><zeit><datum>2006-01-27</datum></zeit><rubrik>Festakte</rubrik><kategorie>Mozart</kategorie><kategorie>Musik</kategorie><kategorie>Kultur</kategorie></einordnung> <einordnung><ort><land>Österreich</land><land>Deutschland</land><stadt>Salzburg</stadt><stadt>Wien</stadt><stadt>Augsburg</stadt></ort><zeit><datum>2006-01-27</datum></zeit><rubrik>Festakte</rubrik><kategorie>Mozart</kategorie><kategorie>Musik</kategorie><kategorie>Kultur</kategorie></einordnung>
XQuery-Anfragen /3 xquery for $e in db2-fn:xmlcolumn('NACHRICHT.KONTEXT') where $e/einordnung/ort/stadt/text()="Wien" return $e; • Innerhalb dieser Anfrage ist eine Funktion zu sehen: db2-fn:xmlcolumn, • Hat als Parameter die Angaben zu (Owner.)Relation.Attribut • Liefert den Inhalt des Attributes als Ergebnis, es muss ein Attribut vom Typ XML sein
XQuery-Anfragen /4 Verwendung eines etwas komplexeren Beispiels mit Pfadausdrücken xquery for $e in db2-fn:xmlcolumn('NACHRICHT.TEXT')[person/text()= "Wolfgang Amadeus Mozart"] return $e; Ergebnis: 1 --------------------------------------------------- <text>Jedes Jahr ist Mozartjahr. ... Aber nicht um isoliertes, unreflektiertes Feiern des 250.Geburtsjahres <person>Wolfgang Amadeus Mozart</person> sollte und durfte es beim WIENER MOZARTJAHR 2006 gehen, sondern um einen neuerlichen Versuch, sich dem „WunderMozart“ (Goethe) von verschiedenen Seiten zu nähern und gleichzeitig, mit seiner Hilfe, ... </text>
XQuery mit eingebetteten SQL-Anfragen • man kann auch Anfragen stellen, • die XQuery-Anfragen sind und • über build-in-functions auf relationale Anteile zugreifen • dazu jetzt ein Beispiel
XQuery mit eingebetteten SQL-Anfragen xquery for $n in db2-fn:sqlquery("select einordnung from nachricht where agentur='dpa‘ ") where $n[//land/stadt/text()="Wien"] return $n; Ergebnis: 1 ----------------------------------------------------- <einordnung><ort><land>Österreich</land><land>Deutschland</land><stadt>Salzburg</stadt><stadt>Wien</stadt><stadt>Augsburg</stadt></ort><zeit><datum>Freitag, 27. Januar 2006</datum><uhrzeit>String</uhrzeit><zeitzone>String</zeitzone></zeit><rubrik>Festakte</rubrik><kategorie>Mozart</kategorie><kategorie>Musik</kategorie><kategorie>Kultur</kategorie></einordnung>
Auch möglich: Verwendung von XQuery zur Anfrage relationaler Daten xquery for $x in db2-fn:sqlquery ("select XMLELEMENT(NAME ""headline"", XMLATTRIBUTES(id AS ""id""), titel) from nachricht") for $y in db2-fn:sqlquery ("select XMLELEMENT(NAME ""nachrichtenagentur"", XMLATTRIBUTES(id AS ""id""), agentur) from nachricht") where (contains($x/text(), 'Mozart')) and (contains($y/text(), 'spiegel')) and ($x/@id=$y/@id) return <klassiknachricht>{$x} </klassiknachricht>;
Verwendung von XQuery zur Anfrage relationaler Daten /2 Ergebnis: 1 ----------------------------------------------<klassiknachricht><headline id="2">Mozartjahr eröffnet</headline></klassiknachricht>
Verwendung von SQL Verwendung: • Zur Anfrage relationaler Attribute • Soll XML-Attribut als Ganzes ausgegeben werden und ist zur Suche auf den XML-Attributen Volltextsuche ausreichend • dann eignet sich diese Variante Nicht realisierbar: • Anfragen auf den XML-Attributen (XPath, XQuery)
Verwendung von SQL mit eingebettetem XQuery • Verwendung: • überwiegend relationale Daten und wenig XML-Funktionalität, die ergänzt werden muss • geeignet, wenn Anfragen gleichzeitig auf relationale Daten und XML-Daten zugreifen • wenn Volltextsuchanfragen notwendig sind • wenn Entwickler SQL bevorzugen
Verwendung von XQuery Verwendung: • reine XML-Anwendungen • verfügbare XQuerys können mit nur geringen Änderungen (db2-fn:xmlcolumn() statt collection() ) verwendet werden • wenn das Ergebnis XML sein soll • kann joins zwischen XML-Dokumenten ausdrücken • bisher keinen Volltextunterstützung • keine Verwendung von user-defined functions
Verwendung von XQuery mit eingebettetem SQL • effizient bei Verwendung auf XML-Daten, • ineffizient, wenn relationale Daten und XML-Daten zusammen ausgewertet werden • Volltextsuche möglich (über contains) • keine Joins zwischen relationalen Attributen und XML-Attributen
Oracle: XML-Unterstützung /1 • XMLType statt XML • Anfragen ebenfalls über Funktionen realisiert, andere Bezeichnungen: • ExtractValue • extract • existsNode • im Create Table kann einem XML-Attribut ein Schema zugeordnet sein
Oracle: XML-Unterstützung /2 • Update von XML-Dokumenten ist hier möglich, Funktionen dazu: • UpdateXML • insertChildXML • insertXMLbefore • appendChildXML • deleteXML im Fall einer Schemazuordnung: partielle Validierung
Umsetzung der Schemaevolution bei Oracle Oracle: Schemaevolution seit Version 10g: • Speicherung der XML-Dokumente als CLOB: Schemaevolution hat keine Auswirkungen, neue und alte Dokumente werden in der gleichen Relation/ im gleichen Attribut gespeichert • Objektrelationale Speicherung: 2 Fälle: • Alte Struktur soll neben der neuen weiterexistieren = Versionierung • Anschließend existieren beide Speicherungsformen in der DB (zum Beispiel in 2 Relationen) • Neue Struktur soll alte ersetzen • Dokumente entladen, transformieren, neu laden • in Oracle 10 automatisiert, Eingabeparameter: neues Schema und XSL-Stylesheets
Schemaevolution in DB2 • neue Version des Schemas als neues Schema registrieren • Bestimmen, welche Attribute mit dem alten Schema validiert wurden: select xmlxsrobjectid(kontext) from nachricht where id=4;1 -------------------- 11821949021857536select objectname, schemaLocation from syscat.xsrobjects where objectid=11821949021857536; -----------------------------------------------------------------------------------------------EINORDNUNG_SCHEMA3 http://www.informatik.uni-rostock/ /~meike/testschema_einordnung3.xsd • Update dieser Dokumente und Revalidieren mit dem neuen Schema
Zusammenfassung • Vorstellung der gegenwärtig vorhandenen Methoden zur Speicherung und Anfrage von XML-Dokumenten in DB2 und Oracle • Schwerpunkt: verschiedene Varianten zur Anfragerealisierung • weiterhin gezeigt: XML-Dokumentvalidierung bei Insert und Update • offene Punkte im Bereich XML-Update und XML-Schema-Evolution
Systeme, hybrid • Hybride Speicherungsverfahren werden durch Datenbanksysteme unterstützt, die mehrere Speicherungsmöglichkeiten für XML-Dokumente anbieten. • Oracle • Speicherung eines XMLType in relationalen Datenbanken • Anfragen realisierbar • DB2 • Speicherung von XML-Dokumenten als Attribut vom Typ XML in relationalen Datenbanken • Anfragen realisierbar • Updates bisher nur Austausch der gesamten XML-Dokumente
5) Verwendung dieser Methoden • Verwendung von XML-Typen in Datenbanken • Verwendung der Anfragevarianten • Verwendung der Validierung • Verwendung der Updatefunktionen • XML-Schemaevolution
Literatur • www.ibm.com • Matthias Nicola, Fatma Ozcan: pureXML in DB2 9: Which way to query your XML data? http://www.ibm.com/developerworks/db2/library/techarticle/dm-0606nicola/, Juni 2006 • Holger Seubert: XML-Indizierung, Update und Schema-Verwaltung mit DB2 9, http://entwickler.de/zonen/portale/psecom,id,101,online,1037,p,0.html • www.oracle.com • Ulrike Schwinn (Oracle): XML in der Oracle Datenbank „relational and beyond“, BTW 2003