XML-Handling in SQL Server 2000

XML-Support ist beim Austausch von Informationen unerlässlich geworden. Die Unterstützung in SQL Server 2000 eröffnet Entwicklern neue Möglichkeiten.

Artikel erschienen in Swiss IT Magazine 2001/02

     

Microsoft hat XML recht umfassend in SQL Server 2000 implementiert. XML kann für Abfragen ebenso wie für den Import von Informationen genutzt werden. XML spielt aber auch eine zentrale Rolle in Bezug auf die Metadaten-Dienste von SQL Server 2000. Die Sprache wird bei SQL Server immer dann benötigt, wenn es entweder um die Realisierung von Web-basierenden Anwendungen oder die Integration mit anderen Systemen geht. XML bietet durch seine selbstbeschreibende Struktur eine optimale Basis für die Kommunikation im heterogenen Umfeld.


Die XML-Unterstützung beim SQL Server

Eine zentrale Zielsetzung der Entwickler von Microsoft bei der Implementierung der XML-Funktionalität war es, diese so einfach wie möglich nutzbar zu machen. Dabei müssen zwei Gruppen von Entwicklern unterschieden werden. Auf der einen Seite gibt es Programmierer von Web-basierenden Anwendungen, die vergleichsweise wenig mit den spezifischen Funktionen von SQL und relationalen Datenbanksystemen vertraut sind und in einfacher Weise auf diese zugreifen möchten. Auf der anderen Seite stehen die Datenbankentwickler, die XML unterstützen und nutzen möchten, ohne sich zu tief in diese Materie einarbeiten zu müssen.



Zugriffe auf den SQL Server können über Technologien wie XPath, URL-Abfragen und XML-Update-grams erfolgen. Dazu lassen sich aber auch über den Befehl FOR XML in einer SELECT-Anweisung XML-Daten als Ergebnissatz generieren. In T/SQL, also der SQL-Implementierung Transact-SQL des Datenbankservers, ist es möglich, über das Schlüsselwort OpenXML mit XML-Dokumenten so zu verfahren, als ob es sich um relationale Strukturen handelt. Auf diese kann dann mit der relationalen SQL-Syntax zugegriffen werden. Mit OpenXML wird ein Update-fähiger Satz an Zeilen über XML-Dokumente geliefert, die im Speicher gehalten werden. OpenXML lässt sich sowohl in SELECT- als auch in SELECT- INTO-Anweisungen verwenden.





XDR und XML-Views

XDR (XML Data Reduced) wird für die Erstellung von Schemata bei XML verwendet. XDR-Schemata beschreiben XML-Views von relationalen Daten. Abfragen auf solche Schemata können dann über XPath erfolgen. Die Nutzung von XDR kann verglichen werden mit der Nutzung von CREATE VIEW beim SELECT-Statement.



XML-Schemata beschreiben die Struktur von XML-Dokumenten, unter anderem etwa auch die Festlegungen der Beschränkungen, denen die Daten in den Dokumenten unterliegen. Bei Ausführung einer XPath-Abfrage unter Verwendung eines solchen Schemas wird die Struktur des zurückgelieferten Dokuments durch das XDR-Schema, das bei der Abfrage verwendet wird, definiert.




SQL Server 2000 verwendet XDR für die Beschreibung solcher Schemata. XDR ist im Vergleich zu den DTDs (Document Type Definitions), die herkömmlich verwendet werden, wesentlich flexibler und unterliegt deutlich weniger Einschränkungen. Die Dokumente werden in der gleichen Syntax wie die XML-Dokumente selbst beschrieben. Im Gegensatz zu DTDs können auch die Datentypen der Elemente flexibel festgelegt werden. XDR wird beispielsweise bei Microsofts BizTalk, einem Standard für die Interaktion zwischen unterschiedlichsten Systemen im B2B-Bereich, genutzt.



