<!--
  Copyright 2004 The Apache Software Foundation

  Licensed 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.
-->
<!-- DTD for JSP 2.0
     thanks to Bob Foster, WebGain
-->

<!-- 
     This DTD is not conditional on any parameter entities in the internal
     subset and does not export any general entities.
-->

<!--================== Constrained Names ====================================-->

<!ENTITY % URI "CDATA">
    <!-- a Uniform Resource Identifier, see [RFC2396] -->

<!ENTITY % UriList "CDATA">
    <!-- a space separated list of Uniform Resource Identifiers -->

<!ENTITY % URL "CDATA">
    <!-- a relative urlSpec is as in Section 2.10.2. -->

<!ENTITY % BeanID "IDREF">
    <!-- a previously declared bean ID in the current scope. -->

<!ENTITY % Prefix "CDATA">
    <!-- a Name that contains no : characters. -->

<!ENTITY % ClassName "CDATA">
    <!-- a fully qualified class name. -->

<!ENTITY % TypeName "CDATA">
    <!-- a fully qualified class or interface name. -->

<!ENTITY % BeanName "CDATA">
    <!-- a bean name as expected by java.beans.Beans instantiate(). -->

<!ENTITY % Content "CDATA">
    <!-- a MIME type followed by an IANA charset, as " type [; S? ['charset='] charset] " -->

<!ENTITY % Length "CDATA">
    <!-- nn for pixels or nn% for percentage length -->

<!ENTITY % Pixels "CDATA">
    <!-- integer representing length in pixels -->

<!ENTITY % Bool "(true|false|yes|no)">
    <!-- boolean -->

<!-- used for object, applet, img, input and iframe -->
<!ENTITY % ImgAlign "(top|middle|bottom|left|right)">

<!--=================== Element Groups ====================================-->

<!ENTITY % Directives "jsp:directive.page|jsp:directive.include">

<!ENTITY % Scripts "jsp:scriptlet|jsp:declaration|jsp:expression">

<!ENTITY % Actions
    "jsp:useBean
    |jsp:setProperty
    |jsp:getProperty
    |jsp:include
    |jsp:forward
    |jsp:plugin"
>

<!ENTITY % Body "(jsp:text|%Directives;|%Scripts;|%Actions;)*">


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

<!--    Root element of a JSP page.
-->
<!ELEMENT jsp:root %Body;>
<!ATTLIST jsp:root
    xmlns:jsp       CDATA           "http://java.sun.com/JSP/Page"
    version         CDATA           #REQUIRED
>

<!ELEMENT jsp:directive.page EMPTY>
<!ATTLIST jsp:directive.page
    language        CDATA           "java"
    extends         %ClassName;     #IMPLIED
    contentType     %Content;       "text/html; ISO-8859-1"
    import          CDATA           #IMPLIED
    session         %Bool;          "true"
    buffer          CDATA           "8kb"
    autoFlush       %Bool;          "true"
    isThreadSafe    %Bool;          "true"
    info            CDATA           #IMPLIED
    errorPage       %URL;           #IMPLIED
    isErrorPage     %Bool;          "false"
    pageEncoding    CDATA           #IMPLIED
    isELIgnored     %Bool;          #IMPLIED
>

<!-- the jsp:directive.include only appears in JSP documents and does
     not appear in the XML views of JSP pages.
-->

<!ELEMENT jsp:directive.include EMPTY>
<!ATTLIST jsp:directive.include
    file            %URI;           #REQUIRED
>

<!ELEMENT jsp:scriptlet (#PCDATA)>

<!ELEMENT jsp:declaration (#PCDATA)>

<!ELEMENT jsp:expression (#PCDATA)>

<!ELEMENT jsp:useBean %Body;>
<!ATTLIST jsp:useBean
    id              ID              #REQUIRED
    class           %ClassName;     #IMPLIED
    type            %TypeName;      #IMPLIED
    beanName        %BeanName;      #IMPLIED
    scope           (page
                    |session
                    |request
                    |application)   "page"
>

<!ELEMENT jsp:setProperty EMPTY>
<!ATTLIST jsp:setProperty
    name            %BeanID;        #REQUIRED
    property        CDATA           #REQUIRED
    value           CDATA           #IMPLIED
    param           CDATA           #IMPLIED
>

<!ELEMENT jsp:getProperty EMPTY>
<!ATTLIST jsp:getProperty
    name            %BeanID;        #REQUIRED
    property        CDATA           #REQUIRED
>

<!ELEMENT jsp:include (jsp:param*)>
<!ATTLIST jsp:include
    flush           %Bool;          "false"
    page            %URL;           #REQUIRED
>

<!ELEMENT jsp:forward (jsp:param*)>
<!ATTLIST jsp:forward
    page            %URL;           #REQUIRED
>

<!ELEMENT jsp:plugin (jsp:params?, jsp:fallback?)>
<!ATTLIST jsp:plugin
    type            (bean|applet)   #REQUIRED
    code            %URI;           #IMPLIED
    codebase        %URI;           #IMPLIED
    align           %ImgAlign;      #IMPLIED
    archive         %UriList;       #IMPLIED
    height          %Length;        #IMPLIED
    hspace          %Pixels;        #IMPLIED
    jreversion      CDATA           "1.2"
    name            NMTOKEN         #IMPLIED
    vspace          %Pixels;        #IMPLIED
    width           %Length;        #IMPLIED
    nspluginurl     %URI;           #IMPLIED
    iepluginurl     %URI;           #IMPLIED
>

<!ELEMENT jsp:params (jsp:param+)>

<!ELEMENT jsp:param EMPTY>
<!ATTLIST jsp:param
    name            CDATA           #REQUIRED
    value           CDATA           #REQUIRED
>

<!ELEMENT jsp:text #PCDATA>

