XSLT

Aus ProgrammingWiki

Wechseln zu: Navigation, Suche

Loading
Autoren



Inhaltsverzeichnis

Einleitung

XSLT(Extensible Stylesheet Language Transformation) gehört zur Familie der XSL-Sprachen . Es wurde Entwickelt zur Transformation von XML-Quelldokumenten in andere Dokumenttypen wie beispielsweiße XML, HTML oder einfache Textdokumente.

S3makuba Xslt.jpg

Grundlegende Merkmale und Aufbau von XSLT- Dokumenten

XSLT ist eine in XML Definierte Sprache, diese beschreibt die Umwandlung von XML-Dokumenten in ein anderes Dokument. Diese Dokumente können XML-Dokumente sein, jedoch auch anderen Dokumente. Zur Umwandlung werden Stylesheet benötigt. Quelldokument und Ergebnisdokument können von einander abweichen. Bei XSLT kann komplett auf DTD’s und Schemas verzichtet werden, jedoch muss das Quelldokument wohlgeformt sein. Aufgrund der XSLT-Stylesheets können nicht auf HTML-Formate angewandt werden, auf XHTML-Dateien können sie angewandt werden. Eine Übersetzung in XHTML ist daher sinnvoll um XSLT zu nutzen. XSLT nutzt Baumstruktur als Modell von XML-Dokumenten. Ein XSLT-Stylesheet beschreibt demzufolge die Umwandlung einer Baumstruktur des Eingabe-Dokuments in die Baumstruktur eines Ausgabedokuments. Die Baumstruktur des Ausgabedokuments wird festgelegt. Teile des Eingabebaums können durch die Syntax-Ausdrücke von XPath [1], welches XSLT verwendet, in Beziehung gebracht werden. Zu jedem Zeitpunkt der Verarbeitung der Stylesheets beziehen sich die Vorlagen auf den aktuellen Knoten der Knotenliste.

XSLT Prozessoren

Aufbau und Funktionsweise von XSLT Prozessoren

Zur Formatierung eines XML-Dokuments, mittels eines XSL-Stylesheets, wird ein XSLT-Prozessor benötigt. Bei diesem Vorgang werden die Template-Regeln (innerhalb des Stylesheets) auf das Eingabedokument angewendet um so ein neues Ausgabedokument zu erzeugen. Für die Transformation benötigt der XSLT Prozessor sowohl ein XML Dokument als auch ein Stylesheet Dokument welche als Dateien eingelesen werden, aber nicht direkt in dieser Form weiterbearbeitet werden. Erst durch die Umwandlung der Dokumente in Baumrepräsentationen mit hilfe einen XML Parsers ( DOM oder eigener Datenstruktur) ist der XSLT Prozessor in der Lage weiterzuarbeiten. Als Ausgabe wird ein Ergebnisbaum (resulttree) erzeugt . Durch die darauf folgende serialisierung kann das gewünschte Textdokument(XML, HTML, Plaintext, XSL-FO Designstruktur, etc.) erzeugt werden.


400px]



Anwendungsbereiche der XSLT Prozessoren

XSLT Prozessoren haben viele Anwedungsmöglichkeiten, dabei wirde es wohl am häufigsten in Webbrowsern genutzt. Ein Grund dafür ist die starke Verbreitung des Microsoft Internet Explorers welcher einen integrieten XSLT Prozessor besitzt. Aber auch in der Entwicklung eigener Programme werden sehr häufig vorhandene XSLT Prozessoren genutzt. Auf drei dieser Prozessoren ( SAXON , Xalan , MSXML ) soll hier genauer eingegangen werden.


Xalan


Bei dem XSLT-Prozessor von Xalan handelt es sich um einen Open Source-Prozessor der im Rahmen des Apache XML Projektes3 entstanden ist. Dieser implimentiert sowohl die XPath 1.0 als auch die XSLT 1.0 Spezifikation des W3C vollständig. Da jedoch die dritte Spezifikation ( XSL Formatting Objects) nicht enthalten ist , muss in diesen fällen auf andere Prozessoren zurückgegriffen werden. Xalan wird unterschieden zwischen den Versionen Java- (Xalan-J) und C++- (Xalan-C++)und nutzt für diese Versionen den XML Parser Xerces4.

