You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@forrest.apache.org by Autumn Cuellar <a....@auckland.ac.nz> on 2004/01/22 22:48:00 UTC

DocBook documentation format - Generator error

Hello,

Perhaps this should go to the Cocoon group, but you probably have lots 
of experience in this area as well.

Background: I've chosen DocBook as my documentation format for my 
Forrest-generated website. I want to be able to transform the DocBook, 
which I store in files with a 'dbxml' extension, to PDF and body-*.html 
(using the IdGenerator transformer and Link ReWriter included in 
Forrest) without converting the DocBook to doc-v12 xml.

Right now my main problem is this one chunk of the sitemap.xmap code, 
which I've just copied from the part that checks for ehtml files:

1  <map:match pattern="**body-*.html">
2    <map:select type="exists">
3      <map:when test="content/xdocs/{1}{2}.dbxml">
4        <map:generate src="content/xdocs/{1}{2}.dbxml" />
5        <map:transform type="dbidgen" />
6        <map:transform type="xinclude" />
7        <map:transform type="dblinkrewriter" 
src="cocoon:/{1}linkmap-{2}.html"/>
8        <map:transform src="docbook/html/docbook-forrest.xsl" />
9      </map:when>
10   </map:select>
11 </map:match>

If I leave line 4 in, I get this BROKEN error:"Generator already set. 
You can only select one Generator (file)".
If I comment it out, I get this BROKEN error:"You must set a generator 
first before you can use a transformer."

The second error I understand, the first I do not. I did already read 
the Cocoon user documentation to try to solve my problem, not that it 
made much sense. Anyway, the whole file's attached if it offers more 
insight.

Cheers,
Autumn

Re: DocBook documentation format - Generator error

Posted by Autumn Cuellar <a....@auckland.ac.nz>.
*sheepish grin* Nevermind, the one thing I got from the Cocoon user 
documentation was the importance of the generate -> transform -> 
serialize sequence. I'd forgotten to check that.

Autumn

