 |
 |
 |
 |
 |
 |
|
 |
Comelio GmbH Rellinghauser Straße 10 D-45128 Essen Deutschland Fon: 0201-437517-0 Fax: 0201-437517-10 info@comelio.com
Comelio GmbH Goethestraße 34 D-13086 Berlin Deutschland info@comelio.com
Comelio GmbH (Ecos) Glockengießerwall 17 D-20095 Hamburg Deutschland info@comelio.com
Comelio GmbH (Ecos) Mainzer Landstraße 27-31 D-60329 Frankfurt Deutschland info@comelio.com
Comelio GmbH (Ecos) Stiglmaierplatz/Dachauer Str. 37 D-80335 München Deutschland info@comelio.com
Comelio GmbH (Ecos) Liebknechtstr. 33 D-70565 Stuttgart Deutschland info@comelio.com
Comelio GmbH Nevinghoff 16 D-48147 Münster Deutschland
Comelio GmbH Friedrich - List - Platz 1 D-04103 Leipzig Deutschland
Comelio GmbH St. Johanner Strasse 41-43 D-66111 Saarbrücken Deutschland
Comelio GmbH Kaiser-Wilhem-Ring 27–29 D-50672 Köln Deutschland
Comelio GmbH Münsterstraße 248 D-40470 Düsseldorf Deutschland
Comelio GmbH Fürther Strasse D-90429 Nürnberg Deutschland
Comelio GmbH
Bremen Deutschland
 |
Comelio-Blog > MS SQL Server > XSLT XSLT
Eine 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.
|
 | Kontakt
