Parameter

Neben Optionen und Variablen bietet XProc noch die Möglichkeit, Parameter anzulegen. Einige Steps benötigen/unterstützen Parameter, um gewisse Aufgaben erledigen zu können.

p:parameters

<p:declare-step type="p:parameters">
   <p:input port="parameters" kind="parameter" primary="false"/>
   <p:output port="result" primary="false"/>
</p:declare-step>

Der Step <p:parameters> hat zunächst einen <p:input>-Port vom Typ “parameter“. Dieser Port erwartet die entsprechenden Parameter. Ein Parameter wird unter XProc als <c:param>-Element ausgewiesen.

<c:param
  name = QName
  namespace? = anyURI
  value = string/>

Ein <c:param>-Element benötigt als Bezeichnung einen QName. Optional kann ein Namensraum (namespace) vergeben werden. Der eigentliche Inhalt des Parameters wird unter “value“ als String (Zeichenkette) angegeben. Diese Elemente werden an besagtem Input-Port (“parameter“) angegeben und dann in einem <c:param-set>-Element als Wrapper (ein umschließendes Element) bereitgestellt (auf den Output-Port geschrieben).

<c:param-set>
   c:param*
</c:param-set>

Beispiel

Im folgenden Beispiel werden eine Reihe von Parametern angelegt und mittels <p:parameters> in ein <c:param-set> gepackt und ausgegeben.

<?xml version="1.0" encoding="UTF-8"?>
<p:declare-step xmlns:p="http://www.w3.org/ns/xproc" xmlns:c="http://www.w3.org/ns/xproc-step" version="1.0">
  <p:input port="source"/>
  <p:output port="result"/>
  <p:parameters name="params">
    <p:input port="parameters">
      <p:inline>
        <c:param name="parameter1" value="wert1"/>
      </p:inline>
      <p:inline>
        <c:param name="parameter2" value="wert2"/>
      </p:inline>
    </p:input>
  </p:parameters>
  <p:identity>
    <p:input port="source">
      <p:pipe port="result" step="params"/>
    </p:input>
  </p:identity>
</p:declare-step>

Im Beispiel werden zwei Parameter (<c:param>) jeweils in einem <p:inline>-Step angelegt. Der Inhalt von <p:parameters> wird von <p:identity> ausgelesen. Das Ergebnis sieht so aus:

<c:param-set>
 <c:param name="parameter2" value="wert2"/>
 <c:param name="parameter1" value="wert1"/>
</c:param-set>

Die beiden Parameter werden in einem <c:param-set> zusammengefasst.

p:with-param

<p:with-param
  name = QName
  select = XPathExpression
  port? = NCName>
   ((p:empty |
   p:pipe |
   p:document |
   p:inline |
   p:data)? &
  p:namespaces*)
</p:with-param>

Durch <p:with-param> können Steps, die Parameter unterstützen, ähnlich wie mit <p:with-option>, Parameter durch die Angabe eines entsprechenden XPath-Ausdruckes zugewiesen werden.

Dem Attribut “name“ muss ein QName zugeteilt werden, der dem Namen des gewünschten Parameters entspricht. “select“ erwartet einen XPath-Ausdruck, der den Wert des Parameters repräsentiert. Optional kann unter “port“ noch ein Port angegeben werden, welcher den erstellten Parameter erhalten soll. Als Standard ist jedoch der primäre Parameter Input-Port festgelegt. Falls ein Port angegeben wird, so muss dieser Parameter akzeptieren (also ein Parameter-Input-Port sein), ansonsten führt dies zu einem statischen Fehler.

Beispiel

Im folgenden Beispiel wird ein Step durch <p:with-param> bedient, um somit einen Parameter zu erhalten.

<?xml version="1.0" encoding="UTF-8"?>
<p:declare-step xmlns:p="http://www.w3.org/ns/xproc" xmlns:c="http://www.w3.org/ns/xproc-step" version="1.0">
  <p:input port="source">
    <p:inline>
      <demo/>
    </p:inline>
  </p:input>
  <p:output port="result"/>
  <p:xslt name="xslt">
    <p:with-param name="BeispielParameter" select="'Triviales Beispiel'">
      <p:empty/>
    </p:with-param>
    <p:input port="stylesheet">
      <p:inline>
        <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xd="http://www.oxygenxml.com/ns/doc/xsl" version="2.0">
          <xsl:param name="BeispielParameter"/>
          <xsl:template match="/">
            <beispiel>
              <xsl:value-of select="$BeispielParameter"/>
            </beispiel>
          </xsl:template>
        </xsl:stylesheet>
      </p:inline>
    </p:input>
</p:xslt>
</p:declare-step>

Im Beispiel wird ein Parameter “BeispielParameter“ mit dem Inhalt “Triviales Beispiel“ erzeugt. Dieser wird im Step <p:xslt> im inline erzeugten XSLT-Stylesheet durch “xsl-value-of select=“$BeispielParameter““ ausgelesen. Das Resultat dieser Pipeline gibt also den Wert des Parameters aus.

<< zurück vor >>
Tipp der data2type-Redaktion:
Zum Thema XProc bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an: