<!--
%

   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.

%

@hidden $Id$
@title DTD for the Tiles Definition File, Version 3.0
@doctype tiles-definitions PUBLIC "-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN" "http://tiles.apache.org/dtds/tiles-config_3_0.dtd"
@root tiles-definitions
-->


<!-- ========== Defined Types ============================================= -->


<!-- A "Boolean" is the string representation of a boolean (true or false)
     variable.
-->
<!ENTITY % Boolean "(true|false)">


<!-- A "ContentType" is the content type of attribute passed to a template.
-->
<!ENTITY % ContentType "CDATA">

<!-- A "ClassName" is the fully qualified name of a Java class which is
     instantiated to provide the functionality of the enclosing element.
-->
<!ENTITY % ClassName "CDATA">

<!-- A "RequestPath" is a module-relative URI path, beginning with a
     slash, that identifies a mapped resource (such as a JSP page or a servlet)
     within this web application.
-->
<!ENTITY % RequestPath "CDATA">

<!-- A "DefinitionName" is the unique identifier of a definition. This identifier
     is a logical name used to reference the definition.
-->
<!ENTITY % DefinitionName "CDATA">

<!-- A "Location" is a relative path, delimited by "/" characters, that
     defines the location of a resource relative to the location of the
     configuration file itself.
-->
<!ENTITY % Location "#PCDATA">



<!-- ========== Top Level Elements ======================================== -->


<!-- The "tiles-definitions" element is the root of the configuration file
     hierarchy, and contains nested elements for all the other
     configuration settings.
-->
<!ELEMENT tiles-definitions (definition+)>

<!-- The "definition" element describes a definition that can be inserted in a jsp
     page. This definition is identified by its logical name. A definition allows
     to define all the attributes that can be set in <insert> tag from a jsp page.
-->
<!ELEMENT definition (put-attribute*, put-list-attribute*)>
<!ATTLIST definition       id               ID               #IMPLIED>
<!--
@attr preparer       The fully qualified Java class name of the preparer
                     subclass to call immediately before the tiles is inserted.
                     Only one of preparerClass or preparerUrl should be
                     specified.
-->
<!ATTLIST definition       preparer         %ClassName;      #IMPLIED>
<!--
@attr extends        Name of a definition that is used as ancestor of this definition.
                     All attributes from the ancestor are available to the new
                     definition. Any attribute inherited from the ancestor can
                     be overloaded by providing a new value.
-->
<!ATTLIST definition       extends          %DefinitionName; #IMPLIED>
<!--
@attr name           The unique identifier for this definition. Required when
                     it is a root definition, while it is implied in nested
                     definitions.
-->
<!ATTLIST definition       name             %DefinitionName; #IMPLIED>
<!--
@attr role           Security role name that is allowed access to this definition
                     object. The definition is inserted only if the role name is
                     allowed.
-->
<!ATTLIST definition       role             CDATA            #IMPLIED>
<!--
@attr template       The context-relative path to the resource used as tiles to
                     insert. This tiles will be inserted and a tiles context
                     containing appropriate attributes will be available.
-->
<!ATTLIST definition       template         %RequestPath;    #IMPLIED>
<!--
@attr templateExpression The expression that will evaluate to a template for this definition.
               This attribute will be ignored if template is specified.

-->
<!ATTLIST definition       templateExpression       CDATA    #IMPLIED>
<!--
@attr templateType   The type of the template attribute. Can be: string,
           template or definition.
                     By default, the type is "template". If a type is
                     associated, the desired renderer will be invoked.
-->
<!ATTLIST definition       templateType             %ContentType;   #IMPLIED>

<!-- The "put-attribute" element describes an attribute of a definition. It allows to
     specify the tiles attribute name and its value. The tiles value can be
     specified as a xml attribute, or in the body of the <put-attribute> tag.
-->
<!ELEMENT put-attribute ( (definition*) )>
<!ATTLIST put-attribute     id               ID              #IMPLIED>
<!--
@attr name           The unique identifier for this put-attribute.
-->
<!ATTLIST put-attribute     name             CDATA           #REQUIRED>
<!--
@attr type           The type of the value. Can be: string, template or definition.
                     By default, no type is associated to a value. If a type is
                     associated, it will be used as a hint to process the value
                     when the attribute will be used in the inserted tiles.
