XML-Werte in SQL/XML

29
XML-Werte in SQL/XML Von Viktor Folmer

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 Presentation

Transcript of XML-Werte in SQL/XML

Page 1: XML-Werte in SQL/XML

XML-Werte in SQL/XML

Von Viktor Folmer

Page 2: XML-Werte in SQL/XML

Inhalt

Datentyp XMLKnotenfunktionenUnter- und Unter(unter)typenValidierungPrädikateAuswahl weiterer Funktionen

Page 3: XML-Werte in SQL/XML

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 !

Page 4: XML-Werte in SQL/XML

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

Page 5: XML-Werte in SQL/XML

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

Page 6: XML-Werte in SQL/XML

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

Page 7: XML-Werte in SQL/XML

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

Page 8: XML-Werte in SQL/XML

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

Page 9: XML-Werte in SQL/XML

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

Page 10: XML-Werte in SQL/XML

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

Page 11: XML-Werte in SQL/XML

Mehr Funktionen

SELECT XMLELEMENT ( NAME "angestellte", XMLATTRIBUTES (a.Gehalt),ID)AS Geringverdiener

FROM Angestellte a WHERE Gehalt < 450

Beispiel:

Page 12: XML-Werte in SQL/XML

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

Page 13: XML-Werte in SQL/XML

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)

Page 14: XML-Werte in SQL/XML

Untertypen des Datentyps „XML“

XML(CONTENT)

XML(DOCUMENT)

XML(SEQUENCE)

Page 15: XML-Werte in SQL/XML

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

Page 16: XML-Werte in SQL/XML

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

Page 17: XML-Werte in SQL/XML

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

Page 18: XML-Werte in SQL/XML

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

Page 19: XML-Werte in SQL/XML

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.

Page 20: XML-Werte in SQL/XML

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

Page 21: XML-Werte in SQL/XML

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

Page 22: XML-Werte in SQL/XML

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

Page 23: XML-Werte in SQL/XML

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

Page 24: XML-Werte in SQL/XML

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

Page 25: XML-Werte in SQL/XML

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

Page 26: XML-Werte in SQL/XML

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

Page 27: XML-Werte in SQL/XML

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

Page 28: XML-Werte in SQL/XML

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“

Page 29: XML-Werte in SQL/XML

Vielen Dank