Interessant ist ferner, dass sich bei XDR Annotations nutzen lassen. Hierbei handelt es sich um Dateien, in denen die Abbildung eines bestehenden XDR-Schemas beschrieben wird. Mit Hilfe von solchen Annotations können Kopien bestehender Schemata wie beispielsweise von BizTalk verwendet und daraus ein neues Schema abgeleitet werden. Die Verwendung solcher abgeleiteter Schemata ist deutlich einfacher als die Entwicklung von Abfragen, die beim SELECT-Statement im FOR-XML-EXPLICIT-Modus arbeiten.



Die Verwendung von Annotations kann beispielsweise sehr hilfreich sein, wenn XML-Dokumente in einem Standard-Format mit beschriebenem XDR-Schema verwendet werden, die in einer bestehenden Datenbank gespeichert oder mit Informationen aus ihr gefüllt werden sollen. Die Umsetzung des XML-Formats auf die relationale Struktur wird dadurch erleichtert.



Im nebenstehenden Listing findet sich ein Beispiel für ein solches XDR-Schema mit Annotations. Dabei werden zunächst die Schemata definiert. Der erste Eintrag bezieht sich auf den verwendeten XML-Data-Namespace. Der zweite Eintrag gibt den Namespace für die Annotations, der dritte dann für die Datentypen an. Weiter unten im Tag <ElementType> erfolgt dann ein Mapping des Elements Employee auf die Tabelle Employee. Dabei wird die Annotation sql:relation verwendet. Die Zuordnung der einzelnen Felder erfolgt dann weiter unten über die Annotation sql:field.




Beispiel für die Nutzung von Annotations



Lesen von XML-Daten

Die eigentlichen Zugriffe auf Daten, sei es schreibend oder lesend, lassen sich bei SQL Server 2000 auch mit Aus- oder Eingaben in XML vergleichsweise einfach beschreiben. Um XML-Dokumente als Ergebnis von Abfragen auf SQL-Server-Daten zu generieren, kann FOR XML in einer SELECT-Anweisung genutzt werden.



FOR XML legt fest, dass kein Satz von Ergebniszeilen, sondern ein XML-Dokument zurückgeliefert wird. Unterstützt werden dabei drei verschiedene Modi. Ausserdem kann über die Option XMLDATA definiert werden, dass ein XML-Data-Schema zurückgegeben wird, das in das Dokument eingebunden wird.






Beispiel für eine Abfrage im AUTO-Modus






Abfrage
SELECT Kunden.KundenNr, Auftrag.Auf
tragsNr, Auftrag.Auftragsdatum
FROM Kunden, Auftrag
WHERE Kunden.KundenNr = Auftrag.Kun
denNr
ORDER BY Kunden.KundenNr
FOR XML AUTO

Abfrageergebnis
<Kunden KundenNr="12334" KontaktName=
"Martin Kuppinger">
<Auftrag AuftragsNr="10643"/>
<Auftrag AuftragsNr="10692"/>
<Auftrag AuftragsNr="10702"/>
<Auftrag AuftragsNr="10835"/>
<Auftrag AuftragsNr="10952"/>
<Auftrag AuftragsNr="11011"/>
</Kunden>






Im Modus AUTO erfolgt eine automatische Umsetzung der Abfrageergebnisse in verschachtelte XML-Elemente. Jede Tabelle, die bei FROM angegeben ist und aus der zumindest eine Spalte bei SELECT ausgewählt wird, wird als ein XML-Element zurückgegeben. Die Spalten werden auf Attribute dieser Elemente abgebildet.



Falls mit der Option ELEMENTS gearbeitet wird, werden die einzelnen Spalten als Unterelemente der für die Tabellen gebildeten Elemente zurückgeliefert.
Für die Struktur des XML-Dokuments spielt dabei die Reihenfolge der Referenzierung von Tabellen in der SELECT-Anweisung eine wichtige Rolle.



Der einfachste Modus ist RAW. In diesem Modus werden die Ergebnisse der Abfragen jeweils als vollständige Datenzeilen zurückgegeben, wie das Beispiel in untenstehendem Kasten zeigt.





