![]() |
Comelio GmbH
|
Comelio-Blog > MS SQL Server > XSLT XSLT
XQuery und XSLTEine Möglichkeit zur Bearbeitung von XML-Daten ergibt sich nach relationaler Zer-legung, Abfrage und Verarbeitung mit XQuery mit Hilfe von XSLT. Dieser Standard vom W3C (http://www.w3.org/TR/xslt20/) besteht aus einer XML-Datei, in der in einer deklara-tiven Sprache Formatierungs- und Umwandlungsanweisungen für XML-Datenströme ge-geben werden, die zu Ergebnissen in HTML, XML oder Text führen. Diese Sprache enthält Anweisungen für Fallunterscheidungen (xsl:if und xsl:chosse), Wiederholungen für Iterationen über eine Knotenmengen (xsl:for-each), Variablen (xsl:variable) und Parameter für Vorlagen und das gesamte XSLT-Stylesheet (xsl:param). Ein Algorithmus ist in so genannten Vorlagen (xsl:template) angegeben, der in einer anderen Programmier-sprache als Methode, Routine oder Prozedur bezeichnet werden könnte. Mit Hilfe von XPath navigiert man durch das XML-Dokument, wobei es unterschiedliche Möglichkeiten gibt, Vorlagen aufzurufen, um Knotenmengen zu verarbeiten. Während die Techniken XML Schema, XPath und XQuery zentrale Bestandteile in den XML-Fähigkeiten des MS SQL Servers darstellen, ohne deren Kenntnis man nur wenig ergiebigen Quelltext produzieren kann, so ist XSLT durchaus nicht zentral. Zwar gibt es XSLT-Implementierungen in der Datenbank, aber diese sind nicht direkt in T-SQL ver-wendbar. Bspw. gibt es keine transform()-Methode für den xml-Datentyp wie dies in PL/SQL bei Oracle der Fall ist, um XML-Spalten und –Variablen sofort mit einem passen-den XSLT-Stylesheet umzuwandeln. Daher verzichten wir in diesem Fall auf eine kurze Darstellung, wie wir es für die anderen Techniken im XML- und Webservices-Bereich tun. Dieser Abschnitt soll lediglich einen Weg aufzeigen, wie man doch eine ähnliche Funktio-nalität in T-SQL implementieren und nutzen kann. Dazu erstellt man ganz einfach eine gespeicherte .NET-Funktion, die als T-SQL-Funktion dem Klienten angeboten wird. Eine einfache Lösung zeigt das nachfolgende Skript, wel-ches eine Transform()-Methode in .NET erstellt, die XML und XSLT als Zeichenketten erwartet und das umgewandelte Ergebnis wiederum als solche zurückliefert. Eine erweiterte Funktion würde noch die Möglichkeit anbieten, Parameter für das XSLT-Stylesheet zu seiner erweiterten Steuerung wie bspw. Filterung entgegenzunehmen. Da aus T-SQL keine Arrays o.ä. übergeben werden können, wäre hier vermutlich eine wiederum einfache XML-Datei für die Parameterliste denkbar, die in T-SQL leicht erstellt und in .NET wieder ausge-lesen werden kann. Die Methode zeigt für XSLT-Neulinge auch schon die Besonderheit, die bei dieser Technik (und der PDF-/Druck-Variante XSL-FO) so bemerkenswert ist: Das ewig gleiche Programm kann ganz unterschiedliche XML- und XSLT-Dateien miteinander verarbeiten, weil ja die Transformationsanweisungen zur Erzeugung von XML, HTML oder Text (CSV, SQL oder sonstiger Text) in den XSLT-Anweisungen enthalten sind.
Um aus der öffentlichen und statischen Methode eine T-SQL-Funktion zu machen bzw. eine im Server gespeicherte .NET-Funktion, erstellt man eine DLL, die mit der CREATE ASSEMBLY-Anweisung geladen wird. Ein ähnliches Beispiel folgt in diesem Buch, wenn man für Webservices eine Prozedur erstellt, welche eine selbst geschriebene Webservice-Beschreibung (WSDL-Datei) zurückliefert und dies auch in .NET geschieht. Eine nur gela-dene DLL erzeugt noch keine in T-SQL verwendbare Funktion oder Prozedur. Stattdessen ist noch erforderlich, eine umhüllende Funktion/Prozedur in T-SQL zu erstellen, welche die Parameter in passender Reihenfolge und Datentypstruktur entgegen nimmt und dann die .NET-Methode referenziert.
Wenngleich – wie schon oben erwähnt – noch weitere Fähigkeiten im XSLT-Umfeld wün-schenswert wären, ist diese Hilfsfunktion bereits überaus nützlich. Sie ermöglicht es, eine XSLT-Umwandlung direkt innerhalb eines T-SQL-Programms oder einer reinen SQL-Anweisung auszuführen. Alles, was man dazu benötigt, sind die XML-Daten, wie sie in einer Spalte/Variable oder einer Datei gespeichert sind und die man in eine Variable mit xml oder nvarchar(max) als Datentyp überführen kann. Dies gilt sowohl für XML als auch für XSLT, wobei man in einer sehr fortgeschrittenen Variante ja auch das XSLT in einer passenden Tabelle speichern könnte. In diesem Fall befindet sich ein sehr einfaches XSLT-Skript direkt in einer Variablen, die zusammen mit XML-Daten, welche aus einer FOR XML-Abfrage stammen, an die Funktion transform() übergeben werden. Als spek-takuläres Ergebnis erhält man das erzeugte HTML zurück – ganz einfach in einer SQL-Anweisung. Mit diesem Beispiel soll die Darstellung, welche Techniken man einsetzen kann, um XML-Daten im MS SQL Server direkt zu verarbeiten bzw. in T-SQL-Anweisungen zu nutzen, beendet werden.
Seminare
|
||