blob: 64f7cbdf3b983252074da1c6435244f8bccf6e8d [file] [log] [blame]
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.0//EN" "../../dtd/document-v10.dtd">
<document>
<header>
<title>XInclude Transformer</title>
<subtitle>in @doctitle@</subtitle>
<version>0.9</version>
<type>Technical document</type>
<authors>
<person name="Carsten Ziegeler" email="cziegeler@apache.org"/>
</authors>
<abstract>This document describes the XInclude transformer.</abstract>
</header>
<body>
<s1 title="XInclude Transformer">
<p>
This transformer works according to the XInclude specification.
</p>
<p>
For more information refer to the
<link href="http://www.w3.org/TR/xinclude">XInclude specification</link>.
</p>
<ul>
<li>Name : xinclude</li>
<li>Class: org.apache.cocoon.transformation.XIncludeTransformer</li>
<li>Cacheable: no.</li>
</ul>
<p>
You can include either simple text, or xml content.
Including xml content -- which is the default --
gives you the option to define an xpointer in the href attribute. Some
quick xinclude examples should reveal the possibilities of xinclude.
</p>
<ul>
<li>
Include an xml content as-is:
<code><![CDATA[<xi:include href="include.xml"/>]]></code>
</li>
<li>
Include an xml content but pick the strong element only:
<code><![CDATA[<xi:include href="include.xml#xpointer(/p/strong)"/>]]></code>
</li>
<li>
Include text content:
<code><![CDATA[<xi:include parse="text" href="include.txt"/>]]></code>
</li>
</ul>
<p>
A simple example using xinclude might help to use this transfomer
effectively:
</p>
<p>
Add the XIncludetransfomer to the components in your sitemap.xmap
</p>
<source><![CDATA[
...
<map:components>
...
<map:transformers default="xslt">
...
<map:transformer name="xinclude"
src="org.apache.cocoon.transformation.XIncludeTransformer"/>
...
]]></source>
<p>
Next define in your pipeline to use the XIncludeTransformer
</p>
<source><![CDATA[
<map:match pattern="xinc/simple-xinc">
<map:generate src="xinc/simple-xinc.xml"/>
<map:transform type="xinclude"/>
<map:transform src="stylesheets/page/simple-page2html.xsl"/>
<map:serialize/>
</map:match>
]]></source>
<p>
In this example pipeline it assumed that simple-xinc.xml contains
the include element. As well as defining the include element,
it defines the namespace URI "http://www.w3.org/2001/XInclude".
This helps the XIncludeTransformer to find the include element to
get replaced by the included content.
The simple-xinc.xml may look like this:
</p>
<source><![CDATA[
<?xml version="1.0" encoding="UTF-8"?>
<page
xmlns:xi="http://www.w3.org/2001/XInclude">
<title>Hello</title>
<content>
<para>This is my first Cocoon page!</para>
<xi:include href="include.xml"/>
</content>
</page>
]]></source>
<p>
Next you should define the include.xml file which is included.
A simple include.xml might look like this:
</p>
<source><![CDATA[
<?xml version="1.0"?>
<p>
I am <strong>included</strong> by XIncludeTransformer.
I come from "include.xml".
</p>
]]></source>
<p>
Now finally we have everything put together the xml content after the
XIncludeTransformer processing will look like this:
</p>
<source><![CDATA[
<?xml version="1.0" encoding="UTF-8"?>
<page
xmlns:xi="http://www.w3.org/2001/XInclude">
<title>Hello</title>
<content>
<para>This is my first Cocoon page!</para>
<p>
I am <strong>included</strong> by XIncludeTransformer.
I come from "include.xml".
</p>
</content>
</page>
]]></source>
</s1>
</body>
</document>