Datentyp „XML“

Werbung
XML-Werte in SQL/XML
Von Viktor Folmer
Inhalt






Datentyp XML
Knotenfunktionen
Unter- und Unter(unter)typen
Validierung
Prädikate
Auswahl weiterer Funktionen
Der Datentyp XML
in SQL/XML:2003

Seit SQL/XML:2003 Basisdatentyp in SQL
 Speicherung von XML-Dokumenten als Wert in
einer Tabellenspalte

Grund: steigende Praxisrelevanz von XML
 … und weiterhin breiter Einsatz relationaler
Datenbanken
XML-Welt und SQL-Welt zusammenbringen !
Der Datentyp XML

Vorher: Speicherung von XML in
relationalen DBMS nur mit „Krücken“
◦ varchar / CLOB
◦ shredding
◦ extender

Seit 2003 Basisdatentyp „XML“ basiert auf
Infoset
Exkurs : Information Set

abstrakte Datenzusammenstellung, die festschreibt,
welche Informationen ein XML-Dokument enthält

Infoset kann als Baum angesehen werden

Ein XML-Dokument hat ein Infoset, wenn :
◦ es wohlgeformt ist und
◦ die Anforderungen der Namensräume erfüllt

Auch ein ungültiges XML-Dokument kann ein Infoset
besitzen
Werte des Datentyps „XML“
in SQL/XML:2003

Zulässige Werte:
 (SQL-)Nullwert
 Wohlgeformtes XML-Dokument
 Nicht wohlgeformtes XML-Dokument (eingeschränkt)

Validität (noch) nicht überprüfbar
Datentyp „XML“ in SQL/XML:2006

Einordnung: Erweiterung von SQL/XML:2003
seit 2006 Teil von SQL:2003

Umstellung des Datentyps auf XQuery –
Datenmodell

Vorteile:
 Unterstützung von Sequenzen
 Erweiterung der Datentypen im XML-Dokument
Exkurs: XQuery-Datenmodell

Sequenz: Folge von Sequenzeinträgen:

7 Knotenarten in Bäumen und Sequenzen

Nach bestimmten Regeln angeordnet
◦ Atomarer Wert
◦ Knoten
◦
◦
◦
◦
◦
◦
◦
Dokumentknoten
Elementknoten
Attributknoten
Namensraumknoten
Verarbeitungsanweisungsknoten
Kommentarknoten
Textknoten
Exkurs: XQuery-Datenmodell
E
N
N
P
V
D
E
V
E
T
E
E
E
A
N
E
T
N
C
E
T
A
N
E
T
N
T
Mehr Funktionen

Logische Konsequenz: Jede Knotenart benötigt
eine Entsprechung in SQL
Knotenarten im XQuery-Datenmodell
Neue Funktionen in SQL/XML:2006
Dokumentknoten
XMLDOCUMENT
Elementknoten
XMLELEMENT
Attributknoten
XMLATTRUBUTES
Namensraumknoten
XMLNAMESPACES
Verarbeitungsanweisungsknoten
XMLPI
Kommentarknoten
XMLCOMMENT
Textknoten
XMLTEXT
Mehr Funktionen
Beispiel:
SELECT XMLELEMENT ( NAME "angestellte",
XMLATTRIBUTES (a.Gehalt),ID)
AS Geringverdiener
FROM Angestellte a
WHERE Gehalt < 450
Untertypen des Datentyps „XML“

SEQUENCE: beliebige Sequenz (Folge von
Bäumen und/oder atomaren Werten)

CONTENT: nur ein Baum mit einem D-Knoten
als Wurzel in der Sequenz erlaubt. Wie viele
E-Knoten Kinder des D-Knotens sind ist
unwichtig

DOCUMENT: wohlgeformte XML-Dokumente,
nur ein Baum mit einem D-Knoten als Wurzel
und nur ein E-Knoten als Kind
Untertypen des Datentyps „XML“

Die Untertypen besitzen eine Hierarchie:

Jeder XML-Wert vom Typ XML(DOCUMENT)
ist gleichzeitig auch eine Instanz von
XML(CONTENT)

Jeder Wert vom Typ XML(CONTENT) ist
eine Instanz von XML(SEQUENCE)
Untertypen des Datentyps „XML“

XML(SEQUENCE)

XML(CONTENT)

XML(DOCUMENT)
Unter(unter)Typen des Datentyps
„XML“

Folgende Unter(unter)typen verfeinern die
Untertypen
XML(CONTENT) und XML(DOCUMENT):
 UNTYPED: nicht validierte XML-Dokumente, E-Knoten sind
vom Typ untyped und dessen A-Knoten sind vom Typ
untypedAtomic
 XMLSCHEMA: gegen ein bestimmtes Schema validiertes
XML-Dokument
 ANY: der XML-Wert ist entweder gegen ein Schema
validiert oder er ist es nicht
Unter(unter)Typen des Datentyps
„XML“

