Author: ferdinand
Date: Tue Mar 27 10:49:34 2007
New Revision: 523017
URL: http://svn.apache.org/viewvc?view=rev&rev=523017
Log:
FOR-922: Adjusted sitemap-examples in this howto to the changes in Forrest
Modified:
forrest/trunk/site-author/content/xdocs/docs_0_80/howto/howto-custom-html-source.xml
Modified:
forrest/trunk/site-author/content/xdocs/docs_0_80/howto/howto-custom-html-source.xml
URL:
http://svn.apache.org/viewvc/forrest/trunk/site-author/content/xdocs/docs_0_80/howto/howto-custom-html-source.xml?view=diff&rev=523017&r1=523016&r2=523017
==============================================================================
---
forrest/trunk/site-author/content/xdocs/docs_0_80/howto/howto-custom-html-source.xml
(original)
+++
forrest/trunk/site-author/content/xdocs/docs_0_80/howto/howto-custom-html-source.xml
Tue Mar 27 10:49:34 2007
@@ -73,14 +73,7 @@
<steps title="Understanding the HTML-Pipeline">
- <warning>
- The example sitemap fragments are out-of-date because since this
- document was written, the core sitemaps in main/webapp/ have changed and
- some of the specialised processing has moved to plugins.
- View your source sitemaps when reading this document.
- (See <a
href="https://issues.apache.org/jira/browse/FOR-922">FOR-922</a>.)
- </warning>
-
+
<p>
The first part of this howto explains the html pipeline, so as to
provide the background to enable you to add additional processing
@@ -100,7 +93,7 @@
So let's see what happens, when a client asks Forrest to
serve the document
<br />
- 'http://some.domain.org/mytest/mybad.html'.
+ 'http://my.domain.org/mytest/mybad.html'.
</p>
</section>
@@ -126,20 +119,18 @@
<p>
To help you to easily follow the next steps, we have added
- comments and anchors to 'sitemap.xmap',
+ comments and markers to 'sitemap.xmap',
so that you can quickly jump to all relevant sections
and read them more easily.
</p>
<p class="instruction">
- Follow this link to the
- <a href="sitemap.xmap.html#Start+of+Sitemap">
+ Search for <code><![CDATA[map:sitemap]]></code> to find the
start of the Sitemap.
- </a>
</p>
<p>
- As the comment explains, this sitemap is the starting point
+ This sitemap is the starting point
for all requests. So even if there are other sitemaps
(which we will see later on), we always start looking for a
matching pattern right here.
@@ -157,11 +148,7 @@
</p>
<p class="instruction">
So let's skip right to the start of the
- Pipelines-Section. Search for <map:pipelines> or
- follow this link to the
- <a href="sitemap.xmap.html#Start+of+Pipelines">
- beginning of the pipelines-element
- </a>
+ Pipelines-Section. Search for <code><![CDATA[map:pipelines]]></code>
</p>
<p>
@@ -184,35 +171,42 @@
Like all Cocoon applications, Forrest knows which
pipeline to use for processing a certain request by
looking at the entry criteria for each pipeline it comes
- across. These can be a match against a given pattern,
+ across. This can be a match against a given pattern,
the test if a certain files exists or one of many other
possible tests that Cocoon supports.
</p>
- <p class="instruction">
+ <p>
To better know what we are talking about, let's follow
- Forrest down the list to the
- <a href="sitemap.xmap.html#Test+for+First+Pipeline">
- Test for the First Pipeline
- </a>.
+ Forrest down the list to the Test for the First Pipeline:
+ </p>
+
+ <p class="instruction">
+ Scroll down to the line
+ <code><![CDATA[<map:match pattern="cprofile.*">]]></code>
</p>
<p>
Here you can see that very specialized matches need to occur
early in the sitemap. The
requested file (and pathname) is compared to a pattern
- '*.xlex' that would match if our request ended with
- '.xlex' and had no pathname. Since it doesn't, we don't
+ 'cprofile.*' that would match if our request started with
+ 'cprofile', endet with any kind of extension and had no pathname.
Since it doesn't, we don't
have a match and need to keep looking.
</p>
<p class="instruction">
- Skip forward until we find the
- <a href="sitemap.xmap.html#First+Match+for+%22**%2F*.html%22">
- First Match for "**/*.html"
- </a>
- (<map:match pattern="**/*.html">).
+ Skip forward until you find
+ <code><![CDATA[<map:match pattern="**/*.html">]]></code>.
+
</p>
+
+ <note>While scrolling down you may have noticed the match-pattern
+ <code><![CDATA[<map:match pattern="*.html">]]></code> a couple of
+ lines earlier. This will not match our request since *.something
in Cocoon matches only
+ files in the root directory.
+ </note>
+
</section>
<section id="html-pipeline">
@@ -223,18 +217,18 @@
</p>
<source><![CDATA[
<map:match pattern="**/*.html">
- <map:aggregate element="site">
- <map:part src="cocoon:/skinconf.xml"/>
- <map:part src="cocoon:/build-info"/>
- <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>]]></source>
+ <map:aggregate element="site">
+ <map:part src="cocoon:/skinconf.xml"/>
+ <map:part src="cocoon:/build-info"/>
+ <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="transform.site.xhtml"/>
+ <map:parameter name="path" value="{0}"/>
+ </map:call>
+ </map:match>]]></source>
<p>
In the first part of this pipeline, the
aggregate-element assembles information required to build
@@ -259,7 +253,7 @@
back into our pipeline.
(The 'pseudo' goes back to the fact that unlike
'http' or 'ftp', which are real protocols, you can use cocoon:
- only within the cocoon environments as only they will know what to
+ only within the cocoon environments as only Cocoon will know what to
do with it.)
</p>
<p>
@@ -330,10 +324,8 @@
</p>
<p class="instruction">
- Search for '**body-*.html' from the beginning of the
- sitemap or jump to the
- <a href="sitemap.xmap.html#First+Match+for+%27**body-*.html%27">First
Match for '**body-*.html'</a>
- to see where we find our next match.
+ Search for <code><![CDATA[**body-*.html]]></code> from the beginning
of the
+ sitemap to see where we find our next match.
</p>
</section>
<section id="match-1">
@@ -345,12 +337,12 @@
</p>
<source><![CDATA[
<map:select type="exists">
- <map:when test="{properties:content.xdocs}mytests/mybad.ehtml">]]></source>
+ <map:when test="{lm:project.{1}{2}.ehtml}">]]></source>
<p>
we quickly discover that there can't be a file of
that name in the project-directory.
<br />
- (The variable '{properties:content.xdocs}' is always replaced with
+ (The variable '{lm:project.}' is always replaced with
the name of your project directory that you can change
in the 'forrest.properties'-file.)
</p>
@@ -364,8 +356,7 @@
<title>Second Match for '**body-*.html'</title>
<p class="instruction">
Continue searching downwards for '**body-*.html' in the
- sitemap-file or jump directly to the
- <a
href="sitemap.xmap.html#Second+Match+for+%27**body-*.html%27">Second Match for
'**body-*.html'</a>.
+ sitemap-file.
</p>
<p>
Looking at the pipeline that handles the request, we see that
@@ -418,8 +409,7 @@
'/mytests/mybad.xml'.
</p>
<p>
- We find it in the pattern
- <a href="sitemap.xmap.html#First+Match+for+%27**.xml%27">'**.xml'></a>,
+ We find it in the pattern <code><![CDATA[<map:match
pattern="**.xml">]]></code>,
which is the standard handling for all xml-requests.
</p>
<p>
@@ -427,7 +417,7 @@
this pipeline, it falls right through to the map:mount-element
at the end:
</p>
- <source><![CDATA[<map:mount uri-prefix="" src="forrest.xmap"
check-reload="yes" />]]></source>
+ <source><![CDATA[<map:mount uri-prefix="" src="forrest.xmap"
check-reload="yes" />]]></source>
<p>
which makes Forrest load and process a secondary sitemap,
the file 'forrest.xmap' in the same directory.
@@ -437,33 +427,23 @@
matching pattern.
</p>
<p>
- Our search leads us to the
- <a href="forrest.xmap.html#Second+Match+for+%27**.xml%27">
- Second Match for '**.xml'
- </a>,
- a pipeline designed to handle internationalisation if that
- feature is configured. Since it is not, all it does is
- call the file-resolver-resource with the full pathname of
- our file but no extension.
+ Our search first leads us to the matcher <code><![CDATA[<map:match
type="wildcard" pattern="**.xml">]]></code>
+ with a number of submatchers embedded into it.
</p>
-<source><![CDATA[
-<map:call resource="file-resolver">
- <map:parameter name="uri" value="mytests/mybad"/>
-</map:call>]]></source>
- </section>
- <section id="file">
- <title>Introducing the File-Resolver</title>
- <p class="instruction">
- To find out more about the working of the file-resolver,
- search for the definition of the
- <a href="forrest.xmap.html#Definition+of+File-Resolver-Resource">
- <map:resource name="file-resolver">
- </a>
- higher up in the file.
+ <p>The first one, <code><![CDATA[<map:match type="wildcard"
pattern="**.xml">]]></code>, would handle input coming from Forrest plugins.
+ We won't go into details here.</p>
+ <p>
+ All further matchers <code><![CDATA[<map:match type="i18n"
pattern="{properties:content.xdocs}{1}.*.xml"> ]]></code>.
+ implement what we call a cascade of matchers. By testing for the
existence of one source file after another Forrest will use and process the
+ first of the tested source-formats found.
</p>
+
+ <note>Using the i18n-matcher here, Forrest will do a lot more than just
finding content in one of many possible source formats.
+ It will also make sure that the the proper language version of the
conent (if there are several) is used.
+ Read more about this matcher <a
href="http://cocoon.apache.org/2.1/apidocs/org/apache/cocoon/matching/LocaleMatcher.html">http://cocoon.apache.org/2.1/apidocs/org/apache/cocoon/matching/LocaleMatcher.html</a></note>
<p>
- Here you will find a pipeline that tests for the existence of
- the file with different extensions. '.html' is second in this
+ Checking each matcher in turn you will find that a pipeline that tests
for the existence of
+ the file with different extensions. '.html' is third in this
list and leads to the processing steps shown below:
</p>
</section>
@@ -471,28 +451,25 @@
<section id="process-html">
<title>html-Default Processing</title>
<p>
- The default processing of html-files consists of four
+ The default processing of html-files consists of three
processing steps:
</p>
<ol>
<li>
- <code><map:generate src="{properties:content.xdocs}{uri}.html"
type="html"/></code><br/>
- Using the html-generator, Forrest reads the html-document
+ <code><![CDATA[<map:generate src="{source}" type="html"
/>]]></code><br/>
+ Using Cocoons html-generator, Forrest reads the html-document
from file and uses JTidy to clean up and convert it to xml
- (which is required for all processing in cocoon pipelines).
+ (which is required for all processing in Cocoon pipelines).
At the output of this transformer we will have a valid
XHTML-document althought it might still contain some unwanted
elements. We'll deal with those later (see
<a href="#custom">When to customize</a>).
</li>
<li>
- <code><map:transform
src="{forrest:forrest.stylesheets}/html2document.xsl"/></code><br/>
- Using the standard stylesheet 'html2document.xsl', this XHTML is
- transformed into Forrest standard document format.
- </li>
- <li>
- <code><map:transform type="idgen"/></code><br/>
- This step generates IDs required for navigation within the page.
+ <code><![CDATA[<map:transform src="{lm:transform.html.document}"
/>]]></code><br/>
+ Using the standard stylesheet 'html-to-document.xsl', this XHTML is
+ transformed into Forrest's <a href="site:glossary">Standard
Document Format</a>. (refer to a detailed <a
href="site:locationmap">explanation of locationsmaps</a>
+ to understand exactly how and where that stylesheet is found!)
</li>
<li>
<code><map:serialize type="xml-document"/></code><br/>
@@ -515,8 +492,8 @@
<title>Returning to the '**body-*.html'-Pipeline</title>
<p>
On returning into the
- <a
href="sitemap.xmap.html#Returning+to+the+%27**body-*.html%27+Pipeline">'**body-*.html'
pipeline</a>,
- procesing continues with the next components in this pipeline:
+ '**body-*.html'-Pipeline (in sitemap.xmap),
+ processing continues with the next components in this pipeline:
</p>
<ul>
<li>
@@ -535,7 +512,7 @@
directory structure. It also resolves any special Forrest links.
</li>
<li>
- The final transformation, as the name suggests, will take
+ The final transformation, <code><![CDATA[<map:transform
src="{lm:transform.html.broken-links}" />]]></code> as the name suggests, will
take
care of reporting broken site-links.
</li>
<li>
@@ -598,24 +575,20 @@
<title>How to customize?</title>
<p>
To add your own custom processing for a group of pages, you will
- create a project sitemap with pipelines that process documents
+ enhance the project sitemap with pipelines that process your
documents
according to your specifications.
</p>
<p>
This project sitemap is located in the file
'src/documentation/sitemap.xmap' in your Forrest project directory
- and will be created automatically when you seed a new project.
- At this point it contains only one
- <a
href="project_sitemap.xmap.html#Example+pipeline+for+%27**custom.xml%27">
- pipeline for handling the '**custom.xml'-pattern</a> as an example.
+ and is created automatically whenever you seed a new project.
+ At this point it already contains a few examples for custom
pipelines.
</p>
<p>
To add your own custom processing, edit the file and add a new
pipeline to the project sitemap. Since the project sitemap is
- loaded into the main sitemap
- <a href="sitemap.xmap.html#Insertion+Point+for+Project+Sitemap">
- right at the top</a>, your pipeline intercepts practically all
- of Forrest's standard pipelines.
+ loaded into the main sitemap right at the top (search for 'This is
the user pipeline'),
+ your pipeline intercepts practically all of Forrest's standard
pipelines.
</p>
</section>
@@ -668,24 +641,22 @@
</map:match>
</map:pipeline>]]></source>
<p class="instruction">
- Open the 'forrest.xmap', navigate to the file-resolver-section,
- copy the four lines for handling *.html files and paste them into
- your new pipeline.
+ Open the 'forrest.xmap', search for <code><![CDATA[<map:match
type="i18n" pattern="{properties:content.xdocs}{1}.*.html">]]></code>,
+ copy the three lines for handling *.html files and paste them into
your new pipeline.
</p>
<source><![CDATA[
<!--Custom Pipeline for my bad html-pages-->
<map:pipeline>
<map:match pattern="mytest/*.xml">
- <map:generate src="{properties:content.xdocs}{uri}.html" type="html"/>
- <map:transform src="{forrest:forrest.stylesheets}/html2document.xsl"/>
- <map:transform type="idgen"/>
+ <map:generate src="mytest/{1}.html" type="html" />
+ <map:transform src="{lm:transform.html.document}" />
<map:serialize type="xml-document"/>
</map:match>
</map:pipeline>]]></source>
<p>
Your custom pipeline will now behave exactly like the standard
- html-handler. Now all that is left to be done is creating the
+ html-handler. All that is left to be done is creating the
custom transformation and adding it the pipeline.
</p>
<p class="instruction">
@@ -703,12 +674,11 @@
<!--Custom Pipeline for my bad html-pages-->
<map:pipeline>
<map:match pattern="mytest/*.xml">
- <map:generate src="{properties:content.xdocs}{uri}.html" type="html"
/>]]>
- <strong><![CDATA[
+ <map:generate src="mytest/{1}.html" type="html" />]]>
+ <strong><![CDATA[
<map:transform
src="{properties:resources.stylesheets}/fixMyBadHTML.xsl"/>]]>
- </strong><![CDATA[
- <map:transform src="{forrest:forrest.stylesheets}/html2document.xsl" />
- <map:transform type="idgen" />
+ </strong><![CDATA[
+ <map:transform src="{lm:transform.html.document}" />
<map:serialize type="xml-document"/>
</map:match>
</map:pipeline>]]></source>