portals-jetspeed-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From woon...@apache.org
Subject svn commit: r722405 [10/17] - in /portals/jetspeed-2/portal/branches/JS2-871-pluto-2.0-upgrade: ./ src/ src/site/ src/site/resources/ src/site/resources/css/ src/site/resources/images/ src/site/resources/images/layouts/ src/site/resources/images/portle...
Date Tue, 02 Dec 2008 08:53:28 GMT
Added: portals/jetspeed-2/portal/branches/JS2-871-pluto-2.0-upgrade/src/site/xdoc/guides/guide-portlet-bridges.xml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/branches/JS2-871-pluto-2.0-upgrade/src/site/xdoc/guides/guide-portlet-bridges.xml?rev=722405&view=auto
==============================================================================
--- portals/jetspeed-2/portal/branches/JS2-871-pluto-2.0-upgrade/src/site/xdoc/guides/guide-portlet-bridges.xml (added)
+++ portals/jetspeed-2/portal/branches/JS2-871-pluto-2.0-upgrade/src/site/xdoc/guides/guide-portlet-bridges.xml Tue Dec  2 00:53:22 2008
@@ -0,0 +1,84 @@
+<?xml version="1.0"?>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+<document>
+  <properties>
+    <title>Jetspeed Portlet Bridges</title>
+    <subtitle>Documentation for Apache Portals Portlet Bridges</subtitle>
+    <authors>
+      <person name="David Le Strat" email="dlestrat@apache.org"/>
+    </authors>
+  </properties>
+  <body>
+<section name="Struts Portlet Bridge">
+<p>
+The Portals Bridges project provides a Portlet bridge for Struts which can be used with Jetspeed 2.
+Please visit the <a href="http://portals.apache.org/bridges/multiproject/portals-bridges-struts/index.html">Apache Portals Struts Portlet Bridge</a>
+sub project documentation.
+</p>
+<p>
+The Bridges project also provides a great Struts Portlet demo application:
+<ul>
+	<li>The <a href="http://portals.apache.org/bridges/multiproject/jpetstore/index.html">iBATIS JPetstore Demo Portlet</a> application</li>
+</ul>
+</p>
+</section>
+<section name="JSF Portlet Bridge">
+<p>
+The Portals Bridges project provides a Portlet bridge for JSF which can be used with Jetspeed 2. 
+Please visit the <a href="http://portals.apache.org/bridges/multiproject/portals-bridges-jsf/index.html">Apache Portals JSF Portlet Bridge</a>
+sub project documentation.
+</p>
+<p>
+Portals Bridges also provides a JSF portlet demo application based on MyFaces JSF implementation:
+<ul>
+	<li>The <a href="http://portals.apache.org/bridges/multiproject/jsf-demo/index.html">JSF Portlet Demo</a> application using Apache Portals JSF Portlet Bridge</li>
+</ul>
+</p>
+</section>
+
+<section name="Velocity Portlet Bridge">
+<p>
+The Portals Bridges project provides a Portlet bridge for Velocity which is used extensively within Jetspeed 2 itself. 
+Please visit the <a href="http://portals.apache.org/bridges/multiproject/portals-bridges-velocity/index.html">Apache Portals Velocity Portlet Bridge</a>
+sub project documentation.
+</p>
+<p>
+An example of the Velocity Bridge usage within Jetspeed 2 is:
+<ul>
+    <li>The Jetspeed 2 <a href="../multiproject/j2-admin/index.html">Administration and Security</a> application</li>
+</ul>
+</p>
+</section>
+
+<section name="Perl Portlet Bridge">
+<p>
+The Portals Bridges project provides a Portlet bridge for Perl applications.  Please visit the <a href="http://portals.apache.org/bridges/multiproject/portals-bridges-perl/index.html">Apache Portals Perl Portlet Bridge</a>
+sub project documentation.
+</p>
+</section>
+
+<section name="PHP Portlet Bridge">
+<p>
+The Portals Bridges project provides a Portlet bridge for PHP applications.  Please visit the <a href="http://portals.apache.org/bridges/multiproject/portals-bridges-php/index.html">Apache Portals PHP Portlet Bridge</a>
+sub project documentation.
+</p>
+</section>
+
+</body>
+</document>
+

Propchange: portals/jetspeed-2/portal/branches/JS2-871-pluto-2.0-upgrade/src/site/xdoc/guides/guide-portlet-bridges.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: portals/jetspeed-2/portal/branches/JS2-871-pluto-2.0-upgrade/src/site/xdoc/guides/guide-portlet-bridges.xml
------------------------------------------------------------------------------
    svn:keywords = Id

