XML-Werte in SQL/XML
Embed Size (px)
description
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