XML-Werte in SQL/XML

of 29 /29
XML-Werte in SQL/XML Von Viktor Folmer

Embed Size (px)

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

Folie 1

XML-Werte in SQL/XMLVon Viktor FolmerInhaltDatentyp XMLKnotenfunktionenUnter- und Unter(unter)typenValidierungPrdikateAuswahl weiterer Funktionen Der Datentyp XML in SQL/XML:2003Seit SQL/XML:2003 Basisdatentyp in SQLSpeicherung 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 !

eCommerce : Zum Beispiel der Datenaustausch zwischen Firmen: Austausch von Rechnungen, Lieferauftrgen, Produktkatalogen , usw -> vllig verschiedene Welten: relational -> zweidimensionale Tabellen, keine Ordnung Xml -> Bume, Reihenfolge wichtig Zusammenbringen heisst gemeinsame Speicherung und integrierte Auswertung. Ausserdem Ausnutzung von relat. DBMS Technologien wie Transaktionskonzept, Konsistenz , Recovery, Backup, Indexe 3Der Datentyp XMLVorher: Speicherung von XML in relationalen DBMS nur mit Krcken varchar / CLOBshredding extender

Seit 2003 Basisdatentyp XML basiert auf InfosetVarchar Speicherung als sehr groer String, kein gezielter zugriff auf einzelne Elemente mglich, keine Validierung mglichShredding aufwndig, schwer rckgngig zu machen, manchmal aus rechtlichen Grnden nicht mglich, wenn zum Beispiel Rechnungen als ganzes aufgehoben werden mssenExtender nicht wirklich eine Krcke, aber auch kein nativer SQL-Datentyp fr XMLPlugin fr DB2 , das Funktionen fr den Umgang mit XML-Daten bietet

4Exkurs : Information Setabstrakte Datenzusammenstellung, die festschreibt, welche Informationen ein XML-Dokument enthlt

Infoset kann als Baum angesehen werden

Ein XML-Dokument hat ein Infoset, wenn : es wohlgeformt ist unddie Anforderungen der Namensrume erfllt

Auch ein ungltiges XML-Dokument kann ein Infoset besitzen 11 Arten von Informationseinheiten, Informationseinheiten haben Attribute (z.B. Name, Parent, Kinderliste,)::Ungltig = nicht valide5Werte des Datentyps XMLin SQL/XML:2003Zulssige Werte:(SQL-)NullwertWohlgeformtes XML-DokumentNicht wohlgeformtes XML-Dokument (eingeschrnkt)

Validitt (noch) nicht berprfbar Wohlgeformt: (genau ein Wurzelelement, jeder Start-Tag hat ein End-Tag, Elemente sind korrekt geschachtelt)nicht wohlgeformt: ( wenn die Forderung verletzt wird genau ein Wurzelelement zu besitzen)6Datentyp XML in SQL/XML:2006Einordnung: Erweiterung von SQL/XML:2003 seit 2006 Teil von SQL:2003

Umstellung des Datentyps auf XQuery Datenmodell

Vorteile:Untersttzung von SequenzenErweiterung der Datentypen im XML-DokumentNicht nur einzelne Bume, sondern ganze Wlder von Bumen und einzelnen Knoten knnen in einen XML-Wert gespeichert werden

Attribute im XML-Dokument knnen nun Typinformationen einem XML-Schema entsprechnd, erhalten: in Infoset waren nur boolean,double,string mglich, in XQuery viele andere mehr z.B. float,integer,decimal (gleich SQL) string,dateTime,duration (ungleich SQL)7Exkurs: XQuery-DatenmodellSequenz: Folge von Sequenzeintrgen: Atomarer Wert Knoten

7 Knotenarten in Bumen und SequenzenDokumentknotenElementknotenAttributknotenNamensraumknoten VerarbeitungsanweisungsknotenKommentarknotenTextknoten

Nach bestimmten Regeln angeordnetBeispiel atomarer Wert : Paar aus Wert und Typname (Tripel aus Namensraumprfix, Namensraumname, eigentl. Typname)Sequenzen sind nicht schachtelbar

