I have succeded in transforming Docbook to pdf and to html on cocoon 2.0.3
using the stylesheet by Norman Walsh on the official docbook repository
(http://docbook.sourceforge.net/projects/xsl/index.html).
Cocoon has some weakness in doing this and I spent 15 days to make it work
properly, so if you want save some time and you want to do something similar
you are interested in this mail.
What I learned is that:
1. While xalan can do docbook transformation to xslfo correctly from the
command line, on cocoon it can't.
2. If you use Saxon instead of xalan the transformation is almost successful
but not completly: ie. I lost all the sect1/title.
3. If you use Saxon you loose all the xsp capabilities in cocoon (I want to
make sql transformation with as400 and Oracle)
4. Incremental processing is not suggested for docbook to pdf transformation
The solutions I have found to this problems thanks to all I have read on the
mailing lists and on the official site is:
1. Setting up cocoon to use xalan and saxon in alternative (defult: xalan) and
set incremental processing to false in Saxon
2. Renaming saxon.jar to z-saxon.jar (I am not sure if is necessary but in
this way works)
3. Modifying Saxon to make it use the parser xerces instead of aelfred
Let'see theese points in detail
1. Setting up cocoon to use xalan and saxon in alternative (defult: xalan) and
set incremental processing to false in Saxon.
To do this:
1.1 Put saxon652.jar WEB-INF/lib ( in the cocoon directory of course)
1.2 Here are extracts of what you have to add in cocoon.xconf and
sitemap.xmap:
# cocoon.xconf
<component
role="org.apache.cocoon.components.xslt.XSLTProcessor/Saxon"
class="org.apache.cocoon.components.xslt.XSLTProcessorImpl"
logger="core.xslt-processor">
<parameter name="use-store" value="true"/>
<parameter name="incremental-processing" value="false"/>
<parameter name="transformer-factory"
value="com.icl.saxon.TransformerFactoryImpl"/>
</component>
# sitemap.xmap
<map:transformer name="xslt-saxon" pool-grow="2" pool-max="32" pool-min="8"
src="org.apache.cocoon.transformation.TraxTransformer">
<use-request-parameters>false</use-request-parameters>
<use-browser-capabilities-db>false</use-browser-capabilities-db>
<xslt-processor-role>org.apache.cocoon.components.xslt.XSLTProcessor/Saxon</xslt-processor-role>
</map:transformer>"
</citationFromAMail.SeeTheReferences>
in yor pipeline when you do a transformation from docbook to pdf you will use
something similar:
<map:match pattern="*.pdf">
<map:generate src="{1}.docbook"/>
<map:tranform type="xslt-saxon" src="WhereverYouPutIt/fo/docbook.xsl"/>
<map:serialize type="fo2pdf"/>
</map:match>
<map:match pattern="*.html">
<map:generate src="{1}.docbook"/>
<map:tranform type="xslt-saxon" src="WhereverYouPutIt/html/docbook.xsl"/>
<map:serialize type="fo2pdf"/>
</map:match>
In this way if you will leave xslt as the default type of transformation, you
will use use xalan and all his xsp capabilities for all the the other cocoon
functions.
2. Renaming saxon.jar z-saxon.jar (I am not sure that is necessary but in this
way works)
3. Modifying Saxon to make it use xerces instead of aelfred as parser
Change the content of
META-INF/services/javax.xml.parsers.SAXParserFactory from
com.icl.saxon.aelfred.SAXParserFactoryImpl to
org.apache.xerces.jaxp.SAXParserFactoryImpl. That tells
Saxon to use xerces instead of aelfred as parser.
Don't be worried it is not so complicated: you have to extract the file
(javax.xml.parsers.SAXParserFactory) from saxon.jar edit it (is a text file)
and to put it again in the same place in saxon.jar
Conclusion:
I must say that the Saxon and xalan problems in using Norman Walsh's
stylesheets should be addressed inside cocoon developing activity. It
shouldn't be so hard to make docbook to pdf transformation work.
Comments are welcome.
Gabriele Domenichini
References:
To use different xslt processors or different behaviour of the same:
http://xml.apache.org/cocoon/snippet/snippet-xslt-options.html
To use saxon in alternative the mail from which I took the solution is:
(http://www.mail-archive.com/[email protected]/msg15968.html) which
tell exactly what to do:
To change the behavior of saxon there's a mail
(http://sources.redhat.com/ml/docbook-apps/2002-q2/msg00397.html) which
explain three workaround. I have choosen the third
---------------------------------------------------------------------
Please check that your question has not already been answered in the
FAQ before posting. <http://xml.apache.org/cocoon/faq/index.html>
To unsubscribe, e-mail: <[EMAIL PROTECTED]>
For additional commands, e-mail: <[EMAIL PROTECTED]>