Autumn Cuellar wrote:
> Hello,
> 
> Perhaps this should go to the Cocoon group, but you probably have lots 
> of experience in this area as well.
> 
> Background: I've chosen DocBook as my documentation format for my 
> Forrest-generated website. I want to be able to transform the DocBook, 
> which I store in files with a 'dbxml' extension, to PDF and body-*.html 
> (using the IdGenerator transformer and Link ReWriter included in 
> Forrest) without converting the DocBook to doc-v12 xml.
> 
> Right now my main problem is this one chunk of the sitemap.xmap code, 
> which I've just copied from the part that checks for ehtml files:
> 
> 1  <map:match pattern="**body-*.html">
> 2    <map:select type="exists">
> 3      <map:when test="content/xdocs/{1}{2}.dbxml">
> 4        <map:generate src="content/xdocs/{1}{2}.dbxml" />
> 5        <map:transform type="dbidgen" />
> 6        <map:transform type="xinclude" />
> 7        <map:transform type="dblinkrewriter" 
> src="cocoon:/{1}linkmap-{2}.html"/>
> 8        <map:transform src="docbook/html/docbook-forrest.xsl" />
> 9      </map:when>
> 10   </map:select>
> 11 </map:match>
> 
> If I leave line 4 in, I get this BROKEN error:"Generator already set. 
> You can only select one Generator (file)".
> If I comment it out, I get this BROKEN error:"You must set a generator 
> first before you can use a transformer."
> 
> The second error I understand, the first I do not. I did already read 
> the Cocoon user documentation to try to solve my problem, not that it 
> made much sense. Anyway, the whole file's attached if it offers more 
> insight.
> 
> Cheers,
> Autumn
> 
> 
> ------------------------------------------------------------------------
> 
> <?xml version="1.0"?>
> <!-- ===============================================
> Default Forrest sitemap, defining the whole site.
> Delegates to the other *.xmap files.  See
> http://xml.apache.org/forrest/sitemap-ref.html
> 
> $Revision: 1.117 $
> ==================================================== -->
> 
> 
> <map:sitemap xmlns:map="http://apache.org/cocoon/sitemap/1.0">
>   <map:components>
>     <map:generators default="file">
>       <map:generator name="file"      src="org.apache.cocoon.generation.FileGenerator" />
>       <!--
>       <map:generator name="html"      src="org.apache.cocoon.generation.HTMLGenerator">
>         <jtidy-config>jtidy.properties</jtidy-config>
>       </map:generator>
>       <map:generator name="directory" src="org.apache.cocoon.generation.DirectoryGenerator" />
>       -->
>     </map:generators>
> 
>     <map:transformers default="xslt">
>       <!-- Generates @id attributes from <title> strings -->
>       <map:transformer name="idgen" src="org.apache.cocoon.transformation.IdGeneratorTransformer">
>         <element>//*[local-name() = 'section']</element>
>         <id>title/text()</id>
>       </map:transformer>
> 
>       <!--Added by Autumn to have IDs generated for docBook files-->
>       <map:transformer name="dbidgen" src="org.apache.cocoon.transformation.IdGeneratorTransformer">
>         <element>//*[local-name() = 'sect*']</element>
>         <id>title/text()</id>
>       </map:transformer>
> 
>       <!-- Rewrites links, e.g. transforming href="site:index" to href="../index.html" -->
>       <!-- See http://xml.apache.org/forrest/sitemap-ref.html#linkrewriting_impl -->
>       <map:transformer name="linkrewriter" logger="sitemap.transformer.linkrewriter" src="org.apache.cocoon.transformation.LinkRewriterTransformer">
>         <link-attrs>href src</link-attrs>
>         <schemes>site ext</schemes>
> 
>         <input-module name="site">
>           <input-module name="linkmap">
>             <file src="{src}" reloadable="true" />
>           </input-module>
>           <prefix>/site//</prefix>
>           <suffix>/@href</suffix>
>         </input-module>
>         <input-module name="ext">
>           <input-module name="linkmap">
>             <file src="{src}" reloadable="true" />
>           </input-module>
>           <prefix>/site/external-refs//</prefix>
>           <suffix>/@href</suffix>
>         </input-module>
>       </map:transformer>
> 
>       <!--Added by Autumn to have links rewritten for docBook files-->
>       <map:transformer name="dblinkrewriter" logger="sitemap.transformer.linkrewriter" src="org.apache.cocoon.transformation.LinkRewriterTransformer">
>         <link-attrs>url linkend</link-attrs>
>         <schemes>site ext</schemes>
> 
>         <input-module name="site">
>           <input-module name="linkmap">
>             <file src="{src}" reloadable="true" />
>           </input-module>
>           <prefix>/site//</prefix>
>           <suffix>/@href</suffix>
>         </input-module>
>         <input-module name="ext">
>           <input-module name="linkmap">
>             <file src="{src}" reloadable="true" />
>           </input-module>
>           <prefix>/site/external-refs//</prefix>
>           <suffix>/@href</suffix>
>         </input-module>
>       </map:transformer>
> 
>       <map:transformer name="xpath" logger="sitemap.transformer.xpath" src="org.apache.cocoon.transformation.XPathTransformer" />
>       <map:transformer name="xslt" src="org.apache.cocoon.transformation.TraxTransformer" logger="sitemap.transformer.xslt" pool-max="32" pool-min="8" pool-grow="2">
>         <use-request-parameters>false</use-request-parameters>
>         <use-browser-capabilities-db>false</use-browser-capabilities-db>
>         <use-deli>false</use-deli>
>         <transformer-factory>org.apache.xalan.processor.TransformerFactoryImpl</transformer-factory>
>         <!--<transformer-factory>com.icl.saxon.TransformerFactoryImpl</transformer-factory>-->
>         <!--<transformer-factory>org.apache.xalan.xsltc.trax.TransformerFactoryImpl</transformer-factory>-->
>       </map:transformer>
> 
>       <map:transformer name="xinclude" src="org.apache.cocoon.transformation.XIncludeTransformer" logger="sitemap.transformer.xinclude" pool-grow="2" pool-max="16" pool-min="2" />
>     </map:transformers>
> 
>     <map:readers default="resource">
>       <map:reader name="resource" src="org.apache.cocoon.reading.ResourceReader"/>
>     </map:readers>
> 
>     <map:serializers default="html">
>       <map:serializer name="html" mime-type="text/html" src="org.apache.cocoon.serialization.HTMLSerializer">
>         <doctype-public>-//W3C//DTD HTML 4.01 Transitional//EN</doctype-public>
>         <doctype-system>http://www.w3.org/TR/html4/loose.dtd</doctype-system>
>       </map:serializer>
> 
>       <map:serializer name="xml" mime-type="text/xml" src="org.apache.cocoon.serialization.XMLSerializer"/>
>       
>       <map:serializer name="xml-document" mime-type="text/xml" src="org.apache.cocoon.serialization.XMLSerializer">
>         <cdata-section-elements>source</cdata-section-elements>
>         <doctype-public>-//APACHE//DTD Documentation V1.2//EN</doctype-public>
>         <doctype-system>document-v12.dtd</doctype-system>
>       </map:serializer>
> 
>       <map:serializer name="fo2pdf" src="org.apache.cocoon.serialization.FOPSerializer" mime-type="application/pdf" />
> 
>       <map:serializer name="links" src="org.apache.cocoon.serialization.LinkSerializer">
>         <encoding>ISO-8859-1</encoding>
>       </map:serializer>
>      <!--
>       <map:serializer mime-type="application/x-shockwave-flash" name="swf" src="org.apache.cocoon.serialization.SWFSerializer"/>
>       <map:serializer mime-type="application/msword" name="fo2rtf" src="org.apache.cocoon.serialization.RTFSerializer"/>
>       -->
>     </map:serializers>
> 
>     <map:matchers default="wildcard">
>       <map:matcher name="wildcard" src="org.apache.cocoon.matching.WildcardURIMatcher"/>
>       <map:matcher name="regexp" src="org.apache.cocoon.matching.RegexpURIMatcher"/>
>     </map:matchers>
> 
>     <map:selectors>
>       <map:selector logger="sitemap.selector.exists" name="exists" src="org.apache.cocoon.selection.ResourceExistsSelector" />
>     </map:selectors>
> 
>     <map:pipes default="caching">
>       <map:pipe name="caching" src="org.apache.cocoon.components.pipeline.impl.CachingProcessingPipeline"/>
>       <!--
>       <map:pipe name="noncaching" src="org.apache.cocoon.components.pipeline.impl.NonCachingProcessingPipeline"/>
>       <map:pipe name="profile-caching" src="org.apache.cocoon.components.profiler.ProfilingCachingProcessingPipeline"/>
>       <map:pipe name="profile-noncaching" src="org.apache.cocoon.components.profiler.ProfilingNonCachingProcessingPipeline"/>
>       -->
>     </map:pipes>
>   </map:components>
> 
>   <!-- NOTE: the 'links view' is no longer used to discover a page's links.
>        Instead of filterlinks.xsl, use cli.xconf include/exclude nodes to define which pages to render.
>   <map:views>
>     <map:view name="links" from-position="last">
>       <map:transform src="resources/stylesheets/filterlinks.xsl">
>         <map:parameter name="ctxbasedir" value="{realpath:.}/"/>
>       </map:transform>
>       <map:serialize type="links"/>
>     </map:view>
>   </map:views>
>   -->
> 
>   <map:resources>
>     <map:resource name="skinit">
>       <map:transform src="skins/{forrest:skin}/xslt/html/{type}.xsl">
>         <map:parameter name="notoc" value="{notoc}"/>
>         <!-- For backwards-compat with 0.2 - 0.4 skins -->
>         <map:parameter name="isfaq" value="{notoc}"/>
>         <map:parameter name="nopdf" value="{nopdf}"/>
>         <map:parameter name="path" value="{path}"/>
>         <map:parameter name="obfuscate-mail-links" value="false"/>
>         <!-- Can set an alternative project skinconfig here 
>         <map:parameter name="config-file" value="../../../../skinconf.xml"/>
>         -->
>       </map:transform>
> 
>       <map:serialize/>
>     </map:resource>
> 
>   </map:resources>
> 
>   <!-- =========================== Pipelines ================================= -->
>   <map:pipelines>
> 
>     <map:pipeline internal-only="false">
> 
>       <!-- ============================================================ -->
>       <!-- SOURCE FORMATS                                               -->
>       <!--                 Raw XML sources, typically doc-v12 format    -->
>       <!-- ============================================================ -->
>       <!-- http://xml.apache.org/forrest/sitemap-ref.html#source_pipelines -->
> 
>       <!-- Body content -->
>       <map:match pattern="**.xml">
>         <map:match pattern="changes.xml">
>           <map:mount uri-prefix="" src="status.xmap" check-reload="yes" />
>         </map:match>
> 
>         <map:match pattern="todo.xml">
>           <map:mount uri-prefix="" src="status.xmap" check-reload="yes" />
>         </map:match>
> 
>         <map:match pattern="**dtdx.xml">
>           <map:mount uri-prefix="" src="dtd.xmap" check-reload="yes" />
>         </map:match>
> 
>         <map:match pattern="forrest-issues.xml">
>           <map:mount uri-prefix="" src="issues.xmap" check-reload="yes" />
>         </map:match>
> 
>         <map:match pattern="**faq.xml">
>           <map:mount uri-prefix="" src="faq.xmap" check-reload="yes" />
>         </map:match>
> 
>         <map:match pattern="community/**index.xml">
>           <map:mount uri-prefix="" src="forrest.xmap" check-reload="yes" />
>         </map:match>
> 
>         <map:match pattern="community/*/**.xml">
>           <map:mount uri-prefix="" src="revisions.xmap" check-reload="yes" />
>         </map:match>
> 
>         <map:match pattern="site.xml">
>           <map:mount uri-prefix="" src="aggregate.xmap" check-reload="yes" />
>         </map:match>
> 
>         <!-- Default source types -->
>         <map:mount uri-prefix="" src="forrest.xmap" check-reload="yes" />
> 
>       </map:match>
> 
>       <!-- Menu content -->
>       <map:match pattern="abs-menulinks">
>         <map:mount uri-prefix="" src="menu.xmap" check-reload="yes" />
>       </map:match>
> 
>       <map:match pattern="**menulinks-*">
>         <map:mount uri-prefix="" src="menu.xmap" check-reload="yes" />
>       </map:match>
> 
>       <!-- Link maps -->
>       <map:match pattern="abs-linkmap">
>         <map:mount uri-prefix="" src="linkmap.xmap"/>
>       </map:match>
> 
>       <map:match pattern="**linkmap-*">
>         <map:match pattern="linkmap-site.*">
>           <map:mount uri-prefix="" src="aggregate.xmap" check-reload="yes" />
>         </map:match>
> 
>         <map:mount uri-prefix="" src="linkmap.xmap" check-reload="yes" />
>       </map:match>
> 
>     </map:pipeline>
> 
> 
>     <!-- ============================================================ -->
>     <!-- INTERMEDIATE FORMATS                                         -->
>     <!--                          Tabs, menus and body HTML.          -->
>     <!--                       Called from output format pipelines    -->
>     <!-- ============================================================ -->
>     <!-- http://xml.apache.org/forrest/sitemap-ref.html#intermediate_pipelines -->
> 
>     <map:pipeline internal-only="false">
> 
>       <!-- External matches -->
>       <!-- (HTML rendered directly from special formats) -->
>       <map:match pattern="**body-faq.html">
>         <map:mount uri-prefix="" src="faq.xmap" check-reload="yes" />
>       </map:match>
> 
>       <map:match pattern="**body-*.html">
>         <map:select type="exists">
>           <map:when test="content/xdocs/{1}{2}.ehtml">
>             <map:generate src="content/xdocs/{1}{2}.ehtml" />
>             <map:transform src="resources/stylesheets/html2htmlbody.xsl" />
>             <map:transform type="linkrewriter" src="cocoon:/{1}linkmap-{2}.html"/>
>             <map:serialize type="xml" />
>           </map:when>
>         </map:select>
>       </map:match>
> 
>       <!--Added by Autumn to get DocBook xml transformed automatically to the body of the html-->
>       <map:match pattern="**body-*.html">
>         <map:select type="exists">
>           <map:when test="content/xdocs/{1}{2}.dbxml">
> <!--            <map:generate src="content/xdocs/{1}{2}.dbxml" />-->
>             <map:transform type="dbidgen"/>
>             <map:transform type="xinclude"/>
>             <map:transform type="dblinkrewriter" src="cocoon:/{1}linkmap-{2}.html"/>
>             <map:transform src="/usr/people/autumn/apache-forrest-0.5-src/docbook/docbook-xsl-1.64.1/html/docbook-forrest.xsl"/>
>           </map:when>
>         </map:select>
>       </map:match>
> 
>       <!-- Default matches -->
>       <!-- (HTML rendered from doc-v11 intermediate format -->
>       <map:match pattern="**body-*.html">
>         <map:generate src="cocoon:/{1}{2}.xml"/>
>         <map:transform type="idgen"/>
>         <map:transform type="xinclude"/>
>         <map:transform type="linkrewriter" src="cocoon:/{1}linkmap-{2}.html"/>
>         <map:call resource="skinit">
>           <map:parameter name="type" value="document2html"/>
>           <map:parameter name="path" value="{1}{2}.html"/>
>           <map:parameter name="notoc" value="false"/>
>         </map:call>
>       </map:match>
> 
>       <map:match pattern="**menu-*.html">
>         <map:generate src="cocoon:/{1}book-{2}.html"/>
>         <map:transform type="linkrewriter" src="cocoon:/{1}linkmap-{2}.html"/>
>         <map:call resource="skinit">
>           <map:parameter name="type" value="book2menu"/>
>           <map:parameter name="path" value="{1}{2}.html"/>
>         </map:call>
>       </map:match>
> 
>       <map:match pattern="**tab-*.html">
>         <map:generate src="content/xdocs/tabs.xml" />
>         <map:transform type="linkrewriter" src="cocoon:/{1}linkmap-{2}.html"/>
>         <map:call resource="skinit">
>           <map:parameter name="type" value="tab2menu"/>
>           <map:parameter name="path" value="{1}{2}.html"/>
>         </map:call>
>       </map:match>
> 
>       <map:match pattern="**book-*.html">
>         <map:mount uri-prefix="" src="menu.xmap" check-reload="yes" />
>       </map:match>
> 
>     </map:pipeline>
> 
> 
>     <map:pipeline internal-only="false">
> 
>       <!-- ============================================================ -->
>       <!-- OUTPUT FORMATS                                               -->
>       <!--                  Serves content directly to the user         -->
>       <!-- +==========================================================+ -->
>       <!-- http://xml.apache.org/forrest/sitemap-ref.html#output_pipelines -->
> 
>       <map:match type="regexp" pattern="^.+$">
>         <map:select type="exists">
>           <map:when test="content/{0}">
>             <map:mount uri-prefix="" src="raw.xmap" check-reload="yes" />
>           </map:when>
>         </map:select>
>       </map:match>
> 
>       <map:match pattern="*.html">
>         <map:aggregate element="site">
>           <map:part src="cocoon:/tab-{0}"/>
>           <map:part src="cocoon:/menu-{0}"/>
>           <map:part src="cocoon:/body-{0}"/>
>         </map:aggregate>
>         <map:call resource="skinit">
>           <map:parameter name="type" value="site2xhtml"/>
>           <map:parameter name="path" value="{0}"/>
>         </map:call>
>       </map:match>         
> 
>       <map:match pattern="**/*.html">
>         <map:aggregate element="site">
>           <map:part src="cocoon:/{1}/tab-{2}.html"/>
>           <map:part src="cocoon:/{1}/menu-{2}.html"/>
>           <map:part src="cocoon:/{1}/body-{2}.html"/>
>         </map:aggregate>
>         <map:call resource="skinit">
>           <map:parameter name="type" value="site2xhtml"/>
>           <map:parameter name="path" value="{0}"/>
>         </map:call>
>       </map:match>
> 
>       <map:match pattern="**faq.pdf">
>         <map:mount uri-prefix="" src="faq.xmap" check-reload="yes" />
>       </map:match>
> 
>       <map:match type="regexp" pattern="^(.*?)([^/]*).pdf$">
>         <map:generate src="cocoon:/{1}{2}.xml"/>
>         <!-- <map:transform type="idgen"/> -->
>         <map:transform type="xinclude"/>
>         <map:transform type="linkrewriter" src="cocoon://{1}linkmap-{2}.pdf"/>
>         <map:transform src="skins/{forrest:skin}/xslt/fo/document2fo.xsl">
>           <map:parameter name="ctxbasedir" value="{realpath:.}/"/>
>           <map:parameter name="xmlbasedir" value="content/xdocs/{1}"/>
>         </map:transform>
>         <map:serialize type="fo2pdf"/>
>       </map:match>
> 
>       <!--Added by Autumn to get DocBook xml transformed automatically to pdf-->
>       <map:match type="regexp" pattern="^(.*?)([^/]*).pdf$">
>         <map:generate src="content/xdocs/{1}{2}.dbxml"/>
>         <!-- <map:transform type="idgen"/> -->
>         <map:transform type="xinclude"/>
>         <map:transform type="dblinkrewriter" src="cocoon://{1}linkmap-{2}.pdf"/>
>         <map:transform src="/usr/people/autumn/apache-forrest-0.5-src/docbook/docbook-xsl-1.64.1/fo/docbook.xsl"/>
>         <map:serialize type="fo2pdf"/>
>       </map:match>
> 
>       <map:match pattern="**changes.rss">
>         <map:mount uri-prefix="" src="status.xmap" check-reload="yes" />
>       </map:match>
> 
>       <map:match pattern="profiler">
>         <map:mount uri-prefix="" src="profiler.xmap" check-reload="yes" />
>       </map:match>
>       <map:match pattern="**.js">
>         <map:mount uri-prefix="" src="resources.xmap" check-reload="yes" />
>       </map:match>
>       <map:match pattern="**.css">
>         <map:mount uri-prefix="" src="resources.xmap" check-reload="yes" />
>       </map:match>
>       <map:match pattern="**images**">
>         <map:mount uri-prefix="" src="resources.xmap" check-reload="yes" />
>       </map:match>
>      <map:match pattern="**favicon.ico">
>         <map:mount uri-prefix="" src="resources.xmap" check-reload="yes" />
>       </map:match>
>     </map:pipeline>
> 
> 
> 
>     <!-- ============================================================ -->
>     <!-- REDIRECTS                                                    -->
>     <!-- ============================================================ -->
>     <map:pipeline internal-only="false">
> 
>       <map:match pattern="">
>         <map:redirect-to uri="index.html" />
>       </map:match>
>       <map:match type="regexp" pattern="^.+/$">
>           <map:redirect-to uri="index.html"/>
>       </map:match>
>     </map:pipeline>
> 
> 
>   </map:pipelines>
> </map:sitemap>

-- 
Autumn A. Cuellar
Bioengineering Institute
The University of Auckland
New Zealand