Date: 2004-10-29T07:02:22
   Editor: ViPi <[EMAIL PROTECTED]>
   Wiki: Cocoon Wiki
   Page: DirectoryGenerator
   URL: http://wiki.apache.org/cocoon/DirectoryGenerator

   no comment

Change Log:

------------------------------------------------------------------------------
@@ -19,43 +19,101 @@
 
 This is how you have to define a !DirectoryGenerator (as defined in 
sitemap.xmap of the cocoon webapp directory):
 
-{{{
-    <map:generator label="content" 
-                   logger="sitemap.generator.directory" 
-                   name="directory" 
-                   pool-grow="2" pool-max="16" pool-min="2"
-                   src="org.apache.cocoon.generation.DirectoryGenerator"/>
+{{{
+    <map:generator label="content" 
+                   logger="sitemap.generator.directory" 
+                   name="directory" 
+                   pool-grow="2" pool-max="16" pool-min="2"
+                   src="org.apache.cocoon.generation.DirectoryGenerator"/>
 }}}
 
 ===  Usage ===
 
 Example of a simple usage of the !DirectoryGenerator:
 
-{{{
-    <map:match pattern="directory-listing">
-        <map:generate type="directory" src="../directory/to/list/">
-            <map:parameter name="depth" value="2"/>
-        </map:generate>
-        <map:serialize type="xml"/>
-    </map:match>
+{{{
+    <map:match pattern="directory-listing">
+        <map:generate type="directory" src="../directory/to/list/">
+            <map:parameter name="depth" value="2"/>
+        </map:generate>
+        <map:serialize type="xml"/>
+    </map:match>
 }}}
 
 ===  Result ===
 
 This is an example of what you can expect as result of the !DirectoryGenerator.
 
-{{{
-    <dir:directory name="dir1" lastModified="1067545661156" date="30/10/03 
21:27" 
-                   size="0" sort="name" reverse="false" requested="true">
-        <dir:directory name="dir11" lastModified="1067295952187" 
-                       date="28/10/03 0:05" size="0"/>
-        <dir:directory name="dir12" lastModified="1067295971203" 
-                       date="28/10/03 0:06" size="0"/>
-        <dir:directory name="dir13" lastModified="1067543010781" 
-                       date="30/10/03 20:43" size="0"/>
-        <dir:directory name="dir14" lastModified="1067545661156" 
-                       date="30/10/03 21:27" size="0"/>
-        <dir:file name="file.xml" lastModified="1067541801328" 
-                       date="30/10/03 20:23" size="79"/>
-    </dir:directory>
+{{{
+    <dir:directory name="dir1" lastModified="1067545661156" date="30/10/03 
21:27" 
+                   size="0" sort="name" reverse="false" requested="true">
+        <dir:directory name="dir11" lastModified="1067295952187" 
+                       date="28/10/03 0:05" size="0"/>
+        <dir:directory name="dir12" lastModified="1067295971203" 
+                       date="28/10/03 0:06" size="0"/>
+        <dir:directory name="dir13" lastModified="1067543010781" 
+                       date="30/10/03 20:43" size="0"/>
+        <dir:directory name="dir14" lastModified="1067545661156" 
+                       date="30/10/03 21:27" size="0"/>
+        <dir:file name="file.xml" lastModified="1067541801328" 
+                       date="30/10/03 20:23" size="79"/>
+    </dir:directory>
 }}}
+
+
+===  The Namespace ===
+
+As mentioned in the 
[http://cocoon.apache.org/2.1/userdocs/generators/directory-generator.html user 
documentation], !DirectoryGenerator will generate all elements with the 
namespace '''http://apache.org/cocoon/directory/2.0''', so that the afore 
mentioned example will read like:
+
+{{{
+    <dir:directory name="dir1" lastModified="1067545661156" date="30/10/03 
21:27" 
+                   xmlns:dir="http://apache.org/cocoon/directory/2.0
+                   size="0" sort="name" reverse="false" requested="true">
+        <dir:directory name="dir11" lastModified="1067295952187" 
+                       date="28/10/03 0:05" size="0"/>
+        <dir:directory name="dir12" lastModified="1067295971203" 
+                       date="28/10/03 0:06" size="0"/>
+        <dir:directory name="dir13" lastModified="1067543010781" 
+                       date="30/10/03 20:43" size="0"/>
+        <dir:directory name="dir14" lastModified="1067545661156" 
+                       date="30/10/03 21:27" size="0"/>
+        <dir:file name="file.xml" lastModified="1067541801328" 
+                       date="30/10/03 20:23" size="79"/>
+    </dir:directory>
+}}}
+
+Beginners, when converting this kind of output to HTML, sometimes are facing 
problems on dealing with this namespace. Matching the elements is one of them 
and removing that namespace from the resulting HTML documents is the other. 
I've even seen some [http://cocoon.apache.org/link/livesites-2.1.html Cocoon 
Live Sites] still bearing this namespace within HTML pages, even though 
(non-X)HTML standards do not allow any namespace.
+
+The solution is quite easy. The 
[http://cocoon.apache.org/2.1/userdocs/generators/directory-generator.html XSLT 
Standard] says:
+            '''NOTE:''' When a stylesheet uses a namespace declaration only 
for the purposes of addressing the source tree, specifying the prefix in the 
exclude-result-prefixes attribute will avoid superfluous namespace declarations 
in the result tree.
+
+As an example, the following stylesheet will transform !DirectoryGenerator's 
output into an HTML unordered list with '''no''' such superfluous namespace:
+
+{{{
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet version="1.0"
+               xmlns:dir="http://apache.org/cocoon/directory/2.0"; 
exclude-result-prefixes="dir"
+               xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
+
+<xsl:template match="dir:directory|dir:file">
+       <li>
+               <xsl:value-of select="@name"/>
+               <xsl:if test="name(.)='dir:directory'">
+                       <!-- creating subdirectories -->
+                       <ul><xsl:apply-templates/></ul>
+               </xsl:if>
+       </li>
+</xsl:template>
+
+<xsl:template match="/dir:directory">
+       <ul>
+               <xsl:value-of select="@name"/>
+               <!-- creating subdirectories -->
+               <xsl:apply-templates/>
+       </ul>
+</xsl:template>
+
+</xsl:stylesheet>
+}}}
+
+All you need to get rid of the namespace is in line 3.

Reply via email to