Added: portals/jetspeed-2/portal/branches/JS2-871-pluto-2.0-upgrade/src/site/xdoc/guides/guide-profiler.xml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/branches/JS2-871-pluto-2.0-upgrade/src/site/xdoc/guides/guide-profiler.xml?rev=722405&view=auto
==============================================================================
--- portals/jetspeed-2/portal/branches/JS2-871-pluto-2.0-upgrade/src/site/xdoc/guides/guide-profiler.xml (added)
+++ portals/jetspeed-2/portal/branches/JS2-871-pluto-2.0-upgrade/src/site/xdoc/guides/guide-profiler.xml Tue Dec  2 00:53:22 2008
@@ -0,0 +1,604 @@
+<?xml version="1.0"?>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+<document>
+  <properties>
+    <title>Profiler</title>
+    <subtitle>Documentation for Jetspeed-2 Profiler</subtitle>
+    <authors>
+      <person name="David Sean Taylor" email="taylor@apache.org"/>
+    </authors>
+  </properties>
+  <body>
+<section name="Profiler Overview">
+<p>
+The Jetspeed Profiler is a portal resource location rule-based engine.
+The profiler locates the following kinds of portal resources:
+<ul>
+    <li>PSML pages</li>
+    <li>Folders</li>
+    <li>Menus</li>
+    <li>Links</li>
+</ul>
+When a request is received by the portal, the profiler will compute a normalized instruction set, known
+as a profile locator. The locator is then added to the request context, from which subsequent components on the
+Jetspeed pipeline, most notably the Page Manager and Portal Site components, can take the profile locator 
+and use it to find a requested resource. For example, the Page Manager uses the locator to find a page or folder. 
+The Portal Site component  uses the locator build the options on a menu. 
+</p>
+<p>    
+The profile locator is the output from the profiler. The input is a normalized set of runtime parameters and state.
+The profiler input is defined in profiling rules, and can be made of any Java class available on the pipeline. 
+Jetspeed comes with quite a few predefined rules for taking criteria from request parameters, HTTP headers,
+security information, language and session attributes. The profiler is invoked during the Jetspeed request 
+processing pipeline in the profiler valve. 
+<img src="images/profiler/profiler-pipeline.jpg" border="1"/>   
+</p>
+<p>  
+All of these runtime parameters are called the <i>profile criterion</i>, which the profiler uses to locate 
+portal resources. 
+</p>
+</section>
+<section name="Located Portal Resources: Pages">          
+<p>
+The Profiler searches over a directory tree of PSML pages trying to locate a 
+PSML page to be displayed. By default, this directory structure is found under WEB-INF/pages. 
+The pages directory can also be stored in the database. This directory structure, comprised of
+portal resources (pages, folders, menus, links), is a <i>physical</i> representation of the portal site.
+The Jetspeed team plans to also support <i>logical</i> views of the portal site in future releases.
+</p>
+<p>
+Analogous to a file system, there is one physical root to the portal site. However, using the concept of <i>subsites</i>, 
+the Jetspeed site can support entire subsites that are not visible to other subsites, or the main site.
+There are several reserved (system) directories standardized by the profiler:
+<table>
+    <tr>
+    <th>Reserved Folder</th>
+    <th>Description</th>
+    </tr>
+    <tr>
+        <td>_user</td>
+        <td>holds all user-specific folders and pages</td>
+    </tr>
+    <tr>
+        <td>_role</td>
+        <td>holds all role-organized folders and pages</td>
+    </tr>
+    <tr>
+        <td>_group</td>
+        <td>holds all group-organized folders and pages</td>
+    </tr>    
+    <tr>
+        <td>_subsite-root</td>
+        <td>contains complete subsite trees, exactly like root tree</td>
+    </tr>    
+</table>        
+<img src="images/profiler/pages.jpg" border="1"/>           
+</p>    
+<p>By applying profiling rules, the profiler locates pages in the portal site directory.</p>
+</section>      
+<section name="Profiling Rules">
+<p> 
+        
+A ProfilingRule defines a list of criteria used when evaluating a request
+to determine the location of a specific resource. Profiling rules are 
+used by the profiler to locate portal resources
+based on the decoupled criteria for known portlet request data.
+A rule consists of an ordered list of criteria which should be applied
+in a given order. Following this rule's order, the profiling engine applies
+each criteria of the rule using a less-specific algorithm until the least 
+specific resource criterion is considered. When all criteria are exhausted, 
+the rule will fail and a fallback resource will be required.    
+</p>
+<subsection name='Rule Criteria'>
+<p>
+A Rule Criterion specifies one criterion in a list of profiling rule criteria.
+The rule is used to build a normalized profiling locator and then 
+locate a portal resource based on the current user request.    
+Rule Criteria are templates for locating profile properties. 
+Criteria consist of:
+<table>
+    <tr><td>Type</td>
+        <td>The type of criterion. Types are configured in the profiler spring configuraiton. 
+        Each type maps to a <i>rule criterion resolver</i>. A resolver is a Java class which maps request input
+        to a normalized location instruction. Valid resolvers are provided in the table below.        
+        </td>
+    </tr>
+    <tr>
+        <td>Fallback Order</td>
+        <td>The sequential in which to apply this criterion within the profiling rule.</td>
+    </tr>
+    <tr>
+        <td>Fallback Type</td>
+        <td>After evaluation this criterion, the rule can either continue processing the remaining 
+            criteria, or stop processing. The fallback type determines how to continue processing.
+            Valid values are:
+             <table>
+                 <tr>
+                     <td>FALLBACK_CONTINUE</td>
+                     <td>evaluate this criterion and if it fails continue to the next criterion</td>
+                 </tr>
+                 <tr>
+                     <td>FALLBACK_STOP</td>
+                     <td>evaluate this criterion and if it fails stop evaluation criteria for this rule</td>
+                 </tr>
+                 <tr>
+                     <td>FALLBACK_LOOP</td>
+                     <td>evaluate this criterion and if it fails continue evaluating</td>
+                 </tr>                 
+             </table>
+        </td>
+    </tr>  
+    <tr>
+        <td>Name</td>
+        <td>The unique name (per rule) of this criterion. Upon matches, the name is mapped to the profile locator property name.</td>
+    </tr> 
+    <tr>
+        <td>Value</td>
+        <td>The default value (not required) to use for this criterion when resolution fails.</td>
+    </tr>
+</table>    
+More complex implementations will need to use other inputs in mapping to resources such as Cookies, IP Address Ranges, Statistical Resource Usage Analysis, or Business Rules.
+</p>
+</subsection>
+<subsection name='Rule Criterion Resolvers'>
+<p>
+The table below displays all default rule criterion resolvers available with Jetspeed out of the box.
+Resolvers are Java classes, implementing the interface from the Jetspeed API <i>org.apache.jetspeed.profiler.rules.RuleCriterionResolver</i>.
+You may use this default set of resolvers to build your own profiling rules. Rules are currently stored in the 
+Jetspeed database. Portal administrators may edit the rules using an administrative portlet. In the demo system,
+login as the user "admin" to see an example of the Jetspeed Profiler Administration portlet.
+</p>
+<p>Additionally, you may add your own resolvers to Jetspeed. You will need to create a jar file
+ holding your custom resolvers, and then drop them into the Jetspeed webapp's class path. Resolvers
+ will need to be given a unique name. This is done by modifying the profiler.xml in the Spring assembly.
+ See the section below on configuration to see where to add a resolver to the Spring configuration.        
+<table>
+    <tr>
+    <th>Resolver</th>
+    <th>Description</th>
+    </tr>
+    <tr>
+        <td>request</td>
+        <td>resolve by matching a request parameter by name, returning the request parameter value for a locator property taking the name of the criterion</td>
+    </tr>
+    <tr>
+        <td>session</td>
+        <td>resolve by matching a session attribute by name, returning the session attribute value for a locator property taking the name of the criterion</td>
+    </tr>    
+    <tr>
+        <td>request.session</td>
+        <td>resolve by first matching a request parameter by name. If not matched, try matching a session attribute name, returning the request parameter or session attribute value for a locator property taking the name of the criterion</td>
+    </tr>
+    <tr>
+        <td>path</td>
+        <td>resolve by matching the PSML page <i>path</i> value of the current request. The path is typically the path and name of a page, such as <i>default-page</i> for a locator property named <quote>path</quote></td>
+    </tr>
+    <tr>
+        <td>path.session</td>
+        <td>resolve by matching the PSML page <i>path</i> value of the current request. The path is typically the path and name of a page, such as <i>default-page</i>. If fails to find a valid path in the request, will then look in the session for the page value. The locator property will be named <quote>path</quote></td>
+    </tr>    
+    <tr>
+        <td>hard.coded</td>
+        <td>resolve to a hard.coded default value, for example, set a locator property named page to <quote>/my-account.psml</quote></td>
+    </tr>
+    <tr>
+        <td>user</td>
+        <td>resolve by matching the name of the current authenticated user. The username is mapped to a locator property named <quote>user</quote></td>
+    </tr>
+    <tr>
+        <td>role</td>
+        <td>resolve by matching all of the security roles of the current authenticated user (in the JAAS Subject of the request context) and putting them in a comma-separated list. The locator property should be named <quote>role</quote>. The role criterion is often used in combination with path criteria, to create a role-fallback rule that searches over all security roles for a given user.</td>
+    </tr>
+    <tr>
+        <td>group</td>
+        <td>resolve by matching all of the groups of the current authenticated user  (in the JAAS Subject of the request context)  and putting them in a comma-separated list. The locator property should be named <quote>group</quote>. The group criteion is often used in combination with path criteria, to create a group-fallback rule that searches over all security groups for a given user.</td>
+    </tr>    
+    <tr>
+        <td>rolecombo</td>
+        <td>resolve by matching all of the security roles of the current authenticated user (in the JAAS Subject of the request context) and putting them in a dash-separated string, for example: (role1-role2-role3). The locator property should be named <quote>role</quote>. The role criterion is often used in combination with path criteria, to create a role-fallback rule that searches over all security roles for a given user.</td>
+    </tr>
+    <tr>
+        <td>mediatype</td>
+        <td>resolve by matching the media type (HTML,XHTML,WML...) from the request context. Sets a locator property named <quote>mediatype</quote></td>
+    </tr>
+    <tr>
+        <td>language</td>
+        <td>resolve by matching the browser's language from the request context locale (originating from the HTML headers). Sets a locator property named <quote>language</quote></td>
+    </tr>        
+    <tr>
+        <td>country</td>
+        <td>resolve by matching the browser's country code from the request context locale (originating from the HTML headers). Sets a locator property named <quote>country</quote></td>
+    </tr>
+    <tr>
+        <td>group.role.user</td>
+        <td>resolve by first matching on a request parameter named <quote>group</quote>. If that fails, resolve on a request parameter named <quote>role</quote>. If that fails, resolve by matching the name of the current authenticated user. The username is mapped to a locator property named <quote>user</quote></td>
+    </tr>    
+    <tr>
+        <td>user.attribute</td>
+        <td>resolve by matching a Portlet API User Attribute by name, returning the user attribute value for a locator property taking the name of the criterion</td>
+    </tr>        
+    <tr>
+        <td>user.agent</td>
+        <td>resolve by matching the browser's (client) user agent from the request context device capabilities (originating from the HTML headers)</td>
+    </tr>
+    <tr>
+        <td>hostname</td>
+        <td>resolve by matching the host name from the server name in the request, returning the host name</td>
+    </tr>       
+    <tr>
+        <td>domain</td>
+        <td>resolve by matching the domain from the server name in the request, returning the domain</td>
+    </tr>       
+    <tr>
+        <td>navigation</td>
+        <td>A directive to changes the current navigation path during a profile location resolution performed by the page manager. The value can be the location of a folder, for example <quote>/pages/freecontent</quote></td>
+    </tr>       
+</table>     
+<i>Note that all criteria will fall back to the default value when no match is made. Locator property expects a criterion named <quote>navigation</quote></i> 
+</p>      
+</subsection>
+<subsection name='Default Rules'>    
+<p>
+Several rules are provided by default with the Jetspeed system.   
+The rules in the table below display the criterion in a most-specific to least-specific ordering.
+</p>    
+<table>
+    <tr>
+    <th>Rule</th>
+    <th>Description</th>
+    </tr>
+    <tr>
+        <td>j1</td>
+        <td>
+            <p>Implements the Jetspeed-1 hard-coded profiler fallback algorithm, resolving in a most-specific to least-specific algorithm:</p>
+            <table>
+                <tr>
+                    <th>criterion</th>
+                    <th>name</th>
+                    <th>value</th>
+                    <th>fallback</th>
+                </tr>                    
+                <tr>
+                    <td>country</td>
+                    <td>country</td>
+                    <td></td>
+                    <td>continue</td>
+                </tr>
+                <tr>
+                    <td>language</td>
+                    <td>language</td>
+                    <td></td>
+                    <td>continue</td>
+                </tr>
+                <tr>
+                    <td>mediatype</td>
+                    <td>mediatype</td>
+                    <td></td>
+                    <td>continue</td>
+                </tr>
+                <tr>
+                    <td>group.role.user</td>
+                    <td>user|group|role</td>
+                    <td></td>
+                    <td>stop</td>
+                </tr>
+                <tr>
+                    <td>path.session</td>
+                    <td>page</td>
+                    <td>default-page</td>
+                    <td>stop</td>
+                </tr>                
+            </table>            
+        </td>
+        </tr>
+        <tr>
+        <td>role-fallback</td>
+        <td>
+            <p>A role based fallback algorithm, trying to find the most-specific resource by searching over all security roles for the current authenticated user.</p>
+            <table>
+                <tr>
+                    <th>criterion</th>
+                    <th>name</th>
+                    <th>value</th>
+                    <th>fallback</th>
+                </tr>                    
+                <tr>
+                    <td>path.session</td>
+                    <td>page</td>
+                    <td>default-page</td>
+                    <td>stop</td>
+                </tr>                                
+                <tr>
+                    <td>role</td>
+                    <td>role</td>
+                    <td></td>
+                    <td>continue</td>
+                </tr>
+            </table>            
+        </td>
+        </tr>
+        <tr>            
+        <td>group-fallback</td>
+        <td>
+            <p>A group based fallback algorithm, trying to find the most-specific resource by searching over all security groups for the current authenticated user.</p>
+            <table>
+                <tr>
+                    <th>criterion</th>
+                    <th>name</th>
+                    <th>value</th>
+                    <th>fallback</th>
+                </tr>                    
+                <tr>
+                    <td>path.session</td>
+                    <td>page</td>
+                    <td>default-page</td>
+                    <td>stop</td>
+                </tr>                                
+                <tr>
+                    <td>group</td>
+                    <td>group</td>
+                    <td></td>
+                    <td>continue</td>
+                </tr>
+            </table>            
+        </td>
+       </tr>
+        <tr>            
+        <td>j2</td>
+        <td>
+            <p>The default profiling rule for users and mediatype minus language and country.</p>
+            <table>
+                <tr>
+                    <th>criterion</th>
+                    <th>name</th>
+                    <th>value</th>
+                    <th>fallback</th>
+                </tr>                    
+                <tr>
+                    <td>mediatype</td>
+                    <td>mediatype</td>
+                    <td></td>
+                    <td>continue</td>
+                </tr>
+                <tr>
+                    <td>group.role.user</td>
+                    <td>user|group|role</td>
+                    <td></td>
+                    <td>stop</td>
+                </tr>
+                <tr>
+                    <td>path.session</td>
+                    <td>page</td>
+                    <td>default-page</td>
+                    <td>stop</td>
+                </tr>                
+            </table>            
+        </td>
+       </tr>
+        <tr>            
+        <td>security</td>
+        <td>
+            <p>The security profiling rule needed to force credential change requirements.</p>
+            <table>
+                <tr>
+                    <th>criterion</th>
+                    <th>name</th>
+                    <th>value</th>
+                    <th>fallback</th>
+                </tr>                    
+                <tr>
+                    <td>hard.coded</td>
+                    <td>page</td>
+                    <td>/my-account.psml</td>
+                    <td>stop</td>
+                </tr>
+            </table>            
+        </td>
+       </tr>
+        <tr>            
+        <td>path</td>
+        <td>
+            <p>Only criterion applied is the path portion of the portal URL.</p>
+            <table>
+                <tr>
+                    <th>criterion</th>
+                    <th>name</th>
+                    <th>value</th>
+                    <th>fallback</th>
+                </tr>                    
+                <tr>
+                    <td>path</td>
+                    <td>page</td>
+                    <td>/</td>
+                    <td>stop</td>
+                </tr>
+            </table>            
+        </td>
+       </tr>    
+        <tr>            
+        <td>user-role-fallback</td>
+        <td>
+            <p>Rule will first look for the resource in the user's home folder. If not found there, a role based fallback algorithm is applied, trying to find the most-specific resource by searching over all security roles for the current authenticated user.</p>
+            <table>
+                <tr>
+                    <th>criterion</th>
+                    <th>name</th>
+                    <th>value</th>
+                    <th>fallback</th>
+                </tr>                    
+                <tr>
+                    <td>path.session</td>
+                    <td>page</td>
+                    <td>default-page</td>
+                    <td>continue</td>
+                </tr>                                
+                <tr>
+                    <td>role</td>
+                    <td>role</td>
+                    <td></td>
+                    <td>continue</td>
+                </tr>
+                <tr>
+                    <td>navigation</td>
+                    <td>navigation</td>
+                    <td>/</td>
+                    <td>loop</td>
+                </tr>
+                <tr>
+                    <td>user</td>
+                    <td>user</td>
+                    <td></td>
+                    <td>continue</td>
+                </tr>                
+                
+            </table>            
+        </td>
+       </tr>
+        <tr>            
+        <td>user-rolecombo-fallback</td>
+        <td>
+            <p>Rule will first look for the resource in the user's home folder. If not found there, a role based fallback algorithm is applied, trying to find the most-specific resource by searching over all security roles for the current authenticated user. Creates a locater property named <quote>role</quote> that is the concatenation of all roles into one string, such as <i>role1-role2-role3</i>. This combined string is used as the role name in the locator.</p>
+            <table>
+                <tr>
+                    <th>criterion</th>
+                    <th>name</th>
+                    <th>value</th>
+                    <th>fallback</th>
+                </tr>                    
+                <tr>
+                    <td>path.session</td>
+                    <td>page</td>
+                    <td>default-page</td>
+                    <td>continue</td>
+                </tr>                                
+                <tr>
+                    <td>rolecombo</td>
+                    <td>role</td>
+                    <td></td>
+                    <td>continue</td>
+                </tr>
+                <tr>
+                    <td>navigation</td>
+                    <td>navigation</td>
+                    <td>/</td>
+                    <td>loop</td>
+                </tr>
+                <tr>
+                    <td>user</td>
+                    <td>user</td>
+                    <td></td>
+                    <td>continue</td>
+                </tr>                
+                
+            </table>            
+        </td>
+       </tr>
+        <tr>            
+        <td>subsite-role-fallback-home</td>
+        <td>
+            <p>A rule based on role fallback algorithm with specified subsite and home page</p>
+            <table>
+                <tr>
+                    <th>criterion</th>
+                    <th>name</th>
+                    <th>value</th>
+                    <th>fallback</th>
+                </tr>                    
+                <tr>
+                    <td>path</td>
+                    <td>path</td>
+                    <td>subsite-default-page</td>
+                    <td>stop</td>
+                </tr>                                
+                <tr>
+                    <td>role</td>
+                    <td>role</td>
+                    <td></td>
+                    <td>continue</td>
+                </tr>
+                <tr>
+                    <td>navigation</td>
+                    <td>navigation</td>
+                    <td>subsite-root</td>
+                    <td>loop</td>
+                </tr>
+            </table>            
+        </td>
+       </tr>
+    
+    </table>    
+</subsection>    
+</section>    
+<section name="Profile Locators">
+<p>
+Profile Locators are used to locate profiled portal resources such as
+pages, folders, menus and links. A locator contains a collection of properties 
+(name value pairs) describing the actual resource to be located. 
+</p>
+<img src="images/profiler/parameter-resolution.jpg" border="1"/>           
+<p>
+The profiler takes runtime information as input, generalized into 
+generalized profile locators that are passed on to the page manager to locate a  page or menu. 
+The profile locators are normalized and not coupled to the profiler or page manager implementation.
+</p>       
+<img src="images/profiler/parameter-resolution-2.jpg" border="1"/>               
+</section>
+<section name='Principal Rules'>
+<p>Each user principal can be mapped to specific profiling rule. This association is stored in the Jetspeed database.
+The association is three-way, combining the PRINCIPAL + PROFILING RULE + LOCATOR, where the locator values 
+currently supported are <quote>menu</quote> or <quote>page</quote>. Thus we can have two different profiling rules
+applied for locating resources per user: locate pages and locate menus. When the profiler attempts to locate a page
+for the current user, it will apply the profiling rule for the given user. The Jetspeed User Administration portlet
+has a tab for editing user profile information:
+</p>
+<p>    
+<img src="images/profiler/user-profile-locator.jpg" border="1"/>               
+</p>
+<p>
+Often, profiling rules are determined and then associated by portal-specific logic during user registration (or self-registration).    
+A Jetspeed-specific self-registration portlet could handle the registration process of adding a user to the system, granting roles, 
+setting user attributes, and assigning the profiling rule for the user.        
+</p>
+</section>      
+<section name="Component Configuration">
+<p>
+The profiler.xml Spring configuration file configures the profiler component.
+<table>
+    <tr>
+        <th>Constructor Argument</th>
+        <th>Description</th>
+    </tr>
+    <tr>
+        <td>(0) JETSPEED-INF/ojb/profiler_repository.xml</td>    
+        <td>Holds the OJB database to POJO mapper for marshalling profile information to and from the persistent store.</td>
+    </tr>
+    <tr>
+        <td>(1) j1</td>    
+        <td>The default profiling rule. If a user does not have a profiling rule defined in the association table, this profiling rule is used.</td>
+    </tr>
+    <tr>
+        <td>(2) ProfileResolvers (ref bean)</td>    
+        <td>The map of profiler resolver names to implementing resolver classes. New resolvers should be added to the ProfileResolver table.</td>
+    </tr>    
+</table>        
+</p>
+</section>
+
+</body>
+</document>
+