Seit der Xalan Version 2.5 gibt es zwei Möglichkeiten der Verwendung des Prozessors. Zum einen kann er als normaler interpretierender XSLT Prozessor (Xalan Interpretive Processor) genutzt werden. Bei der zweiten Variante arbeitet der XSLT-Prozessor mit vorkompilierten Stylesheet (Xalan Compiled Processor) . Bei beiden Varianten wird mit einer internen Baumrepräsentation gearbeitet, dem DTM ( Document Table Model ). Das DTM untescheidet sich vom DOM in der Hinsicht , dass es ein read-only Model ist. Daraus kann man schließen das im Gegensatz des DOM Modells keine neuen Knoten erzeugt werden und keine Daten in das Modell geschrieben werden können.

Eine Besonderheit der neuen Versionen von Xalan besteht im Xalan Compiled Processor XSLTC. Dieser besitzt die Möglichkeit XSL Stylesheet Dokumente in Java Bytecode zu kompilieren (Translets). Dadurch kann man einmal verarbeitete Stylesheets mehrfach auf XML Dokumente anwenden. Besonders wirkungsvoll kann dieses System werden wenn man es bei vielen XML Dokumenten einsetzt.





SAXON


Der XSLT Prozessor von SAXON wurde von Michael Kay entwickelt und enthält alle wichtigen Komponenten eines Prozessors. Zusätzlich wurde noch eine Java-Bibliothek eingebaut , die es erlaubt Funktionen von XSLT in Java-Applikationen zu verwenden. Die neuste version von Saxon ist 7.5 welche einen Großteil der XSLT 2.0 und XPath 2.0 beinhaltet sich jedoch noch in der Entwicklungsphase befindet, und so einige Mengel aufzeigt. Aus diesen Grund ist es empfehlenswert mit der Version 6.5.2 zu arbeiten. Bei dieser wird XSLT 1.0 und XPath 1.0 unterstützt. SAXON enthät viele zusätzliche XSLT Erweiterungen, sogenannte elements bzw. extension functions.Diese Erweiterungen umfassen unter anderen einige EXSLT Bibliotheken , aber auch aufwendigere Funktionen , welche man nur bei Saxon finden kann.


Aufbau des XSLT Prozessors von SAXON :

600px]

Bestandteile und Funktionsweise:

Tree Constructor:

Der Tree Constructor ist dafür zuständig, aus einem XML Eingabedokument im Arbeitsspeicher eine Baumrepräsentation für die weitere Verwendung im XSLT Prozessor aufzubauen ( Bei SAXON hat der Constructor sowohl die Aufgabe eine Baumrepräsentation für das Quell Dokument als auch für das Stylesheet Dokument zu erzeugen).


Tree Navigator:

Der Tree Navigator dient dazu, in dem durch den vom Tree Builder erzeugten Baum, auf bestimmte Knoten zugreifen zu können.


Stylesheet Compiler:

Als Eingabe bekommt dieser Compiler den den vom Tree Constructor erzeugten Stylesheet-Baum. Diesen Compilert er zu einem Entscheidungsbaum (decision tree)welcher dem Interpreter als Eingabe dienen soll. Bei dieser Umwandlung des Baumes wurden sämtliche XPath Ausdrücke vollständig valiidiert und geparst und Querverweise aufgelöst (somit kann Interpreter schneller arbeiten).


Stylesheet Interpreter:

Der Kern des SAXON Prozessors liegt im Interpretert. Dieser nimmt den XML Quellbaum und den vom Compiler erstellten Entscheidungsbaum für die Eingabe. Als Ausgabe wird ein Ergebnisbaum (result tree) geliefert.


Outputter:

Der Outputter ist die letzte Komponente im SAXON Prozessablauf und ist für die Kontrolle des Ausgabeprozesses des result trees zuständig. Die Ausgabe des Outputter erfolgt mittels eines Serialisierers in eine Datei. Dieser Serialisierer existiert für die Formate XML, HTML und Klartext, genauso wie es in der XSLT Empfehlung vom W3C definiert ist. SAXON erlaubt ebenfalls, den result tree an eigenen Programmcode zur weiteren Verarbeitung weiterzuleiten.



