XSL
XSL Transformations
XSL Formatting Objects
Am Anfang XSL, jetzt aufgeteilt in XSL Transformations (XSLT) und XSL Formatting (FO).
wesentlich mächtiger als CSS, z.B. Inhaltsverzeichnisse
DSSSL in XML Syntax
Document Type ist xsl:stylesheet
kann zusammen mit CSS verwendet werden
Formatting Objects (FO) bezeichnen die
elementaren formatierbaren Objekte
bei DSSSL flow objects
XSL-Formatting Spezifikation definiert FO Vokabular
Bearbeitung erzeugt Baum von FO
XSL - Transformations Spezifikation definiert Transformationskonstrukte
xsl:template
wählt Element
aus und beschreibt seine Formatierung
xsl:apply-templates
stößt
Bearbeitung des Inhalts an
em { font-family: roman }XSLT to HTML:
<xsl:template match="em"> <I> <xsl:apply-templates/> </I> </xsl:template>(XSLT to CSS: )
<xsl:template match="em"> <css:chunk font-family="roman"> <xsl:apply-templates/> </css:chunk> </xsl:template>CSS mit XML:
<?xml-stylesheet href="url" type="text/css" media="screen" ... ?>XSLT to LaTeX:
<xsl:template match="em"> <xsl:text>{\em </xsl:text> <xsl:apply-templates/> <xsl:text>}</xsl:text> </xsl:template>
Beispiel eines XML Dokuments
Konversion nach HTML und LaTeX mit Xalan/Xerces
Struktur und Aufbau von XSLT Style Sheets
xsl:import
Einfügen von externen Definitionen (überschreibend)
xsl:include
Einfügen von externen Definitionen (kombinierend)
xsl:id
Definition von eindeutigen Bezeichnern
xsl:strip-space elements="..."
,
xsl:preserve-space elements="..."
Entfernen oder Einfügen von Leerraum im Inhalt
für bestimmter Elemente
xsl:variable
, xsl:param
Definition von Variablen und Parametern
xsl:key
Definition von Schlüsseln
xsl:decimal-format
,
xsl:namespace-alias
Definition von Zahlenformaten und Aliasen
xsl:attribute-set
definiert Liste von Attributen
xsl:output
Definition der Charakteristika der Ausgabe
xsl:template
Definition von Ersetzungsmustern
<xsl:template match="pattern">
Definition eines Erkennungsmusters
alles in (fast) beliebiger Reihenfolge im Top-Level
Aus Knoten (nodes) eines Dokuments werden Ergebnisknoten gebildet.
Knoten sind: Elemente, Attribute, etc.
match
und select
jetzt Spezifikation in XPath mit Erweiterungen durch XSLT eigene Funktionen
Erkennung erfolgt relativ zum aktuellen (current) Knoten
p1 | p2
mehrere Patterns als Alternativen
n1/n2
Kontextangabe, n2 als Subknoten von n1, eine Ebene
/
Root Knoten
n1//n2
Kontextangabe, n2 als Subknoten von n1, beliebig tiefere Ebene
*/p
Wildcard, p als Subknoten irgendwas
.
aktueller (current) Knoten
..
Elternknoten
@attname
selektiert ein bestimmtes Attribut
[ test ]
selektiert Knoten, für die "test" zu trifft
list[@type="ordered"]
selektiert Listen vom Typ "geordnet"
weitere Tests:
first-of-any()
,
last-of-any()
first-of-type()
,
last-of-type()
id(n)
, ancestor()
weitere Funktionen:
document(obj,ns)
,
key(string,obj)
,
format-number(num,string,string?)
,
Beispiel
section/list[@type="ordered" and last-of-type()]
Templates erzeugen Stil-Ausgabe und stossen die Verarbeitung von (Sub-) Knoten an.
Literale, die XSL nicht kennt, werden in den (Ausgabe-) Knoten kopiert
xsl:text
oder unbekannte Literale
erzeugen einen Text-Knoten
xsl:element name=".."
erzeugt einen extra Element-Knoten mit angegebenem Namen
xsl:attribute name=".."
erzeugt einen extra Attribut-Knoten mit angegebenem Namen
xsl:processing-instruction
erzeugt einen Processing-Instruktion-Knoten
<xsl:processing-instruction name="php">echo "Hallo"; </xsl:pi>erzeugt
<?php echo "Hallo"; ?>
xsl:comment
erzeugt einen Kommentar-Knoten
xsl:message terminate="yes"|"no"
erzeugt eine Nachricht und wartet ggf. auf Eingabe vom Anwender
xsl:apply-templates select="pattern"
allgemeiner Aufruf der Template-Verarbeitung
select="pattern"
ist (bei allen Verarbeitungstemplates)
optional, falls vorhanden werden nur Knoten des pattern-Typs
ausgewählt, sonst alle
xsl:for-each select="..."
Verarbeitung für alle (angegebenen) Subknoten
mode="bezeichnung"
wählt nur Templates mit dem gleichen mode-Attribut
xsl:sort order=(ascending|descending)
data-type=(text|number)
lang=language
case-order=(upper-first|lower-first)
Sortiert entsprechend den Kriterien in
xsl:apply-templates
und
xsl:for-each
xsl:number level=(single|multi|any)
count="bezeichner"
from="start-wert"
format="beispiel"
erzeugt Nummern-Knoten entsprechend den Vorgaben
format="beispiel"
erzeugt Nummernknoten entsprechend dem Format-Beispiel
beispiel=(1|A|a|i|I|001)
digit-group-sep=","
n-digits-per-group="3"
Einfügen von Werten in Ausgabetexte mit
{ }
z.B. src="{@attribut}"
oder
src="{$variable}"
xsl:if test="bedingung"
Verarbeitung nur falls die Bedingung wahr ist
xsl:choose
mit
xsl:when test="bedingung"
Verarbeitung wie in "switch" nur falls die Bedingung wahr ist
xsl:copy
Kopiert den aktuellen Knoten
xsl:value-of select="pattern"
berechnet den Wert des angegebenen Musters,
z.B. eines Attributs
xsl:constant name=".." value=".."
definiert (Literal-) Konstanten
Beispiele aus dem Camena Projekt.
Xalan XSLT Prozessor, von der Apache Gruppe.
transform:
#!/bin/sh # echo "CLASSPATH:" $CLASSPATH VALIDPATH="/home/kredel/java/lib/xalan.jar:/home/kredel/java/lib/xalansamples.jar:/home/kredel/java/lib/xerces.jar" export CLASSPATH="$VALIDPATH:$CLASSPATH" # echo "CLASSPATH:" $CLASSPATH if [ $# -eq 2 ] then /usr/lib/jdk1.3/bin/java org.apache.xalan.xslt.Process -DIAG -in $1 -xsl $2 elif [ $# -eq 3 ] then /usr/lib/jdk1.3/bin/java org.apache.xalan.xslt.Process -DIAG -in $1 -xsl $2 -out $3 else /usr/lib/jdk1.3/bin/java org.apache.xalan.xslt.Process $* fi
transform.bat:
set VALIDPATH=u:\xerces\xalan.jar;u:\xerces\xalansamples.jar;u:\xerces\xerces.jar set CLASSPATH=%VALIDPATH%;%CLASSPATH% echo "CLASSPATH:" %CLASSPATH% java org.apache.xalan.xslt.Process -in %1 -xsl %2 -out %3
xalan.xslt.Process Optionen:
> transform Optionen der Klasse Process in Xalan-J-Befehlszeile: -IN inputXMLURL [-XSL XSLTransformationURL] [-OUT outputFileName] [-E (Entity-Referenzen nicht erweitern)] [-QC (Geräuscharme Warnungen bei Musterkonflikten)] [-TT (Vorlagen beim Aufruf verfolgen.)] [-TG (Jedes Erzeugungsereignis verfolgen.)] [-TS (Jedes Auswahlereignis verfolgen.)] [-TTC (Die Vorlagen-Tochterknoten bei Bearbeitung verfolgen.)] [-TCLASS (TraceListener-Klasse für Trace-Erweiterungen.)] [-EDUMP {optionaler Dateiname} (Speicherauszug bei Fehler.)] [-XML (XML-Formatierer verwenden und XML-Header hinzufügen.)] [-TEXT (Einfachen Textformatierer verwenden.)] [-HTML (HTML-Formatierer verwenden.)] [-PARAM Namensausdruck (Stylesheet-Parameter festlegen)] [-L Zeilennummern für Quelldokument verwenden] [-MEDIA mediaType (use media attribute to find stylesheet associated with a document.)] [-FLAVOR flavorName (Explicitly use s2s=SAX or d2d=DOM to do transform.)] [-DIAG (Print overall milliseconds transform took.)] [-URIRESOLVER vollständiger Klassenname (zum Auflösen von URIs zu verwendender URIResolver)] [-ENTITYRESOLVER vollständiger Klassenname (zum Auflösen von Entities zu verwendender EntityResolver)] [-CONTENTHANDLER vollständiger Klassenname (zum Serialisieren der Ausgabe zu verwendender ContentHandler)]
© Universität Mannheim, Rechenzentrum, 1998-2003.
Heinz Kredel Last modified: Wed Jun 11 09:41:55 CEST 2003