Entwicklung und Nutzen von XML


[Informatik- u. Master-Seminar SS04]   [Inhaltsverzeichnis]   [zurück]   [weiter] Nach unten

Transformation von XML-Dokumenten


Transformation von XML-Dokumenten

XSL Transformations, kurz XSLT, ist ein Sprachbestandteil der eXtensible Stylesheet Language XSL. XSLT bietet einem die Möglichkeit beliebige XML-Dokumente in andere Formate zu transformieren. Einige der möglichen Ausgabeformate sind XML, HTML, XHTML, SVG, VRML, PDF. Die Umwandlung eines XML-Dokumentes in ein anderes Format ist letztendlich nichts anderes, als eine Baumtransformation, bei der ein Quellbaum in einen Ergebnisbaum transformiert wird. So ist es möglich die Daten in XML zu speichern, aber in einem anderen bzw. nützlicheren Format darzustellen oder beispielsweise ein Dokument kompakter zu gestalten als das Original und von für den konkreten Anlass überflüssigen Informationen zu bereinigen. Die Transformation geschieht mithilfe von XSL-Stylesheets, die prinzipiell wie die Stylesheets zur Formatierung funktionieren. In einem solchen XSL-Stylesheet zur Transformation werden Regeln zu Mustern zugeordnet. Das Dokument wird nun durch eine Transformations-Engine, beispielsweise XT, Xalan oder Saxon, geparsed und die im Dokument erkannten Auszeichnungen werden mit den vorgegebenen Mustern im Stylesheet verglichen. Existiert zu einer Auszeichnung eine Regel im Stylesheet, ein sogenanntes Template, wird diese angewandt und der Ergebnis-Code wird erzeugt.


Beispiel: adressbuch.xml --> adressbuch.html

Die Transformation des bereits bekannten Adressbuch-Beispiels in eine HTML-Datei adressbuch.html soll hier mit der XSLT-Engine Saxon beispielhaft gezeigt werden.

Die Quelldatei adressbuch.xml:
<?xml version="1.0"?>
<!DOCTYPE adressbuch SYSTEM "adressbuch.dtd">

<Adressbuch>						
  <Person>						
    <Vorname>Uwe</Vorname>				
    <Nachname>Schmidt</Nachname>		
    <Ort plz="101010">Knusiland</Ort>			
    <Alter>42</Alter>
  </Person>
</Adressbuch>

Das Transformations-Stylesheet adressbuch.xsl:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
	<html>
	<head>
	<title> Transformiertes Adressbuch </title>
	</head>
	<body>
	<xsl:apply-templates />
	</body>
	</html>
</xsl:template>

<xsl:template match="Person">
 <table border="2"><tr> <xsl:apply-templates /> </tr></table>
</xsl:template>

<xsl:template match="Vorname">
 <td> <xsl:value-of select="." /> </td>
</xsl:template>

<xsl:template match="Nachname">
 <td> <xsl:value-of select="." /> </td>
</xsl:template>

<xsl:template match="Alter">
 <td> <xsl:value-of select="." /> </td>
</xsl:template>

<xsl:template match="Ort">
 <td> <xsl:value-of select="." /> </td>
</xsl:template>

</xsl:stylesheet>


Aufruf: saxon -o adressbuch.html adressbuch.xml adressbuch.xsl

Ergebnis der Transformation: adressbuch.html
<html>
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
   
      <title> Transformiertes Adressbuch </title>
   </head>
   <body>						
      
      <table border="2">
         <tr>						
                
            <td>Uwe</td>				
                
            <td>Schmidt</td>		
                
            <td>Knusiland</td>			
                
            <td>42</td>
              
         </tr>
      </table>
      
   </body>
</html>

Über das Attribut match in den Templates werden die entsprechenden Elemente aus dem Quellbaum herausgegriffen, dies wird als Selektion bezeichnet. Die Anweisungen danach beeinhalten den zu erzeugenden Ergebnis-Code. Das erste Template <xsl:template match="/"> greift mithilfe des match-Attributs und des Slash auf das Wurzelelement zu. Sobald also das Wurzelelement gefunden wurde sollen die Anweisungen nach dem Template ausgeführt werden. In diesem Fall wird nun der HTML-Kopf ausgegeben einschließlich des body-Tags. Danach folgt eine weitere XSLT-Anweisung, nämlich <xsl:apply-templates />, die nichts weiter besagt, dass die nun nachfolgend definierten Templates alle abgearbeitet werden sollen. Nach dieser Abarbeitung wird dann der HTML-Footer mit den schließenden body- und HTML-Tags ausgegeben. Das zweite Template ist für das Element Person. Hier wird nichts weiter gemacht, als eine HTML-Tabelle mit einer Zeile zu öffnen, die Abarbeitung der folgenden Templates zu veranlassen und die Zeile und die Tabelle wieder abzuschließen. Die restlichen Templates verarbeiten die Kind-Elemente von Person. Hier wird jeweils eine Zelle in HTML für die bereits definierte Zeile geöffnet, danach wird der Inhalt des XML-Elements mit <xsl:value-of select="." /> ausgegeben und die Zelle wieder geschlossen. Das Ergebnis dieser Transformation ist also eine reine HTML-Datei, die über die Angaben im Stylesheet beliebig gestaltet werden darf. Obwohl das Thema XSLT sicherlich eines der interessantesten im Bereich XML ist soll hier nicht weiter auf die genaue Syntax oder die Möglichkeiten von XSLT eingegangen werden, dies würde den Rahmen sprengen.


[Informatik- u. Master-Seminar SS04]   [Inhaltsverzeichnis]   [zurück]   [weiter] Inhaltsverzeichnis Nach oben