The result of the xsl:fork instruction is the sequence formed by concatenating the results of evaluating each of its contained instructions, in order.

Category: instruction
Content: ( xsl:fallback* , ( ( xsl:sequence , xsl:fallback* )* | ( xsl:for-each-group , xsl:fallback* ) ) )
Permitted parent elements: any XSLT element whose content model is sequence-constructor; any literal result element
Element has no attributes

Notes on the Saxon implementation

Fully implemented since Saxon 9.7. Note that streaming of xsl:for-each-group, as a child of xsl:fork, with a group-by attribute is not implemented.

In Saxon 9.6, the instruction was implemented with restrictions: specifically, the content of xsl:fork must consist of a sequence of xsl:sequence instructions, and can not include xsl:for-each-group elements.

The Saxon 9.6 implementation of xsl:fork in streaming mode does not actually use multiple threads: rather, the events notified by the XML parser (such as startElement and endElement) are notified to each prong of the xsl:fork in turn. Each prong accumulates its result in a temporary tree held in memory, and these temporary trees are combined on completion.

Links to W3C specifications

XSLT 3.0 Specification

See also