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
|