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()Plain Text
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> [...]Plain Text
Würde man das Prefix nicht setzen und bspw. dieses Name=Wert Paar senden:
saxon -it:main -o:out.xml testparam=falsePlain Text
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"/>Plain Text
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]"Plain TextDie 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>Plain Text