xmlns:saxon="http://icl.com/saxon"
xmlns:lxslt="http://xml.apache.org/xslt"
xmlns:xalanredirect="org.apache.xalan.xslt.extensions.Redirect"
+ xmlns:exsl="http://exslt.org/elements/document"
xmlns:doc="http://nwalsh.com/xsl/documentation/1.0"
version="1.1"
exclude-result-prefixes="doc"
- extension-element-prefixes="saxon xalanredirect lxslt">
+ extension-element-prefixes="saxon xalanredirect lxslt exsl">
<!-- This stylesheet works with Saxon and Xalan; for XT use xtchunker.xsl -->
+<!-- Note: Only Saxon 6.4.2 or later is supported. -->
+
+<!-- Note: I don't think the exsl namespace name is right! -->
<!-- ==================================================================== -->
<xsl:param name="base.dir" select="'./'"/>
<xsl:param name="base.name" select="''"/>
- <xsl:variable name="vendor" select="system-property('xsl:vendor')"/>
-
<xsl:choose>
- <xsl:when test="contains($vendor, 'SAXON')">
+ <xsl:when test="element-available('saxon:output')">
<!-- Saxon doesn't make the chunks relative -->
<xsl:value-of select="concat($base.dir,$base.name)"/>
</xsl:when>
- <xsl:when test="contains($vendor, 'Apache')">
+ <xsl:when test="element-available('xalanredirect:write')">
<!-- Xalan doesn't make the chunks relative -->
<xsl:value-of select="concat($base.dir,$base.name)"/>
</xsl:when>
+ <xsl:when test="element-available('exsl:document')">
+ <!-- EXSL document does make the chunks relative, I think -->
+ <xsl:choose>
+ <xsl:when test="count(parent::*) = 0">
+ <xsl:value-of select="concat($base.dir,$base.name)"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$base.name"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
<xsl:otherwise>
<xsl:message terminate="yes">
- <xsl:text>Chunking isn't supported with </xsl:text>
- <xsl:value-of select="$vendor"/>
+ <xsl:text>Don't know how to chunk with </xsl:text>
+ <xsl:value-of select="system-property('xsl:vendor')"/>
</xsl:message>
</xsl:otherwise>
</xsl:choose>
</xsl:if>
</xsl:message>
- <xsl:variable name="vendor" select="system-property('xsl:vendor')"/>
-
<xsl:choose>
- <xsl:when test="contains($vendor, 'SAXON 6.2')">
- <!-- Saxon 6.2.x uses xsl:document -->
- <xsl:document href="{$filename}"
- method="{$method}"
- encoding="{$encoding}"
- indent="{$indent}"
- saxon:character-representation="{$saxon.character.representation}">
- <xsl:copy-of select="$content"/>
- </xsl:document>
- </xsl:when>
- <xsl:when test="contains($vendor, 'SAXON')">
- <!-- Saxon uses saxon:output -->
- <saxon:output file="{$filename}"
- href="{$filename}"
+ <xsl:when test="element-available('saxon:output')">
+ <saxon:output href="{$filename}"
method="{$method}"
encoding="{$encoding}"
indent="{$indent}"
<xsl:copy-of select="$content"/>
</saxon:output>
</xsl:when>
- <xsl:when test="contains($vendor, 'Apache')">
+ <xsl:when test="element-available('xalanredirect:write')">
<!-- Xalan uses xalanredirect -->
<xalanredirect:write file="{$filename}">
<xsl:copy-of select="$content"/>
</xalanredirect:write>
</xsl:when>
+ <xsl:when test="element-available('exsl:document')">
+ <exsl:document href="{$filename}"
+ method="{$method}"
+ encoding="{$encoding}"
+ indent="{$indent}">
+ <xsl:copy-of select="$content"/>
+ </exsl:document>
+ </xsl:when>
<xsl:otherwise>
<!-- it doesn't matter since we won't be making chunks... -->
<xsl:message terminate="yes">
<xsl:text>Can't make chunks with </xsl:text>
- <xsl:value-of select="$vendor"/>
+ <xsl:value-of select="system-property('xsl:vendor')"/>
<xsl:text>'s processor.</xsl:text>
</xsl:message>
</xsl:otherwise>
</xsl:if>
</xsl:message>
- <xsl:variable name="vendor" select="system-property('xsl:vendor')"/>
<xsl:choose>
- <xsl:when test="contains($vendor, 'SAXON 6.2')">
- <!-- Saxon 6.2.x uses xsl:document -->
- <xsl:document href="{$filename}"
- method="{$method}"
- encoding="{$encoding}"
- indent="{$indent}"
- doctype-public="{$doctype-public}"
- doctype-system="{$doctype-system}"
- saxon:character-representation="{$saxon.character.representation}">
- <xsl:copy-of select="$content"/>
- </xsl:document>
- </xsl:when>
- <xsl:when test="contains($vendor, 'SAXON')">
+ <xsl:when test="element-available('saxon:output')">
<!-- Saxon uses saxon:output -->
- <saxon:output file="{$filename}"
- href="{$filename}"
+ <saxon:output href="{$filename}"
method="{$method}"
encoding="{$encoding}"
indent="{$indent}"
<xsl:copy-of select="$content"/>
</saxon:output>
</xsl:when>
- <xsl:when test="contains($vendor, 'Apache')">
+ <xsl:when test="element-available('xalanredirect:write')">
<!-- Xalan uses xalanredirect -->
<xalanredirect:write file="{$filename}">
<xsl:copy-of select="$content"/>
</xalanredirect:write>
</xsl:when>
+ <xsl:when test="element-available('exsl:document')">
+ <exsl:document href="{$filename}"
+ method="{$method}"
+ encoding="{$encoding}"
+ indent="{$indent}"
+ doctype-public="{$doctype-public}"
+ doctype-system="{$doctype-system}">
+ <xsl:copy-of select="$content"/>
+ </exsl:document>
+ </xsl:when>
<xsl:otherwise>
<!-- it doesn't matter since we won't be making chunks... -->
<xsl:message terminate="yes">
<xsl:text>Can't make chunks with </xsl:text>
- <xsl:value-of select="$vendor"/>
+ <xsl:value-of select="system-property('xsl:vendor')"/>
<xsl:text>'s processor.</xsl:text>
</xsl:message>
</xsl:otherwise>