MSXML

Einen weiteren XSLT Prozessor findet man in dem SDK (Software Development Kit) MSXML. Diese Abkürzung steht für Microsoft XML Core Services . Dieser Prozessor wurde von Microsoft für die verarbeitung von XML Dokumenten programmiert. Vor der Version 4.0 war MSXML nur ein einfacher Parser , was Microsoft nach langer zeit zu einer SDK änderte. Die Aktuelle Version enthält alle Standards des W3C ( volle Kompatibilität zu XPath 1.0 und XSLT 1.0) , jedoch ist eine Kompatibilität zu XSLT 2.0 nicht vorgesehen.


Funktionsweise MSXML


1.Einlesen der Quell- und Stylesheet Dokumente

2.Umwandlung der Dokumente in DOM (Document Object Model) Repräsentationen

2.1.Einlesen des XML Dokumentes vom MSXML Parser

2.2.Weitergabe an MS DOM Builder und Überprüfung auf Gültigkeit und Wohlgeformtheit

2.3.Entfernung von unnötigen Leerzeichen und Aufbau des DOM Baumes im Speicher

3.Transformation durch XSLT Prozessor zu entgültigen Ergebnisbaum (result tree)


500px]


Transformationsprozess

Ein XSLT-Prozessor bekommt die Aufgabe einen speziellen Stylesheet auf ein XML-Dokument anzuwenden. Der XSLT-Prozessor parst und liest beide Dokumente und legt im Speicher, für jedes Dokument, eine interne Baumstruktur an. Jetzt kann der Transformationsprozess beginnen. Die Stylesheets werden abgearbeitet. Die Stylesheets greifen auf die Quelldaten zu, der Umfang wie viel genutzt wird, beschreiben die Template Regeln. Diese verwendeten Quelldaten und die entwickelten Ergebniselemente liefern die Daten für den Ergebnisbaum. Durch Serialisierung wird aus dem Ergebnisbaum das Ergebnisdokument erzeugt, welche das Stylesheet anfordert z.B.: XML, XHTML, … .


Gino XSLT Trans.JPG


Bei dem Beginn der Transformation bearbeitet der XSLT-Prozessor immer die Template-Regeln des Wurzelknotens des XML-Baums. Die Reihenfolge in der die Template-Regeln in die Stylesheets eingetragen sind spielt keine Rolle. Der Prozessor sucht sich immer die Template-Regel raus, welche genau für den Wurzelknoten definiert worden ist oder sich dafür verwenden lässt. Ist in einer Template-Regel eine Anweisung, welche nicht genauer spezifiziert werden kann und den maßgeblichen Kontext für diese Anwendung gibt, gefunden so wird es eine Aufforderung für den XSLT-Prozessor. Es werden alle Kindknoten des aktuellen Knotens ausgewählt. In diesen Kindknoten wird nach genau dieser Template-Regel gesucht oder eine die darauf passt um diese Regel anzuwenden. Besitzt der Kindknoten keine Template-Regel verwendet der XSLT-Prozessor, zumindest im Notfall, eine eingebaute Regel. Die Notfall-Regel trifft nicht nur im Wurzelknoten zu sondern in allen Elementknoten. Diese Regel ruft die Anweisung einfach noch einmal auf.


<xsl:apply – templates/>


Wird diese Notfall-Regel genutzt hat sich die zweite Anweisung gegenüber der ersten geändert und ist somit zum Kind des Wurzelknoten geworden. Jetzt findet der XSLT-Prozessor mehrere Kinder. Der Prozessor baut nun eine entsprechende Knotenliste. Diese wird abgearbeitet und jetzt findet er auch spezielle Templates die Auf die einzelnen Knoten nacheinander angewendet werden können.


<schauspieler>
    <vorname>Jessica</vorname>
    <name>Alba</name>
 </schauspieler>



Bei Template-Konflikten gibt es bestimmte Prioritätslisten.


Suchmuster mit Wildcards wie zum Beispiel * sind allgemeiner als Suchmuster ohne Wildcards.


Spezifische Information haben im allgemeinen Vorrang.


match=“/Besetzung/Schauspieler/Vorname“


Ist spezifischer als


match=“//Vorname“