Propchange: portals/jetspeed-2/portal/branches/JS2-871-pluto-2.0-upgrade/src/site/xdoc/guides/guide-profiler.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: portals/jetspeed-2/portal/branches/JS2-871-pluto-2.0-upgrade/src/site/xdoc/guides/guide-profiler.xml
------------------------------------------------------------------------------
    svn:keywords = Id

Added: portals/jetspeed-2/portal/branches/JS2-871-pluto-2.0-upgrade/src/site/xdoc/guides/guide-profiling-ip.xml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/branches/JS2-871-pluto-2.0-upgrade/src/site/xdoc/guides/guide-profiling-ip.xml?rev=722405&view=auto
==============================================================================
--- portals/jetspeed-2/portal/branches/JS2-871-pluto-2.0-upgrade/src/site/xdoc/guides/guide-profiling-ip.xml (added)
+++ portals/jetspeed-2/portal/branches/JS2-871-pluto-2.0-upgrade/src/site/xdoc/guides/guide-profiling-ip.xml Tue Dec  2 00:53:22 2008
@@ -0,0 +1,79 @@
+<?xml version="1.0"?>
+<!--
+	Licensed to the Apache Software Foundation (ASF) under one or more
+	contributor license agreements.  See the NOTICE file distributed with
+	this work for additional information regarding copyright ownership.
+	The ASF licenses this file to You under the Apache License, Version 2.0
+	(the "License"); you may not use this file except in compliance with
+	the License.  You may obtain a copy of the License at
+	
+	http://www.apache.org/licenses/LICENSE-2.0
+	
+	Unless required by applicable law or agreed to in writing, software
+	distributed under the License is distributed on an "AS IS" BASIS,
+	WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+	See the License for the specific language governing permissions and
+	limitations under the License.
+-->
+<document>
+	<properties>
+		<title>Guide to Profiling IP Addresses</title>
+		<subtitle>Documentation for Using the ip-address Profiler rule</subtitle>
+		<authors>
+			<person name="Philip Mark Donaghy" email="philip.donaghy@gmail.com" />
+		</authors>
+	</properties>
+	<body>
+		<section name="Guide to Profiling IP Addresses">
+			<p>
+  Jetspeed has a built in mechanism to serve custom content
+  to a specific IP address. This feature uses the Profiler 
+  to negociate pages based on the requesting clients IP address.
+			</p>
+			<subsection name="1. The Rule">
+			<p>
+  The rule is identified by the key <b>ip-address</b>. There is one criterion
+  called <b>ip</b> resolved using the IP Criterion Resolver. This class implements
+  the resolve method of the Rule Criterion Resolver in order to obtain the IP address
+  from the request.
+			</p>
+                        <source>
+    public String resolve(RequestContext context, RuleCriterion criterion)
+    {
+        // look for override
+        String value = super.resolve(context, criterion);
+        if (value != null) { return value.toLowerCase(); }
+
+        // Note IP addresses can vary depending on the client
+        // Konqueror 3.4.2 returns IPv6 e.g. 0:0:0:0:0:0:0:1
+        // Firefox 1.0.7 returns IPv4 e.g. 127.0.0.1
+        // This is the value used to resolve pages in the _ip directory
+        // TODO create an option to convert all IPv4 addresses to IPv6
+        return context.getRequest().getRemoteAddr();
+    }
+                        </source>
+			</subsection>
+			<subsection name="2. The Page Locator">
+			<p>
+  Users with this profile rule set to the <b>page</b> locator are served pages from the _ip 
+  directory of the psml site tree. Example, if a request is made for
+  http://www.apache.org/jetspeed/portal/default-page.psml from 81.29.65.234
+  then the rule will match /WEB-INF/pages/_ip/81.29.65.234/default-page.psml before
+  falling back to /WEB-INF/pages/default-page.psml
+			</p>
+			</subsection>
+			<subsection name="3. Example Use Cases">
+                        <p>
+  You have a location in Tokyo serving content specific to that 
+  location. Your kiosk is configured with a fixed IP address. The annonymous 
+  user (guest by default) uses this profile rule. Anyone using 
+  the portal from that kiosk would be served content from the _ip directory.
+			</p>
+			<p>
+  It could also be used to profile robots. Or keep out unwanted visitors. And can be the basis for 
+  profiling IP ranges or IP prefixes, networks and subnetworks, and geographic locations.
+			</p>
+			</subsection>
+		</section>
+	</body>
+</document>

