xml-werte in sql/xml
DESCRIPTION
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 - PowerPoint PPT PresentationTRANSCRIPT
XML-Werte in SQL/XML
Von Viktor Folmer
Inhalt
Datentyp XMLKnotenfunktionenUnter- und Unter(unter)typenValidierungPrädikateAuswahl 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 Setabstrakte 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-DatenmodellSequenz: Folge von Sequenzeinträgen:
◦ Atomarer Wert ◦ Knoten
7 Knotenarten in Bäumen und Sequenzen◦ Dokumentknoten◦ Elementknoten◦ Attributknoten◦ Namensraumknoten ◦ Verarbeitungsanweisungsknoten◦ Kommentarknoten◦ Textknoten
Nach bestimmten Regeln angeordnet
Exkurs: XQuery-Datenmodell
E P
N E
TN
V D
E
TN
E
TN
E
A
E
TN
E
A
E
TN
V
E
C
Mehr Funktionen
Knotenarten im XQuery-Datenmodell Neue Funktionen in SQL/XML:2006
Dokumentknoten XMLDOCUMENT
Elementknoten XMLELEMENT
Attributknoten XMLATTRUBUTES
Namensraumknoten XMLNAMESPACES
Verarbeitungsanweisungsknoten XMLPI
Kommentarknoten XMLCOMMENT
Textknoten XMLTEXT
Logische Konsequenz: Jede Knotenart benötigt eine Entsprechung in SQL
Mehr Funktionen
SELECT XMLELEMENT ( NAME "angestellte", XMLATTRIBUTES (a.Gehalt),ID)AS Geringverdiener
FROM Angestellte a WHERE Gehalt < 450
Beispiel:
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(CONTENT)
XML(DOCUMENT)
XML(SEQUENCE)
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 SQLNicht 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 SQLEinschrä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ädikateZum Test auf bestimmte Eigenschaften von XML-Werten
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 XQuery-Datenmodells 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 var1RETURNING 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
XMLTableSELECT X.*FROM PurchaseOrders PO, XMLTable ( '//item' PASSING PO.XMLpo COLUMNS "Seqno" FOR ORDINALITY, "Part #" CHAR(6) PATH '@partnum', "ProdName" CHAR(20) PATH 'productName', "Quantity" INTEGER PATH 'quantity', "Price" DECIMAL(9,2) PATH 'USPrice', "Date" DATE PATH 'shipDate' ) AS XWHERE PO.KeyField = 1
XMLTable – virtuelle TabelleSeqno Part # ProdName Quantity Price Date
1 GA-564 Kettensäge 12 99.80 12.02.082 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