1 / 36

XML-Dokumente in objektrelationalen Datenbanksystemen

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 –

devorah
Download Presentation

XML-Dokumente in objektrelationalen Datenbanksystemen

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. XML-Dokumente in objektrelationalen Datenbanksystemen Meike Klettke Universität Rostock meike@informatik.uni-rostock.de www.xml-und-datenbanken.de

  2. Ein Titel ... und ein Untertitel XML-Dokumente in objektrelationalen Datenbanksystemen – Möglichkeiten in DB2 und Oracle, Kombination von XQuery und SQL, hybride Speicherung

  3. 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

  4. ... 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

  5. 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>

  6. 3) Realisierung in objektrelationalen Datenbanken • verschiedene Speicherungsmöglichkeiten werden unterstützt: • Speicherungsmöglichkeiten bei Oracle: • DB2: Abbildung nach Ulrike Schwinn, Oracle

  7. Realisierung in objektrelationalen Datenbanken Abbildung: DB2, aus einem Artikel von Holger Seubert

  8. 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

  9. 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

  10. 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)), ... );

  11. 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

  12. 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)

  13. 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>

  14. 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, ..

  15. 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

  16. 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

  17. 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

  18. 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>

  19. 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

  20. 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>

  21. 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

  22. 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>

  23. 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>;

  24. Verwendung von XQuery zur Anfrage relationaler Daten /2 Ergebnis: 1 ----------------------------------------------<klassiknachricht><headline id="2">Mozartjahr eröffnet</headline></klassiknachricht>

  25. 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)

  26. 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

  27. 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

  28. 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

  29. 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

  30. 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

  31. 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

  32. 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

  33. 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

  34. 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

  35. 5) Verwendung dieser Methoden • Verwendung von XML-Typen in Datenbanken • Verwendung der Anfragevarianten • Verwendung der Validierung • Verwendung der Updatefunktionen • XML-Schemaevolution

  36. 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

More Related