You are viewing a plain text version of this content. The canonical link for it is here.
Posted to svn@forrest.apache.org by cr...@apache.org on 2006/02/09 01:26:32 UTC

svn commit: r376128 [11/34] - in /forrest/site: ./ docs_0_60/ docs_0_60/howto/ docs_0_60/howto/bugzilla-patch/ docs_0_60/howto/multi/ docs_0_70/ docs_0_70/howto/ docs_0_70/howto/cvs-ssh/ docs_0_70/howto/multi/ docs_0_80/ docs_0_80/howto/ docs_0_80/howt...

Added: forrest/site/docs_0_70/howto/sitemap.xmap.source.xml
URL: http://svn.apache.org/viewcvs/forrest/site/docs_0_70/howto/sitemap.xmap.source.xml?rev=376128&view=auto
==============================================================================
--- forrest/site/docs_0_70/howto/sitemap.xmap.source.xml (added)
+++ forrest/site/docs_0_70/howto/sitemap.xmap.source.xml Wed Feb  8 16:26:20 2006
@@ -0,0 +1,633 @@
+<?xml version="1.0" encoding="ISO-8859-1"?><document><header> <!-- <meta content="HTML Tidy, see www.w3.org" name="generator"/> --> <title>Annotated core sitemap.xmap</title></header><body><section><title>sitemap.xmap</title><pre>
+&lt;?xml version="1.0"?&gt;
+&lt;!-- ===============================================
+Default Forrest sitemap, defining the whole site.
+Delegates to the other *.xmap files.  See
+http://forrest.apache.org/docs/sitemap-ref.html
+
+$Revision: 1.12 $
+==================================================== --&gt;
+</pre><section><title>Start of Sitemap</title><pre>
+&lt;map:sitemap xmlns:map="http://apache.org/cocoon/sitemap/1.0"&gt;
+  &lt;map:components&gt;
+    &lt;map:generators default="file"&gt;
+      &lt;map:generator name="file"      src="org.apache.cocoon.generation.FileGenerator" /&gt;
+      &lt;map:generator name="html"
+                     src="org.apache.cocoon.generation.HTMLGenerator"&gt;
+        &lt;jtidy-config&gt;WEB-INF/jtidy.properties&lt;/jtidy-config&gt;
+      &lt;/map:generator&gt;
+      &lt;map:generator name="exception"
+                  src="org.apache.cocoon.generation.ParseExceptionGenerator"/&gt;
+      &lt;!--
+      &lt;map:generator name="html"      src="org.apache.cocoon.generation.HTMLGenerator"&gt;
+        &lt;jtidy-config&gt;jtidy.properties&lt;/jtidy-config&gt;
+      &lt;/map:generator&gt;
+      &lt;map:generator name="directory" src="org.apache.cocoon.generation.DirectoryGenerator" /&gt;
+      --&gt;
+      &lt;map:generator name="notifier" src="org.apache.cocoon.sitemap.NotifyingGenerator" /&gt;
+      
+      &lt;map:generator name="text2xml" logger="sitemap.generator.textgenerator"
+                     src="org.apache.cocoon.generation.TextGenerator"&gt;
+       &lt;parameter name="localizable" value="true"/&gt;
+      &lt;/map:generator&gt;
+
+    &lt;/map:generators&gt;
+
+    &lt;map:transformers default="xslt"&gt;
+
+      &lt;!-- Add values to skinconf that need extra processing like the color shades --&gt;
+      &lt;map:transformer name="skinconf" src="org.apache.forrest.conf.SkinconfTransformer"/&gt;
+              
+      &lt;!-- Generates @id attributes from &lt;title&gt; strings --&gt;
+      &lt;map:transformer name="idgen" src="org.apache.forrest.util.IdGeneratorTransformer"&gt;
+        &lt;element&gt;//*[local-name() = 'section']&lt;/element&gt;
+        &lt;id&gt;title/text()&lt;/id&gt;
+      &lt;/map:transformer&gt;
+
+      &lt;!-- Rewrites links, e.g. transforming href="site:index" to href="../index.html" --&gt;
+      &lt;!-- See http://forrest.apache.org/docs/sitemap-ref.html#linkrewriting_impl --&gt;
+      &lt;map:transformer name="linkrewriter" logger="sitemap.transformer.linkrewriter" src="org.apache.cocoon.transformation.LinkRewriterTransformer"&gt;
+        &lt;link-attrs&gt;href src&lt;/link-attrs&gt;
+        &lt;schemes&gt;site ext&lt;/schemes&gt;
+
+        &lt;input-module name="site"&gt;
+          &lt;input-module name="linkmap"&gt;
+            &lt;file src="{src}" reloadable="true" /&gt;
+          &lt;/input-module&gt;
+          &lt;prefix&gt;/site//&lt;/prefix&gt;
+          &lt;suffix&gt;/@href&lt;/suffix&gt;
+        &lt;/input-module&gt;
+        &lt;input-module name="ext"&gt;
+          &lt;input-module name="linkmap"&gt;
+            &lt;file src="{src}" reloadable="true" /&gt;
+          &lt;/input-module&gt;
+          &lt;prefix&gt;/site/external-refs//&lt;/prefix&gt;
+          &lt;suffix&gt;/@href&lt;/suffix&gt;
+        &lt;/input-module&gt;
+      &lt;/map:transformer&gt;
+
+      &lt;map:transformer name="xpath" logger="sitemap.transformer.xpath" src="org.apache.forrest.util.XPathTransformer" /&gt;
+      
+      &lt;map:transformer name="xslt" src="org.apache.cocoon.transformation.TraxTransformer" logger="sitemap.transformer.xslt" pool-max="32" pool-min="8" pool-grow="2"&gt;
+        &lt;use-request-parameters&gt;false&lt;/use-request-parameters&gt;
+        &lt;use-browser-capabilities-db&gt;false&lt;/use-browser-capabilities-db&gt;
+        &lt;use-deli&gt;false&lt;/use-deli&gt;
+        &lt;transformer-factory&gt;org.apache.xalan.processor.TransformerFactoryImpl&lt;/transformer-factory&gt;
+        &lt;!--&lt;transformer-factory&gt;net.sf.saxon.TransformerFactoryImpl&lt;/transformer-factory&gt;--&gt;
+        &lt;!--&lt;transformer-factory&gt;com.icl.saxon.TransformerFactoryImpl&lt;/transformer-factory&gt;--&gt;
+        &lt;!--&lt;transformer-factory&gt;org.apache.xalan.xsltc.trax.TransformerFactoryImpl&lt;/transformer-factory&gt;--&gt;
+      &lt;/map:transformer&gt;
+      
+      &lt;map:transformer name="xsltc" src="org.apache.cocoon.transformation.TraxTransformer" logger="sitemap.transformer.xslt" pool-max="32" pool-min="8" pool-grow="2"&gt;
+        &lt;use-request-parameters&gt;false&lt;/use-request-parameters&gt;
+        &lt;use-browser-capabilities-db&gt;false&lt;/use-browser-capabilities-db&gt;
+        &lt;use-deli&gt;false&lt;/use-deli&gt;
+        &lt;transformer-factory&gt;org.apache.xalan.xsltc.trax.TransformerFactoryImpl&lt;/transformer-factory&gt;
+      &lt;/map:transformer&gt;
+
+      &lt;map:transformer name="xslt-saxon"
+         pool-grow="2" pool-max="32" pool-min="8"
+         src="org.apache.cocoon.transformation.TraxTransformer"&gt;
+       &lt;use-request-parameters&gt;false&lt;/use-request-parameters&gt;
+       &lt;use-browser-capabilities-db&gt;false&lt;/use-browser-capabilities-db&gt;
+       &lt;xslt-processor-role&gt;saxon&lt;/xslt-processor-role&gt;
+     &lt;/map:transformer&gt;
+      
+      &lt;map:transformer name="xinclude" src="org.apache.cocoon.transformation.XIncludeTransformer" logger="sitemap.transformer.xinclude" pool-grow="2" pool-max="16" pool-min="2" /&gt;
+
+      &lt;map:transformer name="cinclude" pool-grow="2" pool-max="16" pool-min="2" src="org.apache.cocoon.transformation.CIncludeTransformer" logger="sitemap.transformer.cinclude"/&gt;
+   &lt;map:transformer name="pattern"
+                    src="org.apache.cocoon.transformation.PatternTransformer" 
+                    logger="sitemap.transformer.pattern"&gt;
+    &lt;parameter name="groups" value="true"/&gt;
+   &lt;/map:transformer&gt;
+   &lt;map:transformer name="lexer"
+                    src="org.apache.cocoon.transformation.LexicalTransformer" 
+                    logger="sitemap.transformer.lexer"&gt;
+    &lt;parameter name="localizable" value="true"/&gt;
+   &lt;/map:transformer&gt;
+   &lt;map:transformer name="parser"
+                    src="org.apache.cocoon.transformation.ParserTransformer" 
+                    logger="sitemap.transformer.parser"&gt;
+    &lt;parameter name="flatten" value="true"/&gt;
+    &lt;parameter name="recovery" value="true"/&gt;
+    &lt;parameter name="localizable" value="true"/&gt;
+   &lt;/map:transformer&gt;
+    &lt;/map:transformers&gt;
+
+    &lt;map:readers default="resource"&gt;
+      &lt;map:reader name="resource" src="org.apache.cocoon.reading.ResourceReader"/&gt;
+    &lt;/map:readers&gt;
+
+    &lt;map:serializers default="html"&gt;
+      &lt;map:serializer name="html" mime-type="text/html" src="org.apache.cocoon.serialization.HTMLSerializer"&gt;
+        &lt;doctype-public&gt;-//W3C//DTD HTML 4.01 Transitional//EN&lt;/doctype-public&gt;
+        &lt;doctype-system&gt;http://www.w3.org/TR/html4/loose.dtd&lt;/doctype-system&gt;
+        &lt;encoding&gt;UTF-8&lt;/encoding&gt;
+      &lt;/map:serializer&gt;
+
+      &lt;map:serializer name="xml" mime-type="text/xml" src="org.apache.cocoon.serialization.XMLSerializer"/&gt;
+
+      &lt;map:serializer name="xml-document" mime-type="text/xml" src="org.apache.cocoon.serialization.XMLSerializer"&gt;
+        &lt;cdata-section-elements&gt;source&lt;/cdata-section-elements&gt;
+        &lt;doctype-public&gt;-//APACHE//DTD Documentation V1.3//EN&lt;/doctype-public&gt;
+        &lt;doctype-system&gt;document-v13.dtd&lt;/doctype-system&gt;
+      &lt;/map:serializer&gt;
+
+      &lt;map:serializer name="links" src="org.apache.cocoon.serialization.LinkSerializer"&gt;
+        &lt;encoding&gt;ISO-8859-1&lt;/encoding&gt;
+      &lt;/map:serializer&gt;
+      
+      &lt;map:serializer name="svgxml" src="org.apache.cocoon.serialization.XMLSerializer" mime-type="image/svg+xml"&gt;
+        &lt;doctype-public&gt;-//W3C//DTD SVG 1.0//EN&lt;/doctype-public&gt;
+        &lt;doctype-system&gt;http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd&lt;/doctype-system&gt;
+      &lt;/map:serializer&gt;
+      &lt;map:serializer logger="sitemap.serializer.text" mime-type="text/plain" name="text" src="org.apache.cocoon.serialization.TextSerializer"&gt;
+        &lt;encoding&gt;UTF-8&lt;/encoding&gt;
+      &lt;/map:serializer&gt;
+      
+     &lt;!--
+      &lt;map:serializer mime-type="application/x-shockwave-flash" name="swf" src="org.apache.cocoon.serialization.SWFSerializer"/&gt;
+      &lt;map:serializer mime-type="application/msword" name="fo2rtf" src="org.apache.cocoon.serialization.RTFSerializer"/&gt;
+      --&gt;
+    &lt;/map:serializers&gt;
+
+    &lt;map:matchers default="wildcard"&gt;
+      &lt;map:matcher name="wildcard" src="org.apache.cocoon.matching.WildcardURIMatcher"/&gt;
+      &lt;map:matcher name="regexp" src="org.apache.cocoon.matching.RegexpURIMatcher"/&gt;
+    &lt;/map:matchers&gt;
+
+    &lt;map:selectors&gt;
+      &lt;map:selector logger="sitemap.selector.exists" name="exists" src="org.apache.forrest.sourceexists.SourceExistsSelector" /&gt;
+   &lt;map:selector logger="sitemap.selector.exception" name="exception"
+                 src="org.apache.cocoon.selection.ExceptionSelector"&gt;
+     &lt;exception name="syntax" class="net.sourceforge.chaperon.process.ParseException"/&gt;
+     &lt;exception class="java.lang.Throwable" unroll="true"/&gt;
+   &lt;/map:selector&gt;
+    &lt;/map:selectors&gt;
+
+    &lt;map:pipes default="caching"&gt;
+      &lt;map:pipe name="caching" src="org.apache.cocoon.components.pipeline.impl.CachingProcessingPipeline"/&gt;
+      &lt;!--
+      &lt;map:pipe name="noncaching" src="org.apache.cocoon.components.pipeline.impl.NonCachingProcessingPipeline"/&gt;
+      &lt;map:pipe name="profile-caching" src="org.apache.cocoon.components.profiler.ProfilingCachingProcessingPipeline"/&gt;
+      &lt;map:pipe name="profile-noncaching" src="org.apache.cocoon.components.profiler.ProfilingNonCachingProcessingPipeline"/&gt;
+      --&gt;
+    &lt;/map:pipes&gt;
+  &lt;/map:components&gt;
+
+  &lt;!-- 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.
+  &lt;map:views&gt;
+    &lt;map:view name="links" from-position="last"&gt;
+      &lt;map:transform src="{forrest:stylesheets}/filterlinks.xsl"&gt;
+        &lt;map:parameter name="ctxbasedir" value="{realpath:.}/"/&gt;
+      &lt;/map:transform&gt;
+      &lt;map:serialize type="links"/&gt;
+    &lt;/map:view&gt;
+  &lt;/map:views&gt;
+  --&gt;
+
+  &lt;map:resources&gt;
+    &lt;map:resource name="skinit"&gt;
+        &lt;map:select type="exists"&gt;
+          &lt;map:when test="{project:skins-dir}{forrest:skin}/xslt/html/{type}.xsl"&gt;
+            &lt;map:transform src="{project:skins-dir}{forrest:skin}/xslt/html/{type}.xsl"&gt;
+              &lt;map:parameter name="notoc" value="{notoc}"/&gt;
+              &lt;!-- For backwards-compat with 0.2 - 0.4 skins --&gt;
+              &lt;map:parameter name="isfaq" value="{notoc}"/&gt;
+              &lt;map:parameter name="nopdf" value="{nopdf}"/&gt;
+              &lt;map:parameter name="path" value="{path}"/&gt;
+              &lt;map:parameter name="config-file" value="{project:skinconf}"/&gt;
+            &lt;/map:transform&gt;
+          &lt;/map:when&gt;
+          &lt;map:otherwise&gt;
+            &lt;map:transform src="{forrest:context}/skins/{forrest:skin}/xslt/html/{type}.xsl"&gt;
+              &lt;map:parameter name="notoc" value="{notoc}"/&gt;
+              &lt;!-- For backwards-compat with 0.2 - 0.4 skins --&gt;
+              &lt;map:parameter name="isfaq" value="{notoc}"/&gt;
+              &lt;map:parameter name="nopdf" value="{nopdf}"/&gt;
+              &lt;map:parameter name="path" value="{path}"/&gt;
+              &lt;map:parameter name="config-file" value="{project:skinconf}"/&gt;
+            &lt;/map:transform&gt;
+          &lt;/map:otherwise&gt;
+        &lt;/map:select&gt;
+      &lt;map:serialize/&gt;
+    &lt;/map:resource&gt;
+
+  &lt;/map:resources&gt;
+</pre></section><section><title>Start of Pipelines</title><pre>
+  &lt;!-- =========================== Pipelines ================================= --&gt;
+  &lt;map:pipelines&gt;
+
+  &lt;map:pipeline type="caching" internal-only="true"&gt;
+</pre></section><section><title>Test for First Pipeline</title><pre>
+      &lt;map:match pattern="*.xlex"&gt;
+        &lt;map:select type="exists"&gt;
+          &lt;map:when test="resources/chaperon/grammars/{1}.xlex"&gt;
+            &lt;map:read src="resources/chaperon/grammars/{1}.xlex"/&gt;
+          &lt;/map:when&gt;
+          &lt;map:otherwise&gt;
+            &lt;map:generate  type="text2xml"   src="{forrest:context}/resources/chaperon/grammars/{1}.grm"/&gt;
+            &lt;map:transform type="lexer"  src="{forrest:context}/resources/chaperon/grammars/grm.xlex"/&gt;
+            &lt;map:transform type="parser" src="{forrest:context}/resources/chaperon/grammars/grm.xgrm"/&gt;
+            &lt;map:transform               src="{forrest:context}/resources/chaperon/stylesheets/text4regex.xsl"/&gt;
+            &lt;map:transform type="lexer"  src="{forrest:context}/resources/chaperon/grammars/regex.xlex"/&gt;
+            &lt;map:transform type="parser" src="{forrest:context}/resources/chaperon/grammars/regex.xgrm"/&gt;
+            &lt;map:transform               src="{forrest:context}/resources/chaperon/stylesheets/grm2xlex.xsl"/&gt;
+            &lt;map:serialize type="xml"/&gt;
+          &lt;/map:otherwise&gt;
+        &lt;/map:select&gt;
+      &lt;/map:match&gt;
+    &lt;/map:pipeline&gt;
+</pre></section><section><title>Insertion Point for Project Sitemap</title><pre>
+      &lt;!--
+         This is the user pipeline, that can answer requests instead
+         of the Forrest one, or let requests pass through.
+         To take over the rendering of a file it must match the file name and path.
+         To take over the generation of the intermediate format, it must give
+         Forrest the same filename but ending with xml, and a DTD that Forrest
+         recognizes.
+      --&gt;
+      &lt;map:pipeline internal-only="false"&gt;
+           &lt;map:select type="exists"&gt;
+             &lt;map:when test="{project:sitemap}"&gt;
+               &lt;map:mount uri-prefix=""
+                          src="{project:sitemap}" 
+                          check-reload="yes" 
+                          pass-through="true"/&gt;
+             &lt;/map:when&gt;
+           &lt;/map:select&gt;
+      &lt;/map:pipeline&gt;
+      
+      &lt;map:pipeline internal-only="false"&gt;
+        &lt;map:select type="exists"&gt;
+          &lt;map:when test="{project:temp-dir}/internal.xmap"&gt;
+            &lt;map:mount uri-prefix="" src="{project:temp-dir}/internal.xmap" check-reload="yes" pass-through="true"/&gt;
+          &lt;/map:when&gt;
+        &lt;/map:select&gt;
+      &lt;/map:pipeline&gt;
+      
+      &lt;map:pipeline internal-only="false"&gt;
+         &lt;map:match pattern="skinconf.xml"&gt;
+           &lt;map:generate src="{project:skinconf}" /&gt;
+           &lt;map:transform src="{forrest:stylesheets}/strip-doctype.xsl"/&gt;
+           &lt;map:transform src="{forrest:stylesheets}/upgrade-skinconf.xsl"/&gt;
+           &lt;map:select type="exists"&gt;
+             &lt;map:when test="{project:skins-dir}{forrest:skin}/skinconf.xsl"&gt;
+               &lt;map:transform src="{project:skins-dir}{forrest:skin}/skinconf.xsl"/&gt;
+             &lt;/map:when&gt;
+           &lt;/map:select&gt;
+           &lt;map:select type="exists"&gt;
+             &lt;map:when test="{forrest:context}/skins/{forrest:skin}/skinconf.xsl"&gt;
+               &lt;map:transform src="{forrest:context}/skins/{forrest:skin}/skinconf.xsl"/&gt;
+             &lt;/map:when&gt;
+           &lt;/map:select&gt;
+           &lt;map:transform src="{forrest:context}/skins/common/skinconf.xsl"/&gt;
+           &lt;map:transform type="skinconf"/&gt;
+           &lt;map:serialize type="xml" /&gt;
+         &lt;/map:match&gt;
+
+         &lt;!-- Add some build information, which is added to the html head --&gt;
+         &lt;map:match pattern="build-info"&gt;
+           &lt;map:generate src="{project:temp-dir}/build-info.xml"/&gt;
+           &lt;map:serialize type="xml"/&gt;
+         &lt;/map:match&gt;
+       &lt;/map:pipeline&gt;
+       
+    &lt;map:pipeline internal-only="false"&gt;
+      &lt;!-- ============================================================ --&gt;
+      &lt;!-- SOURCE FORMATS                                               --&gt;
+      &lt;!--                 Raw XML sources, typically doc-v12 format    --&gt;
+      &lt;!-- ============================================================ --&gt;
+      &lt;!-- http://forrest.apache.org/docs/sitemap-ref.html#source_pipelines --&gt;
+</pre></section><section><title>First Match for '**.xml'</title><pre>
+      &lt;!-- Body content --&gt;
+      &lt;map:match pattern="**.xml"&gt;
+     
+        &lt;map:match pattern="linkmap.xml"&gt;
+          &lt;map:mount uri-prefix="" src="linkmap.xmap" check-reload="yes" /&gt;
+        &lt;/map:match&gt;
+              
+        &lt;map:match pattern="changes.xml"&gt;
+          &lt;map:mount uri-prefix="" src="status.xmap" check-reload="yes" /&gt;
+        &lt;/map:match&gt;
+
+        &lt;map:match pattern="todo.xml"&gt;
+          &lt;map:mount uri-prefix="" src="status.xmap" check-reload="yes" /&gt;
+        &lt;/map:match&gt;
+
+        &lt;map:match pattern="**dtdx.xml"&gt;
+          &lt;map:mount uri-prefix="" src="dtd.xmap" check-reload="yes" /&gt;
+        &lt;/map:match&gt;
+
+        &lt;map:match pattern="forrest-issues.xml"&gt;
+          &lt;map:mount uri-prefix="" src="issues.xmap" check-reload="yes" /&gt;
+        &lt;/map:match&gt;
+
+        &lt;map:match pattern="**faq.xml"&gt;
+          &lt;map:mount uri-prefix="" src="faq.xmap" check-reload="yes" /&gt;
+        &lt;/map:match&gt;
+
+        &lt;map:match pattern="community/**index.xml"&gt;
+          &lt;map:mount uri-prefix="" src="forrest.xmap" check-reload="yes" /&gt;
+        &lt;/map:match&gt;
+
+        &lt;map:match pattern="community/*/**.xml"&gt;
+          &lt;map:mount uri-prefix="" src="revisions.xmap" check-reload="yes" /&gt;
+        &lt;/map:match&gt;
+
+        &lt;!-- wholesite is preferred; site is here for compatibility --&gt;
+        &lt;map:match pattern="wholesite.xml"&gt;
+          &lt;map:mount uri-prefix="" src="aggregate.xmap" check-reload="yes" /&gt;
+        &lt;/map:match&gt;
+        &lt;map:match pattern="site.xml"&gt;
+          &lt;map:mount uri-prefix="" src="aggregate.xmap" check-reload="yes" /&gt;
+        &lt;/map:match&gt;
+
+        &lt;!-- Lucene index update and search --&gt;
+        &lt;map:match pattern="lucene-*.xml"&gt;
+          &lt;map:mount uri-prefix="" src="search.xmap" check-reload="yes"/&gt;
+        &lt;/map:match&gt;
+
+        &lt;!-- Default source types --&gt;
+        &lt;map:mount uri-prefix="" src="forrest.xmap" check-reload="yes" /&gt;
+
+      &lt;/map:match&gt;
+
+      &lt;!-- Menu content --&gt;
+      &lt;map:match pattern="abs-menulinks"&gt;
+        &lt;map:mount uri-prefix="" src="menu.xmap" check-reload="yes" /&gt;
+      &lt;/map:match&gt;
+
+      &lt;map:match pattern="**menulinks-*"&gt;
+        &lt;map:mount uri-prefix="" src="menu.xmap" check-reload="yes" /&gt;
+      &lt;/map:match&gt;
+
+      &lt;!-- Link maps --&gt;
+      &lt;map:match pattern="abs-linkmap"&gt;
+        &lt;map:mount uri-prefix="" src="linkmap.xmap"/&gt;
+      &lt;/map:match&gt;
+
+      &lt;map:match pattern="**linkmap-*"&gt;
+        &lt;map:match pattern="linkmap-wholesite.*"&gt;
+          &lt;map:mount uri-prefix="" src="aggregate.xmap" check-reload="yes" /&gt;
+        &lt;/map:match&gt;
+        &lt;map:match pattern="linkmap-site.*"&gt;
+          &lt;map:mount uri-prefix="" src="aggregate.xmap" check-reload="yes" /&gt;
+        &lt;/map:match&gt;
+
+        &lt;map:mount uri-prefix="" src="linkmap.xmap" check-reload="yes" /&gt;
+      &lt;/map:match&gt;
+
+    &lt;/map:pipeline&gt;
+
+
+    &lt;!-- ============================================================ --&gt;
+    &lt;!-- INTERMEDIATE FORMATS                                         --&gt;
+    &lt;!--                          Tabs, menus and body HTML.          --&gt;
+    &lt;!--                       Called from output format pipelines    --&gt;
+    &lt;!-- ============================================================ --&gt;
+    &lt;!-- http://forrest.apache.org/docs/sitemap-ref.html#intermediate_pipelines --&gt;
+
+    &lt;map:pipeline internal-only="false"&gt;
+
+      &lt;!-- External matches --&gt;
+      &lt;!-- (HTML rendered directly from special formats) --&gt;
+      &lt;map:match pattern="**body-faq.html"&gt;
+        &lt;map:mount uri-prefix="" src="faq.xmap" check-reload="yes" /&gt;
+      &lt;/map:match&gt;
+</pre></section><section><title>First Match for '**body-*.html'</title><pre>
+      &lt;map:match pattern="**body-*.html"&gt;
+        &lt;map:select type="exists"&gt;
+          &lt;map:when test="{project:content.xdocs}{1}{2}.ehtml"&gt;
+            &lt;map:generate src="{project:content.xdocs}{1}{2}.ehtml" /&gt;
+            &lt;map:transform src="{forrest:stylesheets}/html2htmlbody.xsl" /&gt;
+            &lt;map:transform type="linkrewriter" src="cocoon:/{1}linkmap-{2}.html"/&gt;
+            &lt;map:transform src="resources/stylesheets/declare-broken-site-links.xsl" /&gt;
+            &lt;map:serialize type="xml" /&gt;
+          &lt;/map:when&gt;
+        &lt;/map:select&gt;
+      &lt;/map:match&gt;
+</pre></section><section><title>Second Match for '**body-*.html'</title><pre>
+      &lt;!-- Default matches --&gt;
+      &lt;!-- (HTML rendered from doc-v11 intermediate format --&gt;
+      &lt;map:match pattern="**body-*.html"&gt;
+        &lt;map:generate src="cocoon:/{1}{2}.xml"/&gt;
+</pre></section><section><title>Returning to the '**body-*.html' Pipeline</title><pre>
+        &lt;map:transform type="idgen"/&gt;
+        &lt;map:transform type="xinclude"/&gt;
+        &lt;map:transform type="linkrewriter" src="cocoon:/{1}linkmap-{2}.html"/&gt;
+        &lt;map:transform src="resources/stylesheets/declare-broken-site-links.xsl" /&gt;
+        &lt;map:call resource="skinit"&gt;
+          &lt;map:parameter name="type" value="document2html"/&gt;
+          &lt;map:parameter name="path" value="{1}{2}.html"/&gt;
+          &lt;map:parameter name="notoc" value="false"/&gt;
+        &lt;/map:call&gt;
+      &lt;/map:match&gt;
+
+      &lt;map:match pattern="**menu-*.html"&gt;
+        &lt;map:generate src="cocoon:/{1}book-{2}.html"/&gt;
+        &lt;map:transform type="linkrewriter" src="cocoon:/{1}linkmap-{2}.html"/&gt;
+        &lt;map:transform src="resources/stylesheets/declare-broken-site-links.xsl" /&gt;
+        &lt;map:call resource="skinit"&gt;
+          &lt;map:parameter name="type" value="book2menu"/&gt;
+          &lt;map:parameter name="path" value="{1}{2}.html"/&gt;
+        &lt;/map:call&gt;
+      &lt;/map:match&gt;
+
+      &lt;map:match pattern="**tab-*.html"&gt;
+        &lt;map:mount uri-prefix="" src="tabs.xmap" check-reload="yes" /&gt;
+      &lt;/map:match&gt;
+      
+      &lt;map:match pattern="**i18n-*.html"&gt;
+        &lt;map:mount uri-prefix="" src="i18n.xmap" check-reload="yes" /&gt;
+      &lt;/map:match&gt;
+
+      &lt;map:match pattern="**book-*.html"&gt;
+        &lt;map:mount uri-prefix="" src="menu.xmap" check-reload="yes" /&gt;
+      &lt;/map:match&gt;
+
+    &lt;/map:pipeline&gt;
+
+    &lt;!-- ============================================================ --&gt;
+    &lt;!-- OUTPUT FORMATS                                               --&gt;
+    &lt;!--                  Serves content directly to the user         --&gt;
+    &lt;!-- +==========================================================+ --&gt;
+    &lt;!-- http://forrest.apache.org/docs/sitemap-ref.html#output_pipelines --&gt;
+
+    &lt;map:pipeline internal-only="false"&gt;
+      &lt;map:select type="exists"&gt;
+        &lt;map:when test="{project:temp-dir}/output.xmap"&gt;
+          &lt;map:mount uri-prefix="" src="{project:temp-dir}/output.xmap" check-reload="yes" pass-through="true"/&gt;
+        &lt;/map:when&gt;
+      &lt;/map:select&gt;
+    &lt;/map:pipeline&gt;
+
+    &lt;map:pipeline internal-only="false"&gt;
+
+      &lt;map:match pattern="*.html"&gt;
+        &lt;map:aggregate element="site"&gt;
+          &lt;map:part src="cocoon:/skinconf.xml"/&gt;
+          &lt;map:part src="cocoon:/build-info"/&gt;
+          &lt;map:part src="cocoon:/tab-{0}"/&gt;
+          &lt;map:part src="cocoon:/menu-{0}"/&gt;
+          &lt;map:part src="cocoon:/body-{0}"/&gt;
+        &lt;/map:aggregate&gt;
+        &lt;map:call resource="skinit"&gt;
+          &lt;map:parameter name="type" value="site2xhtml"/&gt;
+          &lt;map:parameter name="path" value="{0}"/&gt;
+        &lt;/map:call&gt;
+      &lt;/map:match&gt;
+</pre></section><section><title>First Match for "**/*.html"</title><pre>
+  &lt;map:match pattern="**/*.html"&gt;
+    &lt;map:aggregate element="site"&gt;
+      &lt;map:part src="cocoon:/skinconf.xml"/&gt;
+      &lt;map:part src="cocoon:/build-info"/&gt;
+      &lt;map:part src="cocoon:/{1}/tab-{2}.html"/&gt;
+      &lt;map:part src="cocoon:/{1}/menu-{2}.html"/&gt;
+      &lt;map:part src="cocoon:/{1}/body-{2}.html"/&gt;
+    &lt;/map:aggregate&gt;
+    &lt;map:call resource="skinit"&gt;
+      &lt;map:parameter name="type" value="site2xhtml"/&gt;
+      &lt;map:parameter name="path" value="{0}"/&gt;
+    &lt;/map:call&gt;
+  &lt;/map:match&gt;
+
+      &lt;map:match type="regexp" pattern="^.+$"&gt;
+        &lt;map:select type="exists"&gt;
+          &lt;map:when test="{project:content.xdocs}/{0}"&gt;
+            &lt;map:mount uri-prefix="" src="raw.xmap" check-reload="yes" /&gt;
+          &lt;/map:when&gt;
+        &lt;/map:select&gt;
+      &lt;/map:match&gt;
+
+      &lt;!-- generate faq.fo specially  --&gt;
+      &lt;map:match pattern="**faq.fo"&gt;
+        &lt;map:mount uri-prefix="" src="faq.xmap" check-reload="yes" /&gt;
+      &lt;/map:match&gt;
+
+      &lt;!-- generate .fo from .xml  --&gt;
+      &lt;map:match type="regexp" pattern="^(.*?)([^/]*).fo$"&gt;
+        &lt;map:select type="exists"&gt;
+          &lt;map:when test="{project:content.xdocs}{1}{2}.fo"&gt;
+            &lt;map:generate src="{project:content.xdocs}{1}{2}.fo"/&gt;
+          &lt;/map:when&gt;
+          &lt;map:otherwise&gt;
+            &lt;map:aggregate element="site"&gt;
+              &lt;map:part src="cocoon:/skinconf.xml"/&gt;
+              &lt;map:part src="cocoon:/{1}{2}.xml"/&gt;
+            &lt;/map:aggregate&gt;
+            &lt;!-- &lt;map:transform type="idgen"/&gt; --&gt;
+            &lt;map:transform type="xinclude"/&gt;
+            &lt;map:transform type="linkrewriter" src="cocoon://{1}linkmap-{2}.fo"/&gt;
+            &lt;map:select type="exists"&gt;
+              &lt;map:when test="{project:skins-dir}{forrest:skin}/xslt/fo/document2fo.xsl"&gt;
+                &lt;map:transform src="{project:skins-dir}{forrest:skin}/xslt/fo/document2fo.xsl"&gt;
+                  &lt;map:parameter name="imagesdir" value="{project:resources.images}/"/&gt;
+                  &lt;map:parameter name="xmlbasedir" value="{project:content.xdocs}{1}"/&gt;
+                &lt;/map:transform&gt;
+              &lt;/map:when&gt;
+              &lt;map:when test="{forrest:context}/skins/{forrest:skin}/xslt/fo/document2fo.xsl"&gt;
+                &lt;map:transform src="{forrest:context}/skins/{forrest:skin}/xslt/fo/document2fo.xsl"&gt;
+                  &lt;map:parameter name="imagesdir" value="{project:resources.images}/"/&gt;
+                  &lt;map:parameter name="xmlbasedir" value="{project:content.xdocs}{1}"/&gt;
+                &lt;/map:transform&gt;
+              &lt;/map:when&gt;
+              &lt;map:otherwise&gt;
+                &lt;map:transform src="{forrest:context}/skins/common/xslt/fo/document2fo.xsl"&gt;
+                  &lt;map:parameter name="imagesdir" value="{project:resources.images}/"/&gt;
+                  &lt;map:parameter name="xmlbasedir" value="{project:content.xdocs}{1}"/&gt;
+                &lt;/map:transform&gt;
+              &lt;/map:otherwise&gt;
+            &lt;/map:select&gt;
+        &lt;/map:otherwise&gt;
+      &lt;/map:select&gt;
+        &lt;map:serialize type="xml"/&gt;
+      &lt;/map:match&gt;
+
+      &lt;map:match type="regexp" pattern="^(.*?)([^/]*).svg$"&gt;
+        &lt;map:generate src="cocoon:/{1}{2}.xml"/&gt;
+        &lt;!-- &lt;map:transform type="idgen"/&gt; --&gt;
+        &lt;map:transform type="xinclude"/&gt;
+        &lt;map:transform type="linkrewriter" src="cocoon://{1}linkmap-{2}.svg"/&gt;
+        &lt;map:transform src="resources/stylesheets/declare-broken-site-links.xsl" /&gt;
+        &lt;map:select type="exists"&gt;
+          &lt;map:when test="{project:skins-dir}{forrest:skin}/xslt/svg/document2svg.xsl"&gt;
+            &lt;map:transform src="{project:skins-dir}{forrest:skin}/xslt/svg/document2svg.xsl"&gt;
+              &lt;map:parameter name="imagesdir" value="{project:resources.images}/"/&gt;
+              &lt;map:parameter name="xmlbasedir" value="{project:content.xdocs}{1}"/&gt;
+            &lt;/map:transform&gt;
+          &lt;/map:when&gt;
+          &lt;map:when test="{forrest:context}/skins/{forrest:skin}/xslt/svg/document2svg.xsl"&gt;
+            &lt;map:transform src="{forrest:context}/skins/{forrest:skin}/xslt/svg/document2svg.xsl"&gt;
+              &lt;map:parameter name="imagesdir" value="{project:resources.images}/"/&gt;
+              &lt;map:parameter name="xmlbasedir" value="{project:content.xdocs}{1}"/&gt;
+            &lt;/map:transform&gt;
+          &lt;/map:when&gt;
+          &lt;map:otherwise&gt;
+            &lt;map:transform src="{forrest:context}/skins/common/xslt/svg/document2svg.xsl"&gt;
+              &lt;map:parameter name="imagesdir" value="{project:resources.images}/"/&gt;
+              &lt;map:parameter name="xmlbasedir" value="{project:content.xdocs}{1}"/&gt;
+            &lt;/map:transform&gt;
+          &lt;/map:otherwise&gt;
+        &lt;/map:select&gt;
+        &lt;map:serialize type="svgxml"/&gt;
+      &lt;/map:match&gt;
+      
+      &lt;map:match pattern="**changes.rss"&gt;
+        &lt;map:mount uri-prefix="" src="status.xmap" check-reload="yes" /&gt;
+      &lt;/map:match&gt;
+
+      &lt;map:match pattern="profiler"&gt;
+        &lt;map:mount uri-prefix="" src="profiler.xmap" check-reload="yes" /&gt;
+      &lt;/map:match&gt;
+
+      &lt;map:match pattern="**.lucene"&gt;
+        &lt;map:mount uri-prefix="" src="search.xmap" check-reload="yes" /&gt;
+      &lt;/map:match&gt;
+
+      &lt;map:select type="exists"&gt;
+         &lt;map:when test="{project:temp-dir}/resources.xmap"&gt;
+           &lt;map:mount uri-prefix=""
+                      src="{project:temp-dir}/resources.xmap" 
+                      check-reload="yes" 
+                      pass-through="true"/&gt;
+        &lt;/map:when&gt;
+      &lt;/map:select&gt;
+      
+      &lt;map:match pattern="**.js"&gt;
+        &lt;map:mount uri-prefix="" src="resources.xmap" check-reload="yes" /&gt;
+      &lt;/map:match&gt;
+      &lt;map:match pattern="**.css"&gt;
+        &lt;map:mount uri-prefix="" src="resources.xmap" check-reload="yes" /&gt;
+      &lt;/map:match&gt;
+      &lt;map:match pattern="**images**"&gt;
+        &lt;map:mount uri-prefix="" src="resources.xmap" check-reload="yes" /&gt;
+      &lt;/map:match&gt;
+      &lt;map:match pattern="**.png"&gt;
+        &lt;map:mount uri-prefix="" src="resources.xmap" check-reload="yes" /&gt;
+      &lt;/map:match&gt;
+     &lt;map:match pattern="**.ico"&gt;
+        &lt;map:mount uri-prefix="" src="resources.xmap" check-reload="yes" /&gt;
+      &lt;/map:match&gt;
+    &lt;/map:pipeline&gt;
+
+
+
+    &lt;!-- ============================================================ --&gt;
+    &lt;!-- REDIRECTS                                                    --&gt;
+    &lt;!-- ============================================================ --&gt;
+    &lt;map:pipeline internal-only="false"&gt;
+
+      &lt;map:match pattern=""&gt;
+        &lt;map:redirect-to uri="index.html" /&gt;
+      &lt;/map:match&gt;
+      &lt;map:match type="regexp" pattern="^.+/$"&gt;
+          &lt;map:redirect-to uri="index.html"/&gt;
+      &lt;/map:match&gt;
+    &lt;/map:pipeline&gt;
+
+  &lt;/map:pipelines&gt;
+&lt;/map:sitemap&gt;
+</pre></section></section></body></document>
\ No newline at end of file

Propchange: forrest/site/docs_0_70/howto/sitemap.xmap.source.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Added: forrest/site/docs_0_70/index.source.xml
URL: http://svn.apache.org/viewcvs/forrest/site/docs_0_70/index.source.xml?rev=376128&view=auto
==============================================================================
--- forrest/site/docs_0_70/index.source.xml (added)
+++ forrest/site/docs_0_70/index.source.xml Wed Feb  8 16:26:20 2006
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="ISO-8859-1"?><!--
+  Copyright 2002-2005 The Apache Software Foundation or its licensors,
+  as applicable.
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+--><document> 
+  <header> 
+    <title>Apache Forrest documentation</title> 
+  </header> 
+  <body>
+    <section id="project">
+      <title>Project-level documentation</title>
+      <p>
+        See the <link href="../">Apache Forrest Project</link> website for
+        the main project-level documents.
+      </p>
+    </section>
+    <section id="docs">
+      <title>Product documentation</title>
+      <p>
+        For the local docs for the version of Forrest that you are using,
+        see the menu at the left and the tabs above for
+        <link href="site:v0.70//documentation/index">Docs</link> and
+        <link href="site:v0.70//howto/overview">How-To</link> and
+        <link href="site:plugins/index">Plugins</link>.
+      </p>
+      <p>
+        See links to 
+        <link href="site:versions/overview">other versions</link>
+        of documentation.
+      </p>
+    </section>
+  </body>
+</document>
\ No newline at end of file

Propchange: forrest/site/docs_0_70/index.source.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Added: forrest/site/docs_0_70/libre-intro.source.xml
URL: http://svn.apache.org/viewcvs/forrest/site/docs_0_70/libre-intro.source.xml?rev=376128&view=auto
==============================================================================
--- forrest/site/docs_0_70/libre-intro.source.xml (added)
+++ forrest/site/docs_0_70/libre-intro.source.xml Wed Feb  8 16:26:20 2006
@@ -0,0 +1,584 @@
+<?xml version="1.0" encoding="ISO-8859-1"?><!--
+  Copyright 2002-2005 The Apache Software Foundation or its licensors,
+  as applicable.
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+--><!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.2//EN" "http://forrest.apache.org/dtd/document-v12.dtd">
+<document> 
+  <header> 
+    <title>Libre QuickStart</title> 
+    <abstract>This document is the current full documentation on the "libre"
+      generator that was implanted into xml-forrest.</abstract> 
+  </header> 
+  <body> 
+    <section> 
+      <title>Intro</title> 
+      <warning>This document is still relevant for ideas and potential
+        solutions. However, the experimental code for Libre was removed from
+        the scratchpad on 2003-04-18 during spring cleaning. If you want to
+        resurrect it, then use the cvs tag "before_libre_departure".
+      </warning>
+      <p>The libre idea was born out of the cocoon book.xml itch. The actual
+        need to start scratching was introduced by the higher volume of
+        book.xml-editing-work that came along with the cocoon documentation and
+        xml-forrest efforts.</p> 
+      <p>The single idea behind it in fact is trying to automatically generate
+        part of the navigation tree which is held now in the different book.xml 's.
+        This automation effort however is held back by the lack of meta-data you can
+        extract from the filesystem itself. This is why the libre approach still
+        requires you to add this extra metadata using some libre.xml file. This
+        libre.xml however has the following main advantages over the book.xml:</p> 
+      <ul> 
+        <li>The settings are 'inherited' down the directory tree, so you do not
+          need a libre.xml on each directory level. You only need it to change
+          the subdir traversing strategy from its parent dir.</li> 
+        <li>It combines some 'filesystem-introspection'-like declarations
+          that are used in run-time filtering, sorting and attributing decisions.
+          Introspection strategies are currently based on either (1) reading properties
+          of the java.io.File object at hand, or (2) executing xpath expressions on the
+          pointed at XML file. </li> 
+      </ul> 
+    </section> 
+    <section> 
+      <title>Using Libre now (0.0 alfa)</title> 
+      <warning>Disclaimer: most of what you read below is 'how it was intended'
+        . To what extent that matches the actual execution process is largely dependent
+        on my programming skills and thoroughness of testing. <br/>In other words:
+        don't expect a thing unless you've seen it work. (at this time)</warning> 
+      <section> 
+        <title>Generated Output</title> 
+        <p>The XML output that comes out of the generator largely follows this
+          example:</p> 
+        <source xml:space="preserve">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+&lt;collection xmlns="http://outerx.org/yer/hierarchy/0.1"&gt;
+  &lt;collection label="content"&gt;
+    &lt;collection label="xdocs"&gt;
+      &lt;item label="dreams.xml" 
+               href="src/documentation/content/xdocs/dreams.xml" 
+               title="Forrest dream list"/&gt;
+      &lt;item label="faq.xml" 
+               href="src/documentation/content/xdocs/faq.xml"/&gt;
+      &lt;item label="book.xml" 
+               href="src/documentation/content/xdocs/book.xml"/&gt;
+      &lt;item label="contrib.xml" 
+               href="src/documentation/content/xdocs/contrib.xml" 
+               title="Contribution to Forrest"/&gt;
+      &lt;item label="mail-archives.xml" 
+               href="src/documentation/content/xdocs/mail-archives.xml" 
+               title="Mail Archives"/&gt;
+      &lt;item label="mail-lists.xml" 
+               href="src/documentation/content/xdocs/mail-lists.xml" 
+               title="Mailing Lists"/&gt;
+      &lt;item label="license.xml" 
+               href="src/documentation/content/xdocs/license.xml" 
+               title="The Apache Software License"/&gt;
+      &lt;item label="index.xml" 
+               href="src/documentation/content/xdocs/index.xml" 
+               title="Welcome to Forrest"/&gt;
+      &lt;item label="who.xml" 
+               href="src/documentation/content/xdocs/who.xml" 
+               title="Who we are"/&gt;
+    &lt;/collection&gt;
+  &lt;/collection&gt;
+&lt;/collection&gt;</source> 
+        <p>And it's not getting any harder in fact: only 2 elements,
+          <code>&lt;collection&gt;</code> and <code>&lt;item&gt;</code> and that should
+          do. The first maps to a menu-group in the navigation, guess what the second
+          maps to?</p> 
+        <p>The number and value (and its meaning) of the attributes on these
+          elements are specified in the libre.xml file.</p> 
+      </section> 
+      <section> 
+        <title><code>libre.xml</code> Contents</title> 
+        <p>That libre.xml file follows the
+          src/resources/schema/dtd/libre-v10.dtd. In fact the current release allows for
+          some extra elements (I'll explain where) and some unrestricted attribute CDATA
+          types that cause some extensible xml output resp. some java-introspection to be
+          triggered. So basically the DTD will be limiting you more than the runtime
+          interpretation. (future versions will try to narrow this down seriously, main
+          reason is that a more elaborate DTD allows for more XML-editor assistance in
+          editing the files.)</p> 
+        <p>The dtd:</p> 
+        <source xml:space="preserve">&lt;!ELEMENT libre (entry | auto)*&gt;
+&lt;!ELEMENT entry (label?, href?)&gt;
+&lt;!ATTLIST entry
+  location CDATA #REQUIRED
+&gt;
+&lt;!ELEMENT auto (filter?, sorter?, label?, href?)&gt;
+&lt;!ELEMENT label (xpath | property)&gt;
+&lt;!ELEMENT href (xpath | property)&gt;
+&lt;!ELEMENT filter (xpath | property)&gt;
+&lt;!ATTLIST filter
+  logic (inverse | normal) "normal"
+  clear (yes | no) "no"
+&gt;
+&lt;!ELEMENT sorter (xpath | property)&gt;
+&lt;!ATTLIST sorter
+  order (ascending | descending) "ascending"
+  clear (yes | no) "no"
+&gt;
+&lt;!ELEMENT xpath EMPTY&gt;
+&lt;!ATTLIST xpath
+  expression CDATA #REQUIRED
+&gt;
+&lt;!ELEMENT property EMPTY&gt;
+&lt;!ATTLIST property
+  name CDATA #REQUIRED
+  mask CDATA #IMPLIED
+  regex CDATA #IMPLIED
+  substitute CDATA #IMPLIED
+&gt;</source> 
+        <section> 
+          <title>Building Blocks</title> 
+          <p>The following elements get the following meaning when interpreted
+            by the LibreConfigBuilder</p> 
+          <source xml:space="preserve">&lt;libre xmlns="http://outerx.org/libre/config/0.1"&gt;</source> 
+          <ul> 
+            <li>This is one of those libre.xml files, that will configure how
+              items are filteres, sorted and attributed</li> 
+          </ul> 
+          <source xml:space="preserve">&lt;entry location="[relative location path]" /&gt;</source> 
+          <ul> 
+            <li>Allows to manually sort out specific files or directories.</li>
+            
+            <li>Comparable to standard book.xml behaviour, except for the fact
+              that </li> 
+          <ul> 
+            <li>libre doesn't yet support external hrefs (should be easy
+              though)</li> 
+            <li>there is no difference between <code>&lt;menu&gt;</code> and
+              <code>&lt;menu-item&gt;</code>, there just is <code>&lt;entry&gt;</code>. It
+              will become a <code>&lt;collection&gt;</code> or <code>&lt;item&gt;</code> in
+              the output based on the fact if the location points to a directory resp. a
+              file.</li> 
+            <li>For locations that point to a filter it doesn't make sense, but
+              when it points to a directory it is nested <code>&lt;filter&gt;</code> and
+              <code>&lt;sort&gt;</code> elements get inherited down to the next level. </li> 
+          </ul> 
+          </ul> 
+          <fixme author="mpo">This last remarks actually means (1) I need to
+            update the DTD to reflect this and (2) check the code for actually doing
+            this.</fixme> 
+          <source xml:space="preserve">&lt;auto&gt;</source> 
+          <ul> 
+            <li>Automatically generates more <code>&lt;collection&gt;</code>
+              and <code>&lt;item&gt;</code> elements in the output, based on the
+              specifications of the nested elements: <code>&lt;filter&gt;</code> (which
+              resources?) and <code>&lt;sort&gt;</code> (in which order?).</li> 
+          </ul> 
+          <source xml:space="preserve">&lt;filter logic="inverse" clear="no"&gt;</source> 
+          <ul> 
+            <li>This element wraps a so-called AttributeReader (there are
+              currently two of them: <code>&lt;xpath&gt;</code> and
+              <code>&lt;property&gt;</code>)</li> 
+            <li>The AttributeReader is going to specify which
+              information-element is going to be retrieved from the file or directory it is
+              pointing at. Depending on which one is used this wrapping filter will test for
+              presence or regex match of the resource being read. Based on the outcome of
+              this test (true or false) the passed file will be accepted or not in the
+              list.</li> 
+            <li>This wrapping filter element allows to inverse the
+              acceptance-logic (accept what normally should be rejected and vice versa).</li>
+            
+            <li>Using the <code>clear="yes"</code> attribute stops the
+              inheritance of the used filter strategy from the parent directory. Instead the
+              default filter strategy (which is to accept all files) is slided in at this
+              level.</li> 
+          </ul> 
+          <source xml:space="preserve">&lt;sort order="descending" clear="no"&gt;</source> 
+          <ul> 
+            <li>This element wraps a so called AttributeReader (there are
+              currently two of them: <code>&lt;xpath&gt;</code> and
+              <code>&lt;property&gt;</code>).</li> 
+            <li>The AttributeReader is going to specify which
+              information-element is going to be retrieved from the file or directory it is
+              pointing at. This information element will be considered to be a simple
+              Key-String and <code>&lt;collection&gt;</code> and <code>&lt;item&gt;</code>
+              elements in the output will appear in the order defined by the alphabetic
+              sorting of these keys.</li> 
+            <li>This wrapping sort element allows to reverse the order.
+              (z-&gt;a instead of a-&gt;z)</li> 
+            <li>Using the <code>clear="yes"</code> attribute stops the
+              inheritance of the used sort strategy from the parent directory. Instead the
+              default sort strategy (which is to use default filesystem sorting, alphabetic
+              on filename) is slided in at this level.</li> 
+          </ul> 
+          <source xml:space="preserve">&lt;label&gt;, &lt;href&gt;, &lt;YOURTAG&gt;.... {AttributeDefinitions}</source> 
+          <ul> 
+            <li>The remainder of the elements inside the
+              <code>&lt;auto&gt;</code> tag specify the attributes that need to be applied to
+              the generated <code>&lt;collection&gt;</code> and <code>&lt;item&gt;</code>
+              elements in the output: <code>&lt;item label=".." href=".." YOURTAG=".."
+              /&gt;</code></li> 
+            <li>There is currently only support for adding attributes, not
+              nested elements.</li> 
+            <li>These elements all wrap a so called AttributeReader (there are
+              currently two of them: &lt;xpath&gt; and &lt;property&gt;)</li> 
+            <li>In these cases the wrapped AttributeReader is going to specify
+              which information-element is going to be retrieved from the file or directory
+              it is pointing at. This information element will be considered to be a simple
+              String-value that gets slided in as the corresponding output attribute
+              value.</li> 
+          </ul> 
+          <source xml:space="preserve">&lt;xpath expression="/document/header/title/text()"&gt;</source> 
+          <ul> 
+            <li>This element specifies an xpath AttributeReader to use inside
+              <code>&lt;filter&gt;</code>, <code>&lt;sort&gt;</code> or
+              {AttributeDefinitions}.</li> 
+            <li>It allows to specify an xpath expression that should result in
+              one single text node to be returned when applied to the root node of the xml
+              file at the location of any given entry. The contents of this text-node is the
+              string value to sort (<code>&lt;sort&gt;</code> usage) or to fill in the
+              specified attribute (<code>&lt;label&gt;</code>, <code>&lt;href&gt;</code>...
+              use). When inside a <code>&lt;filter&gt;</code>: the presence of the node
+              results in passing the test.</li> 
+          </ul> 
+          <warning>This currently breaks for non xml (<code>*.gif</code>)
+            files, so get your filter right please, and in the mean time: sorry for not
+            being able to use it in the filter yet <code>:-(</code>.</warning>
+          <source xml:space="preserve">&lt;property name="path" regex="(\.[\\/])*(.*)" substitute="$2"/&gt;
+&lt;property name="name"  mask="CVS"/&gt;</source> 
+          <ul> 
+            <li>This element specifies an xpath AttributeReader to use inside
+              <code>&lt;filter&gt;</code>, <code>&lt;sort&gt;</code> or
+              {AttributeDefinitions}.</li> 
+            <li>It allows to specify a JavaBean-like property to read (this
+              introspection behavior will probably not survive the future release) on the
+              file at the 'location' of any given entry. The (object-)value of this property
+              is automatically converted to a String (toString()) that becomes the value to
+              sort (<code>&lt;sort&gt;</code> usage) or to fill in the specified attribute
+              (<code>&lt;label&gt;</code>, <code>&lt;href&gt;</code>... use). When inside a
+              <code>&lt;filter&gt;</code>, the test passes if the read property is not null
+              or "".</li> 
+            <li>Furthermore this element allows to express more elaborate
+              true-false tests (filter use) or regex substitution (other use)
+              attributes:</li> 
+          <ul> 
+            <li>combination of @regex with @substitute accounts for a
+              s/{regex}/{substitute}/ kind of operation on the string property.</li> 
+            <li>while @mask or @regex by their own (filter use) allow for a
+              glob-mask or regex test to be applied on the read property.</li> 
+          </ul> 
+          </ul> 
+        </section> 
+      </section> 
+      <section> 
+        <title>Important Side Effects</title> 
+        <p>There are some things that libre is doing that you should be aware of.</p> 
+        <section> 
+          <title>No libre.xml</title> 
+          <p>When using an <code>&lt;auto&gt; </code>section, the filter will
+            NEVER accept the <code>libre.xml</code> file to be in the generated output. You
+            can however include a manual <code>&lt;entry&gt;</code> to point to the
+            <code>libre.xml</code> file if needed.</p> 
+        </section> 
+        <section> 
+          <title>No Duplicates</title> 
+          <p>You can combine multiple <code>&lt;entry&gt;</code> and
+            <code>&lt;auto&gt;</code> elements after each other. The system will make sure
+            that the resulting list of <code>&lt;collection&gt;</code> and
+            <code>&lt;item&gt;</code> will not contain duplicates. So the filters in
+            <code>&lt;auto&gt;</code> sections lower down the <code>libre.xml</code> file
+            can include already accepted files or directories, they will only show up once
+            in the output.</p> 
+        </section> 
+      </section> 
+      <section> 
+        <title>Example Constructs</title> 
+        <p>Adding sorting and filtering to the filesystem with libre becomes a
+          subtle play with editable filesystem properties, smart XML content and
+          <code>libre.xml</code> configs. This should be considered as the 'extended'
+          contract between the following roles in the documentation system: the one
+          choosing (or creating) the DTDs, the one applying those to create content and
+          give the resulting files a name, the one that sets up the directories to store
+          those files and writes the <code>libre.xml</code> files.</p> 
+        <section> 
+          <title>Sorting your files or your menu entries?</title> 
+          <p>In every case the very pragmatic approach can become something
+            like this:</p> 
+          <source xml:space="preserve">+ content
+  + xdocs
+    + 010Topic
+      + 010Foo
+      + 111Bar
+    + 050Aspect
+    + NotInList</source> 
+          <p>In combination with something that lives by the introduced
+            alphabetic order, but yet hides the ugly number-prefixes:</p> 
+          <source xml:space="preserve">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+&lt;!DOCTYPE libre PUBLIC "-//Outerthought//DTD Libre Configuration V0.1//EN" "libre-v01.dtd" &gt;
+&lt;libre xmlns="http://outerx.org/libre/config/0.1"&gt;
+  &lt;auto&gt;
+    &lt;filter logic="normal"&gt;
+      &lt;property name="name" regex="\d{3}(.*)"/&gt;
+    &lt;/filter&gt;
+    &lt;label&gt;
+      &lt;property name="name" regex="\d{3}(.*)" substitute="$1"/&gt;
+    &lt;/label&gt;
+  &lt;/auto&gt;
+&lt;/libre&gt;</source> 
+          <p>Will produce an automatic list of entries (collections and items
+            in the output) that </p> 
+          <ul> 
+            <li><code>&lt;filter&gt;</code>: only resources which name starts
+              with a 3-digit pattern</li> 
+            <li>No <code>&lt;sort&gt;</code>: in their natural filesystem order
+              assured by the digit-prefix</li> 
+            <li><code>&lt;label&gt;</code>: hold a label attribute that strips
+              of the ugly number prefix</li> 
+          </ul> 
+          <p>Of course the advantage over book.xml only comes when more menu
+            items should be easily slided in later on, and/or deeply nested directory
+            structures can all benefit from this same filenaming/sorting strategy.</p> 
+        </section> 
+        <section> 
+          <title>Naming your files or asking them their name?</title> 
+          <p>Given the poor expressiveness of the filesystem, the labels that
+            need to show up in the menu can hardly remain the filenames they are now
+            (specially if we're adding these ugly number prefixes). Instead we can sign a
+            contract with the content writer to also provide the navigation system with a
+            sensible name for his entry using XML metadata that the system will pick up
+            using an xpath expression.</p> 
+          <source xml:space="preserve">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+&lt;!DOCTYPE libre PUBLIC "-//Outerthought//DTD Libre Configuration V0.1//EN" "libre-v01.dtd" &gt;
+&lt;libre xmlns="http://outerx.org/libre/config/0.1"&gt;
+  &lt;entry location="dreams.xml" &gt;
+      &lt;label&gt;
+         &lt;xpath expression="/document/header/title/text()"/&gt;
+      &lt;/label&gt;
+  &lt;/entry&gt;
+  &lt;auto&gt;
+    &lt;filter&gt;
+      &lt;property name="name" regex="\.xml$" /&gt;
+    &lt;/filter&gt;
+    &lt;sorter&gt;
+         &lt;xpath expression="/document/header/title/text()"/&gt;
+    &lt;/sorter&gt;
+      &lt;label&gt;
+          &lt;xpath expression="/document/header/title/text()"/&gt;
+      &lt;/label&gt;
+  &lt;/auto&gt;
+&lt;/libre&gt;</source> 
+        </section> 
+      </section> 
+    </section> 
+    <section> 
+      <title>Next Libre (0.1)</title> 
+      <note>Next libre is in fact largely in your hands... just drop
+        the forrest-dev <link href="site:mail-lists">mail list</link>
+        a line, and see what happens...</note> 
+      <section> 
+        <title>Itches</title> 
+        <p>There is quite a number of fast code patches that can/need to
+          happen</p> 
+        <ul> 
+          <li>package renaming and restructuring (ideas welcome, but not top of
+            mind)</li> 
+          <li>on same level: possible xmlns and/or elms/atts renaming on the
+            generated output and the libre.xml file</li> 
+          <li>when compiling you currently get 4 stupid deprecation warnings
+            that should be removed, in fact:</li> 
+          <li>LibreConfigHelper has a silly test in it to switch to own parser
+            and resolver if there is no avalon component manager in the neighborhoud
+            (historical reason is the testing outside cocoon with the command line util,
+            which should become some kind of avalon based junit task: if you have a clue
+            how to start this, throw it at us please.)</li> 
+          <li>xpath property reader needs to survive working on a non-xml
+            document (by returning nothing rather then breaking on the exception)</li> 
+          <li>general robustness and resilience towards
+            mis-configurations</li> 
+          <li>filestreams need to get closed and avalon resources need to be
+            released properly</li> 
+          <li>caching at the level of the generator needs to be set up</li> 
+          <li>in fact general performance has not been subject to loads of
+            early optimizations :-P</li> 
+        </ul> 
+      </section> 
+      <section> 
+        <title>Upcoming Features</title> 
+        <p>More importantly however there is a major set of new features that
+          is waiting to get in there. It all boils down in fact to having a more
+          expressive libre.xml file... some of the thoughts:</p> 
+        <section> 
+          <title>Combinations of filter logic</title> 
+          <p>Some itching stuff:</p> 
+          <ul> 
+            <li>logic="inverse" on the &lt;filter&gt; element seems a bit
+              awkward</li> 
+            <li><em>n</em>th degree of slickness in the regexes will only bring
+              us so far, combinatory filter logic seems to be the way to go...:</li> 
+          </ul> 
+          <source xml:space="preserve">&lt;!ELEMENT filter (xpath | property | and | or | not)&gt;
+&lt;!ELEMENT not    (xpath | property | and | or | not)&gt;
+&lt;!ELEMENT and    (xpath | property | and | or | not)+&gt;
+&lt;!ELEMENT or     (xpath | property | and | or | not)+&gt;</source> 
+          <p>So we can make up some richer:</p> 
+          <source xml:space="preserve">
+&lt;filter&gt;
+  &lt;not&gt;
+      &lt;and&gt;
+      &lt;xpath .../&gt;
+      &lt;not&gt;&lt;property ..../&gt;&lt;/not&gt;
+      &lt;or&gt;
+         ...
+      &lt;/or&gt;
+    &lt;/and&gt;
+  &lt;/not&gt;
+&lt;/filter&gt;
+    </source> 
+        </section> 
+        <section> 
+          <title>Separating property-retrieval from formatting and
+            testing</title> 
+          <p>Playing around with the attributes in
+            <code>&lt;property&gt;</code>:</p> 
+          <ul> 
+            <li>poses hard to explain combinatory effects (@regex with
+              @substitute vs without, @regex can't be combined with @mask, different
+              behaviour inside &lt;filter&gt;== test or &lt;sort&gt;==formatting)</li> 
+            <li>which in fact are hard (if not impossible) to rule out by
+              modifying the DTD</li> 
+            <li>makes you wonder why it's not available on the &lt;xpath&gt;
+              ?</li> 
+          </ul> 
+          <p>So maybe an example more down the lines of the following would be
+            easier to use:</p> 
+          <source xml:space="preserve">&lt;label&gt;&lt;!-- same applies for the sort context --&gt;
+  &lt;regexformatter exp="..." substitute="...."&gt;
+    &lt;property name="absoluteLocation" /&gt;
+  &lt;/regexformatter&gt;
+&lt;/label&gt;</source> 
+          <p>Allowing the formatter to be used around the xpath reader as well.
+            And opening up the possibility to maybe format other stuff than Strings:
+            <code>&lt;dateformat format="dd/mmm/yy"&gt; </code></p> 
+          <p>It would also clearly distinguish the semantical difference of
+            applying a test in the <code>&lt;filter&gt;</code> context:</p> 
+          <source xml:space="preserve">&lt;filter&gt;
+  &lt;regextest match="..."&gt;
+    &lt;property ... /&gt;
+  &lt;/regextest&gt;
+&lt;/filter&gt;</source> 
+          <p>And more logically introduce other tests like <code>&lt;globtest
+            match="..."&gt;</code> or <code>&lt;availabletest&gt;</code> or...</p> 
+        </section> 
+        <section> 
+          <title>Replace the introspection with semantically richer named
+            properties to read.</title> 
+          <p>Currently the <code>&lt;property
+            name="someJavaBeanProp"&gt;</code> is applied in a java introspection for the
+            <code>getSomeJavaBeanProp()</code> on the <code>java.io.File</code> object that
+            is actually representing the node in the hierarchy at any given time. The DTD
+            declares the attribute as of type CDATA. These decisions however:</p> 
+          <ul> 
+            <li>lead to a lesser user guidance for the libre.xml writer using
+              an XML (and DTD) savvy editor </li> 
+            <li>leads to assuming the <code>libre.xml</code> editor has access
+              to and knows how to interpret jdk javadoc</li> 
+            <li>leads to poor semantical support and thus more possible RUNTIME
+              errors for those just filling in some valid CDATA value that is not mapping any
+              getter.</li> 
+            <li>leads to confusion for all, since who actually knows the subtle
+              difference between all the get*Path methods on java.io.File?</li> 
+          </ul> 
+          <p>So the big idea here would be to go for an upfront declared list
+            of sensible and clearly defined properties that we would like to
+            read... Today's ideas about that list:</p> 
+          <ul> 
+            <li>name</li> 
+            <li>isDirectory (isCollection?)</li> 
+            <li>abs and relPath (or abs/rel Location? why would we need
+              abs?)</li> 
+            <li>canRead</li> 
+            <li>canWrite</li> 
+            <li>lastModified</li> 
+            <li>length</li> 
+          </ul> 
+          <p>The DTD would then list the possible attributeValues.</p> 
+        </section> 
+      </section> 
+      <section> 
+        <title>Avalonising</title> 
+        <p>There are a number of perceived opportunities in taking up a
+          stronger dependecy towards Avalon. Some of the possibilities become clear when
+          looking into the current design...</p> 
+        <ul> 
+          <li>Currently the EntryFactory is a abstract factory, the factory
+            part could be done by an Avalon Component manager. Which would also allow the
+            EntryFactory to become a cleaner component interface then it is now.</li> 
+          <li>Some investigation/feedback on the current hacker-way of using
+            the Composables could be nice</li> 
+          <li>The current cli part in the package is only there for testing
+            (avoiding the cocoon webapp cycle when developing/testing) it should be
+            replaced by a more formal test class that actually would take up the role
+            (probably delegate to ECM or the like) of the componentmanager to give the
+            HierarchyReader the (avalon) environment he needs.</li> 
+        </ul> 
+      </section> 
+      <section> 
+        <title>Unresolved Discussions</title> 
+        <ul> 
+          <li>do we need support for nested elements inside
+            <code>&lt;item&gt;</code> output (retrieved by e.g. xpath expressions)?</li> 
+          <li>do we need an extra <code>&lt;constant&gt;</code> like
+            attributereader that would allow like book.xml to add fixed values for
+            expressed attributes</li> 
+          <li>clear set out inheritance rules, just doing 'something' now
+            :-(</li> 
+          <li>votes on needed file properties to replace the current (limiting
+            and semantically poor) Java-introspection</li> 
+        </ul> 
+      </section> 
+    </section> 
+    <section> 
+      <title>Libre Design</title> 
+      <p> So why is that silly 'yer' package name in there? Yer originally was
+        some all-hierarchy-structures to SAX event thing, and since some of that is in
+        here as well, we kind of picked that idea up out of the dustbin.</p> 
+      <p>So reflecting the current packagenames we kind of have these sets of
+        responsibilities</p> 
+      <ul> 
+        <li><em>*.yer.hierarchy</em>: describe in a formal way how hierarchies
+          should be built up in order to have them dumped to XML using the
+          HierarchyReader.</li> 
+        <li><em>*.yer.use.cocoon</em>:house of the generator. It basically just
+          gets a reader and subscribes the next ContentHandler in the cocoon pipeline to
+          the HierarchyReader that it is using.</li> 
+        <li><em>*.yer.impl</em>: hold the different implementations of the
+          *.yer.hierarchy API </li> 
+        <li><em>*.yer.impl.fs</em>: (only current impl) Build the described
+          filesystem oriented implementation of the hierarchy. It is using the libre
+          configuration strategy.</li> 
+        <li><em>*.yer.libre</em>: provide a generic strategy for adding
+          filtering, sorting and attributing information to a hierarchy through the use
+          of XML config files (in an XML configuration/declarative manner)</li> 
+      </ul> 
+      <p>... hope this somewhat clarifies how things have been setup for
+        now.</p> 
+      <section> 
+        <title>Dependencies</title> 
+        <ul> 
+          <li>The regex stuff inside libre adds the dependency upon the oro
+            package. Basically I failed to find substitution support inside the regex
+            package (which is already in cocoon) in a timeframe comparable to just get on
+            with this using oro.</li> 
+          <li>The HierarchyGenerator is the first one in the chain (and the
+            last in fact) that actually needs the cocoon package (at least it was intended
+            this way, could be that there are some glitches on this statement)</li> 
+          <li>There is a sort of false dependency on Avalon right now (some
+            Composables in there, no real container stuff though). As expressed higher
+            there are some plans to stronger benefit from this dependency. </li> 
+        </ul> 
+      </section> 
+    </section> 
+  </body> 
+</document>
\ No newline at end of file

Propchange: forrest/site/docs_0_70/libre-intro.source.xml
------------------------------------------------------------------------------
    svn:eol-style = native