Beispiele fr bestimmte Regeln: Vater-Kind-Beziehungen wie in XML 1.0 jedoch etwas weiter gefasst als in der XML-Spezifikation D-Knoten kann auch mehrere E-Knoten als Wurzelelemente haben, freistehende Attribute sind auch mglich8Exkurs: XQuery-DatenmodellEPNETNVDETNETNEAETNEAETNVECVerkrztes Beispiel einer Sequenz aus dem Paper zum Seminar. V sind atomare werteVierter Baum ist ein wohlgeformtes XML-Dokument9Mehr Funktionen Knotenarten im XQuery-DatenmodellNeue Funktionen in SQL/XML:2006DokumentknotenXMLDOCUMENTElementknotenXMLELEMENT AttributknotenXMLATTRUBUTESNamensraumknotenXMLNAMESPACESVerarbeitungsanweisungsknotenXMLPIKommentarknotenXMLCOMMENTTextknotenXMLTEXTLogische Konsequenz: Jede Knotenart bentigt eine Entsprechung in SQLErzeugung von XML-Dokumenten zur Verarbeitung in XML-Applikationen Diese sogenannten publishing Funktonen generieren aus SQL-Werten Knoten in XML-Werten aus Sicht von SQL entspricht das der Erzeugung einer ViewDamit ist es mglich in einer Sicht Strukturen zu erzeugen, die im relationalen Modell nicht vorgesehen sind (Bume, geordnete Listen 10Mehr FunktionenSELECT XMLELEMENT ( NAME "angestellte", XMLATTRIBUTES (a.Gehalt),ID)AS GeringverdienerFROM Angestellte a WHERE Gehalt < 450

123456 123424 123434 113424

Beispiel:Die Anfrage erzeugt ein XML-Wert mit dem Element angestellte , Gehalt als Attribut und den IDs als Inhalt 123456 123424

11Untertypen des Datentyps XMLSEQUENCE: beliebige Sequenz (Folge von Bumen 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

Content ist ein XML-Dokument im Sinne des XQuery-Datenmodells

12Untertypen des Datentyps XMLDie 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)

In anderen Worten: Jeder XML-Wert ist eine Sequenz, aber nicht jede Sequenz ist CONTENT (nur ein Baum) und nicht jeder CONTENT ist ein DOCUMENT (nur ein Element)

13Untertypen des Datentyps XMLXML(CONTENT)XML(DOCUMENT)XML(SEQUENCE)Venn-Diagramm zur Veranschaulichung der Untertypenhierarchie14Unter(unter)Typen des Datentyps XMLFolgende 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

15Unter(unter)Typen des Datentyps XMLSyntax 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)))

Analog geht das auch mit XML(CONTENT)

XMLSCHEMA : der Mechanismus, wie ein Schema angegeben wird ist Implementierungssache. Kann zum Beispiel wie oben angegeben werden, oder auch beim SQL-Server hinterlegt (registriert) sein. Aus Sicherheitsgrnden wird eine Registrierung vorgeschlagen, damit der Server mitkriegt, wenn ein Schema verschwindet oder sich ndert16Validierung mit SQLNicht nur einzelne Dokumente, sondern auch ganze Sequenzen knnen mit der Funktion

XMLVALIDATE

gegen ein bestimmtes Schema validiert werden

Sequenz wird Baum fr Baum berprft

Bei erfolgreicher Validierung werden die Knoten mit Typinformationen angereichertBei einer Validierung knnen sich somit die Typen der Knoten als auch deren Werte dem Schema entsprechend verndern

XMLVALIDATE( DCS VE ACCORDING TO S )

17Validierung mit SQLEinschrnkungen:

In einer Sequenz drfen bei der Validierung

TextknotenAttributknotenNamensraumknotenAtomare Wertenicht vorkommen

Einzelne Bume einer ungltigen Sequenz knnen ber einen Umweg doch validiert werden

Umweg: Sequenz in einzelne Bume und atomare Werte zerlegen, passende Bume (d.h. die als Wurzel D oder E-Knoten haben) knnen gegen ein Schema validiert werden. Anschlieend knnen die validierten Bume und die restlichen Sequenzeintrge wieder zur Gesamtsequenz zusammengesetzt werden18PrdikateZum Test auf bestimmte Eigenschaften von XML-Werten stehen auch neue Prdikate zur Verfgung:

