Datenbankadministration9. 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 9als CLOBmit XML-Extender: Dekomposition von XML-Dokumenten aufrelationale Tabellen
XML in DB2 ab Version 9Datentyp XML fur wohlgeformte XML-Dokumenteinternes Speicherformathierarchische SpeicherungAnfragen mittels XQuery, SQL oder KombinationXML-Indizes
K. Schmidt 9. XML und XQuery
XQuery-Datenmodell undXML-Schema
K. Schmidt 9. XML und XQuery
XQuery-Datenmodell
XQuery-Datenmodell (XDM)Instanz des XDM: SequenzSequenz: geordnete Sammlung von null oder mehrerenElementenElement: atomarer Wert, Knoten, komplettes XML-Dokumentatomarer Wert: definiert durch XML-Schema (xs:string,xs:integer, xs:decimal, xs:date, . . . )Knoten: Dokumentknoten, Elementknoten, Attributknoten,Textknoten, . . .
Eigenschaftenkeine Unterscheidung zwischen einelementiger Menge und demElement selbstkeine geschachtelten Sequenzen
Beispiele(42,
”text“,<wichtig/>)
13
K. Schmidt 9. XML und XQuery
XML-Schema
XML-SchemaInformationen zur Struktur des XML-Dokuments
Art der Schachtelung von ElementenHaufigkeit des Auftretens von ElementenAttribute von ElementenDatentyp und Wertebereich
kann aus mehreren XML-Schemadokumenten bestehen
XML-Schema RepositoryInformationen zum Validieren und Verarbeiten vonXML-Dokumenten (XML-Schema, DTD, externe Objekte)Katalogsicht SYSCAT.XSROBJECTS
XML-Schema registrieren
REGISTER XMLSCHEMA <schemaURI> FROM <contentURI> AS
<relationalIdentifier>
XML-Schema uberprufen, Registrierung abschließen
COMPLETE XMLSCHEMA <relationalIdentifier>
K. Schmidt 9. XML und XQuery
XML-Daten
K. Schmidt 9. XML und XQuery
Einfugen, Andern und Loschen von XML-Daten
Einfugen von XML-DatenValidierung optionalimplizites oder explizites Parsen der DatenBeispiele
INSERT INTO xmltab
(xmlcol) VALUES (’<doc>...</doc>’)
INSERT INTO xmltab (xmlcol) VALUES ( XMLVALIDATE
(XMLPARSE (DOCUMENT ’<doc>...</doc>’) ACCORDING TO
XMLSCHEMA ID myschema))
Andern von XML-Datenkeine Anderungen an XML-Dokumenten moglich → gesamtesXML-Dokument ersetzen
Loschen von XML-DatenSpaltenwert auf NULL setzen
K. Schmidt 9. XML und XQuery
Austausch von XML-Daten
Import von XML-DatenValidierung optionalkein LOAD moglichXML-spezifische Optionen fur IMPORT
Pfad zu XML-Daten: XML FROM <xml-path>
Datentyp: MODIFIED BY XMLCHAR
weitere: XMLPARSE, XMLVALIDATE
Export von XML-Datenseparate Speicherung der XML-DatenErsetzen der XML-Daten durch XML-Kennung (XML DataSpecifier)XML-spezifische Optionen fur EXPORT
Speicherpfad fur XML-Daten: XML TO <xml-path>
Datentyp: MODIFIED BY XMLCHAR
weitere: XMLFILE, XMLSAVESCHEMA
K. Schmidt 9. XML und XQuery
XML-Funktionen
XML-FunktionenXMLPARSE
Zeichendaten, Binardaten → XDM
XMLSERIALIZE
XDM → Zeichendaten, Binardaten
XMLVALIDATE
Gultigkeitsprufung von Struktur, Inhalt und Datentypen einesXML-Dokumentsnur fur XML-Schema (nicht DTD)
XMLCAST
Datentypkonvertierung zwischen XML- und SQL-Datentypen
XMLEXISTS
Uberprufung, ob XQuery-Ausdruck nicht-leere Sequenzzuruckgibt
K. Schmidt 9. XML und XQuery
XQuery
K. Schmidt 9. XML und XQuery
XQuery
XQueryvom W3C standardisierte XML-Anfragespracheeigenstandige Anfragesprache in DB2Einbettung in und von SQL moglich
XQuery vs. SQL
XQuery SQLDatenmodell hierarchisch, flach,
geordnet mengenorientiertErgebnisse Sequenz von XML- Menge verschiedener
Daten SQL-DatentypenGroß-/Kleinschrei- ja neinbung relevantNULL-Werte nein ja
K. Schmidt 9. XML und XQuery
XPath
XPathBestandteil von XQueryNavigation durch XML-Dokument
Beispielealle EMail-Adressen aller Kunden/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 Stadte unterhalb des direkten Kinderknotens aller Kunden/Client/*/city
alle EMail-Adressen imgesamten XML-Dokument//email
K. Schmidt 9. XML und XQuery
<Client id=‘‘...’’>
<email>...</email>
<Address>
<city>...</city>
<state>...</state>
</Address>
</Client>
FLWOR
FLWORkomplexe Anfragen an XML-Dokumentefor: Iteration durch Eingabesequenz, Variablenbindung bei jedemDurchlauflet: Variablendeklaration und Wertzuweisung (keine Iteration!)where: Filterorder by: Sortierungreturn: Ergebniskonstruktion
Beispielefor $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 lastname age addressKathy Smith 32 . . .
Larry Menard 45 . . .
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 eigenstandige Anfragesprache
XQuery als eigenstandige AnfragespracheKennzeichnung durch Schlusselwort XQUERY
Eingabedaten fur XQuery mittels db2-fn:xmlcolumn
Achtung: Tabellen- und Spaltennamen in Großbuchstaben
BeispielTelefonnummern 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 XQueryeingebettete SQL-Anfrage mittels db2-fn:sqlquery
SQL-Anfrage muss XML-Daten zuruckliefernMaskierung einfacher Anfuhrungszeichen erforderlich
BeispielTelefonnummer 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 SQLProjektion von XML-Daten in SQL-Anfrageergebnis mitXMLQUERY
Erzeugen einer relationalen Tabelle aus XML-Daten mit XMLTABLEEinschrankung der Ergebnismenge mit XMLEXISTS
BeispielName und Telefonnummer aller Personen uber 40, fur die eineEMail-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-Indizesauf Komponente des XML-Dokumentes (nicht gesamte Spalte)Identifizierung des zu indexierenden Teils durch XML-Muster(eingeschrankter XPath-Ausdruck)auf Elementen und Attributen moglichauch // und * unterstutztAngabe eines SQL-Datentypes fur die indexierten Werteerforderlich (DATE, TIMESTAMP, VARCHAR oder DOUBLE)nur einzelne XML-Spalten indexierbar (keine zusammengesetztenIndizes)mehrere Indizes fur eine XML-Spalte moglich
BeispielCREATE 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 fur IndexnutzungIndex auf komplexen Elementen moglich, aber Auswirkung aufAnfrageBeispiel:<name> CREATE INDEX ... USING
<first>Kathy</first> XMLPATTERN ’//name’ AS
<last>Smith</last> SQL VARCHAR(50)
</name>
→ Pradikat muss [name=‘‘KathySmith’’] lautenIndex auf Textknoten → Anfrage nach TextknotenUbereinstimmung des Datentyp des Literals eines Pradikates mitDatentyp des Indexes → relevant fur DOUBLE
/element[element = ‘‘value’’] → keine Indexnutzung/element[element = value] → Indexnutzung
K. Schmidt 9. XML und XQuery
Anforderungen und Einschrankungen
AnforderungenUnicode-Datenbank (UTF-8)
Einschrankungenan XML-Spalten
nicht als Schlussel verwendbar (z.B. Primar-, Fremdschlussel,eindeutige Schlussel, . . . )nicht in relationale Indizeskeine Standardwerte oder generierte Werte. . .
an Datenbank
keine Partinionierung
keine Langenbeschrankung fur XML-Spalten, aber furserialsierte XML-Daten: 2GB
K. Schmidt 9. XML und XQuery
Zusammenfassung
XQuery-DatenmodellSequenzen, Elemente, Knoten
XML-SchemaValidierung von XML-Daten
DML und Austausch von XML-DatenBesonderheiten im Umgang mit XML-Daten
XQueryeigenstandig oder eigebettet
XML-IndizesAnfrageoptimierung mit Indizes auf XML-Dokumenten
weitere Informationen zum XQuery-Datenmodell,XML-Schema, XPath und XQuery in den Vorlesungen
K. Schmidt 9. XML und XQuery