Wenn diese Prioritäten nicht anwendbar sind, dann spielt die Reihenfolge der Template-Regeln im Stylesheet eine Rolle. Dann hat die zuletzt stehende Regel den Vorrang. Man kann jedoch mit


priority 1


die Priorität einer Regel verändern. Je höher die Zahl desto höher die Priorität. Es können ganze oder reelle Zahlen gewählt werden.


priority -1.2


Der Standardwert ist die 0.

priority 0


Hat der Prozessor die Prüfung in dem ganzen Dokument abgeschlossen so ist auch der Knotenbaum des Quelldokuments durchlaufen.

Stylesheets und Template-Regeln

XSLT Stylesheets

Definition von XSLT Stylesheets


Ein XSLT Stylesheet ist ein XML Dokument und besitzt auch diese Deklaration. es muss ausserdem immer Wohlgeformt sein. Das Wurzel Element kann entweder "xsl:stylesheet" oder " xsl:transform " sein. Da alle XSLT Dokumente im Namensraum http://www.w3.org/XSL/Transform liegen ,werden sie an den Präfix "xsl:" gebunden.



Beispiel für XSLT Stylesheets


Als Quelldokument wird das Beispiel "filmliste.xml" genommen.



Ein einfaches XSLT Stylesheet zur Transformation in eine HTML Datei könnte in etwa so aussehen:




Aufbau eines XSLT Stylesheets


Wie jedes XML Dokument, beginnt auch das Stylesheet mit der Umlautdeklaration und der genutzten XML Version.

<?xml version="1.0" encoding="ISO-8859-1"?>



Danach wird das <xsl:stylesheet> Element eingefügt oder auch für seltene Fälle das Synonym <xsl:transform>. Hierbei ist wichtig zu sagen , das <xsl:transform> genutzt wird um Dokumente die nur Daten enthalten umzuwandeln und nicht zur Formatierung ausgelegt ist. Bei jedem XSLT Stylesheet muss zusätzlich der Namensraum angegeben werden.

<xsl:stylesheet version="1.0" xmls:xsl="http ://www.w3.org/1999/XSL/Transform">



Um die Transformation durchführen zu können , muss man eine Verbindung vom Quelldokument zum Stylesheet Dokument einbauen.

<?xml-stylesheet type="text/xsl" href="(stylesheetname).xslt">



Innerhalb dieses Gerüstes stehen die Kindelemente (Top-Level-Elemente) :



Befehl erweitert die Funktionalitäten des importierenden Stylesheets. Bei Konflikten zwischen Regeln des importierenden Stylesheets und des importierten Stylesheets so werden die importierten Stylesheets nachrangig behandelt.

<xsl:import/>


Befehl ladet XSL Befehle des aufgerufenen Stylesheets von einem Remote-Host direkt in den Code.

<xsl:include/>


Befehl gibt die Möglichkeit, Namensraum Pseudonyme zu verwenden.

<xsl:namespace-alias/>


Befehl lässt alle (Attribut elements) des Befehls xsl:strip-space aufgeführten Elemente einer XML-Instanz im Output ihren Leerraum verlieren.

<xsl:strip-space/>


Befehl lässt alle (Attribut elements) des Befehls xsl:strip-space aufgeführten Elemente einer XML-Instanz im Output ihren Leerraum behalten.

<xsl:preserve-space/>


Befehl xsl:output gibt für den Ergebnisbaum den Dokumenttyp vor, gängige Parameter sind text, xml oder html. Diese werden im Attribut method gesetzt, Standard ist bei XML als encoding UTF-8.

<xsl:output/>


Befehl bezeichnet ein bestimmtes Suchmuster, welches auf ein Element und den Wertebereich eines bestimmten Attributes zutrifft.

<xsl:key/>


Befehl gibt das Zahlenformat im Ergebnisdokument an.

<xsl:decimal-format/>

Befehl fasst mehrere Attribute zu einem Set zusammen. Der Name des attribute-set muss ein gültiger XML Name sein.

<xsl:attribute-set/>


Befehl xsl:variable definiert eine Variable innerhalb eines Templates oder als direktes Kindelement von xsl:stylesheet kann es auch globale Variablen definieren. xsl:variable erzwingt das Attribut name, zusätzlich kann auch ein select Attribut genutzt werden