-->
<!ATTLIST put-attribute     type             %ContentType;   #IMPLIED>
<!--
@attr value          The value associated to this tiles attribute. The value should
                     be specified with this tag attribute, or in the body of the tag.
-->
<!ATTLIST put-attribute     value            CDATA           #IMPLIED>
<!--
@attr expression     The expression associated to this tiles attribute. This
           attribute will be ignored if value is specified.

-->
<!ATTLIST put-attribute     expression       CDATA           #IMPLIED>
<!--
@attr role           Security role name that is allowed access to this attribute
                     object. The attribute is inserted only if the role name is
                     allowed.
-->
<!ATTLIST put-attribute     role             CDATA            #IMPLIED>
<!--
@attr cascade        If true, the attribute will be cascaded to all inner
                     definitions. By default, cascade is false.
-->
<!ATTLIST put-attribute     cascade          %Boolean;    #IMPLIED>


<!-- The "put-list-attribute" element describes a list attribute of a definition. It allows to
     specify an attribute that is a java List containing any kind of values. In
     the config file, the list elements are specified by nested <add-attribute> or
     <add-list-attribute>.
-->
<!ELEMENT put-list-attribute ( (add-attribute* | add-list-attribute*)+) >
<!ATTLIST put-list-attribute id               ID              #IMPLIED>
<!--
@attr name           The unique identifier for this put attribute list.
-->
<!ATTLIST put-list-attribute name             CDATA           #REQUIRED>
<!--
@attr role           Security role name that is allowed access to this attribute
                     object. The attribute is inserted only if the role name is
                     allowed.
-->
<!ATTLIST put-list-attribute role             CDATA            #IMPLIED>
<!--
@attr inherit        If true, the attribute will put the elements of the attribute
                     with the same name of the parent definition before the ones
                     specified here. By default, it is 'false'.
-->
<!ATTLIST put-list-attribute inherit          %Boolean;        #IMPLIED>
<!--
@attr cascade        If true, the attribute will be cascaded to all inner
                     definitions. By default, cascade is false.
-->
<!ATTLIST put-list-attribute cascade          %Boolean;        #IMPLIED>

<!-- ========== Subordinate Elements ====================================== -->


<!-- The "add-attribute" element describes an element of a list. It is similar to the
     <put> element.
-->
<!ELEMENT add-attribute ( (definition*) )>
<!ATTLIST add-attribute              id               ID              #IMPLIED>
<!--
@attr type           The type of the value. Can be: string, template or definition.
                     By default, no type is associated to a value. If a type is
                     associated, it will be used as a hint to process the value
                     when the attribute will be used in the inserted tiles.
-->
<!ATTLIST add-attribute              type             %ContentType;   #IMPLIED>
<!--
@attr value          The value associated to this tiles attribute. The value should
                     be specified with this tag attribute, or in the body of the tag.
-->
<!ATTLIST add-attribute              value            CDATA           #IMPLIED>
<!--
@attr expression     The expression associated to this tiles attribute. This
           attribute will be ignored if value is specified.

-->
<!ATTLIST add-attribute              expression       CDATA           #IMPLIED>
<!--
@attr role           Security role name that is allowed access to this attribute
                     object. The attribute will be added to the parent list
                     anyway. It is delegated to the user of this attribute to
                     use it or not depending on the role of the user.
-->
<!ATTLIST add-attribute              role             CDATA            #IMPLIED>

<!-- The "add-list-attribute" element describes a list attribute subordinate to another
     list attribute. It allows to specify an attribute value that is a java List
     containing any kind of values. In the config file, the list elements are specified
     by nested <add-attribute> or <add-list-attribute>.
-->
<!ELEMENT add-list-attribute ( (add-attribute* | add-list-attribute*)+) >
<!ATTLIST add-list-attribute id               ID              #IMPLIED>
<!--
@attr role           Security role name that is allowed access to this attribute
                     object. The attribute will be added to the parent list
                     anyway. It is delegated to the user of this attribute to
                     use it or not depending on the role of the user.
-->
<!ATTLIST add-list-attribute role             CDATA            #IMPLIED>