Syntax Beispiele:
◦ CREATE TABLE Angest ( ID integer, xml_emp_data
XML(DOCUMENT(UNTYPED)))
◦ CREATE TABLE Angest ( ID integer, xml_emp_data
XML(DOCUMENT(XMLSCHEMA URI ’http://...’))
◦ CREATE TABLE Angest ( ID integer, xml_emp_data
XML(DOCUMENT(ANY)))
Validierung mit SQL

Nicht nur einzelne Dokumente, sondern auch
ganze Sequenzen können mit der Funktion
XMLVALIDATE
gegen ein bestimmtes Schema validiert werden

Sequenz wird Baum für Baum überprüft

Bei erfolgreicher Validierung werden die Knoten
mit Typinformationen angereichert
Validierung mit SQL
Einschränkungen:

In einer Sequenz dürfen bei der Validierung …





Textknoten
Attributknoten
Namensraumknoten
Atomare Werte
nicht vorkommen
Einzelne Bäume einer ungültigen Sequenz können
über einen „Umweg“ doch validiert werden
Prädikate

Zum Test auf bestimmte Eigenschaften von XMLWerten stehen auch neue Prädikate zur
Verfügung:
◦ IS DOCUMENT: prüft ob der XML-Wert den Eigenschaften
eines XML-Dokuments (validiert oder ungültig) genügt
◦ IS CONTENT: prüft ob der XML-Wert ein Dokument im
Sinne des XQuery-Datenmodells ist
◦ IS VALID: prüft ob ein XML-Wert einem bestimmten
Schema genügt. Im Gegensatz zu XMLVALIDATE findet
hier keine Typanreicherung statt.
Prädikate

Für alle diese Prüfungen gilt: Es wird lediglich ein
Wahrheitswert zurückgegeben und die Daten bleiben
unverändert

Sie können z.B. in der WHERE –Klausel verwendet werden
um nur Zeilen mit der jeweiligen Gültigkeit zu liefern

Beispiel :
SELECT *
FROM Angest
WHERE xml_emp_data IS [NOT] DOCUMENT
Übergabe von Knoten

Wird eine Sequenz zur Verarbeitung an eine SQL-Funktion
übergeben, muss der Übergabemechanismus spezifiziert werden

Dazu gibt es – wie bei Programmiersprachen – zwei
unterschiedliche Methoden

◦
BY REF: Die Knoten der Sequenz selbst werden übergeben
◦
BY VALUE: Nur Kopien der Knoten werden übergeben
Dazu wird das Konzept der Knotenidentität des XQueryDatenmodells genutzt. Alle Knoten haben eine Knotenidentität,
nutzt man BY VALUE, bekommen die Kopien eine neue
Knotenidentität.
XMLQuery

Bettet XQuery-Anfragen in SQL ein

Kann nach bestimmten Werten einer SQL-Tabelle in
XML-Dokumenten suchen

Dies geschieht indem ein SQL-Wert an eine globale
XQuery-Variable gebunden wird und diese Variable
dann im XQuery-Ausdruck verwendet werden kann

Die Rückgabe des XQuery-Ausdrucks an SQL erfolgt
BY REF oder BY VALUE
XMLQuery

Beispiel:
SELECT top_price,
XMLQUERY
(
´ for $cost in /buyer/contract/item/amount
where /buyer/name = $var1
return $cost ´
PASSING BY VALUE
"F.Castro", AS var1
RETURNING SEQUENCE BY VALUE
)
FROM buyers
XMLTable

Referenziert einen XML-Wert als eine
Tabelle

Im Gegensatz zum shredding keine
Speicherung als Tabelle, sondern nur
virtuell

In SQL-Abfragen lassen sich die Elemente
dann als Spalten ansprechen
XMLTable
SELECT X.*
FROM PurchaseOrders PO,
XMLTable ( '//item'
PASSING PO.XMLpo
COLUMNS
"Seqno" FOR ORDINALITY,
"Part #"
CHAR(6)
"ProdName"
CHAR(20)
"Quantity"
INTEGER
"Price"
DECIMAL(9,2)
"Date"
DATE
) AS X
WHERE PO.KeyField = 1
PATH
PATH
PATH
PATH
PATH
'@partnum',
'productName',
'quantity',
'USPrice',
'shipDate'
XMLTable – virtuelle Tabelle
Seqno

Part #
ProdName
Quantity
Price
Date
1 GA-564
Kettensäge
12
99.80
12.02.08
2 GA-520
Gartenschere
33
12.23
01.03.08
Nutzungsmöglichkeiten von XMLTable:

Persistente Speicherung des „geshredderten“
XML-Wertes mit INSERT INTO

Joins mit anderen Tabellen
XMLCAST

Konvertiert Werte von SQL nach XML und umgekehrt

existierende CAST-Funktion nicht geeignet, da in vielen Produkten
das „Casten“ von/nach XML bereits als Character-String
implementiert ist
Syntax:
XMLCAST ( xml_data
AS
date)

Entweder der Quell- oder der Zieldatentyp (oder auch beide)
müssen XML sein

Das Schlüsselwort EMPTY kann nach XML gecastet werden, um
kinderlose Dokumentenknoten oder leere Sequenzen zu erzeugen
XMLCAST (EMPTY AS XML(SEQUENCE))
Abschließende Worte zur Norm

Entwicklung geht Richtung Ausbau der
XML-Unterstützung

Die Norm ist kein Gesetz

Viele Bereiche sind auch in der Norm
„implementation defined“
Vielen Dank
Herunterladen