<xsl:variable/>


Befehl xsl:with-param wird innerhalb von xsl:call-template oder xsl:apply-templates Anweisungsblöcken verwendet. Dabei referenziert der im name Attribut gesetzte Parameter (der ein gültiger XML Name sein muß) auf den entsprechenden Parameter innerhalb des aufgerufenen Templates, der mit xsl:param gesetzt wurde.

<xsl:param/>


Befehl xsl:template mit dem erzwungenen Attribut match beschreibt mit dem Wert des Attributes match jenen Knoten, auf den ein Suchmuster definiert werden soll. XSLT-Befehle dürfen in der Befehlshierarchie nur unterhalb dieses Befehls eingesetzt werden.

<xsl:template/>


Template-Regeln

Template-Regeln sind Schablonen zur Transformation des Quellbaums (source tree) in den Ergebnisbaum (result tree). Sie setzen sich aus den zwei Bestandteilen, Pattern (Suchmuster) und Template (Ersetzungsmuster)zusammen. Pattern sind dafür verantwortlich ,die gesuchten stellen welche verändert werden sollen, im Quell-Dokument zu finden. Templates bestehen aus einer oder mehrerer Anweisungen die auf die gesuchten Stellen angewendet werden sollen.

S3makuba Template.jpg



In Template-Regeln können zwei unterschiedliche Dinge vorkommen. Zum einen sind das XSLT-Anweisungen welche den selben Namensraumpräfix wie das Elternelement besitzen (Bsp. <xsl:apply-templates> und zum anderen sind es Tags die nicht im Namensraum des Template-Element liegen (Bsp. html,head, usw). Der Unterschied besteht in der verarbeitung der einzellen Elemente. XSLT-Anweisungen geben dem XSLT Prozessor eine beschreibung wie die Dokumente verändert werden sollen im Ergebnis-Dokument. Die nicht im Namensraum vorkommenden Elemente ( Literale Ergebniselemente) werden vom Prozessor übersehen und unverändert in das Ergebnis-Dokument weitergegeben.


Alle die von select bestimmten Knotenmengen werden mit den passenden Template-Regeln bearbeitet

<xsl:apply-templates>



Template-Regeln werden mit Namen aufgerufen

<xsl:call-templates>


Zeigt XML-Attribute des aktuellen Elements

<xsl:attribute>


Ist die Bedingung der when-Kausel erfühlt wird das Template genutzt, anderenfalls wird das Template der otherwise-Klausel genutzt.

<xsl:choose>


Ist eine Wahlmöglichkeit des choose-Elements

<xsl:when>


Dadurch kann ein Template mit Text kommentiert werden

<xsl:comment>


 <xsl:comment>
 <!-- Dies ist mein Kommentar -->
 </xsl:comment>

Es kann ein Stylesheet stoppen und eine Nachricht wiedergeben

<xsl:message>


Liefert einen Text wobei sich auch die Entitäten kontrollieren lassen

<xsl:text>


Wurzelelement eines Stylesheets

<xsl:stylesheet>


Auch die schon oben (in Stylesheets,Template-Regeln und Konfliktlösung) erwähnten Template-Regeln gehören in diese Kategorie.

Programmierung mit XSLT

Neben dem einfügen von Code in bestimmten Vorlagen (templates), gibt es die Möglichkeit , Dokumente dynamischer zu generieren. Dies soll durch das definieren von Programmabläufen geschehen. In den nächsten Unterkapiteln soll dies genauer behandelt werden.





Kopieren von Daten

Mithilfe des xsl:copy-Elements ist es Möglich Daten aus dem Quelldokument in das Ergebniselement zu Kopieren. Diese Elemente werden innerhalb des Templates verwendet und Kopiert den aktuellen Knoten in das Ergebnisdokument. Dabei kann ein Namespace übernommen werden, jedoch keine Attribute oder Unterelemente.


Beispiel:


Eine Erweiterung dieses Kopiervorgangs wird mit der Anweisung <copy-of> ausgeführt. Dabei können ganze mit select definierte Knoten in das Ergebnisdokument kopiert werden.


Beispiel:


Nummerierungen

Durch XSLT können alle Daten aus den Quelldokument nachträglich Nummeriert werden. dabei gibt es eine Auswahl an Formaten die durch die Anweisung <xsl:number> ausgeführt werden können.


Attributenliste zur Nummerierung:


  • level

Zeigt an auf wie viele Zweige des Quell-Baumes die Aufzählung angewendet werden soll. Dabei gibt es die Möglichkeiten auf einen Zweig (single), auf mehrere Zweige ( multiple), oder auf alle Zweige (any) des Quell-baumes.


  • count

Erhöht den Zahlwert bei jeden auftreten eines vordefinierten Patters, in dein meisten Fällen der Pattern des Tampletes.


  • from

Beginnt beim auftreten eines vordefinierten Patters an zu zählen.


  • value

Ist eine Funktion oder auch Xpath Ausdruck der es erlaubt den Zählerstand zu berechnen.


  • format

String der das Format der Ausgabe beschreibt (1, a, A, i, I). Alle anderen Zeichen werden als Zusatz angesehen.


  • lang

Hat die Aufgabe die Sprache zu beschreiben , aus dessen Alphabet die genutzten Zeichen genommen werden.


  • letter-value

Gibt an ob Alphabetische (alphabetic) oder die traditionelle (traditional) Zählweise für das Quelldokument genutzt wird.


  • grouping-seperator

Gibt Trennzeichen für Gruppierungen an . Ein Beispiel dafür kann die Zahl 300000000 sein ( mit Trennzeichen 300.000.000).


  • grouping-size

Gibt die größe der Gruppierungen an.


Beispiel:


Verzweigung

Durch die Ausdrücke <xsl:if> , <xsl:choose> und <xsl:when> können Operationsablauf zusätzlich bestimmt werden.


Bedingte Transformation:

Die Anweisung <xsl:if> wird verwendet um die Ausführung eine Templates an eine Bestimmte Bedingung zu knüpfen. Wird diese Bedingung nicht eingehalten gibt es keine Transformation in das Ergebnisdokument.Mithilfe des Ausdruckes test wird die Bedingung formuliert. Der genutzte Ausdruck muss einen logischen Wert liefern.

Beispiel:

true


false


Auswahlmöglichkeiten


In vielen Fällen ist die <xsl:if> Anweisung zu unvollständig da sie den Transformationsvorgang nicht zulässt. Mit den Anweisungen <xsl:choose> und <xsl:when> ist es Möglich für den XSLT Prozessor mehrere Auswahlmöglichkeiten zu treffen. Das Gerüst für diese Auswahl wird durch die Anweisung <xsl:choose/> umschlossen. Innerhalb dieses Gerüstes wird mittels der <xsl:when> Anweisungen mehrere Bedingungen, durch das test-Element , für die durchführung der Transformation getroffen. Wird die erste Bedingung erfüllt , so wird der Inhalt des Elements in das Ergebnisdokument übernommen. Wird die Bedingung nicht erfüllt , schreitet der Parser zur nächsten <xsl:when> Anweisung und überprüft ob diese Bedingung erfüllt ist. Sollte keine der Bedingungen erfüllt wird, wird das Dokument nicht Transformiert.


Beispiel:



Wiederholung

In bestimmten Fällen ist es notwendig Knoten und Abläufe in einen Template nach einer bestimmten Reihenfolge durchlaufen zu lassen . In solchen Situationen nutzt man die <xsl:for-each> Anweisung. Sie erhält als Wert des select-Attributes einen Patter. Wird nun das <xsl:for-each> Element aufgerufen ,so wird der enthaltene Inhalt so oft in das Ergebnisdokument geschrieben wie der Patter im für das Template definierten Element auftritt.


Beispiel:


Sortieren

Besonders bei langen unübersichtlichen Listen ist es wichtig eine Reihenfolge zu definieren. Mithilfe von XSLT kann eine Reihenfolge der Daten definiert werden. Durch das Element <xsl:sort> wird dem Dokument angegeben das es vor der Transformation in das Ergebnisdokument , sortiert werden muss.Durch die Elemente Attribute select, data-type, lang, order und case-order kann die Sortierung näher bestimmt werden.


Elementliste:

  • select

Besitzt ein Pattern dessen Aufgabe darin liegt zu beschreiben welche Knoten sortiert werden sollen.


  • lang

Besitzt eine Sprachdefinition (de,en,pl,...)die zur Sortierung der Dateien verwendet werden sollen.


  • data-type

Hat die Aufgabe dem XSLT Prozessor zu beschreiben , ob es wie Strings(text),Zahlen(number, oder andere Datentypen sortiert werden soll.


  • order

Hat die Aufgabe dem XSLT Prozessor zu beschreiben , ob Dateien aufsteigend (acsending) oder absteigend (descending) sortiert werden sollen.


  • case-order

Hat die Aufgabe dem XSLT Prozessor zu beschreiben, ob bei data-type="text" nach kleinen oder großen Buchstaben sortiert werden soll.


Beispiel:


Parameter und Variablen

In Dokumenten bei den ein Text immer wieder Auftritt oder eine Schwierigkeit(Bsp.: abc="def=""") auftritt ist es möglich Parameter und Variablen Elemente zu definieren. Diese werden mit Hilfe der Elemente <xsl:variable> und <xsl:param> definiert. Beide Können etwa gleich erstellt werden. Als Wert des name-Attributes wird der Variablenname definierte und innerhalb des Elements der Wert. Dieser Wert kann aus fast allen Dingen bestehen (Bsp.: Text, Markup, usw.).


Parameter:


Beim Aufrufen des (xsl:param)-Elementes kann der Parameter als Standartwert verwendet werden. m die Werte nun wiederum abzurufen, wird das xsl:value-of (bzw. { und }) benutzt und diesem ein Dollar-Zeichen ($) sowie der Variablenname übergeben. Bei der Verwendung eines Parameter-Wertes innerhalb eines Templates zu nutzen muss dieser an das jeweilige Template übergeben werden. Dies geschieht durch den Ausdruck <xsl:with-param> der als Attribut den Namen enthält. Beispiel: <xsl:param name="Wert"/> Aufruf mit $Wert



Variablen:

Eine Variable besteht nur innerhalb eines Templates oder StyleSheets. Wird innerhalb eines untergeordneten Templates ein neuer Wert für die Variable definiert, so überschreibt dies nicht die eigentliche Variable. Ist der Bereich des neuen Wertes zuende, tritt der vorherige wieder in Kraft.


Beispiel:

<xsl:variable name="wert">@Name="Max Mustermann"</xsl:variable>
<xsl:value-of select="Adressbuch/Kunde[$wert]"/>

Dokumenttransformation in XML, HTML und XHTML

Da das Web von HTML dominiert wird, ist die Umwandlung von XML in HTML zu den vorrangigen Aufgaben von XSLT geworden. Dabei gibt es zwei Varianten. Die Umwandlung auf dem Server mit Java-Servlets wie Coccon oder die Umwandlung auf dem Client.


Gino XSLT.JPG


Für die Übersetzung auf dem Client ist ein Browser nötig. Die aktuellen Browserversionen können die Übersetzungen im Regelfall.


Gino HTML.JPG


Nimmt man die

<xsl:output methode=“html“ 

so erzeugt das Stylesheet die nötigen Elemente für eine HTML-Seite und fügt sie in die erste Template-Regel ein.



Eine andere wichtige XML-Anwendung ist XHTML. XHTML entstand durch die Umformulierung von HTML 4. Eigentlich sollte es die Brücke von HTML zu XML schlagen. XHTML 1.0 gibt es in 3 Varianten mit dazu hörigen DTD’s.


XHTML-Strict: Ist für die Darstellung von Inhalten und Daten im Browser. Benötigt daher Stylesheets.

XHTML-Transitional: Ist für ältere Browser gedacht und enthält noch keine Stylesheets, wobei es zum Bespiel <front> gab.

XHTML-Frameset: Ist eine Erweiterung von XHTML-Strict bei der Frames unterstützt werden, <body> wird durch <frameset> ersetzt.


XHTML wurde 2001 modualisiert. Gründe dafür sind die Zerlegung und Kombination von mehreren Bausteinen, da Webinhalte inzwischen auf vielen verschieden Plattform wiedergegeben werden soll. So können Browser für Handys zu Recht geschnitten Inhalte wiedergeben aber auch TV-Geräte die Internetzugriff besitzen werden unterstützt. Zuerst wurde dieses nur durch XHTML 1.0 Strict ermöglicht, welche -Elemente zuließ. <ruby> erstellt eine Verknüpfung zwischen Basistext und einem Kürzel für diesen Basistext.


 <ruby>
 <rb> mfp </rb>
 <rt> My First Program </rt>
 </ruby>
 



Seit 2008 gibt es XHTML Basic 1.1, welche einen eingeschränkten Satz von XHTML-Features enthält die PDA’s, Pager und Handys unterstützt.


Eins der wichtigsten Merkmale von XHTML ist der Unterschied zu HTML. XHTML-Dokumente sind immer gültige XML-Dokumente und können mit Werkzeugen, mit denen man XML-Dokumente bearbeitet, verwenden. Außerdem stehen Regeln von XHTML und HTML zur Verfügung.


XHTML-Dokument mit DTD’s

<?xml version=“1.0“ encoding=“utf-8“?>
<!DOCTYPE html PUBLIC „-//W3C//DTD XHTML 1.0 Transitional//EN“
http://www.w3.org/TR/xhtml/DTD/xhtml - transitional.dtd>
<html xmlns=http://www.w3.org/1999/xhtml>
 <head>
 <sub>huhu</sub>
 </head>
 <body>
 <i> Guten Tag </i>
 <body>
 </html>


Ein XML-Dokument erkennt man schon am Anfang. Da eine XML-Deklaration vorhanden ist, diese kann bei der Verwendung von utf-8 oder utf-16 jedoch weggelassen werden. Nur bei der Verwendung von ISO-8859-1 muss die Deklaration verwendet werden.


Nun muss der DOCTYPE folgen. Dieser ermöglicht einem Dokument DTD’s zugeordnet zu bekommen. Es müssen keine öffentlichen DTD’s sein wie die W3C’s, es können auf lokale DTD’s genutzt werden, welche auf dem Webserver liegen. Dies kann das laden der Seite beschleunigen. Das Obererste Element ist immer <html>. In diesem muss für XHTML der Namensraum unter http://www.w3.org/1999/xhtml über das xmlns-Attribut angegeben sein.



<?xml version=“1.0“ encoding=“utf-8“?>
<!DOCTYPE html PUBLIC „-//W3C//DTD XHTML 1.0 Transitional//EN“
http://www.w3.org/TR/xhtml/DTD/xhtml - transitional.dtd>



Wichtige Merkmale im Vergleich zu HTML


-Style sowie Script-Elemente sollten in CDATA-Blöcken geschrieben sein

-name-Attribute werden durch id-Attribute ersetzt

-XHTML-Dokumente müssen wohlgeformt sein d.h. richtig verschachtelt und keine Überlappung

-Tags müssen Anfangstag und Endtage besitzen, Kurzform wie </p> sind erlaubt

-Tag und Attributnamen klein geschrieben (Ausnahme:DOCTYPE)

-einige Elemente besitzen eine Inhaltsbeschränkung


 <a> darf kein <a> enthalten
 <form> darf kein <form> enthalten
 <label> darf kein <label> enthalten
 <pre> darf kein <img>, <object>, <big>, <small>, <sub> oder <sup> enhalten


Es gibt auch eine Automatische Übersetzung von HTML zu XHTML. Wärend bei einer Übersetzung mit HTML die Endtags weggelassen werden können


<dt>
 <li>Dies
 <li>ist
 <li>ein
 <li>Beispiel
 </dt>


wird bei der Übersetzung mit XSLT zu XHTML alle Endtags mit gesetzt


<dt>
 <li>Dies</li>
 <li>ist</li>
 <li>ein</li>
 <li>Beispiel</li>
 </dt>

Quellenangabe

http://www.teialehrbuch.de/Kostenlose-Kurse/XML-XSL/33818-Eigenschaften-von-XSLT.html


http://www.xml-web.de/pic/xml2xml.jpg


Helmut Vonhoegen: Einstieg in XML, Galileo Computing, 2010

==Quellenangabe==

Persönliche Werkzeuge