IS DOCUMENT: prft ob der XML-Wert den Eigenschaften eines XML-Dokuments (validiert oder ungltig) gengt

IS CONTENT: prft ob der XML-Wert ein Dokument im Sinne des XQuery-Datenmodells ist

IS VALID: prft ob ein XML-Wert einem bestimmten Schema gengt. Im Gegensatz zu XMLVALIDATE findet hier keine Typanreicherung statt.

19PrdikateFr alle diese Prfungen gilt: Es wird lediglich ein Wahrheitswert zurckgegeben und die Daten bleiben unverndert

Sie knnen z.B. in der WHERE Klausel verwendet werden um nur Zeilen mit der jeweiligen Gltigkeit zu liefern

Beispiel : SELECT * FROM Angest WHERE xml_emp_data IS [NOT] DOCUMENT

SQL-typisch funktioniert auch die Negation20bergabe von KnotenWird 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 Knotenidentitt des XQuery-Datenmodells genutzt. Alle Knoten haben eine Knotenidentitt, nutzt man BY VALUE, bekommen die Kopien eine neue Knotenidentitt.

XMLQueryBettet 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 Rckgabe des XQuery-Ausdrucks an SQL erfolgt BY REF oder BY VALUE

Eine der wichtigsten Funktionen, da sie XQuery und SQL zusammenbringtDie bergabe von SQL an XQuery mittels PASSING BY REF | VALUE22XMLQueryBeispiel:

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

Hier wird ein Wert F.Castro an eine globale Variable gebunden und dann von XQuery dazu benutzt nur die Kosten fr bereinstimmende Namen auszugeben .

23XMLTableReferenziert 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

Dem Vorgehen nach kann das als shredding angesehen werden24XMLTableSELECT 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 = 1FOR ORDINALITY : Seqno Speichert die zugehrige Position des item-Elements, falls man die Reihenfolge behalten [email protected] Attribut von item, Rest Kinder von Item

25XMLTable virtuelle TabelleSeqnoPart #ProdNameQuantityPriceDate1GA-564Kettensge 1299.8012.02.082GA-520Gartenschere 3312.2301.03.08Nutzungsmglichkeiten von XMLTable:

Persistente Speicherung des geshredderten XML-Wertes mit INSERT INTO

Joins mit anderen Tabellen Alle Vorzge relationaler DBMS nutzbar26XMLCASTKonvertiert 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) mssen XML sein

Das Schlsselwort EMPTY kann nach XML gecastet werden, um kinderlose Dokumentenknoten oder leere Sequenzen zu erzeugen

XMLCAST (EMPTY AS XML(SEQUENCE))

XMLCASTXML nach XML : Grundstzlich kann jeder XML-Wert in einen anderen gecastet werdenViele Einschrnkungen bezglich der Datentypen (Bsp.: sequence document) ,Knotenidentitt und Schemainformationen knnen verloren gehenSQL nach XML:Cast nach XML(DOCUMENT) oder XML(CONTENT) Text-Knoten im DokumentCast nach XML(SEQUENCE) kann auch einen atomic type erzeugenXML nach SQL:Kinder von D-Knoten mssen als Sequenz arrangiert werdenDie Sequenz muss atomisiert und in atomic type konvertiert werdenDas ganze funktioniert dann nur, wenn die arrangierte Sequenz nur einen Wert hatte

XML nach SQL: nur wenn alle Erfordernisse erfllt, kann ein xml-datentyp direkt in einen entsprechenden SQL-Datentyp gecastet werde z.B.: xs:integer -> INTEGER

28Abschlieende Worte zur NormEntwicklung geht Richtung Ausbau der XML-Untersttzung

Die Norm ist kein Gesetz

Viele Bereiche sind auch in der Norm implementation defined

Geplant auch update in XML-Werten, Volltextsuche DBMS-Hersteller mssen sich nicht dringend daran haltenz.B. Mapping von SQL-Datentypen auf XML29

Vielen Dank