Seite 1 |
Mit XSL kann jeder Quelltext nach belieben ver?ndert werden. Beispiel und Beispiel erzeugen verschiedene Ausgaben, ausgehend von ein und dem selben Quelldokument.
|
Seite 2 |
Jedes XSL-Template muss mit einem xsl:stylesheet element beginnen. Das Attribute version='1.0' referenziert die Version der
XSL(T) Spezifikation. Dieses Beispiel zeigt das einfachste aller m?glichen Vorlagen. Wenn es keinen Inhalt enth?lt, wird die
Standardverarbeitung benutzt.
|
Seite 3 |
Ein XSL(T)-Prozessor durchl?uft eine XML-Datei und versucht übereinstimmungs-Regeln zu finden. Wenn welche gefunden wurden,
werden die Anweisungen innerhalb der übereinstimmungs-Regeln geprüft.
|
Seite 4 |
Die Inhalte der Ausgangs-Elemente kann in zwei verschiedenen Arten wieder gewonnen werden. Beispiel benutzt das "xsl:value-of"-Konstrukt. In diesem Fall wird der Inhalt der Elemente ohne weitere Verarbeitung benutzt. Die Anweisung
"xsl:apply-templates" in Beispiel ist anders. Der Parser verarbeitet weiterhin alle selektierten Elemente, für die eine Vorlage definiert wurde.
|
Seite 5 |
Ein XSL(T)-Prozessor durchl?uft eine XML-Datei und versucht übereinstimmungs-Regeln zu finden. Wenn welche gefunden wurden,
werden die Anweisungen innerhalb der übereinstimmungs-Regeln geprüft.
|
Seite 6 |
Es ist m?glich Teile eines XML-Dokument durch eine Pfadangabe zu adressieren. Die hierfür ben?tigte Syntax wird in der XPath-Spezifikation
erl?utert. Die einfachen Anwendungsf?lle sehen wie normale Pfadangaben aus. ( Beispiel )
|
Seite 7 |
Die Verarbeitung beginnt immer mit der Suche nach match="/" . Hiermit wird der Wurzelknoten gezogen (Das einzig Element was
direkt unterhalb der Wurzl liegt ist das Document-Element, in unserem Fall die "Quelle"). Viele Stylesheets verwenden das
Element nicht direkt. Wenn es nicht explizit angegeben ist, wird es indirekt verwendet (es beinhaltet als einzige Anweisung). Diese Anweisung bedeutet: verarbeite alle Kind-Elemente, einschlie?lich der Text-Knoten. Vergleichen
Sie Beispiel und Beispiel . Wenn eine Vorlage für den Knoten besteht, wird die Standardverarbeitung ausgelassen. ( Beispiel ).Wenn Sie Nachfahren des Knoten einbinden wollen, müssen sie hierfür die entsprechenden Vorlagen anfordern ( Beispiel ).
|
Seite 8 |
Eine Vorlage kann mehrere Ergbnisse, anhand einer Liste von Pfaden, produzieren. Die verschiedenen Pfade werden mit "|" getrennt
( Beispiel ). Der Platzhalte "*" finde alle M?glichkeiten. Vergleiche Beispiel mit Beispiel .
|
Seite 9 |
"//" wird h?ufig in Pfadangaben verwendet. Wenn es am Anfang eines Pfades steht ist folgendes gemeint: Selektiere alle Knoten
im Dokument des spezifierten Typs. ( Beispiel ). Taucht "//" in der Mitte einer Pfadangabe auf, so bedeutet es: selektiere alle Knoten innerhalb des durch // markierten
Knoten welche den ersten Teil des Pfades enthalten ( Beispiel ).
|
Seite 10 |
Mit dem modes-Attribut kann ein Element mehrmals bearbeitet werden, und dabei bei jeder Verarbeitung ein anderes Ergebniss
liefern. In Beispiel ist eines der modes nicht vorhanden.
|
Seite 11 |
Nicht selten liefern mehrer Vorlagen die selben Elemente in einer XML-Quelle. Es muss also eine Entscheidungsm?glichkeit geschaffen
werden, welche Vorlage in welcher Reihenfolge benutzt werden soll. Das Priority-Attribut spezifiert die Reihenfolge der Bearbeitung.
Wenn das Attribut nicht gesetzt ist, wird die Reihenfolge anhand verschiedener Regeln berechnet. Beispiel und Beispiel unterscheiden Sich durch die Reihenfolge der Vorlagen. Beispiel zeigt die Standard-Reihenfolge, da kein Priority-Attribut gesetzt wurde. Die Vorlage CCC hat eine geringere Priorir?r als
CCC/CCC. Vergleichen Sie Beispiel und Beispiel . Die Vorlage CCC hat eine geringere Priorir?t als CCC/CCC oder AAA/CCC/CCC, aber die beiden letzten haben die gleiche Priorit?t.
In einem solchen Fall kann der XSLT-Prozessor eine Fehlermeldung erzeugen; Wenn keine Fehlermeldung erzeugt wird, muss anhand
der übriggebliebenen Auswahl-Vorlagen festgestellt werden, welches als letztes im Stylesheet vorkommt. In Beispiel hat ein "*" weniger Priorit?t als CCC. Der Bereich bei ausgerechneten Priorit?ten liegt zwischen -0.5 to 0.5. Die W3C-XSLT
Spezifikation gibt hier weitere Details.
|
Seite 15 |
Die Achsen, wie sie in XPath spefiziert werden, spielen in XSLT eine gro?e Rolle. Unter XSLT reference gibt es weitere Informationen. Vergleichen Sie: child axis [=Kinder] ( Beispiel ), descendant axis [=Nachfahren] ( Beispiel ), parent axis [=Eltern] ( Beispiel ), ancestor axis [=Vorfahren] ( Beispiel ), following-sibling axis [=Nachfolge-Geschwister] ( Beispiel ), preceding-sibling axis [=Vorg?nger-Geschwister] ( Beispiel ), following axis [=Nachfolger] ( Beispiel ), preceding axis [=Vorg?nger] ( Beispiel ), attribute axis [=Attribute] ( Beispiel ), namespace axis [=Namensr?ume] ( Beispiel ), self axis [=Aktuelles Element] ( Beispiel ), descendant-or-self axis [=Nachfahre oder aktuelles Element] ( Beispiel ), ancestor-or-self axis [=Vorfahren oder aktuelles Element] ( Beispiel ).
|
Seite 16 |
In diesem Beispiel werden alle XPath-Achsen verwendet.
|
Seite 17 |
Die Kind-Aches muss nicht angegeben werden, weil Sie die Default-Achse ist. Die Attribut-Achse kann mit @ abgekürzt werden.
// ist die Abkürzung für Nachfahre oder Selbst. Der Punkt . ist eine Abkürzung für Selbst und zwei Punkte .. ist die Abkürzung
für das Eltern-Element.
|
Seite 22 |
xsl:element generiert Element in der Reihenfolge der Verarbeitung.
Beispiel benutzt diese Eigenschaft, w?hrend
Beispiel erzeugt den selben Effekt, auf eine etwas kompliziertere Art und Weise.
Beispiel Beispiel
|
Seite 23 |
xsl:attribute erzeugt Attribut-Elemente in der Reihenfolge der Verarbeitung. Es erzeugt Attribute in den Elementen, in denen
sie definiert sind.
|
Seite 24 |
Die Konstruktionen "copy" und "copy-of" dienen dazu Knoten zu kopieren. "copy" kopiert dabei nur das Element, ohne Kinder
und ohne Attribute, w?hrend "copy-of" alles kopiert.
|
Seite 25 |
Das "xsl:copy" Element kann ein "use-attribute-sets"-Attribut besitzen. Auf diese Weise k?nnen bestimmte Attribute für die
Kopie spezifiziert werden. Beispiel arbeitet nicht wie erwartet (Die Zuordnung innerhalb eines "use-attributes-sets" zu einer benamten Funktion), da Ausdrücke
in Attributen, die auf ein benamtes XSLT-Objekt zeigen nicht evaluiert werden.
|
Seite 32 |
Beispiel und Beispiel zeigen verschiedene Wege xsl:variable zu setzen, Beispiel und Beispiel zeigt xsl:param benutzt wird.
|
Seite 33 |
Eine Vorlage kann verschieden Variablen mit dem selben Namen enthalten. Beispiel zeigt ein Weg, wie der Wert einer globalen Variablen ermittelt werden, die den selben Namen besitzt, wie eine lokale Variable.
Das Beispiel zeigt einen inkorrekten Ansatz. Der Wert der lokalen Variablen ist an das xsl:when Element gebunden. Der Rest des Templates
sieht in diesem Fall nur die globale Variable.
|
Seite 34 |
Parameter für ein Template k?nnen mit dem xsl:with-param-Element übergeben werden. Wenn das Template ein xsl:param-Element
mit dem selben Namen wie das Namen-Attribut des xsl:with-param, wird dieser Wert verwendet. Beispiel zeigt ein typisches Beispiel. Soll eine Variable übergeben werden, so ist diese mit dem xsl:param-Element zu definieren.
Das Beispiel Beispiel zeigt einen falschen Ansatz.
|
Seite 35 |
Eine Variable kann einen Teil des Ergebniss-Baum enthalten. Die Operationen welche für einen Teilbaum erlaubt sind eine Teilmenge
derer, die für den gesamten Knoten gilt. Ein Operation auf einen Teilbaum ist nur dann zul?ssig, wenn die Operation auf eine
Zeichenkette angewendet werden k?nnte. Unter Umst?nden muss die Zeichenkette zuerst in eine Zahl oder einen Boolschen-Wert
konvertiert werden. Zum Beispiel ist es nicht m?glich die XPATH-Kürzel /, // oder []-Opertoren auf einen Ergebniss-Baum anzuwenden.
Wenn aber eine erlaubte Operation auf ein Ergebniss-Baum angwendet wird, wird es genauso ausgeführt wie in der vergleichbaren
Knoten-Auswahl. Vergleichen Sie Beispiel mit Beispiel .
|
Seite 36 |
Es gibt einen erheblichen Unterschied in der Definition der Variablen-Werte.
|
Seite 37 |
Die number() Funktion transformiert ihr Argument in eine Number. Beispiel zeigt eine String-Umwandlung, Beispiel konvertiert die Booleschen Werte True bzw. False.
|
Seite 38 |
Addition, Subtraktion und Multiplikation verwenden die bekannte Syntax ( Beispiel ). Division ist etwas ungew?hnlich. Der Slash / wird bereits in Paterns verwendendet. Stattdessen wird das Schlüsselwort div
verwendet ( Beispiel ).Der Operator mod liefert den Rest nach einer Teiler-Division. ( Beispiel )
|
Seite 39 |
Die Funktion sum() summiert alle Zahlen innerhalb der selektierten Knoten. Beispiel summiert alle Zahlen, Beispiel summiert nur die ungeraden Zahlen..
|
Seite 40 |
Die Funktionen ceiling(), flor() und round() transformieren Flie?komma-Zahl und Ganzwert-Zahlen (Integer), jeweils auf unterschiedliche
Art und Weise.
|
Seite 41 |
Die Funktion string() transformiert sein Argument in eine Zeichenkette. Diese Funktion wird in der Regel nicht direkt in einer
Vorlage verwendet, weil sie eh in den meisten F?llen automatisch aufgerufen wird.. Beispiel zeigt eine Konvertierung von Zahlen in eine Zeichenkette. Zu beachten ist hier das Ergebniss des Teilens durch Null.
|
Seite 42 |
Hier wird getestet, ob der Wert eine Zahl ist.
|
Seite 43 |
In Beispiel sind Zeichenketten Argumentte der boolean() Funktion. Eine zeichenkette ist wahr, wenn seine L?nge nicht null ist. In Beispiel wurde der Text in Zahlen umgewandelt und dann an die boolean() Funktion weiter gegeben. Beispiel vergleicht "0" als eine Zeichenkette und als Zahl. Beispiel benutzt eine Knotensamlung als Argument für eine boolean() Funktion.
|
Seite 44 |
Die not() Funktion liefert true zurück, wenn das Argument falsch ist und liefert false wenn das Argeument richtig ist.
|
Seite 45 |
Die Funktionen true() und false() sind recht hilfeich, wenn bestimmte Bedinungen w?hrend der Programmierung getestet werden
müssen.
|
Seite 46 |
die lang() Funktion liefert true oder false abh?ngig davon zurück, ob der Kontext-Knoten wie er mit xml:lang spezifiziert
wurde in der selben Sprache oder einer Sub-Sprache, wie sie im Argument definiert wurde vorliegt. Die Sprache des Kontext-Knoten
wird furch den Wert des xml:lang Attributes festgelegt. Wenn das Atttribut nicht vorliegt dann liefert die Funktion lang()
false zurück. Wenn ein Attribut vorliegt, liefert die Funktion true zurück, wenn das übergebene Argument mit der Attributwert
übereinstimmt. Gro?- / Kleinschreibung wird hierbei ignoriert.
|
Seite 47 |
Die Funktion string() transformiert sein Argument in eine Zeichenkette. Diese Funktion wird in der Regel nicht direkt in einer
Vorlage verwendet, weil sie eh in den meisten F?llen automatisch aufgerufen wird.. Beispiel zeigt eine Konvertierung von Zahlen in eine Zeichenkette. Zu beachten ist hier das Ergebniss des Teilens durch Null.
|
Seite 48 |
Die concat() Funktion zieht alle Argumente zu einem String zusammen.
|
Seite 49 |
Die starts-with() Funktion liefert true wenn das erste Zeichenketten-Argument mit dem zweiten Argument beginnt, andernfalls
liefert sie false. Die contains() Funktion liefert true wenn im ersten Argument das zweite vorkommt, ansonsten liefert sie
false.
|
Seite 50 |
Die Funktionen substring-before() und substring-after() ben?tigen jeweils zwei Argumente. Das erste Argument ist die zu durchsuchende
Zeichenkette. Das zweite ist ein Stopp-Wort. Die Funktion substring-before() liefert alles aus Argument eins zurück, was vor
dem Stopp-Wort liegt, w?hrend substring-after() alles liefert, was hinter in dem Stopp-Wort liegt.
Die Funktion substring() ben?tigt insgesamt drei Argumente. Argument eins: Die zu durchsuchende Zeichenkette. Argument zwei:
Ab welcher Position der Teil-Zeichenkette beginnt. Argument drei gibt an, wieviele Zeichen entnommen werden sollen. Wird das
dritte Argument nicht definiert, erstreckt sich der Teilstring bis zum Ende des in Argument eins übergebenenen Zeichenkette.
Gez?hlt wird ab 1. ( Beispiel ). Beispiel zeigt eine Situation in der einige Argumente au?erhalb des Bereiches liegen oder keine Integrale sind. Die zurückgelieferte
zeichenkette beinhaltet nur die Zeichen deren Position gr??er oder gleich dem zweiten Argument sind -- und w?re ein drittes
Argument spezifiert, nur die Zeichen, deren Position kleiner der Summe der Argumente zwei und drei w?ren.
|
Seite 51 |
Die string-length Funktion liefert die Anzahl der Zeichen innerhalb einer Zeichenkette zurück. Die normalize-space() Funktion
liefert eine Zeichenkette zurück, bei der führenden und folgenden Leerzeichen entfernt werden, und mehrfach-Vorkommnisse eines
Leerzeichen durch genau ein Leerzeichen ersetzt werden.
|
Seite 52 |
Die translate() Funktion ersetzt in der in Argument eins übergebene Zeichenkette das Zeichen aus Argument zwei mit dem zeichen
aus Argument drei. Wenn ein Zeichen mehrfach im zweiten Argument vorkommt, dann beschreibt das erste Vorkomniss das Ersetzungs-Zeichen.
Wenn das dritte Argument l?nger als das zweite Argument ist, werden die überh?ngenden Argumente ignoriert.
|
Seite 58 |
Mit dem xsl:output Element besteht die M?glichkeit zu spezifizieren, wie der Ergbnissbaum ausgegeben wird. Eine XSLT-Engine
sollte sich bei der Ausgabe an das halten, was im xsl:output spezifiziert; auch wenn es keine Verpflichtung dafür gibt. Das
xsl:output Element ist nur als Top-Level-Element erlaubt. Beispiel gibt das Ergbniss als HTML und Beispiel als XML. Interessant ist hier, wie die Leeren Tags unterschiedlich behandelt werden.
|
Seite 59 |
Da es kein dezidiertes xml:output Element gibt, ist Standard-Ausgabe-Methode XML.
( Beispiel ), aber wenn das Document-Element der Ausgabe den Wert HTML besitzt (unabh?ngig von (Gro?- und Kleinschreibung), dann wird
HTML benutzt ( Beispiel ).
|
Seite 60 |
Wird die HTML-Ausgabemethode gew?hlt, sollte kein schliessendes Tag für ein leeres Element erzeugt werden. Weiterhine sollten
Sonderzeichen in Script- und Style-Elemente nicht umgewandelt werden. Schauen Sie sich die Quellen des untersten, mittleren
Fenster an. Vergleichen Sie Beispiel und schlagen Sie in der XSLT-Spezifikation für weitere Details nach.
|
Seite 61 |
Das encoding-Atttribut left die gewünschte Codierung der Ausgabe fest. Bei der HTML-Ausgabe sollte ein META-Tag als erstes
Tag innerhalb des HEAD-Elementes die Codierung festlegen Beispiel codiert die Ausgabe in UTF-8, Beispiel in UTF-16, und Beispiel in Cp1250. Beispiel Schauen Sie sich im mittleren, unteren Fenster ihres Browser die Quelle einmal genau an. Die XML-Quelle besitzt spezielle
Zeichen, welche nicht im angegebenen Zeichensatz enthalten sind, und somit mit Sonderzeichen ersetzt werden, welche im Zeichensatz
definiert sind.
|
Seite 62 |
Die Text output Methode gibt der Ergebniss-Baum aus, in dem die Zeichenketten-Werte jedes einzelnen Knoten in der Reiheinfolge
des Dokumentes ohne weitere Zeichenersetzung verwendet werden. Im Quelltext l?sst sich die Ausgabe genau betrachten.
|
Seite 67 |
Stylesheet-Vorlagen k?nnen ineinander entweder importiert (xsl:import) oder inkludiert (xsl:include) werden. Importieren und
inkludieren ist beinahe das selbe. Beim importieren jedoch, bekomen die Regeln und Definitionen des importierten Stylesheet
eine h?hrere Priorit?t als die des Templates in dem importiert wird. Beispiel und Beispiel sind in das übriggebliebene Stylesheet importiert oder inkludiert worden.
|
Seite 68 |
Beispiel importiert Beispiel , und Beispiel importiert Beispiel .
|
Seite 69 |
Weitere Beispiele zum Thema "xsl:include" und "xsl:import".
|
Seite 70 |
Mit dem xsl:apply-imports Element k?nnen Informationen über das zu importierende Template hinsichtlich des Verhalten, welches
angepasst werden soll, abgerufen werden. Beispiel importiert Beispiel und überschreibt seine Vorlage. Beispiel importiert Beispiel und ?ndert seine Vorlage. xsl-apply-imports funktioniert nur mit Vorlagen die mittels xsl:import eingelesen wurden. Es funktioniert
nicht, falls xsl:include zum Einsatz kam. ( Beispiel ).
|
Seite 71 |
Importierte Reihenfolgen werden vorrangig zu den über die Priority-Attribute definierten Reihenfolge behandelt. Schauehn Sie
Beispiel an.
|