- 1 Intro
- 2 Anwendungsgebiete
- 2.1 XSLT - die Programmiersprache im XML Bereich
- 2.2 Aktuelle und vergangene Anwendungen
- 2.3 Professionelle XML Verarbeitung
- 2.4 Technische Dokumentation
- 3 Wichtige Konzepte
- 3.1 Push vs. Pull Stylesheets
- 3.2 Eindeutigkeit der Regelbasis
- 3.3 Namespaces
- 3.4 Schemata
- 3.5 Standards
- 3.5.1 DITA
- 3.5.2 DITA Inhaltsmodell
- 3.5.1 DITA
- 4 Ausgewählte Themen
- 4.1 Transformationen mit XSLT
- 4.1.1 Vortransformationen
- 4.1.2 Komplexe XML-2-XML Transformationen
- 4.1.2.8 Vererbung
- 4.1.2.8 Vererbung
- 4.1.3 XSLT Streaming
- 4.1.3.1 XSLT Akkumulator
- 4.1.3.2 XSLT Iterator
- 4.1.4 Reguläre Ausdrücke
- 4.1.5 Modus vs. Tunnel Lösung
- 4.1.6 Identifikation mit
generate-id()
- 4.1.6.4 XPath-Achsenbereich selektieren
- 4.1.6.4.1 Funktionen und Module
- 4.1.6.4.1 Funktionen und Module
- 4.1.6.4 XPath-Achsenbereich selektieren
- 4.1.7 Webservice Calls mit doc() und unparsed-text()
- 4.1.8 Stylesheet-Parameter auf der Kommandozeile
- 4.1.9 Leerzeichenbehandlung
- 4.1.10 Mit
translate
Zeichen ersetzen
- 4.1.10.1 Spass mit dem Sequenzvergleich
- 4.1.11 Character Mappings in der Ausgabe
- 4.1.12 JSON mit XSLT 1.0 und Python lxml
- 4.1.1 Vortransformationen
- 4.2 Abfragen mit XQuery
- 4.2.5 XQuery als Programmiersprache
- 4.2.5.3
if..then..else
Ausdrücke
- 4.2.5.3.2 SQL Views in MarkLogic
- 4.2.5.3
if..then..else
Ausdrücke
- 4.2.6 Hilfreiche XQuery Schippsel
- 4.2.5 XQuery als Programmiersprache
- 4.3 XML Datenbanken
- 4.3.1 Connector zu Marklogic in Oxygen
- 4.3.2 Bi-Temporale Dokumente
- 4.3.2.1 Anlegen des Testszenarios auf der ML Konsole
- 4.3.2.2 Ausführen einiger Beispiel-Queries
- 4.3.3 Webapps mit MarkLogic
- 4.3.3.5 Wikipedia Scrapper Applikation
- 4.3.3.5 Wikipedia Scrapper Applikation
- 4.3.4 Dokument-Rechte in MarkLogic
- 4.3.5 MarkLogic Tools
- 4.3.5.1 EXPath Konsole
- 4.3.5.2 mlcp - MarkLogic Content Pump
- 4.3.5.3 Deployment-Tools
- 4.4 XSL-FO mit XSLT1.x
- 4.5 Testing
- 4.5.1 Validierung mit Schematron
- 4.5.2 Erste Schritte mit XSpec
- 4.5.1 Validierung mit Schematron
- 4.6 Performanz-Optimierung
- 4.1 Transformationen mit XSLT
- 5 Zusätzliches Know-How
- 5.1 XML Editoren
- 5.2 Quellcode-Versionskontrolle
- 5.2.1 Kurze Geschichte zur Versionskontrolle Test
- 5.2.2 GIT Kommandos
- 5.2.1 Kurze Geschichte zur Versionskontrolle Test
- 5.1 XML Editoren
- 6 Glossary
- 7 Tektur CCMS
4.1.8 Stylesheet-Parameter auf der Kommandozeile
Beim XSLT-Call auf die Einsprungdatei (Hauptstylesheet) könnnen auf der Konsole Parameter mitgegeben werden.
Diese werden normalerweise im Hauptstylesheet deklariert, können aber auch in Sub-Stylesheets untergebracht werden,
wenn diese nur lokal verfügbar sein sollen.
Ein Parameter kann z.B. so aussehen:
<xsl:param name="test-param" required="no" select="'Hallo'"/>
Wenn das Feld
@required
den Wert
yes
zugewiesen bekommt, dann darf kein Default-Wert im
@select
Attribut
angegeben werden. (Der Default könnte natürlich auch als PCDATA Inhalt innerhalb der Tags stehen.)
Ein Saxon-Aufruf auf der Kommandozeile, der diesen Parameter bedient, sieht z.B. so aus:
saxon -it:main -o:out.xml testparam="Servus!"
4.1.8.1 XPath als Parameterwert
Jetzt gib es hier aber auch noch einige versteckte Funktionalitäten, bspw. möchte man einen XPath-Ausdruck an das Stylesheet übergeben,
der vom Hauptprogramm vllt. unter Zuhilfenahme einer Datenbankabfrage berechnet wird.
Im einfachsten Fall ist so ein XPath ein boolscher Wert
true()
Dieser wird an das Stylesheet korrekt übergeben, indem der XPath Kennzeichner
?
vorangestellt wird, so:
saxon -it:main -o:out.xml ?testparam=true()
Wegen des
?
-Prefix versteht Saxon sofort, dass es sich um einen XPath handelt. Ein
xsl:choose
Statement wie
das folgende würde den korrekten Fall liefern:
[...] <xsl:param name="test-param" required="yes"/> [...] <xsl:choose> <xsl:when test="$test-param">Gut</xsl:when> <xsl:otheriwse>Schlecht</xsl:otheriwse> </xsl:choose> [...]
Würde man das Prefix nicht setzen und bspw. dieses
Name=Wert
Paar senden:
saxon -it:main -o:out.xml testparam=false
So würde auch der gute Zweig ausgeführt, da der Nicht-Leerstring als wahr interpretiert werden würde, was aber falsch ist.
Typsicher kann man natürlich auch programmieren und an den Parameter noch eine Typendeklaration heften, was die Fehlersuche erleichtert:
<xsl:param name="test-param" required="yes" as="xs:boolean"/>
Um noch ein komplexeres Szenario für einen übergebenen XPath zu zeigen, betrachten wir die folgende Parameterübergabe:
saxon -it:main -o:out.xml ?testparam="//descendant::buch[id=$id-aus-webservice-abfrage]"
Die Shell Variable
$id-aus-webservice-abfrage
wird bei der Ausfühung des Shell-Skripts mit dem Ergebniswert
eines vorangegangenen Webservice-Calls bestückt und an das XSLT Stylesheet übergeben. Dieses arbeitet auf einer Bücher-Liste und formatiert
das ausgewählte Buch z.B. als HTML Seite:
<xsl:param name="test-param" required="yes" /> <xsl:template name="main"> <xsl:apply-templates select="$test-param"/> </xsl:template>
4.1.8.2 Clark Notation
Bei der Clark Notation ↗ kann dem Elementbezeichner
mittels geschweifter Klammerung der benötigte Namespace vorangestellt werden. Das sieht z.B. wie folgt aus - wenn man auch gleich noch
das
?
-Prefix voranstellt:
?{http://www.tekturcms.de/namespaces/mein-namespace}spezieller-verarbeitungs-modus=true()
Im aufgerufenen Stylesheet wird zunächst der Namespace deklariert, dann der Parameter gesetzt und schliesslich die Logik angegeben:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tk="http://www.tekturcms.de/namespaces/mein-namespace" exclude-result-prefixes="xs" version="2.0"> <xsl:param name="tk:spezieller-verarbeitungs-modus" select="false()" as="xs:boolean"/> <xsl:template name="main"> <xsl:choose> <xsl:when test="$tk:spezieller-verarbeitungs-modus">Gut</xsl:when> <xsl:otheriwse>Schlecht</xsl:otheriwse> </xsl:choose> </xsl:template> </xsl:stylesheet>
Diesen Sonderfall braucht man eigentlich nur, wenn man in eine bestehende Transformation einen
Parameter einführen will, dessen Bezeichner schon existiert, um so einen Namenskonflikt zu vermeiden
- gesehen bspw. bei komplexen Schematron Regeln.