Title: SQL/XML
1SQL/XML
2Motivation
- Speicherung von XML in allen großen kommerziellen
DBMS vorhanden - proprietäre Lösungen für die Einbettung in SQL
- SQL/XML Teil 14 des SQL-Standards
XML-Funktionalität - berücksichtigt entsprechende Standards auf
XML-Seite (XML Schema, XQuery) - Grundgedanke
- Abbildung von SQL-Konzepten auf XML
- eigener Datentyp zur Speicherung von XML
3Abbildung von SQL-Konzepten auf XML-Konzepte
- Abbildung von Zeichensätzen
- XML Unicode, SQL US-ASCII
- homomorphe Abbildung
- Abbildung von Namen
- XML nicht alle Zeichen in Namen zugelassen,
unbegrenzte Länge - SQL alle Zeichen zulässig (auch Leerzeichen, bei
delimited identifier), begrenzte Länge des Namens - nicht zulässige Zeichen des SQL-Namens (z.B. lt,
) müssen in XML maskiert werden - Abbildung von Datentypnamen
- grundsätzlich Übereinstimmung (Großbuchstaben)
- bei Datentypen mit Parametrisierung werden
Parameter dem XML-Typnamen hinzugefügt - Beispiel VARCHAR(10) gt VARCHAR_10
- bei Längenänderung VARCHAR_10_20
- Parametrisierung auch bei DECIMAL, FLOAT, TIME,
ARRAY
4Abbildung von SQL-Konzepten auf XML-Konzepte -
Datentypen
- Abbildung von Datentypen
- bestmöglicher XML-Datentyp für jeden
Standard-SQL-Typ - Angleichung der Wertebereiche über Aspekte
(facets) in XML Schema - XML-Schema-Annotationen (optional) exakter
SQL-Datentyp, SQL-Zeichensatz, Sortierordnung - alle SQL-Zeichenkettentypen gt xsstring (bei
fester Länge Aspekt length) - BOOLEAN gt xsboolean
- INTEGER, SMALLINT, BIGINT gt xsinteger (mit
Aspekten maxInclusive und minInclusive) - REAL, DOUBLE PRECISION, FLOAT gt xsfloat,
xsdouble - DATE gt xsdate
5Abbildung von SQL-Konzepten auf XML-Konzepte
Datentypen (Beispiel)
- Abbildung eines Zeichenkettendatentyps
ltxssimpleType name"VARCHAR_20_40"gt
ltxsannotationgt ltxsappinfogt
ltsqlxmlsqltype kind"PREDEFINED" name"CLOB"
maxlength"20" characterSetName"CH" collation
"CO"/gt lt/xsappinfogt lt/xsannotationgt
ltxsrestriction base"xsstring"gt ltxsmaxlength
value"40"gt lt/xsrestrictiongt lt/xssimpleTypegt
- Abbildung eines numerischen Datentyps
ltxssimpleType name"DECIMAL_9_2"gt
ltxsannotationgt ltxsappinfogt
ltxsqlxmlsqltype kind"PREDEFINED" name"DECIMAL"
userPrecision"9" scale"2"/gt lt/xsappinfogt
lt/xsannotationgt ltxsrestriction
base"xsdecimal"gt ltxstotalDigits value"9"gt
ltxsfractionDigits value"9"gt lt/xsrestrictiongt lt
/xssimpleTypegt
6Abbildung einer SQL-Tabelle
- Abbildung einer SQL-Tabelle (im Katalog K und im
Schema S) auf ein XML-Dokument mit
XML-Schemadokument
CREATE TABLE Buecher ("VerlagOrt"
VARCHAR(20), ("Jahr" INTEGER,
("Titel" VARCHAR(100))
lt?xml version"1.0"?gt ltBUECHER
xmlnsxsi"http//www.w3.org/2001/XMLSchema-Instan
ce" xsinoNamespaceSchemaLocation"XS"gt ltrowgt
ltVerlag_x0026_OrtgtFachbuchverlag
Leipziglt/Verlag_x0026_Ortgt ltJahrgt2007lt/Jahrgt
ltTitelgtTaschenbuch Datenbankenlt/Titelgt
lt/rowgt ltrowgt ... lt/rowgt lt/BUECHER
7Abbildung einer SQL-Tabelle (2)
ltxsdcomplexType name"TableType.K.S.BUECHER"gt
ltxsdannotationgt ltxsdappinfogt
ltsqlxmlsqlname type"BASE TABLE" catalogname"K"
schemaname"S" localname"BUECHER"/gt
lt/xsdappinfogt lt/xsdannotationgt
ltxsdsequencegt ltxsdelement name"row"
type"RowType.K.S.BUECHER"gt minOccurs"0"
maxOccurs"unbounded" /gt lt/xsdsequencegt lt/xsdco
mplexTypegt
8Abbildung einer SQL-Tabelle auf ein XML-Schema
(Vollständiges Beispiel)
- Definition der Basisdatentypen
lt?xml version"1.0"?gt ltxsdschema
xmlnsxsd"http//www.w3.org/2001/XMLSchema"
xmlnssqlxml"http//www.iso-standards.org/mra/907
5/2001/12/sqlxml" ltxsdimport
namespace"http//www.iso-standards.org/mra/9075/2
001/12/sqlxml" schemaLocation
"http//www.iso-standards.org/mra/9075/2001/12/sql
xml.xsd" ltxsdsimpleType name"VARCHAR_20_40"gt
ltxsdrestriction base"xsdstring"gt
ltxsdmaxlength value"40"gt lt/xsdrestrictiongt lt/x
sdsimpleTypegt ltxsdsimpleType name"INTEGER"gt
ltxsdrestriction base"xsdinteger"gt
ltxsdminInclusive value"-2147483648"/gt
ltxsdmaxInclusive value"2147483647"/gt
lt/xsdrestrictiongt lt/xsdsimpleTypegt ltxsdsimpleTy
pe name"VARCHAR_100_200"gt ltxsdrestriction
base"xsdstring"gt ltxsdmaxlength value"200"gt
lt/xsdrestrictiongt lt/xsdsimpleTypegt . . .
gt Fortsetzung nächste Folie
9Abbildung einer SQL-Tabelle auf ein XML-Schema
(Vollständiges Beispiel)
- Definition des komplexen Typs für die Tabelle als
Sequenz von row-Elementen
. . . ltxsdcomplexType name"RowType.K.S.BUECHER"
gt ltxsdsequencegt ltxsdelement
name"Verlag_x0026_Ort" type"VARCHAR_20_40"
minOccurs"0" /gt lt! je nach
Implementierung Annotation moeglich ... gt
lt/xsdelementgt ltxsdelement name"Jahr"
type"INTEGER" minOccurs"0" /gt
lt/xsdelementgt ltxsdelement name"Titel"
type"VARCHAR_100_200" minOccurs"0" /gt
lt/xsdelementgt lt/xsdsequencegt lt/xsdcomplexTypegt
ltxsdcomplexType name"TableType.K.S.BUECHER"gt
ltxsdannotationgt ltxsdappinfogt
ltsqlxmlsqlname type"BASE TABLE" catalogname"K"
schemaname"S" localname"BUECHER"/gt
lt/xsdappinfogt lt/xsdannotationgt
ltxsdsequencegt ltxsdelement name"row"
type"RowType.K.S.BUECHER"gt minOccurs"0"
maxOccurs"unbounded" /gt lt/xsdsequencegt lt/xsdco
mplexTypegt ltxdselement name"BUECHER"
type"TableType.K.S.BUECHER" /gt lt/xsdschemagt
10Abbildung eines SQL-Schemas oder eine SQL-Katalogs
- SQL-Schema enthält mehrere Tabellen
- weitere Ebene (S) im XML-Dokument
ltS xmlnsxsi"http//www.w3.org/2001/XMLSchema-Ins
tance" xsinoNamespaceSchemaLocation"XS"gt
ltBUECHERgt ltrowgt ltVerlag_x0026_OrtgtFachbuchve
rlag Leipziglt/Verlag_x0026_Ortgt
ltJahrgt2007lt/Jahrgt ltTitelgtTaschenbuch
Datenbankenlt/Titelgt lt/rowgt ltrowgt ...
lt/rowgt lt/BUECHERgt ltTabelle2gt . . .
lt/Tabellegt lt/Sgt
11Der neue Datentyp XML
- erlaubte Werte
- XML-Dokument (mit Prolog)
- XML-Inhalt gemäß XML 1.0 (einschl. reinem Text,
Kommentare und PI?) - NULL
- keine Vergleichbarkeit möglich (vgl. CLOB in SQL)
- kein Programmiersprachentyp für Einbindung in SQL
vorhanden - Standard definiert verschiedene Operatoren, um
Ãœbergang zu anderen SQL-Datentypen zu erleichtern
12SQL/XML Operatoren
- Beispiel SQL-Tabelle Buecher
INSERT INTO Buecher VALUES (Fachbuchverlag
Leipzig, 2007,
Taschenbuch Datenbanken)
- XMLGENerzeugt einen Wert vom Typ XML mittels
XQuery-Konstruktor (Variablenverwendung möglich)
XMLGEN (ltBuch Verlagv Jahrjgtclt/Buchgt,
Fachbuchverlag AS "v", 2007 AS
"j", Taschenbuch Datenbanken AS "c" )
erzeugt
ltBuch Verlag"Fachbuchverlag" Jahr"2007"gtTaschenb
uch Datenbankenlt/Buchgt
Mit Bezugnahme auf SQL-Spalte
SELECT XMLGEN (ltVerlaggtVerlag_x0026_Ortlt/Verla
ggt, "VerlagOrt") FROM Buecher
erzeugt
ltVerlaggtFachbuchverlag Leipziglt/Verlaggt
13SQL/XML Operatoren (2)
- XMLELEMENTdient zur Konstruktion eines
XML-Elements (Name Attribut Inhalt)
XMLELEMENT (NAME "Buch", XMLATTRIBUTES
(Fachbuchverlag AS "Verlag", 2007 AS "Jahr"),
Taschenbuch Datenbanken)
erzeugt
ltBuch Verlag"Fachbuchverlag" Jahr"2007"gtTaschenb
uch Datenbankenlt/Buchgt
Mit Referenzen auf existierende Tabellenspalten
SELECT XMLELEMENT(NAME "Buch"),
XMLATTRIBUTES ("VerlagOrt" AS "Verlag" , "Jahr"
), "Titel" ) FROM Buecher FROM Buecher
erzeugt
ltBuch Verlag "Fachbuchverlag Leipzig" Jahr
"2007" gt Taschenbuch Datenbanken lt/Buchgt
14SQL/XML Operatoren (3)
- Schachtelung von Elementen
SELECT XMLELEMENT(NAME "Buch",
XMLELEMENT(NAME "Verlag", "VerlagOrt"), XMLEL
EMENT(NAME "Jahr" , "Jahr" ) XMLELEMENT(NAME
"Titel", "Titel" )) FROM Buecher
erzeugt im Ergebnis
ltBuchgt ltVerlaggtFachbuchverlaglt/Verlaggt
ltJahrgt2007lt/Jahrgt ltTitelgtTaschenbuch
Datenbankenlt/Titelgt lt/Buchgt
- XMLFORESTdient der Konstruktion eines Waldes
von attributlosen Elementen
XMLFOREST(Taschenbuch Datenbanken AS "Titel",
2007 AS "Jahr" )
oder bei Zugriff auf SQL-Tabelle
SELECT XMLFOREST("Titel", "Jahr" ) FROM Buecher
erzeugt jeweils das XML-Fragment
ltTitelgtTaschenbuch Datenbankenlt/TitelgtltJahrgt2007lt/
Jahrgt
15SQL/XML Operatoren (4)
- XMLAGG
- konkateniert Einzelergebnisse über mehrere Zeilen
- Zusammenfassung mehrerer Zeilen der Bezugstabelle
zu XML-Wert - hilfreich für geschachtelte Anfragen und
Gruppierung
SELECT XMLELEMENT(NAME "Abteilung",
XMLATTRIBUTES (Abtnr), SELECT
XMLAGG(XMLELEMENT( Name "Mitarbeiter",
XMLATTRIBUTES (Vorname,Nachname))) FROM
Angestellte m WHERE m.Abtnra.Abtnr) FROM
Abteilungen a
oder mittels SQL-Gruppierung
SELECT XMLELEMENT(NAME "Abteilung",
XMLATTRIBUTES (m.Abtnr),
XMLAGG(XMLELEMENT(NAME "Mitarbeiter",
XMLATTRIBUTES (Vorname,Nachname))) FROM
Angestellte m GROUP BY Abtnr
16SQL/XML Operatoren (4)
Ergebnis des XMLAGG-Beispiels
ltAbteilung ABTNR"1"gt ltMitarbeiter
VORNAME"Egon" NACHNAME"Müller"/gt
ltMitarbeiter VORNAME"Emma" NACHNAME"Meier"/gt lt/A
bteilunggt ltAbteilung ABTNR"2"gt ltMitarbeiter
VORNAME"Anna" NACHNAME"Schulz"/gt
ltMitarbeiter VORNAME"Otto" NACHNAME"Schmidt"/gt lt
/Abteilunggt
17Weitere SQL/XML Operatoren
- XMLCONCATfügt mehrere XML-Werte zu einem
zusammen - XMLCOMMENTerzeugt einen XML-Kommentar
- XMLPIerzeugt eine Verarbeitungsanweisung
- XMLSERIALIZEwandelt einen Wert vom Typ XML in
eine Zeichenkette um - XMLPARSEkonvertiert eine SQL-Zeichenkette, die
bezügl. XML wohlgeformt sein muss, in einen Wert
des Typs XML
18Bewertung von SQL/XML
- zwei Komponenten
- Datentyp XML zur Speicherung von XML
- Funktionen zur Abbildung von relationalen
Strukturen auf XML (generisch inhaltsorientiert) - Nur Konstruktionsoperatoren
- keine Extraktion von Werten oder Suche
- aber Konstruktionsoperatoren beruhen auf XQuery
- Abbildung von Tabellen, Schemata, Katalogen
ignoriert einige Informationen aus dem rel.
Schema - UNIQUE
- REFERENCES
- CHECK
- Künftige Erweiterungen zu erwarten