Propchange: portals/jetspeed-2/portal/branches/JS2-871-pluto-2.0-upgrade/src/site/xdoc/guides/guide-profiling-ip.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: portals/jetspeed-2/portal/branches/JS2-871-pluto-2.0-upgrade/src/site/xdoc/guides/guide-profiling-ip.xml
------------------------------------------------------------------------------
    svn:keywords = Id

Added: portals/jetspeed-2/portal/branches/JS2-871-pluto-2.0-upgrade/src/site/xdoc/guides/guide-properties.xml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/branches/JS2-871-pluto-2.0-upgrade/src/site/xdoc/guides/guide-properties.xml?rev=722405&view=auto
==============================================================================
--- portals/jetspeed-2/portal/branches/JS2-871-pluto-2.0-upgrade/src/site/xdoc/guides/guide-properties.xml (added)
+++ portals/jetspeed-2/portal/branches/JS2-871-pluto-2.0-upgrade/src/site/xdoc/guides/guide-properties.xml Tue Dec  2 00:53:22 2008
@@ -0,0 +1,411 @@
+<?xml version="1.0"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+  
+  http://www.apache.org/licenses/LICENSE-2.0
+  
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<document>
+  <properties>
+    <title>Guide to configuration properties</title>
+    <subtitle>Getting ready to build your own portal</subtitle>
+    <authors>
+      <person name="David Sean Taylor" email="taylor@apache.org" />
+      <person name="Ate Douma" email="ate@apache.org" />
+      <person name="David Le Strat" email="dlestrat@apache.org" />
+      <person name="Ron Wheeler" email="rwheeler@artifact-software.com"/>
+     </authors>
+  </properties>
+  <body>
+	<section name="Basic Configuration Parameters">
+
+			      <subsection name="Required Portal Configuration Properties">
+        <table>
+          <tr>
+            <th>Property</th>
+            <th>Description</th>
+            <th nowrap="nowrap">Default value</th>
+          </tr>
+          <tr>
+            <td>
+              <code>org.apache.jetspeed.portal.home</code>
+            </td>
+            <td>
+              The folder where the maven-plugin will (re)create or update your custom portal maven project configuration
+              (with goal <code>j2:portal.conf.project</code>).  This will be where you will be performing all of your future
+			  custom portal development.
+              <br />
+              Example: <code>/home/myportal/</code>
+            </td>
+            <td>
+              <i>no default</i>
+            </td>
+          </tr>
+          <tr>
+            <td>
+              <code>org.apache.jetspeed.portal.groupId</code>
+            </td>
+            <td>
+              The (maven) short name of your portal project group.
+              <br />
+              This value is used for the maven repository folder in which the project artifacts (like the portal war
+              file) is stored.
+              <br />
+              Example: <code>myprojects</code>
+            </td>
+            <td>
+              <i>no default</i>
+            </td>
+          </tr>
+          <tr>
+            <td>
+              <code>org.apache.jetspeed.portal.artifactId</code>
+            </td>
+            <td>
+              The (maven) short name of your portal project.
+              <br />
+              This value is used for the portal war file and the (portal) web application context name.
+              <br />
+              Example: <code>myportal</code>
+            </td>
+            <td>
+              <i>no default</i>
+            </td>
+          </tr>
+          <tr>
+            <td>
+              <code>org.apache.jetspeed.portal.name</code>
+            </td>
+            <td>
+              The (maven) full name of your portal project.
+              <br />
+              This value is used by maven for generating JavaDoc titles.
+              <br />
+              Example: <code>My Test Portal</code>
+            </td>
+            <td>
+              <i>no default</i>
+            </td>
+          </tr>
+          <tr>
+            <td>
+              <code>org.apache.jetspeed.portal.currentVersion</code>
+            </td>
+            <td>
+              The current version of your portal project.
+              <br />
+              This value is used by maven as name postfix for the generated artifacts.
+              <br />
+              Example: <code>1.0</code>
+            </td>
+            <td>
+              <i>no default</i>
+            </td>
+          </tr>
+        </table>
+      </subsection>
+      <subsection name="Optional Portal Configuration Properties">
+        <p>
+          The following properties all specify a subfolder of the <code>${org.apache.jetspeed.portal.home}</code>
+          location as defined above.
+        </p>
+        <table>
+          <tr>
+            <th>Property</th>
+            <th>Description</th>
+            <th nowrap="nowrap">Default value</th>
+          </tr>
+          <tr>
+            <td>
+              <code>org.apache.jetspeed.portal.conf.dir</code>
+            </td>
+            <td>
+              The folder where the maven-plugin will generate and copy application server specific configuration files
+              as a tomcat application context descriptor.
+              <br />
+              This folder and its contents is created or updated by plugin goal <code>j2:portal.conf.tomcat</code>.
+            </td>
+            <td>
+              <i>target/portal-conf</i>
+            </td>
+          </tr>
+          <tr>
+            <td>
+              <code>org.apache.jetspeed.portal.sql.dir</code>
+            </td>
+            <td>
+              The folder where the maven-plugin will generate and copy portal and database server specific sql DDL and
+              DML scripts.
+              <br />
+              This folder and its contents is always (re)created by plugin goal <code>j2:portal.conf.sql</code>.
+            </td>
+            <td>
+              <i>target/portal-sql</i>
+            </td>
+          </tr>
+          <tr>
+            <td>
+              <code>org.apache.jetspeed.portal.db.dir</code>
+            </td>
+            <td>
+              The folder where the maven-plugin will create build-in HSQLDB database(s).
+              <br />
+              This folder and its contents is created or updated by plugin goal <code>j2:start.production.server</code>
+              or <code>j2:start.test.server</code>.
+            </td>
+            <td>
+              <i>target/portal-db</i>
+            </td>
+          </tr>
+          <tr>
+            <td>
+              <code>org.apache.jetspeed.derbydatabase.path</code>
+            </td>
+            <td>
+              The folder where the maven-plugin will create its built-in Derby database(s).
+              <br />
+              This folder and its contents is created or updated by plugin goal <code>j2:quickStart</code>.
+            </td>
+            <td>
+              <i>/tmp</i>
+            </td>
+           </tr>
+            <tr>
+            <td>
+              <code>org.apache.jetspeed.portal.webapp.dir</code>
+            </td>
+            <td>
+              The folder where the maven-plugin will copy the standard jetspeed web application resources.
+              <br />
+              This folder and its contents is created or updated by plugin goal <code>j2:portal.copy.webapp</code>.
+            </td>
+            <td>
+              <i>target/${org.apache.jetspeed.portal.artifactId}</i>
+            </td>
+          </tr>
+          <tr>
+            <td>
+              <code>org.apache.jetspeed.portal.target.dir</code>
+            </td>
+            <td>
+              The folder where the maven-plugin will generate and copy runtime portal configuration files.
+              <br />
+              These configuration files contain values derived from build/plugin properties for the portal and OJB.
+              <br />
+              This folder and its contents is created or updated by plugin goal <code>j2:portal.conf.jetspeed</code>
+              and goal <code>j2:portal.conf.ojb</code>.
+            </td>
+            <td>
+              <i>target/${org.apache.jetspeed.portal.artifactId}</i>
+            </td>
+          </tr>
+        </table>
+      </subsection>
+      <subsection name="Required Application Server Properties">
+        <p>
+          <i>
+            Note: The maven-plugin currently only supports the Tomcat Server 5.0.x or 5.5.x
+          </i>
+        </p>
+        <table>
+          <tr>
+            <th>Property</th>
+            <th>Description</th>
+            <th nowrap="nowrap">Default value</th>
+          </tr>
+          <tr>
+            <td>
+              <code>org.apache.jetspeed.server.home</code>
+            </td>
+            <td>
+              The root folder of your Tomcat server installation.
+              <br />
+              Example: <code>${CATALINA_HOME}/</code>.
+            </td>
+            <td>
+              <i>no default</i>
+            </td>
+          </tr>
+          <tr>
+            <td>
+              <code>org.apache.jetspeed.server.shared</code>
+            </td>
+            <td>
+              The location of the shared jars in your Tomcat installation.
+              <br />
+              Example: <code>${org.apache.jetspeed.server.home}/shared/lib/</code>
+            </td>
+            <td>
+              <i>no default</i>
+            </td>
+          </tr>
+          <tr>
+            <td>
+              <code>org.apache.jetspeed.deploy.war.dir</code>
+            </td>
+            <td>
+              The location of web applications in your Tomcat installation.
+              <br />
+              Example: <code>${org.apache.jetspeed.server.home}/webapps/</code>
+            </td>
+            <td>
+              <i>no default</i>
+            </td>
+          </tr>
+          <tr>
+            <td>
+              <code>org.apache.jetspeed.services.autodeployment.user</code>
+            </td>
+            <td>
+              A Tomcat user with the manager role.
+              <br />
+              Used to access the Tomcat Manager application from within the portal, explained below.
+            </td>
+            <td>
+              <i>no default</i>
+            </td>
+          </tr>
+          <tr>
+            <td>
+              <code>org.apache.jetspeed.services.autodeployment.password</code>
+            </td>
+            <td>
+              The password of the Tomcat user above.
+              <br />
+              Used to access the Tomcat Manager application from within the portal, explained below.
+            </td>
+            <td>
+              <i>no default</i>
+            </td>
+          </tr>
+          <tr>
+            <td>
+              <code>org.apache.jetspeed.catalina.version.major</code>
+            </td>
+            <td>
+              The major version of the Tomcat server you are using: 5 or 5.5
+              <br />
+              Example: <code>5.5</code>
+            </td>
+            <td>
+              <i>no default</i>
+            </td>
+          </tr>
+        </table>
+      </subsection>
+      <subsection name="Optional Database Server Properties">
+        <p>
+          Jetspeed-2 and its maven-plugin uses, as well as provides, by default a Derby database.
+        </p>
+        <p>
+          If you want to use a different database you will need to override the following properties:
+        </p>
+        <table>
+          <tr>
+            <th>Property</th>
+            <th>Description</th>
+            <th nowrap="nowrap">Default value</th>
+          </tr>
+          <tr>
+            <td>
+              <code>org.apache.jetspeed.production.database.default.name</code>
+            </td>
+            <td>
+              The type of database you are using. Used for sql script generation with Torque.
+              <br />
+              Currently supported databases (with corresponding Torque target database name):
+              <ul>
+                <li>derby (derby)</li>
+                <li>hsql (hypersonic)</li>
+                <li>oracle (oracle)</li>
+                <li>mysql (mysql)</li>
+                <li>postgres (postresql)</li>
+                <li>mssql (mssql)</li>
+                <li>sapdb (sapdb)</li>
+                <li>db2 (db2)</li>
+              </ul>
+            </td>
+            <td>derby</td>
+          </tr>
+          <tr>
+            <td>
+              <code>org.apache.jetspeed.production.database.url</code>
+            </td>
+            <td>The jdbc connection url</td>
+            <td>jdbc:derby:${org.apache.jetspeed.derbydatabase.path}/productiondb;create=true</td>
+          </tr>
+          <tr>
+            <td>
+              <code>org.apache.jetspeed.production.database.user</code>
+            </td>
+            <td>The database user name to connect with.</td>
+            <td><i>empty</i></td>
+          </tr>
+          <tr>
+            <td>
+              <code>org.apache.jetspeed.production.database.password</code>
+            </td>
+            <td>The database user its password to connect with.</td>
+            <td>
+              <i>empty</i>
+            </td>
+          </tr>
+          <tr>
+            <td>
+              <code>org.apache.jetspeed.production.database.driver</code>
+            </td>
+            <td>The jdbc driver class name</td>
+            <td>org.apache.derby.jdbc.EmbeddedDriver</td>
+          </tr>
+          <tr>
+            <td>
+              <code>org.apache.jetspeed.production.jdbc.drivers.path</code>
+            </td>
+            <td>
+              A Java classpath style path to the jdbc driver classes or jar(s) needed for connecting to the database.
+              <br />
+              Example: <code>/lib/ojdbc14.jar;/lib/nls_charset12.jar</code>
+            </td>
+            <td>
+              <i>empty</i>
+            </td>
+          </tr>
+        </table>
+      </subsection>
+      <subsection name="Example: A minimal custom portal configuration">
+        <p>
+          Make sure you have defined at least the required properties as described above in your
+          <code>${USER_HOME}/build.properties</code>. A minimal custom portal configuration using the default Derby
+          database can be something like:
+          <source>
+            <![CDATA[
+# required portal configuration properties          
+org.apache.jetspeed.portal.home           = /home/myportal/
+org.apache.jetspeed.portal.groupId        = myprojects
+org.apache.jetspeed.portal.artifactId     = myportal
+org.apache.jetspeed.portal.name           = My Test Portal
+org.apache.jetspeed.portal.currentVersion = 1.0
+
+# required application server properties
+org.apache.jetspeed.server.home                      = ${CATALINA_HOME}/
+org.apache.jetspeed.server.shared                    = ${org.apache.jetspeed.server.home}/shared/lib/
+org.apache.jetspeed.deploy.war.dir                   = ${org.apache.jetspeed.server.home}/webapps/
+org.apache.jetspeed.services.autodeployment.user     = j2deployer
+org.apache.jetspeed.services.autodeployment.password = xxxxx
+org.apache.jetspeed.catalina.version.major           = 5.5]]>
+          </source>
+        </p>
+      </subsection>
+    </section>
+  </body>
+</document>