Beispiel für eine Abfrage im RAW-Modus






Abfrage
SELECT Kunden.KundenNr, Auftrag.
AuftragsNr, Auftrag.Auftragsdatum
FROM Kunden, Auftrag
WHERE Kunden.KundenNr = Auftrag.
KundenNr
ORDER BY Kunden.KundenNr
FOR XML RAW

Abfrageergebnis
<row KundenNr="12345" Auftrags
Nr="10643" Auftragsdatum="1997-08-
25T00:00:00"/>
<row KundenNr="14364" Auftrags
Nr="10308" Auftragsdatum="1996-09-
18T00:00:00"/>






Durch Angabe von XMLDATA kann auch das Schema der Ergebnisse mitgeliefert werden. Hier werden dann unter anderem auch die Datentypen der einzelnen Zeilenelemente mit angegeben. Die Verwendung von RAW ist insbesondere für den Transfer von Daten zwischen unterschiedlichen Systemen interessant, wenn ohnehin noch eine gesonderte Analyse der Informationen erfolgt. Sinnvoll kann die Verwendung aber auch in Verbindung mit der Option BINARY BASE64 sein, um binäre Daten auszugeben. Ausserdem lassen sich im SELECT-Statement auch direkt URLs beispielsweise auf Bilddateien erzeugen und als Ergebnis zurückliefern.



Schliesslich gibt es noch den Modus EXPLICIT. In diesem wird die Struktur des als Abfrageergebnis gelieferten XML-Dokuments vom Ersteller der Abfrage gesteuert. Dazu ist eine spezifische Form der SELECT-Anweisung erforderlich. Dieser Modus bietet zwar die umfassendsten Steuerungsmöglichkeiten, ist allerdings auch bei weitem am komplexesten in der Anwendung. Er ist immer dann sinnvoll, wenn die Struktur der XML-Dokumente vorgegeben ist und nicht über einen der beiden anderen Modi erzeugt werden kann.




Die Verwendung von OpenXML

Um Daten aus XML-Dokumenten in SQL-Server-Tabellen zu schreiben, wird mit der Funktion OpenXML gearbeitet. Diese kann über die SELECT-Anweisung beispielsweise auch in Verbindung mit der INSERT-Anweisung genutzt werden. OpenXML stellt ein Rowset (Zeilensatz) bereit. Die Verwendung von OpenXML lässt sich daher am ehesten mit dem Zugriff auf eine Tabelle oder eine Ansicht vergleichen - mit dem Unterschied, dass es sich eben nicht um Daten von SQL Server, sondern um XML-Dokumente handelt.



Die Verwendung von OpenXML ist nicht trivial. Im ersten Schritt muss mit sp_xml_preparedocument eine interne Abbildung des XML-Dokuments erstellt werden. Dabei wird das XML-Dokument so umgesetzt, dass es von der Funktion OpenXML genutzt werden kann. Nachdem es entsprechend vorbereitet wurde, können die Zugriffe darauf erfolgen. Nach Abschluss der Verwendung des Dokuments kann es dann mit sp_xml_removedocument wieder gelöscht werden.




Bei OpenXML kann über die optionale Anweisung WITH das Schema beschrieben werden. In der Anweisung ist es darüber hinaus möglich, ein vollständiges Schema mit Spaltennamen, Datentypen und ihrer Abbildung auf das XML-Dokument anzugeben. Es kann aber auch ein Hinweis auf eine bestehende Tabelle geliefert werden, deren Schema genutzt werden soll. Falls WITH nicht verwendet wird, wird die Struktur aus dem XML-Dokument abgeleitet. Darauf muss dann entsprechend in der Abfrage, die OpenXML enthält, referenziert werden.




Der Einsatz von XPath

