blob: 99e7c33e3dc92dd34fde901beef2ccc3c75aeeaa [file] [log] [blame]
<!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>Dispatcher (Draft - feature under development) (v0.8-dev)</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="../favicon.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://forrest.apache.org/">forrest</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/apache-forrest.png" title="The Apache Software Foundation"></a>
</div>
<!--+
|end group logo
+-->
<!--+
|start Project Logo
+-->
<div class="projectlogo">
<a href="http://forrest.apache.org/"><img class="logoImage" alt="Forrest" src="../images/project-logo.gif" title="Apache Forrest"></a>
</div>
<!--+
|end Project Logo
+-->
<!--+
|start Search
+-->
<div class="searchbox">
<form action="http://www.google.com/search" method="get" class="roundtopsmall">
<input value="forrest.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="unselected" href="../index.html">Welcome</a>
</li>
<li>
<a class="unselected" href="../contrib.html">Developers</a>
</li>
<li class="current">
<a class="selected" href="../versions/index.html">Versioned Docs</a>
</li>
<li>
<a class="unselected" href="../pluginDocs/index.html">Plugins</a>
</li>
<li>
<a class="unselected" href="../tools/index.html">Tools</a>
</li>
</ul>
<!--+
|end Tabs
+-->
</div>
</div>
<div id="main">
<div id="publishedStrip">
<!--+
|start Subtabs
+-->
<div id="level2tabs">
<a class="unselected" href="../docs_0_70/index.html">0.70 (current)</a><a class="selected" href="../docs_0_80/index.html">0.80-dev (under development)</a><a class="unselected" href="../docs_0_60/index.html">0.60 (past)</a>
</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_selected_1.1', '../skin/')" id="menu_selected_1.1Title" class="menutitle" style="background-image: url('../skin/images/chapter_open.gif');">0.80-dev</div>
<div id="menu_selected_1.1" class="selectedmenuitemgroup" style="display: block;">
<div class="menuitem">
<a href="../docs_0_80/index.html">Overview</a>
</div>
<div onclick="SwitchMenu('menu_1.1.2', '../skin/')" id="menu_1.1.2Title" class="menutitle">How-To</div>
<div id="menu_1.1.2" class="menuitemgroup">
<div class="menuitem">
<a href="../docs_0_80/howto/index.html">Overview</a>
</div>
<div onclick="SwitchMenu('menu_1.1.2.2', '../skin/')" id="menu_1.1.2.2Title" class="menutitle">Install Forrest</div>
<div id="menu_1.1.2.2" class="menuitemgroup">
<div class="menuitem">
<a href="../docs_0_80/your-project.html">Using Forrest</a>
</div>
<div class="menuitem">
<a href="../docs_0_80/build.html" title="Build and install the current unreleased version">Building Forrest from Source</a>
</div>
</div>
<div class="menuitem">
<a href="../docs_0_80/upgrading_08.html">Upgrading to 0.8</a>
</div>
<div class="menuitem">
<a href="">Use Forrest</a>
</div>
<div onclick="SwitchMenu('menu_1.1.2.5', '../skin/')" id="menu_1.1.2.5Title" class="menutitle">Customize Forrest</div>
<div id="menu_1.1.2.5" class="menuitemgroup">
<div class="menuitem">
<a href="../docs_0_80/howto/howto-editcss.html">Edit CSS (WYSIWYG)</a>
</div>
<div class="menuitem">
<a href="../docs_0_80/howto/howto-pdf-tab.html" title="Generate one pdf-document for all pages of a tab">Create tab PDF</a>
</div>
<div class="menuitem">
<a href="../docs_0_80/howto/howto-corner-images.html">CSS corner SVG</a>
</div>
<div class="menuitem">
<a href="../docs_0_80/howto/howto-custom-html-source.html">Custom html source</a>
</div>
<div class="menuitem">
<a href="../docs_0_80/project-sitemap.html">Project sitemap</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.2.6', '../skin/')" id="menu_1.1.2.6Title" class="menutitle">Integrate Forrest with tools</div>
<div id="menu_1.1.2.6" class="menuitemgroup">
<div class="menuitem">
<a href="../docs_0_80/howto/howto-forrest-from-maven.html">Maven Integration</a>
</div>
<div class="menuitem">
<a href="../docs_0_80/catalog.html">Using DTD Catalogs</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.2.7', '../skin/')" id="menu_1.1.2.7Title" class="menutitle">Extend Forrest</div>
<div id="menu_1.1.2.7" class="menuitemgroup">
<div class="menuitem">
<a href="../docs_0_80/howto/howto-buildPlugin.html">Build a Plugin</a>
</div>
<div class="menuitem">
<a href="../docs_0_80/skin-package.html">Package new Skins</a>
</div>
</div>
<div class="menuitem">
<a href="../docs_0_80/howto/howto-asf-mirror.html">Download mirror</a>
</div>
<div onclick="SwitchMenu('menu_1.1.2.9', '../skin/')" id="menu_1.1.2.9Title" class="menutitle">Dispatcher</div>
<div id="menu_1.1.2.9" class="menuitemgroup">
<div class="menuitem">
<a href="../docs_0_80/howto/howto-dispatcher-install.html">Install</a>
</div>
<div class="menuitem">
<a href="../docs_0_80/howto/howto-structurer-dsl.html">Structurer</a>
</div>
<div class="menuitem">
<a href="../docs_0_80/howto/howto-dispatcher-quickstart.html">Quickstart</a>
</div>
<div class="menuitem">
<a href="../docs_0_80/howto/howto-structurer-contracts.html">Contracts</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.2.10', '../skin/')" id="menu_1.1.2.10Title" class="menutitle">Adding Documentation</div>
<div id="menu_1.1.2.10" class="menuitemgroup">
<div class="menuitem">
<a href="../howto-howto.html" title="Instructions for writing a new howto-document">Write a How-to</a>
</div>
<div onclick="SwitchMenu('menu_1.1.2.10.2', '../skin/')" id="menu_1.1.2.10.2Title" class="menutitle">Multipage HowTo</div>
<div id="menu_1.1.2.10.2" class="menuitemgroup">
<div class="menuitem">
<a href="../docs_0_80/howto/multi/howto-multi.html">Introduction</a>
</div>
<div class="menuitem">
<a href="../docs_0_80/howto/multi/step1.html">Step 1</a>
</div>
<div class="menuitem">
<a href="../docs_0_80/howto/multi/step2.html">Step 2</a>
</div>
<div class="menuitem">
<a href="../docs_0_80/howto/multi/step3.html">Step 3</a>
</div>
</div>
</div>
</div>
<div class="menuitem">
<a href="../docs_0_80/faq.html">FAQs</a>
</div>
<div onclick="SwitchMenu('menu_1.1.4', '../skin/')" id="menu_1.1.4Title" class="menutitle">Background</div>
<div id="menu_1.1.4" class="menuitemgroup">
<div class="menuitem">
<a href="../docs_0_80/linking.html">Menus and Linking</a>
</div>
<div class="menuitem">
<a href="../docs_0_80/searching.html">Search Options in Forrest</a>
</div>
<div class="menuitem">
<a href="../docs_0_80/locationmap.html">Locationmap</a>
</div>
<div class="menuitem">
<a href="../docs_0_80/skins.html" title="About default skins, their naming and features">Skins</a>
</div>
<div class="menuitem">
<a href="../docs_0_80/sitemap-ref.html">Sitemap Reference</a>
</div>
<div class="menuitem">
<a href="../docs_0_80/status-themes.html">Themes and Dispatcher vs. Skins</a>
</div>
<div class="menuitem">
<a href="../docs_0_80/cap.html">Sourcetype Action</a>
</div>
<div class="menuitem">
<a href="../docs_0_80/validation.html">XML Validation</a>
</div>
</div>
<div class="menuitem">
<a href="../docs_0_80/changes.html">Changes</a>
</div>
<div class="menupage">
<div class="menupagetitle">Dispatcher development</div>
</div>
<div class="menuitem">
<a href="../docs_0_80/glossary.html">Glossary</a>
</div>
<div onclick="SwitchMenu('menu_1.1.8', '../skin/')" id="menu_1.1.8Title" class="menutitle">Reference docs</div>
<div id="menu_1.1.8" class="menuitemgroup">
<div onclick="SwitchMenu('menu_1.1.8.1', '../skin/')" id="menu_1.1.8.1Title" class="menutitle">DTD documentation</div>
<div id="menu_1.1.8.1" class="menuitemgroup">
<div class="menuitem">
<a href="../dtdx/dtd-docs.html">Overview</a>
</div>
<div class="menuitem">
<a href="../dtdx/document-v20.dtdx.html">document-v20</a>
</div>
<div class="menuitem">
<a href="../dtdx/howto-v20.dtdx.html">howto-v20</a>
</div>
<div class="menuitem">
<a href="../dtdx/faq-v20.dtdx.html">faq-v20</a>
</div>
<div class="menuitem">
<a href="../dtdx/document-v13.dtdx.html">document-v13</a>
</div>
<div class="menuitem">
<a href="../dtdx/howto-v13.dtdx.html">howto-v13</a>
</div>
<div class="menuitem">
<a href="../dtdx/faq-v13.dtdx.html">faq-v13</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.8.2', '../skin/')" id="menu_1.1.8.2Title" class="menutitle">Doc samples</div>
<div id="menu_1.1.8.2" class="menuitemgroup">
<div class="menuitem">
<a href="../dtdx/document-v13.html">document-v13</a>
</div>
<div class="menuitem">
<a href="../dtdx/document-v20.html">document-v20</a>
</div>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9', '../skin/')" id="menu_1.1.9Title" class="menutitle">Older Docs</div>
<div id="menu_1.1.9" class="menuitemgroup">
<div class="menuitem">
<a href="../docs_0_80/primer.html">Forrest Primer</a>
</div>
<div class="menuitem">
<a href="../docs_0_80/libre-intro.html">Libre</a>
</div>
<div class="menuitem">
<a href="../docs_0_80/dreams.html">Dream list</a>
</div>
<div class="menuitem">
<a href="../docs_0_80/howto/cvs-ssh/howto-cvs-ssh.html">CVS over SSH</a>
</div>
</div>
</div>
<div id="credit">
<hr>
This is documentation for development version v0.8
(<a href="http://forrest.apache.org/versions/">More</a>)</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://www.asia.apachecon.com/"><img border="0" title="ApacheCon Asia 2006 (14-17 August 2006)" alt="ApacheCon Asia 2006 (14-17 August 2006) - logo" src="http://asia.apachecon.com/wp-content/themes/apachecon/css/lyt/apache_con_asia_header.png" style="width: 150px;height: 50px;"></a><a href="http://www.us.apachecon.com/"><img border="0" title="ApacheCon US 2006 (9-13 October 2006)" alt="ApacheCon US 2006 (9-13 October 2006) - logo" src="http://www.us.apachecon.com/images/ASF-us-2006-web_masthead.jpg" style="width: 150px;height: 50px;"></a>
</div>
</div>
<!--+
|end Menu
+-->
<!--+
|start content
+-->
<div id="content">
<div title="Portable Document Format" class="pdflink">
<a class="dida" href="dispatcher.pdf"><img alt="PDF -icon" src="../skin/images/pdfdoc.gif" class="skin"><br>
PDF</a>
</div>
<div class="trail">Font size:
&nbsp;<input value="Reset" class="resetfont" title="Reset text" onclick="ndeSetTextSize('reset'); return false;" type="button">
&nbsp;<input value="-a" class="smallerfont" title="Shrink text" onclick="ndeSetTextSize('decr'); return false;" type="button">
&nbsp;<input value="+a" class="biggerfont" title="Enlarge text" onclick="ndeSetTextSize('incr'); return false;" type="button">
</div>
<h1>Dispatcher (Draft - feature under development)</h1>
<div id="motd-area">
This is documentation for development version v0.8
(<a href="http://forrest.apache.org/versions/">More</a>)</div>
<div id="minitoc-area">
<ul class="minitoc">
<li>
<a href="#introduction">Introduction</a>
</li>
<li>
<a href="#background">Background</a>
<ul class="minitoc">
<li>
<a href="#nc-definition">Definition of naming conventions</a>
</li>
<li>
<a href="#leather">leather-dev</a>
</li>
</ul>
</li>
<li>
<a href="#dispatcher">Dispatcher - advanced separation of concerns</a>
<ul class="minitoc">
<li>
<a href="#contracts">Contracts - grouped functionality</a>
</li>
</ul>
</li>
<li>
<a href="#info">Further information</a>
</li>
</ul>
</div>
<div class="warning">
<div class="label">Warning</div>
<div class="content"> The "dispatcher" is new functionality which is still in
development phase. That is why it is in the "whiteboard" section of the
Forrest distribution. We are working at the moment on moving this plugin
from the whiteboard into the core plugins. Further all dispatcher related
documents will be moved into the plugin as well.
See <a href="../docs_0_80/status-themes.html">Status of Themes: Skins and Dispatcher</a>.
</div>
</div>
<a name="N10014"></a><a name="introduction"></a>
<h2 class="underlined_10">Introduction</h2>
<div class="section">
<p> As stated in the <a href="../docs_0_80/howto/../your-project.html#skins">Skin
documentation </a> the aim of the Forrest skins is to provide many
capabilities so that extra skins are not needed. Experience showed that
many Forrest users still decided to create a new skin because the
default skin did not offer the features that they wanted or they "just"
needed extra content in some pages. We introduced skinconf.xml where
the user could configure some features of skins but it was up to the
skin to support it and did not solve the problem to add page specific
extra content. That led us to develop a new concept of creating skins
(we called the result "themes") which would be more easily extensible
by a user. </p>
</div>
<a name="N10022"></a><a name="background"></a>
<h2 class="underlined_10">Background</h2>
<div class="section">
<p> The problem with the forrest skins so far has been that even if
"only" the design changed (html-skeleton), we still had to write a
completely new skin and implement all functionality. Another problem
was that the functionality was not easily extensible by a user. We
decided to support a standard regarding naming conventions for css
elements. This standard has been developed on the <a href="http://www.oscom.org/events/oscom4/proposals/skins.html"> OSCOM
website</a>, where you can find some more background information.</p>
<a name="N1002F"></a><a name="nc-definition"></a>
<h3 class="underlined_5">Definition of naming conventions</h3>
<p> "A naming convention is an attempt to systematize names in a field
so they unambiguously convey similar information in a similar
manner." <a href="http://en.wikipedia.org/wiki/Naming_conventions">wikipedia</a>
</p>
<a name="N1003D"></a><a name="leather"></a>
<h3 class="underlined_5">leather-dev</h3>
<p> That led to the development of the "leather-dev" skin which
established a semantic container approach for div elements.
Leather-dev evolved from the "pelt" skin and almost used the same
functionality (contracts). We had started to encapsulate functional
code into templates, but there have been still in 4 xsl files and without
any documentation what they are doing and how to use them. The
problems with leather-dev was pointed out in the mail "<a href="http://marc.theaimsgroup.com/?l=forrest-dev&m=111049344517653">status on leather-dev?</a>". The main proplem was to limit users to
only one html-skeleton was way too limiting regarding design. Since
we had now grouped functionality in named container we were ready to
start the dispatcher (aka forrest:views).</p>
</div>
<a name="N1004C"></a><a name="dispatcher"></a>
<h2 class="underlined_10">Dispatcher - advanced separation of concerns</h2>
<div class="section">
<p> The aim of the "dispatcher" concept is to provide a flexible
framework for creating site and page specific layout in different
formats from different content through an advanced seperation of
concerns.</p>
<p>The dispatcher is a filter that limits the data-model to a minimum by
only requesting what the strucuter (e.g. common.fv) need. This leads to
a different URL handling focus - away from document centric. A document
can (but do not have to) be behind a certain URL. Like said a
structurer can request any given data as input not only a document and
the forrest core contracts (like navigation). It may be the main
enhancement in comparison to skins that this concept let you easily
extend the default data models provided by forrest.</p>
<p>Since the dispatcher has implemented a fallback concept it makes
maintenance of custom themes which are based on forrest core ones very
easy and less time consuming. The principal is to override or extend
only certain parts (contracts) of the core. This is based on the
observation that normally only a small percentage of core skin
contracts have been changed. At the same time the new plugin system
emerged. Plugins are a way of extending Forrest to satisfy
site-specific needs. This includes to provide plugin specific
contracts.</p>
<a name="N1005B"></a><a name="contracts"></a>
<h3 class="underlined_5">Contracts - grouped functionality</h3>
<p>The result of the leather-dev development were grouped functionality
in named container. We gave those code snippets names (based on their
functionality) and called them contracts. This naming enabled us to
keep the contract separate from the position code itself. Further
since major parts of the code of skins never have been documentended
we started to add for each contract a description and an explanation
how to use this contract. The skinconf.xml gave an excellent
source for this documentation effort, since it described most
features of the pelt skin.</p>
<p>Contracts are standalone, self explaining, configurable
pieces of xsl templates created out of pure maintaining reasons.</p>
</div>
<a name="N10069"></a><a name="info"></a>
<h2 class="underlined_10">Further information</h2>
<div class="section">
<p> See the various How-to documents about the dispatcher, starting with
<a href="../docs_0_80/howto/howto-dispatcher-install.html">installing the
dispatcher</a> and
<a href="../docs_0_80/howto/howto-dispatcher-quickstart.html">quickstart</a>
</p>
<p> Apache Forrest 1.0 Specification (Draft, not yet published):
<span class="codefrag">site-author/content/xdocs/TR/2005/WD-forrest10.html</span>
</p>
</div>
</div>
<!--+
|end content
+-->
<div class="clearboth">&nbsp;</div>
</div>
<div id="footer">
<!--+
|start bottomstrip
+-->
<div class="lastmodified">
<script type="text/javascript"><!--
document.write("Last Published: " + document.lastModified);
// --></script>
</div>
<div class="copyright">
Copyright &copy;
2002-2006 <a href="http://www.apache.org/licenses/">The Apache Software Foundation.</a>
</div>
<!--+
|end bottomstrip
+-->
</div>
</body>
</html>