xsl:fork

Das Element xsl:fork bietet die Möglichkeit, die Verarbeitung auf mehrere Prozesse aufzuteilen. Jedes Konstrukt in der xsl:fork-Anweisung wird in einem separatem Prozess ausgeführt.

Ein xsl:fork kann entweder eine xsl:for-each-group und ein optionales xsl:fallback beinhalten oder keines bis beliebig viele xsl:sequence-Konstrukte mit einem jeweils optionalen xsl:fallback.

Das Ergebnis einer xsl:fork-Anweisung ist eine Aneinanderreihung aller beinhalteten Anweisungen in ihrer vorkommenden Reihenfolge.

Mit einem xsl:fork ist es somit möglich, sonst nicht streambare Konstrukte doch zu streamen, da jedes einzelne Konstrukt in einem eigenen Prozess bei dem Durchlauf verarbeitet wird.

Wie xsl:fork funktioniert, wird im folgenden Code-Beispiel dargestellt.

Code-Beispiel: Einführungsbeispiel zu xsl:fork.

<xsl:template match="Company">
  <xsl:fork>
    <xsl:sequence> </xsl:sequence>
    <xsl:sequence> </xsl:sequence>
  <xsl:fork>
</xsl:template>

Zwei xsl:sequence-Anweisungen, welche in jeweils einem eigenen Prozess ausgeführt werden.

Zeile 3: Anweisung in einem eigenen Prozess.

Zeile 4: Anweisung in einem anderen eigenen Prozess.

Streaming-Regeln

Keiner der oben gezeigten Zweige kann einen gestreamten Knoten zurückliefern, da diese eventuell nicht in der richtigen Reihenfolge verarbeitet werden können und ein Umsortieren beim Streamen nicht möglich ist. Daher sollten immer grounded Knoten benutzt werden.

Tipp

Als Faustregel gilt: Immer select:"copy-of(x)" anstelle von select="x" in einem fork verwenden! Siehe die beiden folgenden Code-Beispiele:

Code-Beispiel: xsl:fork - erlaubt.

<xsl:fork>
  <xsl:sequence select="copy-of(author)"/>
  <xsl:sequence select="copy-of(editor)"/>
</xsl:fork>

Mit der copy-of()-Funktion besteht die Möglichkeit, parallel auf Elemente innerhalb von Streams zuzugreifen.

Code-Beispiel: xsl:fork - nicht erlaubt.

<xsl:fork>
  <xsl:sequence select="author"/>
  <xsl:sequence select="editor"/>
</xsl:fork>

Dieses Beispiel ist nicht erlaubt, da gestreamte Knoten eventuell in einer Reihenfolge zurückkommen, die nicht der Dokumentreihenfolge entspricht.

Übung zu xsl:fork

   

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