from Michael Kay

Within a single stylesheet, a pipeline is expressed as a series of variables:

<xsl:variable name="phase-1-output">
  <xsl:apply-templates select="/" mode="phase-1"/> </xsl:variable>

<xsl:variable name="phase-2-output">
  <xsl:apply-templates select="$phase-1-output" mode="phase-2"/> </xsl:variable>

<xsl:template match="/">
  <xsl:copy-of select="$phase-8-output"/> </xsl:template>

To do this in XSLT 1.0, you need the xx:node-set() extension.

Using multiple stylesheets gives you greater modularity and reusability, but is a bit more complex to deploy. Importantly, it also allows you to incorporate steps into the pipeline [I've never been sure what a step in a pipeline should be called!]? that are implemented using technologies other than XSLT - for example, STX, XQuery?, Java SAX filters, Perl scripts.