cocoon-cvs mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From cross...@apache.org
Subject svn commit: r345438 [284/286] - in /cocoon/site/site/2.1: ./ developing/ developing/portal/ developing/portal/coplets/ developing/webapps/ developing/webapps/authentication/ faq/ howto/ installing/ plan/ plan/documentation/ plan/otherplanning/ plan/ove...
Date Fri, 18 Nov 2005 04:13:22 GMT
Added: cocoon/site/site/2.1/userdocs/xsp/xsp-internals.html
URL: http://svn.apache.org/viewcvs/cocoon/site/site/2.1/userdocs/xsp/xsp-internals.html?rev=345438&view=auto
==============================================================================
--- cocoon/site/site/2.1/userdocs/xsp/xsp-internals.html (added)
+++ cocoon/site/site/2.1/userdocs/xsp/xsp-internals.html Thu Nov 17 20:00:02 2005
@@ -0,0 +1,2494 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<meta content="Apache Forrest" name="Generator">
+<meta name="Forrest-version" content="0.8-dev">
+<meta name="Forrest-skin-name" content="pelt">
+<title>XSP Internals</title>
+<link type="text/css" href="../../../skin/basic.css" rel="stylesheet">
+<link media="screen" type="text/css" href="../../../skin/screen.css" rel="stylesheet">
+<link media="print" type="text/css" href="../../../skin/print.css" rel="stylesheet">
+<link type="text/css" href="../../../skin/profile.css" rel="stylesheet">
+<script src="../../../skin/getBlank.js" language="javascript" type="text/javascript"></script><script src="../../../skin/getMenu.js" language="javascript" type="text/javascript"></script><script src="../../../skin/fontsize.js" language="javascript" type="text/javascript"></script>
+<link rel="shortcut icon" href="../../../images/cocoon.ico">
+</head>
+<body onload="init()">
+<script type="text/javascript">ndeSetTextSize();</script>
+<div id="top">
+<!--+
+    |breadtrail
+    +-->
+<div class="breadtrail">
+<a href="http://www.apache.org/">apache</a> &gt; <a href="http://cocoon.apache.org/">cocoon</a><script src="../../../skin/breadcrumbs.js" language="JavaScript" type="text/javascript"></script>
+</div>
+<!--+
+    |header
+    +-->
+<div class="header">
+<!--+
+    |start group logo
+    +-->
+<div class="grouplogo">
+<a href="http://www.apache.org/"><img class="logoImage" alt="Apache" src="../../../images/cocoon-project-logo.png" title="The Apache Software Foundation"></a>
+</div>
+<!--+
+    |end group logo
+    +-->
+<!--+
+    |start Project Logo
+    +-->
+<div class="projectlogo">
+<a href="http://cocoon.apache.org/"><img class="logoImage" alt="Apache Cocoon" src="../../../images/cocoon-logo.gif" title="Apache Cocoon"></a>
+</div>
+<!--+
+    |end Project Logo
+    +-->
+<!--+
+    |start Search
+    +-->
+<div class="searchbox">
+<form action="http://www.google.com/search" method="get" class="roundtopsmall">
+<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 name="Search" value="Search" type="submit">
+</form>
+</div>
+<!--+
+    |end search
+    +-->
+<!--+
+    |start Tabs
+    +-->
+<ul id="tabs">
+<li>
+<a class="base-not-selected" href="../../../2.1/index.html">Home</a>
+</li>
+</ul>
+<!--+
+    |end Tabs
+    +-->
+</div>
+</div>
+<div id="main">
+<div id="publishedStrip">
+<!--+
+    |start Subtabs
+    +-->
+<div id="level2tabs"></div>
+<!--+
+    |end Endtabs
+    +-->
+<script type="text/javascript"><!--
+document.write("Last Published: " + document.lastModified);
+//  --></script>
+</div>
+<!--+
+    |breadtrail
+    +-->
+<div class="breadtrail">
+             
+             &nbsp;
+           </div>
+<!--+
+    |start Menu, mainarea
+    +-->
+<!--+
+    |start Menu
+    +-->
+<div id="menu">
+<div onclick="SwitchMenu('menu_1.1', '../../../skin/')" id="menu_1.1Title" class="menutitle">About</div>
+<div id="menu_1.1" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../../2.1/index.html">Index</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/features.html">Features</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/news.html">News</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/license.html">License</a>
+</div>
+<div class="menuitem">
+<a href="http://cocoon.apache.org/mirror.cgi">Download</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_selected_1.2', '../../../skin/')" id="menu_selected_1.2Title" class="menutitle" style="background-image: url('../../../skin/images/chapter_open.gif');">Documentation</div>
+<div id="menu_selected_1.2" class="selectedmenuitemgroup" style="display: block;">
+<div class="menuitem">
+<a href="../../../2.1/introduction.html">Introduction</a>
+</div>
+<div onclick="SwitchMenu('menu_1.2.2', '../../../skin/')" id="menu_1.2.2Title" class="menutitle">Tracks</div>
+<div id="menu_1.2.2" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../../2.1/tracks/index.html">Introduction</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/tracks/first-steps-track.html">First steps</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/tracks/web-publishing-track.html">Web publishing</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.3', '../../../skin/')" id="menu_1.2.3Title" class="menutitle">Installation</div>
+<div id="menu_1.2.3" class="menuitemgroup">
+<div class="menuitem">
+<a href="http://cocoon.apache.org/mirror.cgi">Download</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/installing/index.html">Intro</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/installing/requirements.html">System requirements</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/installing/updating-older.html">Updating to version 2.1.5</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/installing/jars.html">Jars</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/installing/tests.html">Overview</a>
+</div>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/overview.html">Overview</a>
+</div>
+<div onclick="SwitchMenu('menu_selected_1.2.5', '../../../skin/')" id="menu_selected_1.2.5Title" class="menutitle" style="background-image: url('../../../skin/images/chapter_open.gif');">User Guide</div>
+<div id="menu_selected_1.2.5" class="selectedmenuitemgroup" style="display: block;">
+<div class="menuitem">
+<a href="../../../2.1/userdocs/index.html">User Documentation</a>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.2', '../../../skin/')" id="menu_1.2.5.2Title" class="menutitle">Concepts</div>
+<div id="menu_1.2.5.2" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../../2.1/userdocs/concepts/index.html">Overview</a>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.2.2', '../../../skin/')" id="menu_1.2.5.2.2Title" class="menutitle">Sitemap</div>
+<div id="menu_1.2.5.2.2" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../../2.1/userdocs/concepts/sitemap.html">Section Home</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/concepts/sitemap/sitemap-examples.html">Example sitemap snippets</a>
+</div>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/concepts/views.html">Views</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/concepts/caching.html">Caching</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/concepts/actions.html">Actions</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/concepts/matchers_selectors.html">Matchers and Selectors</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/concepts/catalog.html">Entity Catalogs</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/concepts/mrustore.html">MRUMemoryStore</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/concepts/persistence.html">Persistence</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/concepts/storejanitor.html">StoreJanitor</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/concepts/xmlsearching.html">XML Searching</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/concepts/validation.html">XML Validation</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/concepts/databases.html">Databases</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/concepts/modules.html">Modules</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/concepts/modules-ref.html">Modules Reference</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/concepts/redirection.html">Redirection</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/concepts/profiler.html">Profiler</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/concepts/errorhandling.html">Error Handling</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.3', '../../../skin/')" id="menu_1.2.5.3Title" class="menutitle">Sitemap Components</div>
+<div id="menu_1.2.5.3" class="menuitemgroup">
+<div onclick="SwitchMenu('menu_1.2.5.3.1', '../../../skin/')" id="menu_1.2.5.3.1Title" class="menutitle">Generators</div>
+<div id="menu_1.2.5.3.1" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../../2.1/userdocs/generators.html">Overview</a>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.3.1.2', '../../../skin/')" id="menu_1.2.5.3.1.2Title" class="menutitle">Default</div>
+<div id="menu_1.2.5.3.1.2" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../../2.1/userdocs/default/file-generator.html">File Generator</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.3.1.3', '../../../skin/')" id="menu_1.2.5.3.1.3Title" class="menutitle">Core</div>
+<div id="menu_1.2.5.3.1.3" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../../2.1/userdocs/calendar-generator.html">Calendar Generator</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/directory-generator.html">Directory Generator</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/file-generator.html">File Generator</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/imagedirectory-generator.html">Imagedirectory Generator</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/jx-generator.html">Jx Generator</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/linkstatus-generator.html">Linkstatus Generator</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/mp3directory-generator.html">MP3directory Generator</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/error-generator.html">Notifying Generator</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/request-generator.html">Request Generator</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/sessionattribute-generator.html">SessionAttribute Generator</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/status-generator.html">Status Generator</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/stream-generator.html">Stream Generator</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/xpathdirectory-generator.html">Xpathdirectory Generator</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.3.1.4', '../../../skin/')" id="menu_1.2.5.3.1.4Title" class="menutitle">Optional</div>
+<div id="menu_1.2.5.3.1.4" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../../2.1/userdocs/extractor-generator.html">Fragment Extractor Generator</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/html-generator.html">HTML Generator</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/jsp-generator.html">JSP Generator</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/php-generator.html">PHP Generator</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/profile-generator.html">Profile Generator</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/script-generator.html">Script Generator</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/search-generator.html">Search Generator</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/serverpages-generator.html">Server Pages Generator</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/velocity-generator.html">Velocity Generator</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/wsproxy-generator.html">Web Service Proxy Generator</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/xmldbcollection-generator.html">XML:DB Collection Generator</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/xmldb-generator.html">XML:DB Generator</a>
+</div>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.3.2', '../../../skin/')" id="menu_1.2.5.3.2Title" class="menutitle">Transformers</div>
+<div id="menu_1.2.5.3.2" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../../2.1/userdocs/transformers.html">Overview</a>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.3.2.2', '../../../skin/')" id="menu_1.2.5.3.2.2Title" class="menutitle">Default</div>
+<div id="menu_1.2.5.3.2.2" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../../2.1/userdocs/default/xslt-transformer.html">XSLT Transformer</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.3.2.3', '../../../skin/')" id="menu_1.2.5.3.2.3Title" class="menutitle">Core</div>
+<div id="menu_1.2.5.3.2.3" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../../2.1/userdocs/extractor-transformer.html">Fragment Extractor Transformer</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/i18nTransformer.html">I18n Transformer</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/jpath-transformer.html">JPath Transformer</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/log-transformer.html">Log Transformer</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/filter-transformer.html">Filter Transformer</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/readdomsession-transformer.html">Read DOM Session Transformer</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/rolefilter-transformer.html">RoleFilter Transformer</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/simpleform-transformer.html">SimpleForm Transformer</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/simpleforminstance-transformer.html">SimpleFormInstance Transformer</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/writedomsession-transformer.html">Write DOM Session Transformer</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/xinclude-transformer.html">Xinclude Transformer</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/cinclude-transformer.html">Cinclude Transformer</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/encodeurl-transformer.html">EncodeUrl Transformer</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/sourcewriting-transformer.html">Sourcewriting Transformer</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/augment-transformer.html">Augment Transformer</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/jx-template-transformer.html">JX Template Transformer</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/xslt-transformer.html">XSLT Transformer</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.3.2.4', '../../../skin/')" id="menu_1.2.5.3.2.4Title" class="menutitle">Optional</div>
+<div id="menu_1.2.5.3.2.4" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../../2.1/userdocs/ldap-transformer.html">LDAP Transformer</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/lexer-transformer.html">Lexical Transformer</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/parser-transformer.html">Parser Transformer</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/pattern-transformer.html">Pattern Transformer</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/session.html">Session Transformer</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/sql-transformer.html">SQL Transformer</a>
+</div>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.3.3', '../../../skin/')" id="menu_1.2.5.3.3Title" class="menutitle">Serializers</div>
+<div id="menu_1.2.5.3.3" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../../2.1/userdocs/serializers.html">Overview</a>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.3.3.2', '../../../skin/')" id="menu_1.2.5.3.3.2Title" class="menutitle">Default</div>
+<div id="menu_1.2.5.3.3.2" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../../2.1/userdocs/default/html-serializer.html">HTML Serializer</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.3.3.3', '../../../skin/')" id="menu_1.2.5.3.3.3Title" class="menutitle">Core</div>
+<div id="menu_1.2.5.3.3.3" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../../2.1/userdocs/html-serializer.html">HTML Serializer</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/xhtml-serializer.html">XHTML Serializer</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/xml-serializer.html">XML Serializer</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/text-serializer.html">Text Serializer</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/wap-serializer.html">WAP/WML Serializer</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/svg-serializer.html">SVG Serializer</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/svgxml-serializer.html">SVG/XML Serializer</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/svgjpeg-serializer.html">SVG/JPEG Serializer</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/svgpng-serializer.html">SVG/PNG Serializer</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/svgtiff-serializer.html">SVG/TIFF Serializer</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/vrml-serializer.html">VRML Serializer</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/link-serializer.html">Link Serializer</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/ziparchive-serializer.html">Zip archive Serializer</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.3.3.4', '../../../skin/')" id="menu_1.2.5.3.3.4Title" class="menutitle">Optional</div>
+<div id="menu_1.2.5.3.3.4" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../../2.1/userdocs/pdf-serializer.html">PDF Serializer</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/ps-serializer.html">PS Serializer</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/pcl-serializer.html">PCL Serializer</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/xls-serializer.html">HSSF (XLS) Serializer</a>
+</div>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.3.4', '../../../skin/')" id="menu_1.2.5.3.4Title" class="menutitle">Matchers</div>
+<div id="menu_1.2.5.3.4" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../../2.1/userdocs/matchers.html">Overview</a>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.3.4.2', '../../../skin/')" id="menu_1.2.5.3.4.2Title" class="menutitle">Default</div>
+<div id="menu_1.2.5.3.4.2" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../../2.1/userdocs/default/wildcarduri-matcher.html">WildCard URI Matcher</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.3.4.3', '../../../skin/')" id="menu_1.2.5.3.4.3Title" class="menutitle">Core</div>
+<div id="menu_1.2.5.3.4.3" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../../2.1/userdocs/core/wildcarduri-matcher.html">WildCard URI Matcher</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/core/wildcardheader-matcher.html">WildCard Header Matcher</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.3.4.4', '../../../skin/')" id="menu_1.2.5.3.4.4Title" class="menutitle">Optional</div>
+<div id="menu_1.2.5.3.4.4" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../../2.1/userdocs/optional/template-matcher.html">Template Matcher</a>
+</div>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.3.5', '../../../skin/')" id="menu_1.2.5.3.5Title" class="menutitle">Selectors</div>
+<div id="menu_1.2.5.3.5" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../../2.1/userdocs/selectors.html">Overview</a>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.3.5.2', '../../../skin/')" id="menu_1.2.5.3.5.2Title" class="menutitle">Default</div>
+<div id="menu_1.2.5.3.5.2" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../../2.1/userdocs/default/browser-selector.html">Browser Selector</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.3.5.3', '../../../skin/')" id="menu_1.2.5.3.5.3Title" class="menutitle">Core</div>
+<div id="menu_1.2.5.3.5.3" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../../2.1/userdocs/browser-selector.html">Browser Selector</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/host-selector.html">Host Selector</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/parameter-selector.html">Parameter Selector</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/requestattribute-selector.html">Request Attribute Selector</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/requestmethod-selector.html">Request Method Selector</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/requestparameter-selector.html">Request Parameter Selector</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/resourceexists-selector.html">Resource Exists Selector</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/regular-expression-header-selector.html">Regular-expression Header Selector</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.3.5.4', '../../../skin/')" id="menu_1.2.5.3.5.4Title" class="menutitle">Scratchpad</div>
+<div id="menu_1.2.5.3.5.4" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../../2.1/userdocs/scratchpad/date-selector.html">Date Selector</a>
+</div>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.3.6', '../../../skin/')" id="menu_1.2.5.3.6Title" class="menutitle">Actions</div>
+<div id="menu_1.2.5.3.6" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../../2.1/userdocs/actions.html">Overview</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/database-actions.html">Database</a>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.3.6.3', '../../../skin/')" id="menu_1.2.5.3.6.3Title" class="menutitle">Optional</div>
+<div id="menu_1.2.5.3.6.3" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../../2.1/userdocs/optional/sendmail-action.html">Sendmail Action</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/optional/session-action.html">Session Action</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/optional/script-action.html">Script Action</a>
+</div>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.3.7', '../../../skin/')" id="menu_1.2.5.3.7Title" class="menutitle">Readers</div>
+<div id="menu_1.2.5.3.7" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../../2.1/userdocs/readers.html">Overview</a>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.3.7.2', '../../../skin/')" id="menu_1.2.5.3.7.2Title" class="menutitle">Default</div>
+<div id="menu_1.2.5.3.7.2" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../../2.1/userdocs/default/resource-reader.html">Resource Reader</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.3.7.3', '../../../skin/')" id="menu_1.2.5.3.7.3Title" class="menutitle">Core</div>
+<div id="menu_1.2.5.3.7.3" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../../2.1/userdocs/core/image-reader.html">Image Reader</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/core/resource-reader.html">Resource Reader</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.3.7.4', '../../../skin/')" id="menu_1.2.5.3.7.4Title" class="menutitle">Optional</div>
+<div id="menu_1.2.5.3.7.4" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../../2.1/userdocs/optional/axisrpc-reader.html">AxisRPC Reader</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/optional/database-reader.html">Database Reader</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/optional/jsp-reader.html">JSP Reader</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.3.7.5', '../../../skin/')" id="menu_1.2.5.3.7.5Title" class="menutitle">Scratchpad</div>
+<div id="menu_1.2.5.3.7.5" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../../2.1/userdocs/scratchpad/directoryziparchiver-reader.html">Directory ZIP Archiver</a>
+</div>
+</div>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.4', '../../../skin/')" id="menu_1.2.5.4Title" class="menutitle">Flow</div>
+<div id="menu_1.2.5.4" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../../2.1/userdocs/flow/index.html">Introduction</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/flow/continuations.html">Continuations</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/flow/how-does-it-work.html">How does it work?</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/flow/using.html">Usage</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/flow/tutor.html">Tutorial</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/flow/sitemap.html">Sitemap</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/flow/api.html">Flowscript</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/flow/java.html">Calling Java</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/flow/views.html">Views</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/flow/jxtemplate.html">JXTemplate</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/flow/jpath.html">JPath</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/flow/velocity.html">Velocity</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.5', '../../../skin/')" id="menu_1.2.5.5Title" class="menutitle">Cocoon Forms</div>
+<div id="menu_1.2.5.5" class="menuitemgroup">
+<div onclick="SwitchMenu('menu_1.2.5.5.1', '../../../skin/')" id="menu_1.2.5.5.1Title" class="menutitle">Basics</div>
+<div id="menu_1.2.5.5.1" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../../2.1/userdocs/basics/index.html">Introduction</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/basics/sample.html">Sample</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/basics/improving_sample.html">Improving the sample</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.5.2', '../../../skin/')" id="menu_1.2.5.5.2Title" class="menutitle">Widgets</div>
+<div id="menu_1.2.5.5.2" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../../2.1/userdocs/widgets/widget_form.html">form</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/widgets/widget_field.html">field</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/widgets/widget_multivaluefield.html">multivaluefield</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/widgets/widget_booleanfield.html">booleanfield</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/widgets/widget_repeater.html">repeater</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/widgets/widget_output.html">output</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/widgets/widget_submit.html">submit</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/widgets/widget_action.html">action</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/widgets/widget_repeater_action.html">repeater-action</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/widgets/widget_row_action.html">row-action</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/widgets/widget_aggregatefield.html">aggregatefield</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/widgets/widget_upload.html">upload</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/widgets/widget_messages.html">messages</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/widgets/widget_imagemap.html">imagemap</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/widgets/widget_tree.html">tree</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/widgets/widget_group.html">group/struct</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/widgets/widget_union.html">union</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/widgets/widget_class.html">class/new</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.5.3', '../../../skin/')" id="menu_1.2.5.5.3Title" class="menutitle">Widget Concepts</div>
+<div id="menu_1.2.5.5.3" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../../2.1/userdocs/widgetconcepts/validation.html">Validation</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/widgetconcepts/eventhandling.html">Event Handling</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/widgetconcepts/datatypes.html">Datatypes</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/widgetconcepts/selectionlists.html">Selection lists</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/widgetconcepts/widgetstates.html">Widget states</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.5.4', '../../../skin/')" id="menu_1.2.5.5.4Title" class="menutitle">Form Publishing</div>
+<div id="menu_1.2.5.5.4" class="menuitemgroup">
+<div onclick="SwitchMenu('menu_1.2.5.5.4.1', '../../../skin/')" id="menu_1.2.5.5.4.1Title" class="menutitle">Templating</div>
+<div id="menu_1.2.5.5.4.1" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../../2.1/userdocs/publishing/templating.html">Section Home</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/publishing/templating/templategenerator.html">Template Generator</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/publishing/templating/templatetransformer.html">Template Transformer</a>
+</div>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/publishing/formsgenerator.html">Generator</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/publishing/xslt.html">XSLT</a>
+</div>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/binding.html">Binding Framework</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/xmlbinding.html">Simple XML Binding</a>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.5.7', '../../../skin/')" id="menu_1.2.5.5.7Title" class="menutitle">API</div>
+<div id="menu_1.2.5.5.7" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../../2.1/userdocs/api/api_javascript.html">Javascript (Flowscript)</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/api/api_java.html">Java</a>
+</div>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/formlibraries.html">Form libraries</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/ajax.html">Ajax</a>
+</div>
+<div class="menuitem">
+<a href="http://wiki.apache.org/cocoon/Forms">Forms @ Wiki</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_selected_1.2.5.6', '../../../skin/')" id="menu_selected_1.2.5.6Title" class="menutitle" style="background-image: url('../../../skin/images/chapter_open.gif');">XSP</div>
+<div id="menu_selected_1.2.5.6" class="selectedmenuitemgroup" style="display: block;">
+<div class="menuitem">
+<a href="../../../2.1/userdocs/index.html">Overview</a>
+</div>
+<div onclick="SwitchMenu('menu_selected_1.2.5.6.2', '../../../skin/')" id="menu_selected_1.2.5.6.2Title" class="menutitle" style="background-image: url('../../../skin/images/chapter_open.gif');">XSP</div>
+<div id="menu_selected_1.2.5.6.2" class="selectedmenuitemgroup" style="display: block;">
+<div class="menuitem">
+<a href="../../../2.1/userdocs/xsp.html">Section Home</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/xsp/logicsheet.html">XSP Guide</a>
+</div>
+<div class="menupage">
+<div class="menupagetitle">XSP Internals</div>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/xsp/logicsheet-concepts.html">XSP Logicsheets</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/xsp/sessions.html">Sessions</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.6.3', '../../../skin/')" id="menu_1.2.5.6.3Title" class="menutitle">Logicsheets</div>
+<div id="menu_1.2.5.6.3" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../../2.1/userdocs/logicsheets/request.html">Request</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/logicsheets/session.html">Session</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/logicsheets/esql.html">ESQL</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/logicsheets/logicsheet-forms.html">Forms</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/logicsheets/sendmail.html">Sendmail</a>
+</div>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.7', '../../../skin/')" id="menu_1.2.5.7Title" class="menutitle">Offline</div>
+<div id="menu_1.2.5.7" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../../2.1/userdocs/offline/index.html">Overview</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/offline/cli.html">Command Line</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/offline/configuration.html">CLI Configuration</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/offline/ant.html">Ant</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/userdocs/offline/bean.html">Cocoon Bean</a>
+</div>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.6', '../../../skin/')" id="menu_1.2.6Title" class="menutitle">Developer's Guide</div>
+<div id="menu_1.2.6" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../../2.1/developing/index.html">Index</a>
+</div>
+<div onclick="SwitchMenu('menu_1.2.6.2', '../../../skin/')" id="menu_1.2.6.2Title" class="menutitle">Concepts</div>
+<div id="menu_1.2.6.2" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../../2.1/developing/httprequest.html">Internals</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/developing/extending.html">Extending</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/developing/avalon.html">Avalon</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/developing/source.html">Source Handling</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/developing/stores.html">Stores</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/developing/datasources.html">Using Databases</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/developing/parent-component-manager.html">Parent CM</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/developing/deliquick.html">DELI Quick Start</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/developing/deli.html">DELI</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.6.3', '../../../skin/')" id="menu_1.2.6.3Title" class="menutitle">Developing Webapps</div>
+<div id="menu_1.2.6.3" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../../2.1/developing/webapps/index.html">Overview</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/developing/webapps/session.html">Sessions</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/developing/webapps/contexts.html">Session Contexts</a>
+</div>
+<div onclick="SwitchMenu('menu_1.2.6.3.4', '../../../skin/')" id="menu_1.2.6.3.4Title" class="menutitle">Authentication</div>
+<div id="menu_1.2.6.3.4" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../../2.1/developing/webapps/authentication.html">Section Home</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/developing/webapps/authentication/authentication-handler.html">The Authentication Handler</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/developing/webapps/authentication/authenticating_user.html">Authenticating a User</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/developing/webapps/authentication/user_management.html">User Management</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/developing/webapps/authentication/application_management.html">Application Management</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/developing/webapps/authentication/module_management.html">Module Management</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/developing/webapps/authentication/user_administration.html">User Administration</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/developing/webapps/authentication/summary.html">Configuration Summary</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/developing/webapps/authentication/pipeline_patterns.html">Pipeline Patterns</a>
+</div>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/developing/webapps/forms.html">Simple Forms</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/developing/webapps/portal.html">Portal FW</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.6.4', '../../../skin/')" id="menu_1.2.6.4Title" class="menutitle">Building a portal using the Portal Engine</div>
+<div id="menu_1.2.6.4" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../../2.1/developing/portal/index.html">Index</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/developing/portal/portal-block.html">Portal Engine</a>
+</div>
+<div onclick="SwitchMenu('menu_1.2.6.4.3', '../../../skin/')" id="menu_1.2.6.4.3Title" class="menutitle">Configuring Coplets</div>
+<div id="menu_1.2.6.4.3" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../../2.1/developing/portal/coplets.html">Section Home</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/developing/portal/coplets/uricoplet.html">The URICoplet</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/developing/portal/coplets/cachinguricoplet.html">The CachingURICoplet</a>
+</div>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/developing/portal/layout_skins.html">Layout and Skins</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/developing/portal/events.html">Event Handling</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/developing/portal/profiles.html">Profiles</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/developing/portal/wsrp.html">WSRP Support</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/developing/portal/authentication.html">Authentication</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/developing/portal/forms.html">Form handling</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/developing/portal/basket.html">A Basket</a>
+</div>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/developing/web3.html">Connect to SAP R/3</a>
+</div>
+<div class="menuitem">
+<a href="http://cocoon.apache.org/2.1/apidocs/index.html">API (Javadoc)</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.7', '../../../skin/')" id="menu_1.2.7Title" class="menutitle">Tutorials</div>
+<div id="menu_1.2.7" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../../2.1/tutorial/index.html">Index</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/tutorial/tutorial-develop-webapp.html">WebApp</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/tutorial/tutorial-generator.html">Custom Generator</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/tutorial/tutorial-shots.html">Tutorial screenshots</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/tutorial/tutorial-rmi-generator.html">RMIServer</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.8', '../../../skin/')" id="menu_1.2.8Title" class="menutitle">FAQ</div>
+<div id="menu_1.2.8" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../../2.1/faq/index.html">Index</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/faq/faq-install.html">Install</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/faq/faq-configure-environment.html">Configure</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/faq/faq-cvs.html">CVS/SVN</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/faq/faq-configure-c2.html">Configure C2</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/faq/faq-databases.html">Databases</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/faq/faq-xsp.html">XSP</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/faq/faq-xslt.html">XSLT</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/faq/faq-debugging.html">Debugging</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/faq/faq-sitemap.html">Sitemap</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/faq/faq-generators.html">Generators</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/faq/faq-transformers.html">Transformers</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/faq/faq-serializers.html">Serializers</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/faq/faq-matchers.html">Matchers</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/faq/faq-selectors.html">Selectors</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/faq/faq-actions.html">Actions</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/faq/faq-aggregators.html">Aggregators</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.9', '../../../skin/')" id="menu_1.2.9Title" class="menutitle">How Tos</div>
+<div id="menu_1.2.9" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../../2.1/howto/index.html">Index</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/howto/howto-explore-samples.html">Samples</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/howto/howto-paginator-transformer.html">Paginator</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/howto/howto-html-pdf-publishing.html">HTML-PDF</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/howto/wsproxy-generator.html">Web Syndication</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/howto/howto-flow-debugger.html">Flow Debugger</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/howto/howto-author-howto.html">Author How-To</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/howto/howto-author-faq.html">Author FAQ</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/howto/howto-author-snippet.html">Author Snippet</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/howto/howto-author-core-docs.html">Author Docs</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/howto/howto-patch.html">Prepare patch</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/howto/howto-bugzilla.html">Bugzilla</a>
+</div>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/performancetips.html">Performance</a>
+</div>
+<div onclick="SwitchMenu('menu_1.2.11', '../../../skin/')" id="menu_1.2.11Title" class="menutitle">Snippets</div>
+<div id="menu_1.2.11" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../../2.1/snippet/index.html">Index</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/snippet/snippet-xslt-options.html">XSLT Processor Options</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/snippet/snippet-internal-pipeline.html">Internal Pipeline</a>
+</div>
+</div>
+<div class="menuitem">
+<a href="http://wiki.apache.org/cocoon/">Wiki Docs</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.3', '../../../skin/')" id="menu_1.3Title" class="menutitle">Status</div>
+<div id="menu_1.3" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../../2.1/changes.html">Changes</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/todo.html">To Do</a>
+</div>
+<div onclick="SwitchMenu('menu_1.3.3', '../../../skin/')" id="menu_1.3.3Title" class="menutitle">Planning Notes</div>
+<div id="menu_1.3.3" class="menuitemgroup">
+<div onclick="SwitchMenu('menu_1.3.3.1', '../../../skin/')" id="menu_1.3.3.1Title" class="menutitle">Overview</div>
+<div id="menu_1.3.3.1" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../../2.1/plan/overview/index.html">Planning Overview</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/plan/overview/roadmap.html">Roadmap</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.3.3.2', '../../../skin/')" id="menu_1.3.3.2Title" class="menutitle">Documentation</div>
+<div id="menu_1.3.3.2" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../../2.1/plan/documentation/doc.html">Overview</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/plan/documentation/linkstatus.html">Fix broken links</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.3.3.3', '../../../skin/')" id="menu_1.3.3.3Title" class="menutitle">Other Planning</div>
+<div id="menu_1.3.3.3" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../../2.1/plan/otherplanning/release.html">Release Plan</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/plan/otherplanning/samples.html">Cocoon Samples</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/plan/otherplanning/proposed-toc.html">Proposed TOC</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/plan/otherplanning/updating.html">Updating Cocoon</a>
+</div>
+</div>
+</div>
+<div class="menuitem">
+<a href="http://issues.apache.org/jira/browse/COCOON">Patch queue</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.4', '../../../skin/')" id="menu_1.4Title" class="menutitle">Community</div>
+<div id="menu_1.4" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../../2.1/bylaws-addendum.html">Cocoon Bylaws</a>
+</div>
+<div class="menuitem">
+<a href="../../../2.1/who.html">Hall of Fame</a>
+</div>
+<div class="menuitem">
+<a href="http://cocoon.apache.org/community/contrib.html">Contributing</a>
+</div>
+<div class="menuitem">
+<a href="http://cocoon.apache.org/community/mail-lists.html">Mail Lists</a>
+</div>
+<div class="menuitem">
+<a href="http://cocoon.apache.org/community/mail-archives.html">Mail Archives</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.5', '../../../skin/')" id="menu_1.5Title" class="menutitle">Project</div>
+<div id="menu_1.5" class="menuitemgroup">
+<div class="menuitem">
+<a href="http://issues.apache.org/jira/browse/COCOON">Bug Database</a>
+</div>
+<div class="menuitem">
+<a href="http://svn.apache.org/viewcvs.cgi/cocoon/branches/BRANCH_2_1_X/?root=Apache-SVN">Code Repository</a>
+</div>
+<div class="menuitem">
+<a href="http://cocoon.apache.org/mirror.cgi#nightly">Dev Snapshots</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.6', '../../../skin/')" id="menu_1.6Title" class="menutitle">Other Releases</div>
+<div id="menu_1.6" class="menuitemgroup">
+<div class="menuitem">
+<a href="http://cocoon.apache.org/1.x/">Cocoon 1.x</a>
+</div>
+<div class="menuitem">
+<a href="http://cocoon.apache.org/2.0/">Cocoon 2.0</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.7', '../../../skin/')" id="menu_1.7Title" class="menutitle">External</div>
+<div id="menu_1.7" class="menuitemgroup">
+<div class="menuitem">
+<a href="http://wiki.apache.org/cocoon/GT2005Hackaton">2005 Get Together</a>
+</div>
+</div>
+<div id="credit"></div>
+<div id="roundbottom">
+<img style="display: none" class="corner" height="15" width="15" alt="" src="../../../skin/images/rc-b-l-15-1body-2menu-3menu.png"></div>
+<!--+
+  |alternative credits
+  +-->
+<div id="credit2">
+<a href="http://apachecon.com/"><img border="0" title="ApacheCon US 2005" alt="ApacheCon US 2005 - logo" src="http://apache.org/images/ac2005us_blue_125x125.jpg" style="width: 125px;height: 125px;"></a>
+</div>
+</div>
+<!--+
+    |end Menu
+    +-->
+<!--+
+    |start content
+    +-->
+<div id="content">
+<h1>XSP Internals</h1>
+<a name="N10007"></a><a name="Index"></a>
+<h2 class="h3">Index</h2>
+<div class="section">
+<p>This document presents Apache Cocoon's dynamic markup language framework and
+its use in implementing XSP:</p>
+<ul>
+
+<li>
+<a href="#markup-to-code"> Markup-to-code Transformation </a>
+</li>
+
+<li>
+<a href="#cocoon-generators"> XSP and Cocoon Generators </a>
+</li>
+
+<li>
+<a href="#programming-language"> The Programming Language Processor </a>
+
+</li>
+
+<li>
+<a href="#compiled-languages"> Compiled Languages </a>
+</li>
+
+<li>
+<a href="#interpreted-languages"> Interpreted Languages </a>
+</li>
+
+<li>
+<a href="#markup-language"> The Markup Language Processor </a>
+</li>
+
+<li>
+<a href="#xsp-language"> The XSP Markup Language </a>
+</li>
+
+<li>
+<a href="#dom-xsp"> The DOM-XSP Markup Language </a>
+</li>
+
+<li>
+<a href="#program-generator"> The Program Generator </a>
+</li>
+
+<li>
+<a href="#named-components"> Named Components </a>
+</li>
+
+<li>
+<a href="#sitemap-configuration"> XSP Sitemap Configuration </a>
+</li>
+
+</ul>
+</div>
+<a name="N10047"></a><a name="Markup-to-code+Transformation"></a>
+<h2 class="h3">Markup-to-code Transformation</h2>
+<div class="section">
+<p>XSP is based on a general-purpose markup-to-code transformation engine built
+around three key abstractions:</p>
+<ul>
+
+<li>
+<strong>Dynamic Markup Language</strong>. An namespace-qualified XML
+vocabulary providing <em>code embedding</em> directives. An associated
+<em>dynamic markup language processor</em> transforms static markup interspersed
+with code embedding directives into an equivalent <em>source program string</em>
+written in a <em>target programming language</em>. Upon execution, the generated
+program will rebuild the original XML document as augmented by dynamic content
+emitted by the embedded code.</li>
+
+<li>
+<strong>Programming Language</strong>. A procedural language in which the
+dynamic markup processor generates source code from an input XML document. Its
+associated <em>programming language processor</em> is responsible for compiling,
+loading and executing the generated code within the boundaries of its calling
+environment.</li>
+
+<li>
+<strong>Program Generator</strong>. A component that integrates markup and
+programming language processors to build and execute markup-generating programs
+derived from XML documents. Beyond this "glue" role, this component is
+responsible for persistently storing generated programs as well as automatically
+rebuilding them should their source XML documents change on disk after program
+generation.</li>
+
+</ul>
+<div class="frame note">
+<div class="label">Note</div>
+<div class="content">Despite its particular usage for XSP,
+<a href="apidocs/org/apache/cocoon/components/language/generator/ProgramGenerator.html">
+<tt>ProgramGenerator</tt> </a> is not restricted to run in a server pages
+environment.</div>
+</div>
+</div>
+<a name="N1007C"></a><a name="XSP+and+Cocoon+Generators"></a>
+<h2 class="h3">XSP and Cocoon Generators</h2>
+<div class="section">
+<p>As a rule, XSP pages are translated into Cocoon
+<a href="apidocs/org/apache/cocoon/generation/Generator.html">
+<tt>Generator</tt>'s. </a>
+</p>
+<a name="N10088"></a><a name="Server+Pages+Generator+Proxy"></a>
+<h3 class="h4">Server Pages Generator Proxy</h3>
+<p>
+<tt>Generator</tt>'s created by XSP are invoked exclusively through
+<a href="apidocs/org/apache/cocoon/generation/ServerPagesGenerator.html">
+<tt>ServerPagesGenerator</tt>, </a> a proxy that uses Cocoon's
+<a href="#program-generator"><tt>ProgramGenerator</tt></a> component to load
+pages and subsequently delegates actual SAX event generation to them.</p>
+<div class="frame note">
+<div class="label">Note</div>
+<div class="content">The terms <tt>Generator</tt> and <tt>ProgramGenerator</tt> are
+somewhat confusing. Here, <tt>Generator</tt> refers to a Cocoon
+<tt>org.apache.cocoon.generation.Generator</tt> instance responsible for the
+initial feeding of Cocoon's SAX pipeline. <tt>ProgramGenerator</tt>, on the
+other hand, refers to a Cocoon component responsible for building and executing
+programs derived from XML documents containing dynamic markup:
+<a href="apidocs/org/apache/cocoon/components/language/generator/ProgramGenerator.html">
+<tt>org.apache.cocoon.components.language.generator.ProgramGenerator</tt> </a>
+
+</div>
+</div>
+<p>
+<tt>ServerPagesGenerator</tt> attempts to cope with a not unlikely
+possibility: <em>premature</em> termination of proxied generator execution.
+"Premature" here means that the invoked generator may return after starting one
+or more SAX events but without properly ending them.</p>
+<p>While this not an expected scenario in "manual" SAX programming, server pages
+may well need to terminate in the middle of document production:</p>
+<pre>
+  &lt;page&gt;
+    &lt;title&gt;For Your Eyes Only&lt;/title&gt;
+
+    &lt;xsp:logic&gt;
+      if (!request.getParameter("pet").equals("Cheetah")) {
+        &lt;p&gt;
+          Hey, you're not Tarzan!
+        &lt;/p&gt;
+
+        /*** Unclosed SAX events here! ***/
+        return;
+      }
+    &lt;/xsp:logic&gt;
+    &lt;!-- Multi-racial Jane affair description follows --&gt;
+    . . .
+  &lt;/page&gt;
+</pre>
+<p>The server pages generator proxy is defined in the sitemap as follows:</p>
+<pre>
+. . .
+&lt;map:generator
+  name="serverpages"
+  src="org.apache.cocoon.generation.ServerPagesGenerator"/&gt;
+. . .
+&lt;map:pipelines&gt;
+  &lt;map:pipeline&gt;
+    . . .
+    &lt;map:match pattern="/samples/*.xsp"&gt;
+      &lt;map:generate type="serverpages" src="../samples/documents/{1}.xsp"&gt;
+        &lt;!--
+          &lt;parameter name="markup-language" value="xsp"/&gt;
+          &lt;parameter name="programming-language" value="java"/&gt;
+        --&gt;
+      &lt;/map:generate&gt;
+      &lt;map:transform type="xslt" src="../samples/stalemates/simple-page.xsl"/&gt;
+      &lt;map:serialize type="html" mime-type="text/html"/&gt;
+    &lt;/map:match&gt;
+    . . .
+  &lt;/map:pipeline&gt;
+&lt;/map:pipelines&gt;
+</pre>
+<p>Note that parameters <tt>markup-language</tt> and
+<tt>programming-language</tt> default to <em>xsp</em> and <em>java</em>
+respectively.</p>
+<p>The complete XSP sitemap configuration is explained
+<a href="#sitemap-configuration">below</a>.</p>
+<a name="N100DD"></a><a name="XSP+Generators+and+Compiled+Languages"></a>
+<h3 class="h4">XSP Generators and Compiled Languages</h3>
+<p>For the Java language (and other compiled languages like
+<a class="external" href="http://www.mozilla.org/rhino/"><em>Rhino</em></a> Javascript), XSP
+pages are translated into classes extending
+<a href="apidocs/org/apache/cocoon/generation/AbstractServerPage.html">
+<tt>AbstractServerPage</tt> </a>. This class, in turn, extends
+<a href="apidocs/org/apache/cocoon/generation/ComposerGenerator.html">
+<tt>ComposerGenerator</tt> </a>, which gives it access to commonly used
+components such as <em>parser</em> or <em>cocoon</em> itself (typically used as
+<tt>EntityResolver</tt> for request URI's).</p>
+<p>
+<tt>AbstractServerPage</tt> implements <tt>org.apache.arch.Modifiable</tt>.
+This is tested by <tt>ProgramGenerator</tt> to assert whether the page has been
+invalidated as a result of files it depends on having changed on disk. These
+files are typically <a href="#logicsheet"><em>logicsheets</em></a> and template
+files included by means of XInclude.</p>
+<div class="frame note">
+<div class="label">Note</div>
+<div class="content">As of this writing, XInclude support is still unimplemented but
+will be based on <a href="mailto:balld.at.webslingerZ.com">Donald Ball</a>'s
+(possibly extended)
+<a href="apidocs/org/apache/cocoon/transformation/XIncludeTransformer.html">
+<tt>XIncludeTransformer</tt>. </a>
+</div>
+</div>
+<p>
+<tt>AbstractServerPage</tt> implements <tt>Modifiable</tt> by means of two
+<em>static</em> variables: <tt>dateCreated</tt> and <tt>dependencies</tt> (a,
+possibly empty, array of <tt>File</tt>'s pointing to logicsheets and other files
+included during the code generation stage).</p>
+<p>
+<tt>AbstractServerPage</tt> also provides a boolean
+<tt>hasContentChanged()</tt> method that is tested by
+<tt>ServerPagesGenerator</tt> to assert whether dynamic content should not be
+regenerated for a given request. The default implementation unconditionally
+returns <tt>true</tt>, but can be overridden by XSP pages based on their
+interpretation of the Cocoon <tt>request</tt> object. This is an
+<em>experimental</em> feature that will become meaningful only when a SAX-event
+caching mechanism is added to Cocoon.</p>
+<p>Finally, <tt>AbstractServerPage</tt> also provides a number of utility
+methods used to shorten the generation of SAX events not requiring a namespace.
+</p>
+</div>
+<a name="N1014B"></a><a name="The+Programming+Language+Processor"></a>
+<h2 class="h3">The Programming Language Processor</h2>
+<div class="section">
+<p>A Cocoon's
+<a href="apidocs/org/apache/cocoon/components/language/programming/ProgrammingLanguage.html">
+<tt>ProgrammingLanguage</tt> </a> processor exposes the following methods:</p>
+<ul>
+
+<li>
+<tt>load</tt>. Load a program from a file in a given directory, compiling
+it, if necessary, using a given encoding.</li>
+
+<li>
+<tt>instantiate</tt> Create a new instance of a previously loaded program
+</li>
+
+<li>
+<tt>unload</tt> Discard a previously loaded program performing any necessary
+cleanup</li>
+
+<li>
+<tt>getSourceExtension</tt> Return the canonical source file extension used
+by this programming language</li>
+
+<li>
+<tt>getCodeFormatter</tt> Return an (optional) instance of
+<a href="apidocs/org/apache/cocoon/components/language/programming/CodeFormatter.html">
+<tt>CodeFormatter</tt> </a> used to beautify source code written in this
+programming language</li>
+
+<li>
+<tt>quoteString</tt> Escape a string constant according to the programming
+language rules</li>
+
+</ul>
+<p>A default implementation
+(<a href="apidocs/org/apache/cocoon/components/language/programming/AbstractProgrammingLanguage.html">
+<tt>AbstractProgrammingLanguage</tt> </a>) is provided that extends
+<tt>org.apache.arch.named.AbstractNamedComponent</tt> and retrieves
+language-related sitemap parameters.</p>
+<a name="N1018B"></a><a name="Filenames+and+Encoding"></a>
+<h3 class="h4">Filenames and Encoding</h3>
+<p>
+<tt>load</tt> and <tt>unload</tt> are passed a file/directory pair used to
+locate the program.</p>
+<p>The <tt>baseDirectory</tt> should be an absolute pathname pointing to the
+top-level directory (also known as <em>repository</em>) containing the program
+file.</p>
+<p>The <tt>filename</tt> is a path, <em>relative to the
+<tt>baseDirectory</tt></em>, pointing to the program file.</p>
+<p>Source program filenames are built by concatenating the repository's
+<tt>baseDirectory</tt> name, the given <tt>filename</tt>, the dot extension
+separator and the language-specific source or object <em>extensions</em>. The
+cross-platform <tt>File.separator</tt> is used to ensure portability.</p>
+<div class="frame note">
+<div class="label">Note</div>
+<div class="content">The <tt>filename</tt> must <strong>not</strong> contain any
+source or object extension. It may, though, contain subdirectories depending on
+its position within the repository tree. Also, programming languages
+<strong>must</strong> define a source extension even when their actual
+compilers/interpreters do not enforce this. This is also true of <em>object</em>
+extensions for compiled languages. Furthermore, the dot character is
+<em>always</em> used as the extension separator.</div>
+</div>
+<p>Finally, the (optional) <tt>encoding</tt> argument specifies the how the
+source program file contents are encoded. This argument can be <tt>null</tt> to
+specify the platform's default encoding.</p>
+<a name="N101D5"></a><a name="Loading+Programs"></a>
+<h3 class="h4">Loading Programs</h3>
+<p>Currently, programs returned by the <tt>load</tt> operation are "plain" Java
+<tt>Object</tt>'s and are not required to implement any interface or to extend
+any particular class.</p>
+<div class="frame note">
+<div class="label">Note</div>
+<div class="content">This may change in the future so that the loaded program may be
+required to provide dependency information (for automatic reloading) as well as
+source code information (for debugging purposes).</div>
+</div>
+<p>Compiled programs attempt to locate the <em>object program</em> first. If
+found, it's loaded in a language-specific way and then returned to the calling
+environment. Failing that, the source file is located and the language-specific
+<a href="#compiler">compiler</a> is invoked prior to actual program loading.
+</p>
+<p>Of course, it is an error for the source program file not to exist as a
+readable, regular operating system file.</p>
+<a name="N101F4"></a><a name="Unloading+Programs"></a>
+<h3 class="h4">Unloading Programs</h3>
+<p>When a previously loaded program is no longer needed (or becomes "outdated"
+as explained below) the language processor may need to perform cleanup actions,
+such as releasing memory or (in the case of Java-like compiled languages)
+<a href="#class-loader-reinstantiation"> reinstantiating the class loader</a>.
+</p>
+<p>Loaded programs may become outdated as a consequence of events external to
+the programming language processor. In a server pages environment, this is the
+result of the source XML document (or any of the files it depends on) having
+changed on disk.</p>
+<p>The base class <tt>AbstractProgrammingLanguage</tt> implements this method
+<em>as <tt>final</tt></em> to delete the unloaded <em>source</em> program file
+and delegate actual unloading to method <tt>doUnload</tt>.</p>
+<p>Method <tt>doUnload</tt> is <em>not</em> defined as <tt>abstract</tt> in
+order to relieve interpreted subclasses from having to implement an empty method
+when no cleanup is required.</p>
+<div class="frame note">
+<div class="label">Note</div>
+<div class="content">Currently, only the <tt>program</tt> object is being passed to
+<tt>unload</tt>. It may be possible for some interpreted languages to also
+require knowing what file the program was originally loaded from. In this case,
+instantiation should take place through the program object itself, rather than
+through the language processor (see <em>Program Instantiation</em> below)</div>
+</div>
+<a name="N1022C"></a><a name="Instantiating+Programs"></a>
+<h3 class="h4">Instantiating Programs</h3>
+<p>The <tt>program</tt> object returned by <tt>load</tt> must act as an factory
+capable of creating <em>program instance</em> objects on demand.</p>
+<p>Currently, instantiation is performed by the language processor given a
+previously loaded <tt>program</tt>.</p>
+<p>Compiled programs use a language-specified <a href="#class-loader">class
+loader</a> to create a new program instance.</p>
+<div class="frame note">
+<div class="label">Note</div>
+<div class="content">For compiled languages, it is possible to guarantee that a
+generated program implements a given interface or extends a given class. For
+interpreted languages, though, it may be necessary to pass an additional
+<tt>prototype</tt> object to <tt>load</tt> as to ensure that created instances
+conform to a given Java type expected behavior.</div>
+</div>
+<a name="N10254"></a><a name="Source+Extensions"></a>
+<h3 class="h4">Source Extensions</h3>
+<p>All languages are required to return a <em>source extension</em>. This
+extension is used to locate source files for subsequent interpretation or
+compilation.</p>
+<a name="N1025D"></a><a name="Code+Formatting"></a>
+<h3 class="h4">Code Formatting</h3>
+<p>Programming languages may provide a
+<a href="apidocs/org/apache/cocoon/components/language/programming/CodeFormatter.html">
+<tt>CodeFormatter</tt> </a> instance used by code generators to beautify source
+code.</p>
+<p>Interface <tt>CodeFormatter</tt> exposes a single method:
+<tt>formatCode</tt>. <tt>formatCode</tt> takes as arguments a <tt>String</tt>
+containing the source code to be beautified and an <tt>encoding</tt> to be
+preserved during string conversions.</p>
+<p>Code formatters can be associated with a programming language by specifying a
+<tt>code-formatter</tt> parameter in its sitemap configuration:</p>
+<pre>
+&lt;parameter name="code-formatter"
+  value="org.apache.cocoon.components.language.programming.java.JstyleFormatter"/&gt;
+</pre>
+<div class="frame note">
+<div class="label">Note</div>
+<div class="content">Currently, <a class="external" href="http://astyle.sourceforge.net/">Jstyle</a>
+is being used for Java source formatting. This open source project appears to be
+stagnated and lacks advanced formatting options present in other (unfortunately,
+not open-sourced) products like <a class="external" href="http://www.jindent.com/">Jindent</a>.
+</div>
+</div>
+<a name="N10292"></a><a name="String+Quoting"></a>
+<h3 class="h4">String Quoting</h3>
+<p>Method <tt>quoteString</tt> applies the programming language string constant
+escaping rules to its input argument.</p>
+<p>This method exists to assist markup language code generators in escaping
+<tt>Text</tt> XML nodes.</p>
+</div>
+<a name="N102A0"></a><a name="Compiled+Languages"></a>
+<h2 class="h3">Compiled Languages</h2>
+<div class="section">
+<p>Compiled languages extend the <tt>ProgrammingLanguage</tt> abstraction by
+introducing the notions of <em>compilation</em> and <em>object extension</em>.
+</p>
+<p>A base implementation
+<a href="apidocs/org/apache/cocoon/components/language/programming/CompiledProgrammingLanguage.html">
+(<tt>CompiledProgrammingLanguage</tt>) </a> is provided that adds the following
+protected variables and abstract/overridable methods:</p>
+<ul>
+
+<li>Variable <tt>compilerClass</tt>. Used to create instances of the language's
+<a href="#compiler">compiler</a>.</li>
+
+<li>Variable <tt>deleteSources</tt>. Used to state whether intermediate source
+files should be deleted after successful compilation</li>
+
+<li>Method <tt>getObjectExtension</tt>. Used to build object filenames</li>
+
+<li>Method <tt>loadProgram</tt>. Used to perform actual program load after
+source and (possibly) object files have been located</li>
+
+<li>Method <tt>doUnload</tt>. Used to perform cleanup after program unloading
+</li>
+
+</ul>
+<div class="frame note">
+<div class="label">Note</div>
+<div class="content">Object files are not required to be <em>Java class files</em>.
+It's up the the compiled programming language processor to handle object files.
+</div>
+</div>
+<p>Compiled programming languages must specify their preferred compiler as a
+sitemap parameter:</p>
+<pre>
+&lt;component-instance name="java"
+  class="org.apache.cocoon.components.language.programming.java.JavaLanguage"&gt;
+  . . .
+  &lt;parameter name="compiler"
+    value="org.apache.cocoon.components.language.programming.java.Jikes"/&gt;
+  . . .
+&lt;/component-instance&gt;
+</pre>
+<a name="N102EB"></a><a name="Object+Extensions"></a>
+<h3 class="h4">Object Extensions</h3>
+<p>All compiled languages are required to return a <em>source extension</em>.
+This extension is used to locate object files for subsequent loading.</p>
+<a name="N102F4"></a><a name="Object+Program+Loading"></a>
+<h3 class="h4">Object Program Loading</h3>
+<p>Concrete compiled programming languages must implement the abstract method
+<tt>loadProgram</tt> to actually load an <em>object</em> program resulting from
+compilation.</p>
+<a name="N10300"></a><a name="Program+Compilation"></a>
+<h3 class="h4">Program Compilation</h3>
+<p>Compilation is delegated to a sitemap-specified <tt>LanguageCompiler</tt>
+instance, as explained below.</p>
+<a name="N10309"></a><a name="Compilers"></a>
+<h3 class="h4">Compilers</h3>
+<p>Interface
+<a href="apidocs/org/apache/cocoon/components/language/programming/LanguageCompiler.html">
+<tt>LanguageCompiler</tt> </a> defines the initialization and behavior for all
+compilers.</p>
+<p>Methods exposed by this interface are:</p>
+<ul>
+
+<li>
+<tt>setFile</tt>. Used to specify the source file to be compiled. This
+should be an absolute filename</li>
+
+<li>
+<tt>setSource</tt>. Used to specify the directory where dependent source
+files (if any) are stored</li>
+
+<li>
+<tt>setDestination</tt>. Used to specify the directory where the generated
+object files should be placed</li>
+
+<li>
+<tt>setClasspath</tt>. Used to specify the class loading path used by the
+compiler. While this option is named after Java's <em>classpath</em> system
+variable, its semantics are language-independent</li>
+
+<li>
+<tt>setEncoding</tt>. Used to specify the encoding used by the input source
+file</li>
+
+<li>
+<tt>compile</tt>. The compiler's workhorse (boolean)</li>
+
+<li>
+<tt>getErrors</tt>. Used to retrieve a list of compilation error messages
+should compilation fail</li>
+
+</ul>
+<a name="N10340"></a><a name="Compiler+Errors"></a>
+<h4>Compiler Errors</h4>
+<p>Error message producer by the compiler must be collected and massaged by the
+<tt>LanguageCompiler</tt> in order to wrap each of them as a
+<tt>CompilerError</tt> instance.</p>
+<p>Class
+<a href="apidocs/org/apache/cocoon/components/language/programming/CompilerError.html">
+<tt>CompilerError</tt> </a> exposes the following methods:</p>
+<ul>
+
+<li>
+<tt>getFile</tt>. Returns the program filename originating the error</li>
+
+<li>
+<tt>isError</tt>. Asserts whether the error is a server error or simply a
+warning</li>
+
+<li>
+<tt>getStartLine</tt>. Returns the starting line of the offending code</li>
+
+<li>
+<tt>getStartColumn</tt>. Returns the starting column (within the starting
+line) of the offending code</li>
+
+<li>
+<tt>getEndLine</tt>. Returns the ending line of the offending code</li>
+
+<li>
+<tt>getEndColumn</tt>. Returns the ending column (within the ending line) of
+the offending code</li>
+
+<li>
+<tt>getMessage</tt>. Returns the actual error message text</li>
+
+</ul>
+<a name="N1037A"></a><a name="Java+Compilers"></a>
+<h4>Java Compilers</h4>
+<p>For the Java language, 2 pluggable compilers are available:</p>
+<ul>
+
+<li>
+<em>Javac</em>. A wrapper to Sun's builtin compiler</li>
+
+<li>
+<em>Jikes</em>. A wrapper to IBM's <em>Jikes</em> compiler</li>
+
+</ul>
+<p>Both of these compilers are based on
+<a href="apidocs/org/apache/cocoon/components/language/programming/java/AbstractJavaCompiler.html">
+<tt>AbstractJavaCompiler</tt>. </a>
+</p>
+<a name="N10397"></a><a name="Other+Compilers"></a>
+<h4>Other Compilers</h4>
+<p>Since <a class="external" href="http://www.mozilla.org/rhino/"><em>Rhino</em></a> Javascript
+provides its own, only compiler (<em>jsc</em>), class
+<tt>JavascriptLanguage</tt> doesn't use the compiler class initialized by
+<tt>CompiledProgrammingLanguage</tt>.</p>
+<a name="N103AB"></a><a name="Object+Program+Unloading"></a>
+<h3 class="h4">Object Program Unloading</h3>
+<p>
+<tt>CompiledProgrammingLanguage</tt> extends the default implementation
+provided by <tt>AbstractProgrammingLanguage</tt> by deleting the <em>object</em>
+program file and delegating actual unloading to the <tt>doUnload</tt> method.
+</p>
+<p>Method <tt>doUnload</tt> provides an empty default implementation that can be
+overridden by derived compiled languages should unloading cleanup be actually
+required.</p>
+<p>For Java-based compiled languages (i.e., those using <em>class files</em> as
+their object format, unloading implies reinstantiating their
+<a href="#class-loader">class loader</a> such that it "forgets" about previously
+loaded classes thus becoming able to refresh class files updates since their
+last load.</p>
+<p>This is a commonly-used workaround for the (somewhat buggy) standard Java
+class loader, which doesn't provide for an explicit method for reloading class
+files.</p>
+<a name="N103CC"></a><a name="The+Cocoon+Class+Loader"></a>
+<h3 class="h4">The Cocoon Class Loader</h3>
+<p>To circumvent standard Java class loaders limitation, Cocoon provides a
+simple customized class loader
+<a href="apidocs/org/apache/cocoon/components/classloader/RepositoryClassLoader.html">
+(<tt>RepositoryClassLoader</tt>) </a> that features:</p>
+<ul>
+
+<li>A directory-based extensible classpath that can grow at execution time</li>
+
+<li>Class reloading by means of reinstantiation</li>
+
+</ul>
+<p>
+<tt>RepositoryClassLoader</tt> extends <tt>java.lang.ClassLoader</tt> adding
+an <tt>addDirectory</tt> method that adds the directory pointed to by its
+<tt>String</tt> argument to its local classpath.</p>
+<p>Access to <em>protected</em> <tt>RepositoryClassLoader</tt> class is proxied
+through interface
+<a href="apidocs/org/apache/cocoon/components/classloader/ClassLoaderManager.html">
+<tt>ClassLoaderManager</tt>. </a> This interface exposes the following methods:
+</p>
+<ul>
+
+<li>
+<tt>addDirectory</tt>. Passed to the proxied <tt>RepositoryClassLoader</tt>
+
+</li>
+
+<li>
+<tt>loadClass</tt>. Passed to the proxied <tt>RepositortyClassLoader</tt>
+
+</li>
+
+<li>
+<tt>reinstantiate</tt>. Used to discard the previous class loader and create
+a new one</li>
+
+</ul>
+<p>Class
+<a href="apidocs/org/apache/cocoon/components/classloader/ClassLoaderManagerImpl.html">
+<tt>ClassLoaderManagerImpl</tt> </a> implements <tt>ClassLoaderManager</tt> in a
+singleton-like fashion that ensures that only one instance of this class loader
+exists, thus ensuring the reinstantiation mechanism works properly.</p>
+<p>The class loader can be specified in the sitemap on a per-language basis:
+</p>
+<pre>
+&lt;component-instance name="java"
+  class="org.apache.cocoon.components.language.programming.java.JavaLanguage"&gt;
+  . . .
+  &lt;parameter name="class-loader"
+    value="org.apache.cocoon.components.classloader.ClassLoaderManagerImpl"/&gt;
+&lt;/component-instance&gt;
+</pre>
+<p>Alternatively, the class loader can be specified in the sitemap as a global
+component:</p>
+<pre>
+&lt;component
+  role="class-loader"
+  class="org.apache.cocoon.components.classloader.ClassLoaderManagerImpl"/&gt;
+</pre>
+</div>
+<a name="N10428"></a><a name="Interpreted+Languages"></a>
+<h2 class="h3">Interpreted Languages</h2>
+<div class="section">
+<p>Interpreted languages for which a Java-based interpreter exists are supported
+by means of IBM's outstanding <a class="external" href="http://www.alphaworks.ibm.com/tech/bsf">
+Bean Scripting Framework </a> (BSF).</p>
+<p>Currently, BSF supports:</p>
+<ul>
+
+<li>Mozilla Rhino</li>
+
+<li>NetRexx</li>
+
+<li>Jacl</li>
+
+<li>JPython</li>
+
+<li>VBScript (Win32 only)</li>
+
+<li>JScript (Win32 only)</li>
+
+<li>PerlScript (Win32 only)</li>
+
+<li>BML (Not applicable to server pages)</li>
+
+<li>LotusXSL (Not applicable to server pages)</li>
+
+</ul>
+<div class="frame note">
+<div class="label">Note</div>
+<div class="content">Interpreted language support is still unimplemented!<br>
+While BSF is extremely easy to use and very stable, there's still a challenge in
+writing code-generation logicsheets for each of this languages; this task
+requires familiarity with XSP internals, XSLT and, above all, the programming
+language at hand...</div>
+</div>
+<div class="frame note">
+<div class="label">Note</div>
+<div class="content">Despite being supported by BSF, Rhino Javascript is separately
+supported by Cocoon as a compiled language in order to take advantage of
+automatic class reloading and persistent class file storage.</div>
+</div>
+<div class="frame note">
+<div class="label">Note</div>
+<div class="content">Since <tt>ProgramGenerator</tt> clients will typically require
+that program instances implement a given interface or extend a given class,
+method <tt>instantiate</tt> in interface <tt>ProgrammingLanguage</tt> may need
+to be augmented with a <tt>prototype</tt> interface that can be used by each
+language processor to ensure that the program instance can act as a Java object
+of the given type.</div>
+</div>
+</div>
+<a name="N10477"></a><a name="The+Markup+Language+Processor"></a>
+<h2 class="h3">The Markup Language Processor</h2>
+<div class="section">
+<p>A Cocoon's
+<a href="apidocs/org/apache/cocoon/components/language/markup/MarkupLanguage.html">
+<tt>MarkupLanguage</tt> </a> processor exposes the following methods:</p>
+<ul>
+
+<li>
+<tt>getEncoding</tt>. Return the encoding to be used in program generation
+and compilation or <tt>null</tt> to use the platform's default encoding</li>
+
+<li>
+<tt>generateCode</tt>. Given a DOM <tt>Document</tt> written in a given
+<em>markup language</em>, generate an equivalent program in a given
+<em>programming language</em>)</li>
+
+</ul>
+<p>A base markup language processor implementation is provided in class
+<a href="apidocs/org/apache/cocoon/components/language/markup/AbstractMarkupLanguage.html">
+<tt>AbstractMarkupLanguage</tt>. </a> This class extends
+<tt>org.apache.arch.named.AbstractNamedComponent</tt> to set the markup
+language's associated namespace using the following required parameters:</p>
+<ul>
+
+<li>
+<tt>prefix</tt>. The markup language's namespace prefix</li>
+
+<li>
+<tt>uri</tt>. The markup language's namespace URI</li>
+
+</ul>
+<pre>
+&lt;component-instance name="xsp"
+  class="org.apache.cocoon.components.language.markup.xsp.XSPMarkupLanguage"&gt;
+  &lt;parameter name="prefix" value="xsp"/&gt;
+  &lt;parameter name="uri" value="http://apache.org/xsp"/&gt;
+&lt;/component-instance&gt;
+</pre>
+<p>
+<tt>AbstractMarkupLanguage</tt> adds a number of abstract/overridable methods
+that must be implemented by concrete markup language processors:</p>
+<ul>
+
+<li>
+<tt>preprocessDocument</tt>. Augment the input DOM <tt>Document</tt> to
+prepare it for simpler, faster logicsheet-based code generation</li>
+
+<li>
+<tt>getLogicsheets</tt>. Return the list of logicsheets declared in the
+input document according to the syntax of the markup language at hand</li>
+
+<li>
+<tt>addDependency</tt>. Add a dependency on an external file. This is used
+to inform the concrete markup language processor about XML documents included by
+means of XInclude as well as any intervening logicsheet</li>
+
+</ul>
+<div class="frame note">
+<div class="label">Note</div>
+<div class="content">
+<tt>AbstractMarkupLanguage</tt> is currently tied to logicsheets
+as the <em>only</em> means of generating source code. While logicsheets provide
+a very powerful means for code generation, good design dictates that the actual
+code generation mechanism should be decoupled from the dynamic markup language
+abstraction.</div>
+</div>
+<div class="frame note">
+<div class="label">Note</div>
+<div class="content">The current code generation strategy is DOM-based. In principle,
+this is adequate because document preprocessing may need random access to
+document nodes. Code generation is being reconsidered, however, to overcome this
+and make it possible to reuse Cocoon's SAX-based filtering pipeline.</div>
+</div>
+<a name="N104E3"></a><a name="Markup+Encoding"></a>
+<h3 class="h4">Markup Encoding</h3>
+<p>All markup languages must provide a way to declare the XML document's
+encoding so that it is preserved during code generation, beautifying and
+compilation.</p>
+<p>This is required for proper i18n support, where the default encoding usually
+replaces "exotic" characters with question marks.</p>
+<div class="frame note">
+<div class="label">Note</div>
+<div class="content">Ideally, it should be possible to determine the source XML
+document's <tt>encoding</tt> from its declaring <tt>&lt;?xml?&gt;</tt>
+processing instruction. Unfortunately, XML parsers (both DOM and SAX) don't seem
+to provide access to it, thus forcing server pages authors to redundantly
+specify it.</div>
+</div>
+<a name="N104F9"></a><a name="The+Logicsheet+class"></a>
+<h3 class="h4">The Logicsheet class</h3>
+<p>A <em>logicsheet</em> is an XML filter used to translate user-defined dynamic
+markup into equivalent code embedding directives for a given markup language.
+</p>
+<p>Logicsheets lie at the core of XSP's promise to separate logic from content
+and presentation: they make dynamic content generation capabilities available to
+content authors not familiar with (and not interested in) programming.</p>
+<p>For a detailed description of logicsheets, see
+<a href="../../../2.1/userdocs/xsp/logicsheet-concepts.html">Logicsheet Concepts</a>.</p>
+<p>Logicsheets are represented in class
+<a href="apidocs/org/apache/cocoon/components/language/markup/Logicsheet.html">
+<tt>Logicsheet</tt>. </a> This class exposes the following methods:</p>
+<ul>
+
+<li>
+<tt>setInputSource</tt>. Set the <tt>InputSource</tt> pointing to the XSLT
+stylesheet to be used for dynamic tag transformation</li>
+
+<li>
+<tt>apply</tt>. Apply the stylesheet to a given document</li>
+
+</ul>
+<p>
+<tt>Logicsheet</tt> takes care of preserving all namespaces defined in the
+input document. This is necessary when multiple logicsheets are applied and
+multiple namespaces are used in the input document.</p>
+<div class="frame note">
+<div class="label">Note</div>
+<div class="content">Currently, <tt>Logicsheet</tt> is a concrete class. It should be
+redefined as an interface in order to decouple it from the use of XSLT
+stylesheets. Again, while stylesheets are the "obvious" way to implement
+logicsheets, a user-supplied XML filter may also be used in some cases. The
+current implementation uses an ugly hack where a Xalan stylesheet processor is
+used to perform the transformation without an intervening stylesheet processor
+wrapping abstraction.</div>
+</div>
+<a name="N10531"></a><a name="Named+Logicsheets"></a>
+<h3 class="h4">Named Logicsheets</h3>
+<p>As explained in <a href="../../../2.1/"> Logicsheet Concepts,
+</a> logicsheets are typically associated with a single object type whose
+methods it wraps to make them available as <em>markup commands</em>.</p>
+<p>Markup commands related to a given object type are grouped under a single
+namespace.</p>
+<p>Class
+<a href="apidocs/org/apache/cocoon/components/language/markup/NamedLogicsheet.html">
+<tt>NamedLogicsheet</tt> </a> extends <tt>Logicsheet</tt> to associate it with a
+namespace. This class exposes the following additional methods:</p>
+<ul>
+
+<li>
+<tt>setPrefix</tt>. To set the logicsheet's namespace prefix</li>
+
+<li>
+<tt>getPrefix</tt>. To retrieve the logicsheet's namespace prefix</li>
+
+<li>
+<tt>setUri</tt>. To set the logicsheet's namespace URI</li>
+
+<li>
+<tt>getUri</tt>. To retrieve the logicsheet's namespace URI</li>
+
+</ul>
+<p>Named logicsheets are used as <a href="#builtin-logicsheets"> builtin
+logicsheets </a> by <tt>AbstractMarkupLanguage</tt> to preload logicsheets and
+make them accessible to dynamic XML documents without explicit declaration.</p>
+<p>This feature relieves page authors from the need to explicitly declare
+commonly used logicsheets in their documents. Builtin logicsheets are
+automatically applied if the document declares their same namespace URI.</p>
+<div class="frame note">
+<div class="label">Note</div>
+<div class="content">The current <tt>AbstractMarkupLanguage</tt> implementation
+wrongly binds named logicsheets based on their namespace <em>prefix</em>
+instead of their URI!</div>
+</div>
+<a name="N1057B"></a><a name="Logicsheet+Code+Generators"></a>
+<h3 class="h4">Logicsheet Code Generators</h3>
+<p>Logicsheets translate dynamic tags to equivalent code-embedding directives
+expressed in the markup language at hand. They do not, however, actually emit
+the final source code program.</p>
+<p>Code generation as such (i.e., the final production of a string containing a
+source program written in a programming language) is the responsibility of class
+<tt>LogicsheetCodeGenerator</tt>.</p>
+<p>Class
+<a href="apidocs/org/apache/cocoon/components/language/markup/LogicsheetCodeGenerator.html">
+<tt>LogicsheetCodeGenerator</tt> </a> exposes the following methods:</p>
+<ul>
+
+<li>
+<tt>addLogicsheet</tt>. Add a logicsheet to the generator's logicsheet list.
+Logicsheets are applied in the order of their addition.</li>
+
+<li>
+<tt>generateCode</tt>. Return a string containing a source program resulting
+from successively applying added logicsheets.</li>
+
+</ul>
+<p>Though "regular" logicsheets as such do not emit source code,
+<tt>LogicsheetCodeGenerator</tt> expects its <em>last</em> stylesheet to produce
+<em>a single element</em> containing only a text node.</p>
+<p>This final, programming language-specific logicsheet is responsible for
+actually expanding code-embedding directives into source code.</p>
+<p>For each supported target programming language, markup languages must provide
+a <em>core</em> logicsheet.</p>
+<div class="frame note">
+<div class="label">Note</div>
+<div class="content">
+<tt>LogicsheetCodeGenerator</tt> is currently implemented as a
+class. It should be defined as an interface in order to the decouple the code
+generator abstraction from its logicsheet-based implementation. This would allow
+for alternative code-generation strategies to be plugged.</div>
+</div>
+<a name="N105B7"></a><a name="Markup+Language+Definition"></a>
+<h3 class="h4">Markup Language Definition</h3>
+<p>Markup languages are defined in the sitemap as follows:</p>
+<pre>
+&lt;component-type name="markup-language"&gt;
+  &lt;component-instance name="xsp"
+    class="org.apache.cocoon.components.language.markup.xsp.XSPMarkupLanguage"&gt;
+    &lt;parameter name="prefix" value="xsp"/&gt;
+    &lt;parameter name="uri" value="http://apache.org/xsp"/&gt;
+
+    &lt;target-language name="java"&gt;
+      &lt;parameter name="core-logicsheet"
+value="resource://org/apache/cocoon/components/language/markup/xsp/java/xsp.xsl"/&gt;
+
+      &lt;builtin-logicsheet&gt;
+        &lt;parameter name="prefix" value="xsp-request"/&gt;
+        &lt;parameter name="uri" value="http://apache.org/xsp/request/2.0"/&gt;
+        &lt;parameter name="href"
+value="resource://org/apache/cocoon/components/language/markup/xsp/java/request.xsl"/&gt;
+      &lt;/builtin-logicsheet&gt;
+
+      &lt;builtin-logicsheet&gt;
+        &lt;parameter name="prefix" value="xsp-response"/&gt;
+        &lt;parameter name="uri"
+          value="http://apache.org/xsp/response/2.0"/&gt;
+        &lt;parameter name="href"
+value="resource://org/apache/cocoon/components/language/markup/xsp/java/request.xsl"/&gt;
+      &lt;/builtin-logicsheet&gt;
+    &lt;/target-language&gt;
+  &lt;/component-instance&gt;
+&lt;/component-type&gt;
+</pre>
+<p>Here, the markup language <em>prefix</em> and <em>uri</em> are defined
+together with one or more <em>supported programming languages</em>.</p>
+<p>For each supported programming language, a corresponding <em>core
+logicsheet</em> is defined as a URL pointing to its code-generation stylesheet.
+</p>
+<p>Optionally, each supported programming language may define one or more
+namespace-mapped <em>builtin logicsheets</em>.</p>
+</div>
+<a name="N105D4"></a><a name="The+XSP+Markup+Language"></a>
+<h2 class="h3">The XSP Markup Language</h2>
+<div class="section">
+<p>So far, programming and markup languages have been described in general,
+without explicitly referring to the XSP language.</p>
+<p>This section describes how the above described framework is used to implement
+XSP in particular. For a description of logicsheet authoring requirements for
+XSP in Java, see <a href="../../../2.1/"> XSLT Logicsheets and XSP
+for Java. </a>
+</p>
+<div class="frame note">
+<div class="label">Note</div>
+<div class="content">The XSP syntax is being revised to allow for the omission of the
+root <tt>&lt;xsp:page&gt;</tt> element. This is convenient for the (typical)
+case in which all logic has been conveniently placed in logicsheets so that XSP
+pages do not need to embed any code. In this case, there should be no need for
+the <tt>&lt;xsp:page&gt;</tt> element.</div>
+</div>
+<a name="N105ED"></a><a name="Markup+Encoding-N105ED"></a>
+<h3 class="h4">Markup Encoding</h3>
+<p>Method <tt>getEncoding</tt> is implemented by class
+<a href="apidocs/org/apache/cocoon/components/language/markup/xsp/XSPMarkupLanguage.html">
+<tt>XSPMarkupLanguage</tt> </a> by retrieving the attribute named
+<tt>encoding</tt> in the root <tt>&lt;xsp:page&gt;</tt> element.</p>
+<div class="frame note">
+<div class="label">Note</div>
+<div class="content">In absence of a <tt>&lt;xsp:page&gt;</tt> root element, the
+encoding will be retrieved from an attribute named <tt>xsp:encoding</tt>
+present in the "user" root element.</div>
+</div>
+<a name="N10611"></a><a name="Document+Preprocessing"></a>
+<h3 class="h4">Document Preprocessing</h3>
+<p>
+<tt>XSPMarkupLanguage</tt> preprocesses its input document by:</p>
+<ul>
+
+<li>Setting the root element <tt>file-name</tt> attribute to the <em>base</em>
+filename of its input source.</li>
+
+<li>Setting the root element <tt>file-path</tt> attribute to the <em>base</em>
+directory name of its input source.</li>
+
+<li>Setting the root element <tt>creation-date</tt> attribute to the current
+system time</li>
+
+<li>Escaping text nodes according to the rules dictated by the target
+programming language. This excludes text nodes enclosed in
+<tt>&lt;xsp:logic&gt;</tt> and <tt>&lt;xsp:expr&gt;</tt> elements, as they are
+to be output as code.</li>
+
+</ul>
+<div class="frame note">
+<div class="label">Note</div>
+<div class="content">A feature to be added is collecting all text nodes under the
+document's root element and replacing them by references to their relative index
+position. This will allow for the generation of
+<tt>contentHandler.characters</tt> method calls that reference <tt>char</tt>

[... 314 lines stripped ...]


Mime
View raw message