Neben den beschriebenen Nutzungsvarianten von FOR XML oder OpenXML bietet der Datenbankserver noch eine Reihe weiterer Optionen. So können etwa XPath-Abfragen genutzt werden. Diese werden als Teil einer URL oder innerhalb eines Templates definiert. Das Konzept lässt sich mit der Erstellung von Views mit CREATE VIEW und der Erstellung von SELECT-Anweisungen auf diese Views vergleichen.



Im Fall von XPath werden XDR-Schemata mit Annotations verwendet. Die Annotations steuern dabei faktisch, in welcher Form die zurückgelieferten Ergebnisse strukturiert sind und welche Werte aus der Datenbank angefordert werden, was mit einer View vergleichbar ist. In der XPath-Abfrage wird dann festgelegt, welche Informationen genau angefordert werden. So kann beispielsweise definiert werden, dass für einen bestimmten Kunden nur Aufträge eines ausgewählten Datums zurückgeliefert werden, wobei in der XPath-Abfrage dann das Datum und der Kunde spezifiziert würden. Die Struktur der Abfrage und die zu nutzenden Datenquellen würden aber über das XDR-Schema und Templates definiert.





English Queries

Ein weiterer Funktionsbereich des SQL Server 2000, bei dem XML eine Rolle spielt, ist die sogenannte English Query. Darüber können Abfragen in natürlicher Sprache anstelle von komplexen SQL-Abfragen erstellt werden. Allerdings wird derzeit nur die englische Sprache unterstützt. XML ist hier insofern von Bedeutung, als das neue Semantic Modeling Format (SMF) nun XML-basierend ist. Mit diesem Format lassen sich Modelle für die Umsetzung von natürlichsprachigen Abfragen definieren.





XML und Metadaten-Dienste

Deutlich grösser ist die Relevanz von XML im Bereich der Metadaten-Dienste. Hierbei handelt es sich um Repository-Funktionen von SQL Server 2000, mit denen die Daten und Modelle einfacher verwaltet werden können. Diese Dienste erweitern Microsofts Repository-Technologie, die mit dem SQL Server 7.0 erstmals ausgeliefert wurde, wesentlich.



XML spielt hier im Zusammenhang mit der Beschreibung von Informationsmodellen eine zentrale Rolle. Um Beschreibungen über Datenmodelle zwischen unterschiedlichen Systemen austauschen zu können, ist der Einsatz von XML naheliegend. Das XML Encoding kann verwendet werden, um Metadaten zu importieren, zu exportieren und für andere Anwendungen zu publizieren. Das verwendete Format MDC OIM XML ist von der Meta Data Coalition (MDC) im Rahmen des OIM (Open Information Model) spezifiziert.





Geplante Erweiterungen

Die Entwicklung der XML-Funktionalität für SQL Server 2000 ist noch lange nicht abgeschlossen. Microsoft hat bereits jetzt zwei neue Funktionen angekündigt.
Zum einen sind das die eingangs bereits kurz angesprochenen XML-grams, mit denen Web-Developer Daten in SQL-Server-Tabellen über XML einfügen, löschen und verändern können. Zum anderen wird es auch noch eine XML-Bulk-Load-Funktion geben, mit der sich grosse Datenmengen über XML in Tabellen des XML-Server importieren lassen.



Microsoft hat mit SQL Server 2000 die erste XML-fähige Version seines Datenbank-Managementsystems realisiert. Der von den Redmondern gewählte Ansatz erleichtert den Einsatz von XML sowohl für Entwickler aus dem Bereich der Web-Applications als auch für jene von klassischen Datenbankanwendungen.




Positiv zu bewerten ist ausserdem, dass Microsoft beispielsweise im Bereich der Schemata auf aktuelle Konzepte wie XDR setzt. Man darf aber dennoch gespannt sein auf die weiteren Schritte von Microsoft, denn noch steht XML erst am Anfang seiner Entwicklung.



Artikel kommentieren
Kommentare werden vor der Freischaltung durch die Redaktion geprüft.

Anti-Spam-Frage: Vor wem mussten die sieben Geisslein aufpassen?
GOLD SPONSOREN
SPONSOREN & PARTNER