|
XQuery und XSLT
Eine 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.
namespace Transform {
public class MyTransformingClass {
public static string Transform(string inputXML,
string inputXSLT) {
System.Xml.XmlReader xslt = System.Xml.XmlReader.Create(
new System.IO.StringReader(inputXSLT));
XslCompiledTransform proc = new XslCompiledTransform();
XmlDocument xml = new XmlDocument();
xml.LoadXml(inputXML);
proc.Load(xslt);
XsltArgumentList args = new XsltArgumentList();
StringBuilder res = new StringBuilder();
XmlWriter writer = XmlWriter.Create(res,
new XmlWriterSettings());
proc.Transform(xml, args, writer);
return res.ToString();
} } }
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.
--Anlegen der Assembly
CREATE ASSEMBLY AdventureWorks.dbo.myTransformation
FROM 'C:\Transform.dll'
GO
--Anlegen der Funkion zum Transformieren
CREATE FUNCTION AdventureWorks.dbo.Transform (
@InputXML nvarchar(max),
@InputXSLT nvarchar(max) )
RETURNS nvarchar(max)
AS EXTERNAL NAME myTransformation.[Transform.MyTransformingClass].Transform
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.
DECLARE @productXML xml, @productXSLT nvarchar(max)
-- Füllen der @productXML mit Daten
SET @productXML = (
SELECT Name, ProductNumber, ListPrice
FROM Production.Product
FOR XML PATH('Product'), ROOT('Product-List'))
-- Füllen der @productXSLT mit Daten
SET @productXSLT=
'<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="ISO-8859-1"
indent="yes"/>
<xsl:template match="/">
<html><head><title>Transform X</title></head>
<body>
<ul>
<xsl:for-each select="//Product">
<li>
<xsl:value-of select="Name"/>
</li>
</xsl:for-each>
</ul>
</body></html></xsl:template>
</xsl:stylesheet>'
--Aufrufen der Funktion zur Transformation
SELECT AdventureWorks.dbo.Transform(
CAST(@productXML AS nvarchar(max)),
@productXSLT) AS HTML
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.
Comelio GmbH MS SQL Server: XSLT - MS SQL Server T-SQL XML Webservices Programmierung Bücher Anleitung Tutorial Skulschus Wiederstein Kozik Microsoft SQL Intelligence Reporting Webservices T-SQL Server Analysis .NET XML Business MS Bücher Services Ingolstadt Lübeck Würzuburg Rügen München Hannover Koblenz Göttingen Bochum Magdeburg Frankfurt Köln Ol Stuttgart Kiel Bremen Ludwigshafen Mannheim Heidelberg Andernach Hamburg Freiburg Kassel Bonn Koblenz Berlin Wolfsburg Leipzig Zwickau Erlangen AachenComelio GmbH MS SQL Server: XSLT - MS SQL Server T-SQL XML Webservices Programmierung Bücher Anleitung Tutorial Skulschus Wiederstein Kozik Microsoft SQL Intelligence Reporting Webservices T-SQL Server Analysis .NET XML Business MS Bücher Services Ingolstadt Lübeck Würzuburg Rügen München Hannover Koblenz Göttingen Bochum Magdeburg Frankfurt Köln Ol Stuttgart Kiel Bremen Ludwigshafen Mannheim Heidelberg Andernach Hamburg Freiburg Kassel Bonn Koblenz Berlin Wolfsburg Leipzig Zwickau Erlangen AachenComelio GmbH MS SQL Server: XSLT - MS SQL Server T-SQL XML Webservices Programmierung Bücher Anleitung Tutorial Skulschus Wiederstein Kozik Microsoft SQL Intelligence Reporting Webservices T-SQL Server Analysis .NET XML Business MS Bücher Services Ingolstadt Lübeck Würzuburg Rügen München Hannover Koblenz Göttingen Bochum Magdeburg Frankfurt Köln Ol Stuttgart Kiel Bremen Ludwigshafen Mannheim Heidelberg Andernach Hamburg Freiburg Kassel Bonn Koblenz Berlin Wolfsburg Leipzig Zwickau Erlangen AachenComelio GmbH MS SQL Server: XSLT - MS SQL Server T-SQL XML Webservices Programmierung Bücher Anleitung Tutorial Skulschus Wiederstein Kozik Microsoft SQL Intelligence Reporting Webservices T-SQL Server Analysis .NET XML Business MS Bücher Services Ingolstadt Lübeck Würzuburg Rügen München Hannover Koblenz Göttingen Bochum Magdeburg Frankfurt Köln Ol Stuttgart Kiel Bremen Ludwigshafen Mannheim Heidelberg Andernach Hamburg Freiburg Kassel Bonn Koblenz Berlin Wolfsburg Leipzig Zwickau Erlangen AachenComelio GmbH MS SQL Server: XSLT - MS SQL Server T-SQL XML Webservices Programmierung Bücher Anleitung Tutorial Skulschus Wiederstein Kozik Microsoft SQL Intelligence Reporting Webservices T-SQL Server Analysis .NET XML Business MS Bücher Services Ingolstadt Lübeck Würzuburg Rügen München Hannover Koblenz Göttingen Bochum Magdeburg Frankfurt Köln Ol Stuttgart Kiel Bremen Ludwigshafen Mannheim Heidelberg Andernach Hamburg Freiburg Kassel Bonn Koblenz Berlin Wolfsburg Leipzig Zwickau Erlangen AachenComelio GmbH MS SQL Server: XSLT - MS SQL Server T-SQL XML Webservices Programmierung Bücher Anleitung Tutorial Skulschus Wiederstein Kozik Microsoft SQL Intelligence Reporting Webservices T-SQL Server Analysis .NET XML Business MS Bücher Services Ingolstadt Lübeck Würzuburg Rügen München Hannover Koblenz Göttingen Bochum Magdeburg Frankfurt Köln Ol Stuttgart Kiel Bremen Ludwigshafen Mannheim Heidelberg Andernach Hamburg Freiburg Kassel Bonn Koblenz Berlin Wolfsburg Leipzig Zwickau Erlangen AachenComelio GmbH MS SQL Server: XSLT - MS SQL Server T-SQL XML Webservices Programmierung Bücher Anleitung Tutorial Skulschus Wiederstein Kozik Microsoft SQL Intelligence Reporting Webservices T-SQL Server Analysis .NET XML Business MS Bücher Services Ingolstadt Lübeck Würzuburg Rügen München Hannover Koblenz Göttingen Bochum Magdeburg Frankfurt Köln Ol Stuttgart Kiel Bremen Ludwigshafen Mannheim Heidelberg Andernach Hamburg Freiburg Kassel Bonn Koblenz Berlin Wolfsburg Leipzig Zwickau Erlangen AachenComelio GmbH MS SQL Server: XSLT - MS SQL Server T-SQL XML Webservices Programmierung Bücher Anleitung Tutorial Skulschus Wiederstein Kozik Microsoft SQL Intelligence Reporting Webservices T-SQL Server Analysis .NET XML Business MS Bücher Services Ingolstadt Lübeck Würzuburg Rügen München Hannover Koblenz Göttingen Bochum Magdeburg Frankfurt Köln Ol Stuttgart Kiel Bremen Ludwigshafen Mannheim Heidelberg Andernach Hamburg Freiburg Kassel Bonn Koblenz Berlin Wolfsburg Leipzig Zwickau Erlangen AachenComelio GmbH MS SQL Server: XSLT - MS SQL Server T-SQL XML Webservices Programmierung Bücher Anleitung Tutorial Skulschus Wiederstein Kozik Microsoft SQL Intelligence Reporting Webservices T-SQL Server Analysis .NET XML Business MS Bücher Services Ingolstadt Lübeck Würzuburg Rügen München Hannover Koblenz Göttingen Bochum Magdeburg Frankfurt Köln Ol Stuttgart Kiel Bremen Ludwigshafen Mannheim Heidelberg Andernach Hamburg Freiburg Kassel Bonn Koblenz Berlin Wolfsburg Leipzig Zwickau Erlangen Aachen
|
 |