Propchange: portals/jetspeed-2/portal/branches/JS2-871-pluto-2.0-upgrade/src/site/xdoc/guides/guide-properties.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: portals/jetspeed-2/portal/branches/JS2-871-pluto-2.0-upgrade/src/site/xdoc/guides/guide-properties.xml
------------------------------------------------------------------------------
    svn:keywords = Id

Added: portals/jetspeed-2/portal/branches/JS2-871-pluto-2.0-upgrade/src/site/xdoc/guides/guide-psml-dtd.xml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/branches/JS2-871-pluto-2.0-upgrade/src/site/xdoc/guides/guide-psml-dtd.xml?rev=722405&view=auto
==============================================================================
--- portals/jetspeed-2/portal/branches/JS2-871-pluto-2.0-upgrade/src/site/xdoc/guides/guide-psml-dtd.xml (added)
+++ portals/jetspeed-2/portal/branches/JS2-871-pluto-2.0-upgrade/src/site/xdoc/guides/guide-psml-dtd.xml Tue Dec  2 00:53:22 2008
@@ -0,0 +1,915 @@
+<?xml version="1.0"?>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+<document>
+  <properties>
+    <title>Guide to PSML DTDs and XML Schema</title>
+    <subtitle>Guide to PSML DTDs and XML Schema</subtitle>
+    <authors>
+      <person name="Randy Watler" email="rwatler@apache.org"/>
+    </authors>
+  </properties>
+  <body>
+<section name="PSML DTDs and XML Schema">
+<p>
+The following PSML DTDs and XML Schema are included to further define the XML documents defined in these guides:
+<ul>
+    <li><a href="guide-psml.html">Guide to PSML</a></li>
+    <li><a href="guide-security-declarative-psml.html">Guide to declarative security through PSML</a></li>
+    <li><a href="guide-menus-declarative-psml.html">Guide to declarative menus in PSML</a></li>
+</ul>
+</p>
+<p>
+The DTDs and XML Schema included here are organized by PSML document:
+<ul>
+	<li><a href="#Page">Page, (*.psml)</a></li>
+	<li><a href="#Folder">Folder Metadata, (folder.metadata)</a></li>
+	<li><a href="#Link">Link, (*.link)</a></li>
+	<li><a href="#Page_Security">Page Security, (page.security)</a></li>
+</ul>
+</p>
+</section>
+
+<section name='Page'>
+<p><a href="guide-psml.html#Page">Page</a> documents, (*.psml), are described by the following DTD:</p>
+<source><![CDATA[
+<!-- top level page element -->
+
+<!ELEMENT page ( defaults | fragment | menu | metadata | security-constraints | short-title | title )* >
+<!ATTLIST page hidden ( false | true ) #IMPLIED >
+<!ATTLIST page version NMTOKEN #IMPLIED >
+
+<!-- page child elements -->
+
+<!ELEMENT defaults EMPTY >
+<!ATTLIST defaults layout-decorator NMTOKEN #REQUIRED >
+<!ATTLIST defaults portlet-decorator NMTOKEN #IMPLIED >
+<!ATTLIST defaults skin NMTOKEN #IMPLIED >
+
+<!ELEMENT exclude ( #PCDATA ) >
+
+<!ELEMENT fragment ( fragment | preference | property | security-constraints )* >
+<!ATTLIST fragment decorator NMTOKEN #IMPLIED >
+<!ATTLIST fragment id NMTOKEN #REQUIRED >
+<!ATTLIST fragment name NMTOKEN #REQUIRED >
+<!ATTLIST fragment skin NMTOKEN #IMPLIED >
+<!ATTLIST fragment state NMTOKEN #IMPLIED >
+<!ATTLIST fragment type ( layout | portlet ) #REQUIRED >
+
+<!ELEMENT groups ( #PCDATA ) >
+
+<!ELEMENT include ( #PCDATA ) >
+<!ATTLIST include nest ( false | true ) #IMPLIED >
+
+<!ELEMENT menu ( exclude | include | menu | metadata | options | separator | short-title | title )* >
+<!ATTLIST menu depth NMTOKEN #IMPLIED >
+<!ATTLIST menu name NMTOKEN #IMPLIED >
+<!ATTLIST menu options CDATA #IMPLIED >
+<!ATTLIST menu order CDATA #IMPLIED >
+<!ATTLIST menu paths ( false | true ) #IMPLIED >
+<!ATTLIST menu profile NMTOKEN #IMPLIED >
+<!ATTLIST menu regexp ( false | true ) #IMPLIED >
+<!ATTLIST menu skin NMTOKEN #IMPLIED >
+
+<!ELEMENT metadata ( #PCDATA ) >
+<!ATTLIST metadata name ( short-title | text | title ) #REQUIRED >
+<!ATTLIST metadata xml:lang NMTOKEN #REQUIRED >
+
+<!ELEMENT options ( #PCDATA ) >
+<!ATTLIST options depth NMTOKEN #IMPLIED >
+<!ATTLIST options order CDATA #IMPLIED >
+<!ATTLIST options paths ( false | true ) #IMPLIED >
+<!ATTLIST options profile NMTOKEN #IMPLIED >
+<!ATTLIST options regexp ( false | true ) #IMPLIED >
+<!ATTLIST options skin NMTOKEN #IMPLIED >
+
+<!ELEMENT owner ( #PCDATA ) >
+
+<!ELEMENT permissions ( #PCDATA ) >
+
+<!ELEMENT preference ( value+ ) >
+<!ATTLIST preference name NMTOKEN #REQUIRED >
+<!ATTLIST preference readOnly ( false | true ) #IMPLIED >
+
+<!ELEMENT property EMPTY >
+<!ATTLIST property layout NMTOKEN #IMPLIED >
+<!ATTLIST property name ( column | row | sizes ) #REQUIRED >
+<!ATTLIST property value CDATA #REQUIRED >
+
+<!ELEMENT roles ( #PCDATA ) >
+
+<!ELEMENT security-constraint ( groups | permissions | roles | users )* >
+
+<!ELEMENT security-constraints ( owner | security-constraint | security-constraints-ref )* >
+
+<!ELEMENT security-constraints-ref ( #PCDATA ) >
+
+<!ELEMENT separator ( #PCDATA | metadata | text | title )* >
+<!ATTLIST separator skin NMTOKEN #IMPLIED >
+
+<!ELEMENT short-title ( #PCDATA ) >
+
+<!ELEMENT text ( #PCDATA ) >
+
+<!ELEMENT title ( #PCDATA ) >
+
+<!ELEMENT users ( #PCDATA ) >
+
+<!ELEMENT value ( #PCDATA ) >
+]]></source>
+<p><a href="guide-psml.html#Page">Page</a> documents, (*.psml), are described by the following XML Schema:</p>
+<source><![CDATA[
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+  <!-- top level page element -->
+
+  <xs:element name="page">
+    <xs:complexType>
+      <xs:choice maxOccurs="unbounded">
+        <xs:element ref="defaults" minOccurs="0" />
+        <xs:element ref="fragment" />
+        <xs:element ref="menu" minOccurs="0" maxOccurs="unbounded" />
+        <xs:element ref="metadata" minOccurs="0" maxOccurs="unbounded" />
+        <xs:element ref="security-constraints" minOccurs="0" />
+        <xs:element ref="short-title" minOccurs="0" />
+        <xs:element ref="title" minOccurs="0" />
+      </xs:choice>
+      <xs:attribute name="version" type="xs:NMTOKEN" use="optional" />
+      <xs:attribute name="hidden" use="optional">
+        <xs:simpleType>
+          <xs:restriction base="xs:NMTOKEN">
+            <xs:enumeration value="false" />
+            <xs:enumeration value="true" />
+          </xs:restriction>
+        </xs:simpleType>
+      </xs:attribute>
+    </xs:complexType>
+  </xs:element>
+
+  <!-- page child elements -->
+
+  <xs:element name="defaults">
+    <xs:complexType>
+      <xs:attribute name="portlet-decorator" type="xs:NMTOKEN" use="optional" />
+      <xs:attribute name="skin" type="xs:NMTOKEN" use="optional" />
+      <xs:attribute name="layout-decorator" type="xs:NMTOKEN" use="optional" />
+    </xs:complexType>
+  </xs:element>
+
+  <xs:element name="exclude">
+    <xs:complexType mixed="true" />
+  </xs:element>
+
+  <xs:element name="fragment">
+    <xs:complexType>
+      <xs:choice maxOccurs="unbounded">
+        <xs:element ref="fragment" minOccurs="0" maxOccurs="unbounded" />
+        <xs:element ref="preference" minOccurs="0" maxOccurs="unbounded" />
+        <xs:element ref="property" minOccurs="0" maxOccurs="unbounded" />
+        <xs:element ref="security-constraints" minOccurs="0" />
+      </xs:choice>
+      <xs:attribute name="decorator" type="xs:NMTOKEN" use="optional" />
+      <xs:attribute name="name" type="xs:NMTOKEN" use="required" />
+      <xs:attribute name="type" use="required">
+        <xs:simpleType>
+          <xs:restriction base="xs:NMTOKEN">
+            <xs:enumeration value="layout" />
+            <xs:enumeration value="portlet" />
+          </xs:restriction>
+        </xs:simpleType>
+      </xs:attribute>
+      <xs:attribute name="state" type="xs:NMTOKEN" use="optional" />
+      <xs:attribute name="skin" type="xs:NMTOKEN" use="optional" />
+      <xs:attribute name="id" type="xs:NMTOKEN" use="required" />
+    </xs:complexType>
+  </xs:element>
+
+  <xs:element name="groups">
+    <xs:complexType mixed="true" />
+  </xs:element>
+
+  <xs:element name="include">
+    <xs:complexType mixed="true">
+      <xs:attribute name="nest" use="optional">
+        <xs:simpleType>
+          <xs:restriction base="xs:NMTOKEN">
+            <xs:enumeration value="false" />
+            <xs:enumeration value="true" />
+          </xs:restriction>
+        </xs:simpleType>
+      </xs:attribute>
+    </xs:complexType>
+  </xs:element>
+
+  <xs:element name="menu">
+    <xs:complexType>
+      <xs:choice maxOccurs="unbounded">
+        <xs:element ref="exclude" minOccurs="0" maxOccurs="unbounded" />
+        <xs:element ref="include" minOccurs="0" maxOccurs="unbounded" />
+        <xs:element ref="menu" minOccurs="0" maxOccurs="unbounded" />
+        <xs:element ref="metadata" minOccurs="0" maxOccurs="unbounded" />
+        <xs:element ref="options" minOccurs="0" maxOccurs="unbounded" />
+        <xs:element ref="separator" minOccurs="0" maxOccurs="unbounded" />
+        <xs:element ref="short-title" minOccurs="0" />
+        <xs:element ref="title" minOccurs="0" />
+      </xs:choice>
+      <xs:attribute name="order" type="xs:string" use="optional" />
+      <xs:attribute name="options" type="xs:string" use="optional" />
+      <xs:attribute name="name" type="xs:NMTOKEN" use="optional" />
+      <xs:attribute name="profile" type="xs:NMTOKEN" use="optional" />
+      <xs:attribute name="regexp" use="optional">
+        <xs:simpleType>
+          <xs:restriction base="xs:NMTOKEN">
+            <xs:enumeration value="false" />
+            <xs:enumeration value="true" />
+          </xs:restriction>
+        </xs:simpleType>
+      </xs:attribute>
+      <xs:attribute name="skin" type="xs:NMTOKEN" use="optional" />
+      <xs:attribute name="paths" use="optional">
+        <xs:simpleType>
+          <xs:restriction base="xs:NMTOKEN">
+            <xs:enumeration value="false" />
+            <xs:enumeration value="true" />
+          </xs:restriction>
+        </xs:simpleType>
+      </xs:attribute>
+      <xs:attribute name="depth" type="xs:NMTOKEN" use="optional" />
+    </xs:complexType>
+  </xs:element>
+
+  <xs:element name="metadata">
+    <xs:complexType mixed="true">
+      <xs:attribute name="name" use="required">
+        <xs:simpleType>
+          <xs:restriction base="xs:NMTOKEN">
+            <xs:enumeration value="short-title" />
+            <xs:enumeration value="text" />
+            <xs:enumeration value="title" />
+          </xs:restriction>
+        </xs:simpleType>
+      </xs:attribute>
+    </xs:complexType>
+  </xs:element>
+
+  <xs:element name="options">
+    <xs:complexType mixed="true">
+      <xs:attribute name="order" type="xs:string" use="optional" />
+      <xs:attribute name="profile" type="xs:NMTOKEN" use="optional" />
+      <xs:attribute name="regexp" use="optional">
+        <xs:simpleType>
+          <xs:restriction base="xs:NMTOKEN">
+            <xs:enumeration value="false" />
+            <xs:enumeration value="true" />
+          </xs:restriction>
+        </xs:simpleType>
+      </xs:attribute>
+      <xs:attribute name="skin" type="xs:NMTOKEN" use="optional" />
+      <xs:attribute name="paths" use="optional">
+        <xs:simpleType>
+          <xs:restriction base="xs:NMTOKEN">
+            <xs:enumeration value="false" />
+            <xs:enumeration value="true" />
+          </xs:restriction>
+        </xs:simpleType>
+      </xs:attribute>
+      <xs:attribute name="depth" type="xs:NMTOKEN" use="optional" />
+    </xs:complexType>
+  </xs:element>
+
+  <xs:element name="owner">
+    <xs:complexType mixed="true" />
+  </xs:element>
+
+  <xs:element name="permissions">
+    <xs:complexType mixed="true" />
+  </xs:element>
+
+  <xs:element name="preference">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element ref="value" maxOccurs="unbounded" />
+      </xs:sequence>
+      <xs:attribute name="name" type="xs:NMTOKEN" use="required" />
+      <xs:attribute name="readOnly" use="optional">
+        <xs:simpleType>
+          <xs:restriction base="xs:NMTOKEN">
+            <xs:enumeration value="false" />
+            <xs:enumeration value="true" />
+          </xs:restriction>
+        </xs:simpleType>
+      </xs:attribute>
+    </xs:complexType>
+  </xs:element>
+
+  <xs:element name="property">
+    <xs:complexType>
+      <xs:attribute name="name" use="required">
+        <xs:simpleType>
+          <xs:restriction base="xs:NMTOKEN">
+            <xs:enumeration value="column" />
+            <xs:enumeration value="row" />
+            <xs:enumeration value="sizes" />
+          </xs:restriction>
+        </xs:simpleType>
+      </xs:attribute>
+      <xs:attribute name="layout" type="xs:NMTOKEN" use="optional" />
+      <xs:attribute name="value" type="xs:string" use="required" />
+    </xs:complexType>
+  </xs:element>
+
+  <xs:element name="roles">
+    <xs:complexType mixed="true" />
+  </xs:element>
+
+  <xs:element name="security-constraint">
+    <xs:complexType>
+      <xs:choice maxOccurs="4">
+        <xs:element ref="groups" minOccurs="0" />
+        <xs:element ref="permissions" minOccurs="0" />
+        <xs:element ref="roles" minOccurs="0" />
+        <xs:element ref="users" minOccurs="0" />
+      </xs:choice>
+    </xs:complexType>
+  </xs:element>
+
+  <xs:element name="security-constraints">
+    <xs:complexType>
+      <xs:choice maxOccurs="unbounded">
+        <xs:element ref="owner" minOccurs="0" />
+        <xs:element ref="security-constraint" minOccurs="0" maxOccurs="unbounded" />
+        <xs:element ref="security-constraints-ref" minOccurs="0" maxOccurs="unbounded" />
+      </xs:choice>
+    </xs:complexType>
+  </xs:element>
+
+  <xs:element name="security-constraints-ref">
+    <xs:complexType mixed="true" />
+  </xs:element>
+
+  <xs:element name="separator">
+    <xs:complexType mixed="true">
+      <xs:choice maxOccurs="unbounded">
+        <xs:element ref="metadata" minOccurs="0" maxOccurs="unbounded" />
+        <xs:element ref="text" minOccurs="0" />
+        <xs:element ref="title" minOccurs="0" />
+      </xs:choice>
+      <xs:attribute name="skin" type="xs:NMTOKEN" use="optional" />
+    </xs:complexType>
+  </xs:element>
+
+  <xs:element name="short-title">
+    <xs:complexType mixed="true" />
+  </xs:element>
+
+  <xs:element name="text">
+    <xs:complexType mixed="true" />
+  </xs:element>
+
+  <xs:element name="title">
+    <xs:complexType mixed="true" />
+  </xs:element>
+
+  <xs:element name="users">
+    <xs:complexType mixed="true" />
+  </xs:element>
+
+  <xs:element name="value">
+    <xs:complexType mixed="true" />
+  </xs:element>
+
+</xs:schema>
+]]></source>
+</section>
+
+<section name='Folder'>
+<p><a href="guide-psml.html#Folder">Folder Metadata</a> documents, (folder.metadata), are described by the following DTD:</p>
+<source><![CDATA[
+<!-- top level folder element -->
+
+<!ELEMENT folder ( default-page | defaults | document-order | menu | metadata | security-constraints | short-title | title )* >
+<!ATTLIST folder hidden ( false | true ) #IMPLIED >
+<!ATTLIST folder version NMTOKEN #IMPLIED >
+
+<!-- folder child elements -->
+
+<!ELEMENT default-page ( #PCDATA ) >
+
+<!ELEMENT defaults EMPTY >
+<!ATTLIST defaults layout-decorator NMTOKEN #REQUIRED >
+<!ATTLIST defaults portlet-decorator NMTOKEN #IMPLIED >
+<!ATTLIST defaults skin NMTOKEN #IMPLIED >
+
+<!ELEMENT document-order ( #PCDATA ) >
+
+<!ELEMENT exclude ( #PCDATA ) >
+
+<!ELEMENT groups ( #PCDATA ) >
+
+<!ELEMENT include ( #PCDATA ) >
+<!ATTLIST include nest ( false | true ) #IMPLIED >
+
+<!ELEMENT menu ( exclude | include | menu | metadata | options | separator | short-title | title )* >
+<!ATTLIST menu depth NMTOKEN #IMPLIED >
+<!ATTLIST menu name NMTOKEN #IMPLIED >
+<!ATTLIST menu options CDATA #IMPLIED >
+<!ATTLIST menu order CDATA #IMPLIED >
+<!ATTLIST menu paths ( false | true ) #IMPLIED >
+<!ATTLIST menu profile NMTOKEN #IMPLIED >
+<!ATTLIST menu regexp ( false | true ) #IMPLIED >
+<!ATTLIST menu skin NMTOKEN #IMPLIED >
+
+<!ELEMENT metadata ( #PCDATA ) >
+<!ATTLIST metadata name ( short-title | text | title ) #REQUIRED >
+<!ATTLIST metadata xml:lang NMTOKEN #REQUIRED >
+
+<!ELEMENT options ( #PCDATA ) >
+<!ATTLIST options depth NMTOKEN #IMPLIED >
+<!ATTLIST options order CDATA #IMPLIED >
+<!ATTLIST options paths ( false | true ) #IMPLIED >
+<!ATTLIST options profile NMTOKEN #IMPLIED >
+<!ATTLIST options regexp ( false | true ) #IMPLIED >
+<!ATTLIST options skin NMTOKEN #IMPLIED >
+
+<!ELEMENT owner ( #PCDATA ) >
+
+<!ELEMENT permissions ( #PCDATA ) >
+
+<!ELEMENT roles ( #PCDATA ) >
+
+<!ELEMENT security-constraint ( groups | permissions | roles | users )* >
+
+<!ELEMENT security-constraints ( owner | security-constraint | security-constraints-ref )* >
+
+<!ELEMENT security-constraints-ref ( #PCDATA ) >
+
+<!ELEMENT separator ( #PCDATA | metadata | text | title )* >
+<!ATTLIST separator skin NMTOKEN #IMPLIED >
+
+<!ELEMENT short-title ( #PCDATA ) >
+
+<!ELEMENT text ( #PCDATA ) >
+
+<!ELEMENT title ( #PCDATA ) >
+
+<!ELEMENT users ( #PCDATA ) >
+]]></source>
+<p><a href="guide-psml.html#Folder">Folder Metadata</a> documents, (folder.metadata), are described by the following XML Schema:</p>
+<source><![CDATA[
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+  <!-- top level folder element -->
+
+  <xs:element name="folder">
+    <xs:complexType>
+      <xs:choice maxOccurs="unbounded">
+        <xs:element ref="default-page" minOccurs="0" />
+        <xs:element ref="defaults" minOccurs="0" />
+        <xs:element ref="document-order" minOccurs="0" maxOccurs="unbounded" />
+        <xs:element ref="menu" minOccurs="0" maxOccurs="unbounded" />
+        <xs:element ref="metadata minOccurs="0" maxOccurs="unbounded"" />
+        <xs:element ref="security-constraints" minOccurs="0" />
+        <xs:element ref="short-title" minOccurs="0" />
+        <xs:element ref="title" minOccurs="0" />
+      </xs:choice>
+      <xs:attribute name="version" type="xs:NMTOKEN" use="optional" />
+      <xs:attribute name="hidden" use="optional">
+        <xs:simpleType>
+          <xs:restriction base="xs:NMTOKEN">
+            <xs:enumeration value="false" />
+            <xs:enumeration value="true" />
+          </xs:restriction>
+        </xs:simpleType>
+      </xs:attribute>
+    </xs:complexType>
+  </xs:element>
+
+  <!-- folder child elements -->
+
+  <xs:element name="default-page">
+    <xs:complexType mixed="true" />
+  </xs:element>
+
+  <xs:element name="defaults">
+    <xs:complexType>
+      <xs:attribute name="portlet-decorator" type="xs:NMTOKEN" use="optional" />
+      <xs:attribute name="skin" type="xs:NMTOKEN" use="optional" />
+      <xs:attribute name="layout-decorator" type="xs:NMTOKEN" use="optional" />
+    </xs:complexType>
+  </xs:element>
+
+  <xs:element name="document-order">
+    <xs:complexType mixed="true" />
+  </xs:element>
+
+  <xs:element name="exclude">
+    <xs:complexType mixed="true" />
+  </xs:element>
+
+  <xs:element name="groups">
+    <xs:complexType mixed="true" />
+  </xs:element>
+
+  <xs:element name="include">
+    <xs:complexType mixed="true">
+      <xs:attribute name="nest" use="optional">
+        <xs:simpleType>
+          <xs:restriction base="xs:NMTOKEN">
+            <xs:enumeration value="false" />
+            <xs:enumeration value="true" />
+          </xs:restriction>
+        </xs:simpleType>
+      </xs:attribute>
+    </xs:complexType>
+  </xs:element>
+
+  <xs:element name="menu">
+    <xs:complexType>
+      <xs:choice maxOccurs="unbounded">
+        <xs:element ref="exclude" minOccurs="0" maxOccurs="unbounded" />
+        <xs:element ref="include" minOccurs="0" maxOccurs="unbounded" />
+        <xs:element ref="menu" minOccurs="0" maxOccurs="unbounded" />
+        <xs:element ref="metadata" minOccurs="0" maxOccurs="unbounded" />
+        <xs:element ref="options" minOccurs="0" maxOccurs="unbounded" />
+        <xs:element ref="separator" minOccurs="0" maxOccurs="unbounded" />
+        <xs:element ref="short-title" minOccurs="0" />
+        <xs:element ref="title" minOccurs="0" />
+      </xs:choice>
+      <xs:attribute name="order" type="xs:string" use="optional" />
+      <xs:attribute name="options" type="xs:string" use="optional" />
+      <xs:attribute name="name" type="xs:NMTOKEN" use="optional" />
+      <xs:attribute name="profile" type="xs:NMTOKEN" use="optional" />
+      <xs:attribute name="regexp" use="optional">
+        <xs:simpleType>
+          <xs:restriction base="xs:NMTOKEN">
+            <xs:enumeration value="false" />
+            <xs:enumeration value="true" />
+          </xs:restriction>
+        </xs:simpleType>
+      </xs:attribute>
+      <xs:attribute name="skin" type="xs:NMTOKEN" use="optional" />
+      <xs:attribute name="paths" use="optional">
+        <xs:simpleType>
+          <xs:restriction base="xs:NMTOKEN">
+            <xs:enumeration value="false" />
+            <xs:enumeration value="true" />
+          </xs:restriction>
+        </xs:simpleType>
+      </xs:attribute>
+      <xs:attribute name="depth" type="xs:NMTOKEN" use="optional" />
+    </xs:complexType>
+  </xs:element>
+
+  <xs:element name="metadata">
+    <xs:complexType mixed="true">
+      <xs:attribute name="name" use="required">
+        <xs:simpleType>
+          <xs:restriction base="xs:NMTOKEN">
+            <xs:enumeration value="short-title" />
+            <xs:enumeration value="text" />
+            <xs:enumeration value="title" />
+          </xs:restriction>
+        </xs:simpleType>
+      </xs:attribute>
+    </xs:complexType>
+  </xs:element>
+
+  <xs:element name="options">
+    <xs:complexType mixed="true">
+      <xs:attribute name="order" type="xs:string" use="optional" />
+      <xs:attribute name="profile" type="xs:NMTOKEN" use="optional" />
+      <xs:attribute name="regexp" use="optional">
+        <xs:simpleType>
+          <xs:restriction base="xs:NMTOKEN">
+            <xs:enumeration value="false" />
+            <xs:enumeration value="true" />
+          </xs:restriction>
+        </xs:simpleType>
+      </xs:attribute>
+      <xs:attribute name="skin" type="xs:NMTOKEN" use="optional" />
+      <xs:attribute name="paths" use="optional">
+        <xs:simpleType>
+          <xs:restriction base="xs:NMTOKEN">
+            <xs:enumeration value="false" />
+            <xs:enumeration value="true" />
+          </xs:restriction>
+        </xs:simpleType>
+      </xs:attribute>
+      <xs:attribute name="depth" type="xs:NMTOKEN" use="optional" />
+    </xs:complexType>
+  </xs:element>
+
+  <xs:element name="owner">
+    <xs:complexType mixed="true" />
+  </xs:element>
+
+  <xs:element name="permissions">
+    <xs:complexType mixed="true" />
+  </xs:element>
+
+  <xs:element name="roles">
+    <xs:complexType mixed="true" />
+  </xs:element>
+
+  <xs:element name="security-constraint">
+    <xs:complexType>
+      <xs:choice maxOccurs="4">
+        <xs:element ref="groups" minOccurs="0" />
+        <xs:element ref="permissions" minOccurs="0" />
+        <xs:element ref="roles" minOccurs="0" />
+        <xs:element ref="users" minOccurs="0" />
+      </xs:choice>
+    </xs:complexType>
+  </xs:element>
+
+  <xs:element name="security-constraints">
+    <xs:complexType>
+      <xs:choice maxOccurs="unbounded">
+        <xs:element ref="owner" minOccurs="0" />
+        <xs:element ref="security-constraint" minOccurs="0" maxOccurs="unbounded" />
+        <xs:element ref="security-constraints-ref" minOccurs="0" maxOccurs="unbounded" />
+      </xs:choice>
+    </xs:complexType>
+  </xs:element>
+
+  <xs:element name="security-constraints-ref">
+    <xs:complexType mixed="true" />
+  </xs:element>
+
+  <xs:element name="separator">
+    <xs:complexType mixed="true">
+      <xs:choice maxOccurs="unbounded">
+        <xs:element ref="metadata" minOccurs="0" maxOccurs="unbounded" />
+        <xs:element ref="text" minOccurs="0" />
+        <xs:element ref="title" minOccurs="0" />
+      </xs:choice>
+      <xs:attribute name="skin" type="xs:NMTOKEN" use="optional" />
+    </xs:complexType>
+  </xs:element>
+
+  <xs:element name="short-title">
+    <xs:complexType mixed="true" />
+  </xs:element>
+
+  <xs:element name="text">
+    <xs:complexType mixed="true" />
+  </xs:element>
+
+  <xs:element name="title">
+    <xs:complexType mixed="true" />
+  </xs:element>
+
+  <xs:element name="users">
+    <xs:complexType mixed="true" />
+  </xs:element>
+
+</xs:schema>
+]]></source>
+</section>
+
+<section name='Link'>
+<p><a href="guide-psml.html#Link">Link</a> documents, (*.link), are described by the following DTD:</p>
+<source><![CDATA[
+<!-- top level link element -->
+
+<!ELEMENT link ( metadata | security-constraints | short-title | title | url )* >
+<!ATTLIST link target NMTOKEN #REQUIRED >
+<!ATTLIST link version NMTOKEN #IMPLIED >
+<!ATTLIST link skin NMTOKEN #IMPLIED >
+
+<!-- link child elements -->
+
+<!ELEMENT groups ( #PCDATA ) >
+
+<!ELEMENT metadata ( #PCDATA ) >
+<!ATTLIST metadata name ( short-title | title ) #REQUIRED >
+<!ATTLIST metadata xml:lang NMTOKEN #REQUIRED >
+
+<!ELEMENT owner ( #PCDATA ) >
+
+<!ELEMENT permissions ( #PCDATA ) >
+
+<!ELEMENT roles ( #PCDATA ) >
+
+<!ELEMENT security-constraint ( groups | permissions | roles | users )* >
+
+<!ELEMENT security-constraints ( owner | security-constraint | security-constraints-ref )* >
+
+<!ELEMENT security-constraints-ref ( #PCDATA ) >
+
+<!ELEMENT short-title ( #PCDATA ) >
+
+<!ELEMENT title ( #PCDATA ) >
+
+<!ELEMENT url ( #PCDATA ) >
+
+<!ELEMENT users ( #PCDATA ) >
+]]></source>
+<p><a href="guide-psml.html#Link">Link</a> documents, (*.link), are described by the following XML Schema:</p>
+<source><![CDATA[
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+  <!-- top level link element -->
+
+  <xs:element name="link">
+    <xs:complexType>
+      <xs:choice maxOccurs="unbounded">
+        <xs:element ref="metadata" minOccurs="0" maxOccurs="unbounded" />
+        <xs:element ref="security-constraints" minOccurs="0" />
+        <xs:element ref="short-title" minOccurs="0" />
+        <xs:element ref="title" minOccurs="0" />
+        <xs:element ref="url" />
+      </xs:choice>
+      <xs:attribute name="version" type="xs:NMTOKEN" use="optional" />
+      <xs:attribute name="target" type="xs:NMTOKEN" use="required" />
+      <xs:attribute name="skin" type="xs:NMTOKEN" use="optional" />
+    </xs:complexType>
+  </xs:element>
+
+  <!-- link child elements -->
+
+  <xs:element name="groups">
+    <xs:complexType mixed="true" />
+  </xs:element>
+
+  <xs:element name="metadata">
+    <xs:complexType mixed="true">
+      <xs:attribute name="name" use="required">
+        <xs:simpleType>
+          <xs:restriction base="xs:NMTOKEN">
+            <xs:enumeration value="short-title" />
+            <xs:enumeration value="title" />
+          </xs:restriction>
+        </xs:simpleType>
+      </xs:attribute>
+    </xs:complexType>
+  </xs:element>
+
+  <xs:element name="owner">
+    <xs:complexType mixed="true" />
+  </xs:element>
+
+  <xs:element name="permissions">
+    <xs:complexType mixed="true" />
+  </xs:element>
+
+  <xs:element name="roles">
+    <xs:complexType mixed="true" />
+  </xs:element>
+
+  <xs:element name="security-constraint">
+    <xs:complexType>
+      <xs:choice maxOccurs="4">
+        <xs:element ref="groups" minOccurs="0" />
+        <xs:element ref="permissions" minOccurs="0" />
+        <xs:element ref="roles" minOccurs="0" />
+        <xs:element ref="users" minOccurs="0" />
+      </xs:choice>
+    </xs:complexType>
+  </xs:element>
+
+  <xs:element name="security-constraints">
+    <xs:complexType>
+      <xs:choice maxOccurs="unbounded">
+        <xs:element ref="owner" minOccurs="0" />
+        <xs:element ref="security-constraint" minOccurs="0" maxOccurs="unbounded" />
+        <xs:element ref="security-constraints-ref" minOccurs="0" maxOccurs="unbounded" />
+      </xs:choice>
+    </xs:complexType>
+  </xs:element>
+
+  <xs:element name="security-constraints-ref">
+    <xs:complexType mixed="true" />
+  </xs:element>
+
+  <xs:element name="short-title">
+    <xs:complexType mixed="true" />
+  </xs:element>
+
+  <xs:element name="title">
+    <xs:complexType mixed="true" />
+  </xs:element>
+
+  <xs:element name="url">
+    <xs:complexType mixed="true" />
+  </xs:element>
+
+  <xs:element name="users">
+    <xs:complexType mixed="true" />
+  </xs:element>
+
+</xs:schema>
+]]></source>
+</section>
+
+<section name='Page Security'>
+<p><a href="guide-psml.html#Global_Page_Security">Page Security</a> documents, (page.security), are described by the following DTD:</p>
+<source><![CDATA[
+<!-- top level page-security element -->
+
+<!ELEMENT page-security ( global-security-constraints-ref | security-constraints-def )* >
+<!ATTLIST page-security version NMTOKEN #IMPLIED >
+
+<!-- page-security child elements -->
+
+<!ELEMENT global-security-constraints-ref ( #PCDATA ) >
+
+<!ELEMENT groups ( #PCDATA ) >
+
+<!ELEMENT permissions ( #PCDATA ) >
+
+<!ELEMENT roles ( #PCDATA ) >
+
+<!ELEMENT security-constraint ( groups | permissions | roles | users )* >
+
+<!ELEMENT security-constraints-def ( security-constraint ) >
+<!ATTLIST security-constraints-def name NMTOKEN #REQUIRED >
+
+<!ELEMENT users ( #PCDATA ) >
+]]></source>
+<p><a href="guide-psml.html#Global_Page_Security">Page Security</a> documents, (page.security), are described by the following XML Schema:</p>
+<source><![CDATA[
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+  <!-- top level page-security element -->
+
+  <xs:element name="page-security">
+    <xs:complexType>
+      <xs:choice minOccurs="0" maxOccurs="unbounded">
+        <xs:element ref="global-security-constraints-ref" minOccurs="0" maxOccurs="unbounded" />
+        <xs:element ref="security-constraints-def" minOccurs="0" maxOccurs="unbounded" />
+      </xs:choice>
+      <xs:attribute name="version" type="xs:NMTOKEN" use="optional" />
+    </xs:complexType>
+  </xs:element>
+
+  <!-- page-security child elements -->
+
+  <xs:element name="global-security-constraints-ref">
+    <xs:complexType mixed="true" />
+  </xs:element>
+
+  <xs:element name="groups">
+    <xs:complexType mixed="true" />
+  </xs:element>
+
+  <xs:element name="permissions">
+    <xs:complexType mixed="true" />
+  </xs:element>
+
+  <xs:element name="roles">
+    <xs:complexType mixed="true" />
+  </xs:element>
+
+  <xs:element name="security-constraint">
+    <xs:complexType>
+      <xs:choice maxOccurs="4">
+        <xs:element ref="groups" minOccurs="0" />
+        <xs:element ref="permissions" minOccurs="0" />
+        <xs:element ref="roles" minOccurs="0" />
+        <xs:element ref="users" minOccurs="0" />
+      </xs:choice>
+    </xs:complexType>
+  </xs:element>
+
+  <xs:element name="security-constraints-def">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element ref="security-constraint" maxOccurs="unbounded" />
+      </xs:sequence>
+      <xs:attribute name="name" type="xs:NMTOKEN" use="required" />
+    </xs:complexType>
+  </xs:element>
+
+  <xs:element name="users">
+    <xs:complexType mixed="true" />
+  </xs:element>
+
+</xs:schema>
+]]></source>
+</section>
+
+</body>
+</document>

Propchange: portals/jetspeed-2/portal/branches/JS2-871-pluto-2.0-upgrade/src/site/xdoc/guides/guide-psml-dtd.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: portals/jetspeed-2/portal/branches/JS2-871-pluto-2.0-upgrade/src/site/xdoc/guides/guide-psml-dtd.xml
------------------------------------------------------------------------------
    svn:keywords = Id



---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscribe@portals.apache.org
For additional commands, e-mail: jetspeed-dev-help@portals.apache.org


Mime
View raw message