Datenbankadministration 9. XML und XQuery AG DBIS University of Kaiserslautern, Germany Karsten Schmidt [email protected] (Vorlage TU-Dresden) Wintersemester 2008/2009 K. Schmidt 9. XML und XQuery XML in DB2 XML in DB2 vor Version 9 als CLOB mit XML-Extender: Dekomposition von XML-Dokumenten auf relationale Tabellen XML in DB2 ab Version 9 Datentyp XML für wohlgeformte XML-Dokumente internes Speicherformat hierarchische Speicherung Anfragen mittels XQuery, SQL oder Kombination XML-Indizes K. Schmidt 9. XML und XQuery XQuery-Datenmodell und XML-Schema K. Schmidt 9. XML und XQuery XQuery-Datenmodell XQuery-Datenmodell (XDM) Instanz des XDM: Sequenz Sequenz: geordnete Sammlung von null oder mehreren Elementen Element: atomarer Wert, Knoten, komplettes XML-Dokument atomarer Wert: definiert durch XML-Schema (xs:string, xs:integer, xs:decimal, xs:date, . . . ) Knoten: Dokumentknoten, Elementknoten, Attributknoten, Textknoten, . . . Eigenschaften keine Unterscheidung zwischen einelementiger Menge und dem Element selbst keine geschachtelten Sequenzen Beispiele (42, text“,<wichtig/>) ” 13 K. Schmidt 9. XML und XQuery XML-Schema XML-Schema Informationen zur Struktur des XML-Dokuments Art der Schachtelung von Elementen Häufigkeit des Auftretens von Elementen Attribute von Elementen Datentyp und Wertebereich kann aus mehreren XML-Schemadokumenten bestehen XML-Schema Repository Informationen zum Validieren und Verarbeiten von XML-Dokumenten (XML-Schema, DTD, externe Objekte) Katalogsicht SYSCAT.XSROBJECTS XML-Schema registrieren REGISTER XMLSCHEMA <schemaURI> FROM <contentURI> AS <relationalIdentifier> XML-Schema überprüfen, Registrierung abschließen COMPLETE XMLSCHEMA <relationalIdentifier> K. Schmidt 9. XML und XQuery XML-Daten K. Schmidt 9. XML und XQuery Einfügen, Ändern und Löschen von XML-Daten Einfügen von XML-Daten Validierung optional implizites oder explizites Parsen der Daten Beispiele INSERT INTO xmltab (xmlcol) VALUES (’<doc>...</doc>’) INSERT INTO xmltab (xmlcol) VALUES ( XMLVALIDATE (XMLPARSE (DOCUMENT ’<doc>...</doc>’) ACCORDING TO XMLSCHEMA ID myschema)) Ändern von XML-Daten keine Änderungen an XML-Dokumenten möglich → gesamtes XML-Dokument ersetzen Löschen von XML-Daten Spaltenwert auf NULL setzen K. Schmidt 9. XML und XQuery Austausch von XML-Daten Import von XML-Daten Validierung optional kein LOAD möglich XML-spezifische Optionen für IMPORT Pfad zu XML-Daten: XML FROM <xml-path> Datentyp: MODIFIED BY XMLCHAR weitere: XMLPARSE, XMLVALIDATE Export von XML-Daten separate Speicherung der XML-Daten Ersetzen der XML-Daten durch XML-Kennung (XML Data Specifier ) XML-spezifische Optionen für EXPORT Speicherpfad für XML-Daten: XML TO <xml-path> Datentyp: MODIFIED BY XMLCHAR weitere: XMLFILE, XMLSAVESCHEMA K. Schmidt 9. XML und XQuery XML-Funktionen XML-Funktionen XMLPARSE Zeichendaten, Binärdaten → XDM XMLSERIALIZE XDM → Zeichendaten, Binärdaten XMLVALIDATE Gültigkeitsprüfung von Struktur, Inhalt und Datentypen eines XML-Dokuments nur für XML-Schema (nicht DTD) XMLCAST Datentypkonvertierung zwischen XML- und SQL-Datentypen XMLEXISTS Überprüfung, ob XQuery-Ausdruck nicht-leere Sequenz zurückgibt K. Schmidt 9. XML und XQuery XQuery K. Schmidt 9. XML und XQuery XQuery XQuery vom W3C standardisierte XML-Anfragesprache eigenständige Anfragesprache in DB2 Einbettung in und von SQL möglich XQuery vs. SQL Datenmodell Ergebnisse Groß-/Kleinschreibung relevant NULL-Werte XQuery hierarchisch, geordnet Sequenz von XMLDaten ja SQL flach, mengenorientiert Menge verschiedener SQL-Datentypen nein nein ja K. Schmidt 9. XML und XQuery XPath XPath Bestandteil von XQuery Navigation durch XML-Dokument Beispiele alle EMail-Adressen aller Kunden <Client id=‘‘...’’> <email>...</email> <Address> <city>...</city> <state>...</state> </Address> </Client> /Client/email erste EMail-Adresse des Kunden mit der ID 123 /Client[@id=‘‘123’’]/email[1] alle EMail-Adressen aller Kunden aus Kalifornien /Client[Address/state=‘‘CA’’]/email /Client/Address[state=‘‘CA’’]/../email alle Städte unterhalb des direkten Kinderknotens aller Kunden /Client/*/city alle EMail-Adressen imgesamten XML-Dokument //email K. Schmidt 9. XML und XQuery FLWOR FLWOR komplexe Anfragen an XML-Dokumente for: Iteration durch Eingabesequenz, Variablenbindung bei jedem Durchlauf let: Variablendeklaration und Wertzuweisung (keine Iteration!) where: Filter order by: Sortierung return: Ergebniskonstruktion Beispiele for $i in (1,2,3) return <out>{$i}</out> → <out>1</out>, <out>2</out>, <out>3</out> let $i := (1,2,3) return <out>{$i}</out> → <out>1 2 3</out> for $i in (3,2,1) where $i>1 order by $i return <out>{$i}</out> → <out>2</out>, <out>3</out> K. Schmidt 9. XML und XQuery Beispiel Tabelle person firstname Kathy Larry lastname Smith Menard age 32 45 address ... ... XML-Dokumente mit Adressinformation <address country=‘‘canada’’> <street>25 East Creek</street> <city>Markham</city> <phone type=‘‘home’’>905-555-7258</phone> <email>[email protected]</email> </address> K. Schmidt 9. XML und XQuery XQuery als eigenständige Anfragesprache XQuery als eigenständige Anfragesprache Kennzeichnung durch Schlüsselwort XQUERY Eingabedaten für XQuery mittels db2-fn:xmlcolumn Achtung: Tabellen- und Spaltennamen in Großbuchstaben Beispiel Telefonnummern aller Personen aus Markham XQUERY for $addr in db2-fn:xmlcolumn (’PERSON.ADDRESS’)/address where $addr/city = ‘‘Markham’’ return $addr/phone oder kurz: XQUERY db2-fn:xmlcolumn (’PERSON.ADDRESS’)/address[city = ‘‘Markham’’]/phone K. Schmidt 9. XML und XQuery SQL in XQuery SQL in XQuery eingebettete SQL-Anfrage mittels db2-fn:sqlquery SQL-Anfrage muss XML-Daten zurückliefern Maskierung einfacher Anführungszeichen erforderlich Beispiel Telefonnummer von Kathy Smith XQUERY let $phone := db2-fn:sqlquery (’ SELECT address FROM person WHERE firstname = ‘‘Kathy’’ AND lastname = ‘‘Smith’’ ’)/address/phone/text() return <kathysphone>{$phone}</kathysphone> K. Schmidt 9. XML und XQuery XQuery in SQL XQuery in SQL Projektion von XML-Daten in SQL-Anfrageergebnis mit XMLQUERY Erzeugen einer relationalen Tabelle aus XML-Daten mit XMLTABLE Einschränkung der Ergebnismenge mit XMLEXISTS Beispiel Name und Telefonnummer aller Personen über 40, für die eine EMail-Adresse angegeben ist SELECT firstname, lastname, XMLQUERY (’ $doc/address/phone’ passing address as ‘‘doc’’ ) as phone FROM person WHERE age > 40 AND XMLEXISTS (’$doc/address/email’ passing address as ‘‘doc’’) K. Schmidt 9. XML und XQuery XML-Indizes K. Schmidt 9. XML und XQuery XML-Indizes XML-Indizes auf Komponente des XML-Dokumentes (nicht gesamte Spalte) Identifizierung des zu indexierenden Teils durch XML-Muster (eingeschränkter XPath-Ausdruck) auf Elementen und Attributen möglich auch // und * unterstützt Angabe eines SQL-Datentypes für die indexierten Werte erforderlich (DATE, TIMESTAMP, VARCHAR oder DOUBLE) nur einzelne XML-Spalten indexierbar (keine zusammengesetzten Indizes) mehrere Indizes für eine XML-Spalte möglich Beispiel CREATE INDEX p_xml_idx ON person (address) GENERATE KEY USING XMLPATTERN ’/address/@country’ AS SQL VARCHAR(20) K. Schmidt 9. XML und XQuery XML-Indizes Bedingungen für Indexnutzung Index auf komplexen Elementen möglich, aber Auswirkung auf Anfrage Beispiel: <name> CREATE INDEX ... USING <first>Kathy</first> XMLPATTERN ’//name’ AS <last>Smith</last> SQL VARCHAR(50) </name> → Prädikat muss [name=‘‘KathySmith’’] lauten Index auf Textknoten → Anfrage nach Textknoten Übereinstimmung des Datentyp des Literals eines Prädikates mit Datentyp des Indexes → relevant für DOUBLE /element[element = ‘‘value’’] → keine Indexnutzung /element[element = value] → Indexnutzung K. Schmidt 9. XML und XQuery Anforderungen und Einschränkungen Anforderungen Unicode-Datenbank (UTF-8) Einschränkungen an XML-Spalten nicht als Schlüssel verwendbar (z.B. Primär-, Fremdschlüssel, eindeutige Schlüssel, . . . ) nicht in relationale Indizes keine Standardwerte oder generierte Werte ... an Datenbank keine Partinionierung keine Längenbeschränkung für XML-Spalten, aber für serialsierte XML-Daten: 2GB K. Schmidt 9. XML und XQuery Zusammenfassung XQuery-Datenmodell Sequenzen, Elemente, Knoten XML-Schema Validierung von XML-Daten DML und Austausch von XML-Daten Besonderheiten im Umgang mit XML-Daten XQuery eigenständig oder eigebettet XML-Indizes Anfrageoptimierung mit Indizes auf XML-Dokumenten weitere Informationen zum XQuery-Datenmodell, XML-Schema, XPath und XQuery in den Vorlesungen K. Schmidt 9. XML und XQuery