Cocoon では通常より少し複雑ですが、あなたが求めていると思われるサンプルを作成しました。
サイトマップ:
<map:pipeline>
<map:match pattern="*.myxml">
<map:generate src="my.xml"/>
<map:transform src="sf-myxml.xslt">
<map:parameter name="myxml" value="{1}.myxml"/>
</map:transform>
<map:transform type="include"/>
<map:serialize type="xml"/>
</map:match>
<map:match pattern="myxml/**">
<map:generate src="{1}"/>
<map:transform src="{request-param:stylesheet}"/>
<map:serialize type="xml"/>
</map:match>
</map:pipeline>
したがって、一致する *.myxml は、動的構成ファイルから XML を生成します。
<result>
<file>
<name>a.myxml</name>
<source>b.xml</source>
<transform>c.xslt</transform>
</file>
<file>
<name>x.myxml</name>
<source>y.xml</source>
<transform>c.xslt</transform>
</file>
</result>
sf-myxml.xslt を使用すると、これは Cinclude 呼び出しに変換されます。
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xd="http://www.oxygenxml.com/ns/doc/xsl"
xmlns:ci="http://apache.org/cocoon/include/1.0"
exclude-result-prefixes="xs xd"
version="2.0">
<xsl:param name="myxml"/>
<xsl:template match="/result">
<xsl:copy>
<xsl:apply-templates select="file[name eq $myxml]"/>
</xsl:copy>
</xsl:template>
<xsl:template match="file">
<ci:include src="cocoon:/myxml/{source}?stylesheet={transform}"/>
</xsl:template>
</xsl:stylesheet>
適切な <file> 要素を見つけて、<source> 要素と <transform> 要素を使用します。たとえば、呼び出し "/a.myxml" の場合、次のように生成されます。
<ci:include src="cocoon:/myxml/b.xml?stylesheet=c.xslt"/>
<cinclude> 内のこの cocoon:/ 呼び出しは、次の <map:match> によって照合されます。上記の例では、b.xml が c.xslt によって変換されます。私はそれを試してみましたが、うまくいきます。
ここに b.xml があります:
<page/>
y.xml は次のとおりです。
<page title="z.myxml"/>
c.xslt は次のとおりです。
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xd="http://www.oxygenxml.com/ns/doc/xsl"
exclude-result-prefixes="xs xd"
version="2.0">
<xsl:template match="page">
<html><head><title><xsl:value-of select="@title"/></title></head><body><h1><xsl:value-of select="@title"/></h1></body></html>
</xsl:template>
</xsl:stylesheet>
a.myxl を呼び出すとタイトルが表示されず、z.myxml を呼び出すと「z.myxml」というタイトルが表示されます。これがあなたが探していたものであることを願っています。
よろしく、
Huib Verweij。