<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!--
  Licensed to the Apache Software Foundation (ASF) under one
  or more contributor license agreements.  See the NOTICE file
  distributed with this work for additional information
  regarding copyright ownership.  The ASF licenses this file
  to you 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.
-->
<html>
  <head>
    <title>Cocoon Zone - Welcome</title>
    <link rel="stylesheet" href="http://cocoon.apache.org/css/apache-cocoon-thien-maven-skin.min.css" />
    <link rel="stylesheet" href="http://cocoon.apache.org/css/print.css" type="text/css" media="print" />
    <script src="http://cocoon.apache.org/js/apache-cocoon-thien-maven-skin.min.js" language="javascript" type="text/javascript"></script>
    <meta name="author" content="Apache Cocoon Team" />
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  </head>
  <body>
    <div id="breadtrail">
       <p><a href="http://www.apache.org">Apache</a> &raquo; <a href="http://cocoon.apache.org/">Cocoon</a> &raquo;</p>
    </div>
    <div id="top">
      <div id="header">
          <div class="projectlogo">
             <a href="http://cocoon.apache.org/"><img class="logoImage"
               src="http://cocoon.apache.org/images/cocoon_logo.jpg"
                alt="Apache Cocoon" border="0" /></a>
          </div>
          <div class="grouplogo">
             <p class="grouptitle"><a href="http://cocoon.apache.org/">The Apache Cocoon Project</a><img
               src="http://cocoon.apache.org/images/apache-logo.jpg" alt="Cocoon Project Logo" /></p>
             <form class="searchbox" action="http://www.google.com/search" method="get">
               <input value="cocoon.apache.org" name="sitesearch" type="hidden" />
               <input onFocus="getBlank (this, 'Search the site with google');" size="25" name="q" id="query" type="text" value="Search the site with google" />&nbsp;
               <input class="searchboxsubmit" name="Search" value="Search" type="submit" />
             </form>
         </div>
         </div>
         <div id="projectBar">
           <p class="cocoonHome"><a href="http://cocoon.apache.org/index.html"><img
           src="http://cocoon.apache.org/images/pmc-home.gif"
           alt="  Apache Cocoon
   homepage"
           border="0" title="  Apache Cocoon
   homepage" /></a></p>
           <h1 class="projectTitle"><a href="http://cocoon.apache.org/index.html">  Apache Cocoon
  </a></h1>
                         <ul class="projectList">
                <li><strong><a href="http://cocoon.apache.org/2.1/">Cocoon 2.1</a></em></strong></li>
                <li><strong><a href="http://cocoon.apache.org/2.2/">Cocoon 2.2</a></em></strong></li>
                <li><a href="http://cocoon.apache.org/2.2/core-modules/">Core <span class="pl-version-small">2.2</span></a></li>
                <li><a href="http://cocoon.apache.org/2.2/blocks/">Blocks <span class="pl-version-small">2.2</span></a></li>
                <li><a href="http://cocoon.apache.org/2.2/maven-plugins/">Maven Plugins <span class="pl-version-small">2.2</span></a></li>
                <li><strong><a href="http://cocoon.apache.org/3.0/">Cocoon 3.0</a></em></strong></li>            
                <li><strong><a href="http://cocoon.apache.org/subprojects/">Subprojects</a></strong></li>
              </ul>
                    </div>
         <div class="projectBarClear"><!-- --></div>
      </div>
    <!-- end of top -->

    <h1>Samples</h1>
    <ul>
    	<li><a href="cocoon21/samples/">Cocoon 2.1 samples</a></li>
    	<li><a href="cocoon22/samples/">Cocoon 2.2 samples</a></li>
    	<li><a href="cocoon3/">Cocoon 3.0 samples</a></li>
    </ul>


    <!-- end of content -->
    <div id="footer">
      <p>&#169;  
          1999-<script type="text/javascript">document.write(new Date().getFullYear());</script>
    
          The Apache Software Foundation
      </p>
    </div>
    <script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
    </script>
    <script type="text/javascript">
      _uacct = "UA-1740622-3";
      urchinTracker();
    </script>

  </body>
</html>
