<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://demowiki.knowlus.com/index.php?action=history&amp;feed=atom&amp;title=XSL_Transformation</id>
	<title>XSL Transformation - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://demowiki.knowlus.com/index.php?action=history&amp;feed=atom&amp;title=XSL_Transformation"/>
	<link rel="alternate" type="text/html" href="https://demowiki.knowlus.com/index.php?title=XSL_Transformation&amp;action=history"/>
	<updated>2026-05-14T23:51:00Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Demo Wiki</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://demowiki.knowlus.com/index.php?title=XSL_Transformation&amp;diff=4019&amp;oldid=prev</id>
		<title>imported&gt;Siegbert v2: + Redundanz-Baustein</title>
		<link rel="alternate" type="text/html" href="https://demowiki.knowlus.com/index.php?title=XSL_Transformation&amp;diff=4019&amp;oldid=prev"/>
		<updated>2025-09-21T10:17:27Z</updated>

		<summary type="html">&lt;p&gt;+ Redundanz-Baustein&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Redundanztext&lt;br /&gt;
|3=XSLT-Prozessor&lt;br /&gt;
|4=XSL Transformation&lt;br /&gt;
|2=September 2025|1=[[Benutzer:Siegbert v2|Siegbert v2]] ([[Benutzer Diskussion:Siegbert v2|Diskussion]]) 12:17, 21. Sep. 2025 (CEST)}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Dateiformat&lt;br /&gt;
| Name = XSL Transformations&lt;br /&gt;
| Icon = [[Datei:XSLT.svg|200px|XSLT-Beispiel]]&lt;br /&gt;
| Logo = &lt;br /&gt;
| Screenshot = &lt;br /&gt;
| Beschreibung = &lt;br /&gt;
| Dateiendung = .xsl, .xslt&lt;br /&gt;
| MIME = application/xslt+xml&lt;br /&gt;
| MIME-Anm = &amp;lt;ref&amp;gt;[http://www.w3.org/TR/xslt20/#xslt-mime-definition w3.org]&amp;lt;/ref&amp;gt;&lt;br /&gt;
| MagischeZahl = &lt;br /&gt;
| MagischeZahlNotation = &lt;br /&gt;
| MagischeZahlHex = &lt;br /&gt;
| Entwickler = [[World Wide Web Consortium]]&lt;br /&gt;
| Veröffentlicht = &lt;br /&gt;
| LetzteVersion = &lt;br /&gt;
| LetzteVersionDatum = &lt;br /&gt;
| Art = [[Stylesheet|Stylesheet-Sprache]]&lt;br /&gt;
| Container für = &lt;br /&gt;
| Enthalten in = &lt;br /&gt;
| Erweitert von = [[Extensible Markup Language|XML]]&lt;br /&gt;
| Erweitert zu = &lt;br /&gt;
| Standard = [https://www.w3.org/TR/xslt11/ 1.1 (Recommendation)],&amp;lt;br /&amp;gt;[http://www.w3.org/TR/xslt20/ 2.0 (Recommendation)]&amp;lt;br /&amp;gt;[https://www.w3.org/TR/xslt-30/ 3.0 (Recommendation)]&lt;br /&gt;
| Website = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;XSL Transformation&amp;#039;&amp;#039;&amp;#039;, kurz &amp;#039;&amp;#039;&amp;#039;XSLT&amp;#039;&amp;#039;&amp;#039;, ist eine [[Programmiersprache]] zur [[Konvertierung (Informatik)|Transformation]] von [[Extensible Markup Language|XML]]-Dokumenten.&lt;br /&gt;
Sie ist Teil der [[Extensible Stylesheet Language]] (XSL) und stellt eine universelle ([[Turing-Vollständigkeit|Turing-vollständige]])&amp;lt;ref&amp;gt;[http://www.unidex.com/turing/utm.htm &amp;#039;&amp;#039;Universal Turing Machine in XSLT.&amp;#039;&amp;#039;] Unidex, Inc. (englisch).&amp;lt;/ref&amp;gt; Sprache dar.&lt;br /&gt;
&lt;br /&gt;
XSLT wurde vom [[World Wide Web Consortium]] (W3C) am 8. Oktober 1999 als Empfehlung veröffentlicht.&amp;lt;ref&amp;gt;{{Internetquelle |url=http://www.w3.org/TR/1999/PR-xslt-19991008 |titel=XSL Transformations (XSLT) Version 1.0, W3C Proposed Recommendation, in: archive.org |autor= |hrsg= |werk= |datum=1999-10-08 |archiv-url=https://web.archive.org/web/20060616074228/http://www.w3.org/TR/1999/PR-xslt-19991008 |archiv-datum=2006-06-16 |sprache=en |zugriff=2017-02-12}}&amp;lt;/ref&amp;gt; XSLT baut auf der [[Baum (Graphentheorie)|logischen Baumstruktur]] eines XML-Dokumentes auf und dient zur Definition von Umwandlungsregeln. XSLT-Programme, sogenannte XSLT-[[Stylesheet]]s, sind dabei selbst nach den Regeln des XML-Standards aufgebaut.&lt;br /&gt;
&lt;br /&gt;
Die Stylesheets werden von spezieller Software, den [[XSLT-Prozessor]]en, eingelesen, die mit diesen Anweisungen ein oder mehrere XML-Dokumente in das gewünschte Ausgabeformat umwandeln. XSLT-Prozessoren sind auch in vielen modernen [[Webbrowser]]n integriert, wie zum Beispiel [[Opera (Browser)|Opera]] (ab Version&amp;amp;nbsp;9), [[Mozilla Firefox|Firefox]] und [[Internet Explorer]] Version&amp;amp;nbsp;5 (ab Version&amp;amp;nbsp;6 mit vollständiger XSLT-1.0-Unterstützung).&lt;br /&gt;
&lt;br /&gt;
XSLT ist eine Untermenge von [[Extensible Stylesheet Language|XSL]], zusammen mit [[Extensible Stylesheet Language – Formatting Objects|XSL-FO]] und [[XPath]].&lt;br /&gt;
&lt;br /&gt;
== Geschichte ==&lt;br /&gt;
Ursprünglich sollte mit [[Extensible Stylesheet Language|XSL]] eine [[Document Style Semantics and Specification Language|DSSSL]]-artige Sprache in XML-Syntax entstehen. Schnell war jedoch klar, dass eine solche Sprache eigentlich aus drei interagierenden, aber unabhängig voneinander einsetzbaren Teilen besteht:&lt;br /&gt;
* Einer Sprache für die Beschreibung eines Dokuments als Baum mit Formatierungsanweisungen und Stilangaben: XSL Formatting Objects ([[Extensible Stylesheet Language – Formatting Objects|XSL-FO]])&lt;br /&gt;
* Einer Sprache für die Transformation eines beliebigen XML-Dokuments in einen anderen Baum, z.&amp;amp;nbsp;B. einen in [[Extensible Stylesheet Language – Formatting Objects|XSL-FO]]: XSLT&lt;br /&gt;
* Einer Sprache für die Adressierung von Baumbestandteilen: [[XPath]]&lt;br /&gt;
&lt;br /&gt;
Die [[Deklarative Programmierung|deklarative]], [[Funktionale Programmierung|funktional]]-applikative Sprache XSLT ist u.&amp;amp;nbsp;a. aus [[Document Style Semantics and Specification Language|DSSSL]] hervorgegangen. Entwickelt wurde XSLT ursprünglich von [[James Clark (Informatiker)|James Clark]] (XSLT 1.0, XSLT 1.1), für die derzeitige Weiterentwicklung ist [[Michael Kay]] verantwortlich.&lt;br /&gt;
Seit dem 23. Januar 2007 ist XSLT 2.0 eine „Recommendation“ (Empfehlung) des [[World Wide Web Consortium|W3C]] und hat damit die seit 1999 gültige Version XSLT 1.0 abgelöst. Inzwischen existiert auch eine Version XSLT&amp;amp;nbsp;3.0&amp;lt;ref&amp;gt;[http://www.w3.org/TR/xslt-xquery-serialization-30/ XSLT 3.0]&amp;lt;/ref&amp;gt; als Candidate Recommendation vom November 2015 des W3C, welche bereits durch den Saxon-Parser unterstützt wird.&amp;lt;ref&amp;gt;[http://www.saxonica.com/html/products/feature-matrix-9-8.html Saxon 9.8 product comparison (Feature Matrix)]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Funktionsweise ==&lt;br /&gt;
[[Datei:TempDeXslt015.svg|mini|200px|Vereinfachte Darstellung der Funktionsweise von XSLT – Ein XML-Dokument wird mittels eines XSLT-Dokuments und eines verarbeitenden Prozessors in ein neues Dokument überführt (.xml, .xhtml, .html, .txt,&amp;amp;nbsp;…).]]&lt;br /&gt;
Die Sprache XSLT beschreibt die Umwandlung eines XML-Derivats (auch XML-Dialekt oder XML-Anwendung genannt), in Form eines XML-[[Elektronisches Dokument|Dokuments]], in ein anderes Dokument, Transformation genannt. Das resultierende Dokument entspricht meist der XML-Syntax, es können aber auch andere [[Textdatei]]en und sogar [[Binärdatei]]en erstellt werden.&lt;br /&gt;
&lt;br /&gt;
Dazu werden die XML-Dokumente als [[Baum (Graphentheorie)|logischer Baum]] betrachtet: Die Quellbäume der zu transformierenden Dokumente und die durch die Transformation entstehenden Zielbäume der zu erzeugenden Dokumente.&lt;br /&gt;
&lt;br /&gt;
Eine Transformation besteht aus einer Reihe von einzelnen Transformationsregeln, die &amp;#039;&amp;#039;Templates&amp;#039;&amp;#039; (deutsch „Schablonen“) heißen. Ein Template besitzt ein auf [[XPath]] basierendes &amp;#039;&amp;#039;Pattern&amp;#039;&amp;#039; (deutsch „Muster“), das beschreibt, für welche Knoten es gilt, und einen Inhalt, der bestimmt, wie das &amp;#039;&amp;#039;Template&amp;#039;&amp;#039; seinen Teil des Zielbaums erzeugt.&lt;br /&gt;
&lt;br /&gt;
In einem XSLT-Dokument kommen also an Sprachen und XML-basierten Technologien mindestens vor:&lt;br /&gt;
* XML als Basis für XSLT&amp;lt;ref&amp;gt;{{Literatur |Autor=Amelie Flatt, Arne Langner, Olof Leps |Titel=Phase III: Generating Artifacts from the Model |Sammelwerk=Model-Driven Development of Akoma Ntoso Application Profiles |Verlag=Springer International Publishing |Ort=Cham |Datum=2022 |ISBN=978-3-031-14131-7 |DOI=10.1007/978-3-031-14132-4_5 |Seiten=31–37 |Online=https://link.springer.com/10.1007/978-3-031-14132-4_5 |Abruf=2023-01-07}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* XSLT selbst (XML-basiert)&lt;br /&gt;
* XPath / XSLT Patterns&lt;br /&gt;
* Die Sprache(n) des Quell-Dokuments (XML-basiert, z.&amp;amp;nbsp;B. [[DocBook]])&lt;br /&gt;
* Die Sprache(n) des Ziel-Dokuments (häufig XML-basiert, z.&amp;amp;nbsp;B. [[Extensible Markup Language|XML]], XSLT selbst, aber auch [[Hypertext Markup Language|HTML]] oder [[RELAX NG]], Text-Format auch möglich)&lt;br /&gt;
* [[Namensraum (XML)|XML Namespaces]] zur Unterscheidung der einzelnen verwendeten Sprachen&lt;br /&gt;
Sowie ab XSLT 2.0:&lt;br /&gt;
* „[[XML Schema|XML-Schema]]“-Datentypen&lt;br /&gt;
* [[Extensible Hypertext Markup Language|XHTML]]&lt;br /&gt;
&lt;br /&gt;
=== Template Rules&amp;#039;&amp;#039; und &amp;#039;&amp;#039;Conflict Resolution ===&lt;br /&gt;
&amp;#039;&amp;#039;Template Rules&amp;#039;&amp;#039; (deutsch „Schablonen-Regeln“) werden immer dann angewendet, wenn eine bestimmte Bedingung passt. Das folgende Beispiel schließt den Inhalt aller Titel („title“-Tags) in „em“-Tags ein, egal wo sie im Dokument vorkommen. Alle anderen Inhalte werden nach anderen oder den Default-Regeln verarbeitet.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xsl:template match=&amp;quot;title&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;em&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:apply-templates/&amp;gt;&lt;br /&gt;
  &amp;lt;/em&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; inline&amp;gt;&amp;lt;xsl:apply-templates/&amp;gt;&amp;lt;/syntaxhighlight&amp;gt; transformiert die Kindelemente des aktuellen Elements mittels sämtlicher dafür anwendbarer Regeln.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Conflict Resolution&amp;#039;&amp;#039; (deutsch „Konfliktauflösung“) wird dann benötigt, wenn ein Knoten zu mehreren &amp;#039;&amp;#039;Template Rules&amp;#039;&amp;#039; gleichzeitig passt. In solchen Fällen gelten die folgenden Regeln.&lt;br /&gt;
* Importierte Regeln haben niedrigere Priorität.&lt;br /&gt;
* Wenn ein Attribut &amp;#039;&amp;#039;priority&amp;#039;&amp;#039; gegeben ist, wird es berücksichtigt.&lt;br /&gt;
* Spezifischere Patterns haben höhere Priorität als weniger spezifische. So ist beispielsweise der Test, ob irgendein Knoten existiert, weniger spezifisch als ein Test für einen Knoten mit konkretem Namen.&lt;br /&gt;
* Wenn es mehrere gleichberechtigte Regeln gibt, ist das ein Fehler, und wird vom XSLT-Prozessor als Meldung ausgegeben.&lt;br /&gt;
&lt;br /&gt;
=== Sortierung und bedingte Ausgabe ===&lt;br /&gt;
Um Elemente zu sortieren, kann ein Tag &amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; inline&amp;gt;for-each&amp;lt;/syntaxhighlight&amp;gt; mit einem &amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; inline&amp;gt;sort&amp;lt;/syntaxhighlight&amp;gt; kombiniert werden. Die Schleife läuft dann nicht in der Reihenfolge der Knoten des Originaldokuments, sondern in alphabetischer oder numerischer Reihenfolge. Im folgenden Beispiel werden alle Buch-Elemente aufsteigend nach ihrem Preis sortiert.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xsl:for-each select=&amp;quot;buch&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:sort select=&amp;quot;preis&amp;quot; order=&amp;quot;ascending&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;!-- weitere Verarbeitung der sortierten Elemente --&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Mit oder ohne &amp;lt;code&amp;gt;order=&amp;quot;ascending&amp;quot;&amp;lt;/code&amp;gt; ist die Reihenfolge immer die gleiche (aufsteigend), da dies die Default-Einstellung ist. Mit &amp;lt;code&amp;gt;order=&amp;quot;descending&amp;quot;&amp;lt;/code&amp;gt; erhält man eine absteigende Reihenfolge.&lt;br /&gt;
&lt;br /&gt;
XSLT bietet sowohl binäre Entscheidungen mittels des Tags &amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt; als auch mehrfache Entscheidungen über das Tag &amp;lt;code&amp;gt;choose&amp;lt;/code&amp;gt;. Das folgende Beispiel gibt genau dann ein Sternchen aus, wenn das Attribut &amp;lt;code&amp;gt;nationality&amp;lt;/code&amp;gt; des Elements &amp;lt;code&amp;gt;author&amp;lt;/code&amp;gt; den Wert „U.S.“ hat.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xsl:if test=&amp;quot;author/@nationality=&amp;#039;U.S.&amp;#039;&amp;quot;&amp;gt;*&amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um mehrere Fallunterscheidungen zu treffen, kann die Kombination aus den Tags &amp;lt;code&amp;gt;choose&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;when&amp;lt;/code&amp;gt; verwendet werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:when test=&amp;quot;...&amp;quot;&amp;gt;...&amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:when test=&amp;quot;...&amp;quot;&amp;gt;...&amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:when test=&amp;quot;...&amp;quot;&amp;gt;...&amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:otherwise&amp;gt;...&amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Text unverändert ausgeben ===&lt;br /&gt;
Um durch XSLT beliebigen Text ausgeben zu lassen, kann das Tag &amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; inline&amp;gt;&amp;lt;xsl:text&amp;gt;&amp;lt;/syntaxhighlight&amp;gt; verwendet werden, wobei das &amp;#039;&amp;#039;Escaping&amp;#039;&amp;#039; (die Ausgabe von „&amp;lt;“ und „&amp;amp;“ als „&amp;amp;amp;lt;“ und „&amp;amp;amp;amp;“) abgeschaltet werden kann. Der Inhalt kann als normaler Text oder in einem [[CDATA]]-Abschnitt stehen. Der Vorteil des CDATA-Abschnitts besteht darin, dass sein Inhalt nicht interpretiert wird, er kann also auch XML-Syntax enthalten.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel erzeugt&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xsl:text disable-output-escaping=&amp;quot;yes&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;![CDATA[ ### Hier darf &amp;lt; &amp;amp; &amp;gt;&amp;gt;&amp;lt; beliebiger Text stehen ### ]]&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
die Ausgabe:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
### Hier darf &amp;lt; &amp;amp; &amp;gt;&amp;gt;&amp;lt; beliebiger Text stehen ###&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Anwendungen ==&lt;br /&gt;
[[Datei:XML languages.svg|mini|&amp;#039;&amp;#039;XML&amp;#039;&amp;#039;-Sprachen und deren Umfang]]&lt;br /&gt;
Zwei wichtige Anwendungsgebiete für XSLT sind:&lt;br /&gt;
* POP (Presentation Oriented Publishing) bezeichnet die Transformation zum Zwecke der Darstellung. Mit unterschiedlichen Stylesheets können die Daten in [[Extensible Hypertext Markup Language|XHTML]], [[Extensible Stylesheet Language – Formatting Objects|Formatting Objects (XSL-FO)]], [[Scalable Vector Graphics|SVG]], [[Synchronized Multimedia Integration Language|SMIL]], [[DocBook]] und viele andere Formate umgewandelt werden. Das Zieldokument muss hierbei nicht zwingend ein XML-Dokument sein. Das ursprüngliche semantische [[Markup]] wird dabei durch ein Stil-bezogenes Markup ersetzt.&lt;br /&gt;
* MOM ([[Message Oriented Middleware]]) bezeichnet die Transformation zum Zwecke des Datenaustausches. Da XML lediglich ein Sprachkonzept zur Entwicklung von Sprachen bildet, genügt es nicht, dass zwei Systeme (z.&amp;amp;nbsp;B. Programme) XML beherrschen, um gegenseitig Daten austauschen zu können. Sie müssen die gleiche XML-basierte Sprache verwenden. In dem häufigen Fall, in dem die Systeme nicht die gleiche XML-basierte Sprache verwenden, wird gerne XSLT eingesetzt, um mit Hilfe von Transformationen Übersetzer von der einen Sprache in die andere zu entwickeln.&lt;br /&gt;
&lt;br /&gt;
Beispiele für POP sind etwa:&lt;br /&gt;
* Statistische Daten liegen als XML vor (z.&amp;amp;nbsp;B. aus der Datenbank) und werden mit Hilfe unterschiedlicher Transformationen aufbereitet als&lt;br /&gt;
** Vektorgrafik in [[Scalable Vector Graphics|SVG]]&lt;br /&gt;
** Text&lt;br /&gt;
** Tabelle in [[Extensible Hypertext Markup Language|XHTML]]&lt;br /&gt;
** [[Portable Document Format|PDF]] (über den Zwischenschritt [[Extensible Stylesheet Language – Formatting Objects|XSL-FO]]) oder auch&lt;br /&gt;
** Excel-Tabelle (durch [[SpreadsheetML]] ab Office XP).&lt;br /&gt;
* Für eine Website werden die XHTML-Dateien oder XML-Dateien zunächst ohne Layout geschrieben und erhalten anschließend das Layout mit Hilfe einer Transformation. Der Vorteil ist dabei ähnlich dem eines klassischen [[Content-Management-System|CMS]]: Um das Layout zu ändern, ist es nicht notwendig, alle XHTML-Seiten zu ändern; stattdessen ändert man das Stylesheet und transformiert neu. Beispielsweise verwendet das XML Publishing System [[Apache Cocoon]] dieses Verfahren. Da moderne [[Webbrowser]] XSLT unterstützen, ist es möglich, die Quell-XML zu publizieren und im letzten Moment mit XSLT auf dem Client-Rechner transformieren zu lassen, sofern alle zu erwartenden Anwender über einen solchen Browser verfügen (z.&amp;amp;nbsp;B. in Firmen-Netzwerken). Andernfalls sollte die Quell-XML schon auf dem Server transformiert und das Ergebnis publiziert werden.&lt;br /&gt;
&lt;br /&gt;
== Alternativen zu XSLT ==&lt;br /&gt;
=== DSSSL ===&lt;br /&gt;
Eine mögliche Alternative zu XSLT ist [[Document Style Semantics and Specification Language|DSSSL]], das man auch als Vorläufer von XSLT betrachten kann. Der wohl größte Vorteil von XSLT gegenüber DSSSL ist seine XML-basierte Syntax. Somit kann jeder [[XML-Editor]] automatisch auch für XSLT eingesetzt werden, außerdem gelten die Syntax-Regeln von XML (Wohlgeformtheit, Gültigkeit) damit auch für XSLT. Dadurch ist es möglich, dass XSLT sich selbst bearbeitet, man kann also Transformationen zur Erzeugung und Bearbeitung von Transformationen entwickeln.&lt;br /&gt;
&lt;br /&gt;
=== MetaMorphosis ===&lt;br /&gt;
MetaMorphosis ist ebenfalls von DSSSL inspiriert. Im Gegensatz zu XSLT ist es ein „target driven“ (zielgesteuerter) Prozessor. Dabei wird der zu erstellende Zielbaum konstruiert. Die Regeln beschreiben nicht, wie die Eingabedatei verarbeitet werden soll, sondern, wie die Ausgabedatei konstruiert werden soll. Der Prozess beginnt mit einer virtuellen Regel „!begin“ mit der der Transformationsprozess beginnt. Die Transformationsregeln beschreiben, wie die Knoten gefüllt werden sollen. Dabei werden Abfragen in die Quellbäume wie auch in die bis dahin aufgebauten Zielbäume formuliert. Die Abfragesprache ist ein mengenorientierter Ausdruck, der alle Eigenschaften der Knoten auslesen und auch setzen kann. Erzeugte Knoten können nachträglich beliebig manipuliert werden.&lt;br /&gt;
&lt;br /&gt;
Weitere Merkmale von MetaMorphosis unterstützen den industriellen Einsatz: flexible Speicherverwaltung für sehr große Dokumente, Aufbau von Hilfsdatenstrukturen (getindex, putindex) zum schnellen Zugriff, Plugin-Architektur, API für [[C++]], [[C-Sharp|C#]], [[Java (Programmiersprache)|Java]], die Möglichkeit dedizierte Frontends und Backend zu implementieren (in C++ wie auch in der MetaMorphosis-Skriptsprache).&lt;br /&gt;
&lt;br /&gt;
=== Template Attribute Language ===&lt;br /&gt;
Im Rahmen des [[Zope (Webanwendungsserver)|Anwendungsservers Zope]] wurde die [[Template Attribute Language]] (TAL) entwickelt; TAL-Templates sind (je nach Ausgabeformat) [X]HTML- oder XML-Dokumente, deren Inhalte durch Attribute dynamisch ersetzt werden können, und die damit Prototyp und verwendetes Template vereinen. Dem Element &amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; inline&amp;gt;&amp;lt;xsl:for-each&amp;gt;&amp;lt;/syntaxhighlight&amp;gt; entspricht etwa das Attribut &amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; inline&amp;gt;tal:repeat&amp;lt;/syntaxhighlight&amp;gt;; als Ausdruckssyntax wird die [[TAL Expression Syntax]] verwendet. Wenn sich kein HTML- oder XML-Element als Träger des Attributs anbietet, können auch &amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; inline&amp;gt;&amp;lt;tal:beliebigerBezeichner&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;-Elemente verwendet werden.&lt;br /&gt;
&lt;br /&gt;
=== Programmiersprachen ===&lt;br /&gt;
Eine grundsätzliche Alternative zu XSLT besteht in der Möglichkeit, solche Transformationen in jeder beliebigen Programmiersprache (z.&amp;amp;nbsp;B. Java, C++ oder [[Perl (Programmiersprache)|Perl]]) abzufassen. XSLT kann dabei jedoch bei Einhaltung bestimmter Voraussetzungen eine gewisse Garantie für wohlgeformte und unter Umständen sogar gültige Zieldokumente gewähren.&lt;br /&gt;
&lt;br /&gt;
Es ist auch möglich, beides zu koppeln:&lt;br /&gt;
Die eigentliche Transformation geschieht dann per XSLT, jedoch werden innerhalb des XSLT-Stylesheets selbstdefinierte Funktionen zur Stringmanipulation aufgerufen. Das (z.&amp;amp;nbsp;B. in [[Ruby (Programmiersprache)|Ruby]] oder [[Python (Programmiersprache)|Python]] geschriebene) Programm besteht dann aus diesen selbstdefinierten Funktionen und dem Aufruf einer XSLT-Funktion, die den Stylesheet und die eigenen Funktionen als Parameter erhält.&lt;br /&gt;
&lt;br /&gt;
== Abgrenzung zu CSS ==&lt;br /&gt;
CSS ist keine Alternative zu XSLT, da es sich bei CSS um eine [[Auszeichnungssprache|Formatierungssprache]] handelt. CSS beschreibt lediglich, wie die Bestandteile eines Baumes (akustisch oder visuell) zu formatieren sind, während XSLT den Baum radikal ändern kann oder als Ergebnis Dokumente liefern kann, die nicht auf XML basieren. So kann man mit XSLT z.&amp;amp;nbsp;B. automatisch Inhaltsverzeichnisse, Indizes, Link-Listen und komplexe Berechnungen erstellen, nicht jedoch mit CSS. Mit XSLT ist es zudem möglich, Ergebnisse zu erzeugen, die CSS als Formatierungssprache verwenden.&lt;br /&gt;
&lt;br /&gt;
== Code-Beispiel ==&lt;br /&gt;
Folgendes XSLT erzeugt ein einfaches Inhaltsverzeichnis für eine XHTML-Seite mit Überschriften:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet&lt;br /&gt;
    version=&amp;quot;1.0&amp;quot;&lt;br /&gt;
    xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;br /&gt;
    xmlns:html=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&lt;br /&gt;
    xmlns=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&lt;br /&gt;
    exclude-result-prefixes=&amp;quot;html&amp;quot;&lt;br /&gt;
&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;xsl:output&lt;br /&gt;
        method=&amp;quot;xml&amp;quot;&lt;br /&gt;
        doctype-system=&amp;quot;http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd&amp;quot;&lt;br /&gt;
        doctype-public=&amp;quot;-//W3C//DTD XHTML 1.1//EN&amp;quot;&lt;br /&gt;
    /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;xsl:template match=&amp;quot;html:body&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:copy&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:apply-templates select=&amp;quot;@*&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;h1&amp;gt;&amp;lt;xsl:apply-templates select=&amp;quot;//html:title//text()&amp;quot; /&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
            &amp;lt;h2 id=&amp;quot;t-o-c&amp;quot;&amp;gt;Inhaltsverzeichnis&amp;lt;/h2&amp;gt;&lt;br /&gt;
            &amp;lt;ul&amp;gt;&lt;br /&gt;
                &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#t-o-c&amp;quot;&amp;gt;Inhaltsverzeichnis&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;.//html:h2&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;li&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:if test=&amp;quot;not(@id)&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:message&amp;gt;Achtung: Kann ohne Id keinen Link erzeugen&amp;lt;/xsl:message&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                        &amp;lt;a href=&amp;quot;#{@id}&amp;quot;&amp;gt;&amp;lt;xsl:apply-templates/&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
                    &amp;lt;/li&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
            &amp;lt;/ul&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:apply-templates/&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:copy&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;xsl:template match=&amp;quot;node()|@*&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:copy&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:apply-templates select=&amp;quot;node()|@*&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:copy&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Siehe auch:&amp;#039;&amp;#039; [[Extensible Markup Language|XML]], [[Extensible Stylesheet Language – Formatting Objects|XSL-FO]], [[XPath]]&lt;br /&gt;
&lt;br /&gt;
== XSLT-Prozessoren ==&lt;br /&gt;
Die meisten gängigen Webbrowser (u.&amp;amp;nbsp;a. [[Mozilla Firefox]], [[Internet Explorer]], [[Google Chrome]], [[Opera (Browser)|Opera]]) unterstützen mittlerweile XSLT. Folgend eine Auflistung von weiteren bekannten XSLT-fähigen Prozessoren und Bibliotheken.&lt;br /&gt;
&lt;br /&gt;
* [[Saxon (Software)|Saxon]] (Java und .NET, nichtvalidierende Variante, eingeschränkt frei, unterstützt XSLT 3.0, XPath 3.0 und [[XQuery]] 1.1)&lt;br /&gt;
* TransforMiiX (C++, frei)&lt;br /&gt;
* [[Xalan]]-Java (Java, frei)&lt;br /&gt;
* [[Xalan]]-C++ (C++, frei)&lt;br /&gt;
* libxslt/xsltproc (C, frei)&lt;br /&gt;
* XT (Java, ursprünglich von James Clark, frei)&lt;br /&gt;
* XSLTengine (Java, multiplattform, nicht frei, viele Erweiterungen)&lt;br /&gt;
* Sablotron (C++, multiplattform, frei)&lt;br /&gt;
* [[MSXML|Microsoft XML Core Services]] (Windows, nicht frei)&lt;br /&gt;
* Unicorn XSLT Processor (Windows, nicht frei, nützliche Zusatzwerkzeuge)&lt;br /&gt;
* WebSphere Application Server Feature Pack for XML (Erweiterung von [[WebSphere#WebSphere Application Server|WebSphere]], nicht frei, unterstützt XSLT 2.0, XPath 2.0 und XQuery 1.0)&lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
* Doug Tidwell: &amp;#039;&amp;#039;XSLT.&amp;#039;&amp;#039; O’Reilly, ISBN 3-89721-292-7 (englisch).&lt;br /&gt;
* Michael Fitzgerald: &amp;#039;&amp;#039;Learning XSLT.&amp;#039;&amp;#039; O’Reilly, ISBN 0-596-00327-7 (englisch).&lt;br /&gt;
* Michael Kay: &amp;#039;&amp;#039;XSLT 2.0 Programmer’s Reference.&amp;#039;&amp;#039; Wrox Press, 2004, ISBN 0-7645-6909-0 (englisch).&lt;br /&gt;
* Steven Holzner: &amp;#039;&amp;#039;Inside XSLT.&amp;#039;&amp;#039; New Riders, 2001, ISBN 0-7357-1136-4 (englisch).&lt;br /&gt;
* E. R. Harold, W. S. Means: &amp;#039;&amp;#039;XML in a Nutshell.&amp;#039;&amp;#039; O’Reilly, ISBN 3-89721-339-7.&lt;br /&gt;
* Frank Bongers: &amp;#039;&amp;#039;XSLT 2.0 Handbuch.&amp;#039;&amp;#039; Galileo Computing, 2005, ISBN 3-89842-361-1.&lt;br /&gt;
* Sal Mangano: &amp;#039;&amp;#039;XSLT Kochbuch.&amp;#039;&amp;#039; O’Reilly 2006, ISBN 3-89721-457-1.&lt;br /&gt;
* Margit Becher: &amp;#039;&amp;#039;XML – DTD, XML-Schema, XPath, XQuery, XSLT, XSL-FO, SAX, DOM.&amp;#039;&amp;#039; W3L-Verlag, 2009, ISBN 978-3-937137-69-8.&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
{{Wikibooks|Websiteentwicklung: XSLT|XSLT}}&lt;br /&gt;
* [http://www.w3.org/TR/1999/REC-xslt-19991116 XSL Transformations (XSLT) Version 1.0 (Normative Version)] (englisch)&lt;br /&gt;
* {{Webarchiv | url=http://xml.klute-thiemann.de/w3c-de/REC-xslt-20020318/ | wayback=20060615131629 | text=XSL Transformations (XSLT) Version 1.0}} (nicht offizielle Übersetzung)&lt;br /&gt;
* [http://www.w3.org/TR/xslt20/ XSL Transformations (XSLT) Version 2.0] (englisch)&lt;br /&gt;
* [http://www.data2type.de/xml-xslt-xslfo/xslt XSLT-Einführung in die Transformationssprache]&lt;br /&gt;
* [http://www.data2type.de/xml-xslt-xslfo/xslt/xslt-referenz Umfangreiche XSLT-Referenz]&lt;br /&gt;
* [http://www.zvon.org/xxl/XSLTutorial/Output_ger/index.html Tutorial zum Thema XSLT]&lt;br /&gt;
* [http://www.saxonica.com/documentation/documentation.xml XSLT und XPATH-Beschreibung] SAXON-Dokumentation&lt;br /&gt;
* [http://wiki.selfhtml.org/wiki/XML/XSL/XSLT/Einf%C3%BChrung &amp;#039;&amp;#039;Einführung in XSLT&amp;#039;&amp;#039;] im [[SELFHTML]]-Wiki&lt;br /&gt;
* [http://www.dpawson.co.uk/xsl/ XSL FAQ] (englisch)&lt;br /&gt;
* [http://msdn.microsoft.com/de-de/library/system.xml.xsl.aspx System.Xml.Xsl-Namespace] im [[Microsoft Developer Network|MSDN]]&lt;br /&gt;
* [http://lenzconsulting.com/how-xslt-works/ Funktionsweise von XSLT] (englisch)&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Normdaten|TYP=s|GND=4613222-3}}&lt;br /&gt;
{{Navigationsleiste W3C-Standards}}&lt;br /&gt;
&lt;br /&gt;
{{SORTIERUNG:Xsl Transformation}}&lt;br /&gt;
[[Kategorie:Templatesprache]]&lt;br /&gt;
[[Kategorie:Funktionale Programmiersprache]]&lt;br /&gt;
[[Kategorie:XML-basierte Sprache]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Siegbert v2</name></author>
	</entry>
</feed>