Donnerstag, 14. Februar 2008

Was ist BizTalk? Teil 2½ Was ist XSLT?

So, das habe ich nun davon... :o)

Kaum werfe ich mal wieder mit Buzzwords um mich, schon kommt die Frage: Was ist denn XSLT und warum hat das was mit BizTalk zu tun? Ok, dann schiebe ich das mal "kurz" ein. Wobei XSLT wirklich kein kleines Thema ist, damit können locker Bücher gefüllt werden. Es gibt auch Diverse zu dem Thema! Da ich hier nun aber keine XSLT Einführung verfassen möchte, verweise ich einfach mal auf den guten Wikipedia Artikel.

Daher hier nun kurz eine Übersicht. XSLT (Extensible Stylesheet Transfomations) ist ein Verfahren für das Transformieren von Dokumenten. Am häufigsten wird wohl sowohl als Quelle und auch als Ziel XML eingesetzt. Und wir erinnern uns, dass intern im BizTalk alles über XML läuft. Wie funktioniert nun XSLT? Zuerst einmal brauchen wir eine Beschreibung im XSLT Format, welches die eigentliche Transformation beschreibt. Und dann brauchen wir noch einen XSLT Prozessor, welcher die Transformation durchführt. Im Beispiel unten verwende ich das freie Tool nxslt2. Es gibt aber diverse XSLT Prozessoren am Markt. Im .net Framework gibt es für die Verwendung innerhalb einer Anwendung ebenfalls eine Klasse dafür.

Kommen wir zum Beispiel: Ich habe hier eine XML Datei mit den aktuellen PASS Deutschland e.V. Regionalgruppen. Dabei ist zu beachten, dass die Bezeichnung einer Gruppe als Element vorliegt! Als Ergebnis der Transformation möchte ich die Bezeichnungen als Attribute haben. Dafür habe ich eine XSLT Datei verfasst. In dieser beschreibe ich die Umwandlung. Es findet also keine klassische Programmierung statt, nur eine Beschreibung!

Mit dem folgenden Befehl führe ich die Transformation durch. Es wird auf die pass.xml die Transformation pass.xslt durchgeführt. Das Ergebnis ist die Datei pass2.xml.

nxslt2 pass.xml pass.xslt -o pass2.xml

Zurück zum BizTalk Server. Dort müssen i.d.R. aber keine XSLT Dateien per Hand erstellt oder bearbeitet werden, sondern es gibt dort einen sehr komfortablen grafischen Editor für das sogenannte Mapping. Aber dazu später mehr. Heute sollte es ja "nur" um XSLT gehen, wobei ich bemerken möchte, dass dieses Beispiel die Möglichkeiten von XSLT nur leicht ankratzt. :o)

PASS.XML
<?xml version="1.0" encoding="utf-8"?>
<passdeutschland>
<regionalgruppen>
<regionalgruppe><bezeichnung>Bayern</bezeichnung></regionalgruppe>
<regionalgruppe><bezeichnung>Berlin</bezeichnung></regionalgruppe>
<regionalgruppe><bezeichnung>Franken</bezeichnung></regionalgruppe>
<regionalgruppe><bezeichnung>Hamburg</bezeichnung></regionalgruppe>
<regionalgruppe><bezeichnung>Hannover/Goettingen</bezeichnung></regionalgruppe>
<regionalgruppe><bezeichnung>Karlsruhe</bezeichnung></regionalgruppe>
<regionalgruppe><bezeichnung>Koeln/Bonn/Duesseldorf</bezeichnung></regionalgruppe>
<regionalgruppe><bezeichnung>Mittelrhein</bezeichnung></regionalgruppe>
<regionalgruppe><bezeichnung>Rhein/Main</bezeichnung></regionalgruppe>
<regionalgruppe><bezeichnung>Ruhrgebiet</bezeichnung></regionalgruppe>
<regionalgruppe><bezeichnung>Sachsen</bezeichnung></regionalgruppe>
<regionalgruppe><bezeichnung>Stuttgart</bezeichnung></regionalgruppe>
<regionalgruppe><bezeichnung>Oesterreich</bezeichnung></regionalgruppe>
</regionalgruppen>
</passdeutschland>

PASS.XSLT
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" >
<xsl:template match="/">
<passdeutschland>
<xsl:apply-templates select="/passdeutschland/regionalgruppen/regionalgruppe" />
</passdeutschland>
</xsl:template>
<xsl:template match="regionalgruppe">
<xsl:copy>
<xsl:attribute name="bezeichnung"><xsl:value-of select="bezeichnung"/>
</xsl:attribute>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>

PASS2.XML
<?xml version="1.0" encoding="utf-8"?>
<passdeutschland>
<regionalgruppe bezeichnung="Bayern" />
<regionalgruppe bezeichnung="Berlin" />
<regionalgruppe bezeichnung="Franken" />
<regionalgruppe bezeichnung="Hamburg" />
<regionalgruppe bezeichnung="Hannover/Goettingen" />
<regionalgruppe bezeichnung="Karlsruhe" />
<regionalgruppe bezeichnung="Koeln/Bonn/Duesseldorf" />
<regionalgruppe bezeichnung="Mittelrhein" />
<regionalgruppe bezeichnung="Rhein/Main" />
<regionalgruppe bezeichnung="Ruhrgebiet" />
<regionalgruppe bezeichnung="Sachsen" />
<regionalgruppe bezeichnung="Stuttgart" />
<regionalgruppe bezeichnung="Oesterreich" />
</passdeutschland>

Keine Kommentare: