Date: 2004-11-25T12:43:07 Editor: UpayaVira <[EMAIL PROTECTED]> Wiki: Cocoon Wiki Page: MetaStylesheets URL: http://wiki.apache.org/cocoon/MetaStylesheets
an article that actually shows you how to do it! Change Log: ------------------------------------------------------------------------------ @@ -6,6 +6,8 @@ There are several examples of this: + + * For details on creating XSLT stylesheets that create other stylesheets, see [http://www.xml.com/pub/a/2003/11/05/xslt.html XML Reflection] * Schematron -- an XML validation language implemented as XSLT, see [http://www.ldodds.com/papers/schematron_xsltuk.html Schematron - Validating XML using XSLT] for a tutorial * Web template languages -- see the XML.com article [http://www.xml.com/pub/a/2002/03/27/templatexslt.html Template Languages in XSLT] for some relevant background @@ -22,22 +24,22 @@ === How It's Done === -{{{ -<map:pipeline> -<map:match pattern="my.html"> - <map:generate src="my.xml"/> - <map:transform type="xalan" src="cocoon:/implementation-stylesheet.xsl"/> - <map:serialize/> -</map:match> -</map:pipeline> - -<map:pipeline> -<map:match pattern="implementation-stylesheet.xsl"> - <map:generate src="process-description.xml"/> - <map:transform src="meta-stylesheet.xsl"/> - <map:serialize type="xml"/> -</map:match> -</map:pipeline> +{{{ +<map:pipeline> +<map:match pattern="my.html"> + <map:generate src="my.xml"/> + <map:transform type="xalan" src="cocoon:/implementation-stylesheet.xsl"/> + <map:serialize/> +</map:match> +</map:pipeline> + +<map:pipeline> +<map:match pattern="implementation-stylesheet.xsl"> + <map:generate src="process-description.xml"/> + <map:transform src="meta-stylesheet.xsl"/> + <map:serialize type="xml"/> +</map:match> +</map:pipeline> }}} Here we have two pipelines, each of which perform one steps outline above. The first pipeline does the actual work: it transforms our XML into HTML results using the implementation stylesheet. @@ -57,25 +59,25 @@ === Note === Always be aware of the fact that such a pipeline is not cached. E.g., if you have a time-consuming generator (like HTML which uses JTidy), split the pipeline into two separate ones. Instead of -{{{ -<map:match pattern="*.html"> - <map:generate src="{1}.html"/> - <map:transform src="cocoon:/{1}.xsl"/> - <map:serialize/> -</map:match> +{{{ +<map:match pattern="*.html"> + <map:generate src="{1}.html"/> + <map:transform src="cocoon:/{1}.xsl"/> + <map:serialize/> +</map:match> }}} use -{{{ -<map:match pattern="*.html"> - <map:generate src="cocoon:/{1}.xml"/> - <map:transform src="cocoon:/{1}.xsl"/> - <map:serialize/> -</map:match> - -<map:match pattern="*.xml"> - <map:generate src="{1}.html"/> - <map:serialize type="xml"/> -</map:match> +{{{ +<map:match pattern="*.html"> + <map:generate src="cocoon:/{1}.xml"/> + <map:transform src="cocoon:/{1}.xsl"/> + <map:serialize/> +</map:match> + +<map:match pattern="*.xml"> + <map:generate src="{1}.html"/> + <map:serialize type="xml"/> +</map:match> }}} In the latter case, the "*.xml" pipeline is cached and the overall performance is much better.
