<!--
 Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
 DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.

 This code is free software; you can redistribute it and/or modify it
 under the terms of the GNU General Public License version 2 only, as
 published by the Free Software Foundation.  Oracle designates this
 particular file as subject to the "Classpath" exception as provided
 by Oracle in the LICENSE file that accompanied this code.

 This code is distributed in the hope that it will be useful, but WITHOUT
 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 version 2 for more details (a copy is included in the LICENSE file that
 accompanied this code).

 You should have received a copy of the GNU General Public License version
 2 along with this work; if not, write to the Free Software Foundation,
 Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.

 Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 or visit www.oracle.com if you need additional information or have any
 questions.
-->

<!--
        W3C Document Type Definition for the HyperText Markup Language
        This version is code named Wilbur, and also as "HTML 3.2".

        Draft: Tuesday August 21st 1996

        Author: Dave Raggett <dsr@w3.org>

        This is subject to change, pending final approval by the W3C
        member companies.

        HTML 3.2 aims to capture recommended practice as of early '96
        and as such to be used as a replacement for HTML 2.0 (RFC 1866).
        Widely deployed rendering attributes are included where they
        have been shown to be interoperable. SCRIPT and STYLE are
        included to smooth the introduction of client-side scripts
        and style sheets. Browsers must avoid showing the contents
        of these element Otherwise support for them is not required.
        ID, CLASS and STYLE attributes are not included in this version
        of HTML.

        The next version of HTML after Wilbur is code named Cougar and
        will add support for <OBJECT>, client-side scripting, style
        sheets, and extensions to fill-out forms.
-->

<!-- HotJava modifications by Steve Byrne, 9/13/1996 -->

<!ENTITY % HTML.Version
        "-//HotJava//DTD HotJava 1.0 HTML 3.2 Draft 19960821//EN"

        -- Typical usage:

            <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Draft 19960821//EN">
            <html>
            ...
            </html>
        --
        >

<!--================== Deprecated Features Switch =========================-->

<!ENTITY % HTML.Deprecated "INCLUDE">

<!--================== Feature Test Entities ==============================-->

<!ENTITY % HTML.Recommended "IGNORE"
	-- Certain features of the language are necessary for compatibility
	   with widespread usage, but they may compromise the structural
	   integrity of a document. This feature test entity enables
	   a more prescriptive document type definition that eliminates
	   the above features.
	-->

<!ENTITY % HTML.HotJava "INCLUDE"
	-- HotJava specific extensions to the default HTML 3.2 DTD -->

<!-- Currently we are using the the HTML.3.2.Conflict entity to work around
     a bug in the DTD parser where the first declaration of an ENTITY/ELEMENT
     or ATTLIST is not taking precedence over subsequent declarations of the same
     item.  Therefore we need to explicitly "IGNORE" subsequent declarations 
     in order for HotJava specific extensions to take effect. 
  -->
<!ENTITY % HTML.3.2.Conflict "IGNORE"
	-- 3.2 features to be ignored -->


<!--================== Imported Names =====================================-->

<!ENTITY % Content-Type "CDATA"
        -- meaning a MIME content type, as per RFC1521
        -->

<!ENTITY % HTTP-Method "GET | POST"
        -- as per HTTP specification
        -->

<!ENTITY % URL "CDATA"
        -- The term URL means a CDATA attribute
           whose value is a Uniform Resource Locator,
           See RFC1808 (June 95) and RFC1738 (Dec 94).
        -->

<!-- Parameter Entities -->

<!ENTITY % head.misc "NOSCRIPT|SCRIPT|STYLE|META|LINK" -- repeatable head elements -->

<!ENTITY % heading "H1|H2|H3|H4|H5|H6">

<!ENTITY % list "UL | OL |  DIR | MENU">

<![ %HTML.Deprecated [
    <!ENTITY % preformatted "PRE | XMP | LISTING | PLAINTEXT">
]]>

<!ENTITY % preformatted "PRE">

<!--================ Character mnemonic entities ==========================-->

<!ENTITY % HTMLlat1 PUBLIC
       "-//W3C//ENTITIES Latin 1//EN//HTML">
%HTMLlat1;

<!ENTITY % HTMLsymbol PUBLIC
       "-//W3C//ENTITIES Symbols//EN//HTML">
%HTMLsymbol;

<!ENTITY % HTMLspecial PUBLIC
       "-//W3C//ENTITIES Special//EN//HTML">
%HTMLspecial;


<!--=================== Text Markup =======================================-->

<!ENTITY % font "TT | I | B  | U | STRIKE | S | BIG | SMALL | SUB | SUP">

<!ENTITY % phrase "EM | STRONG | DFN | CODE | SAMP | KBD | VAR | CITE">

<![ %HTML.HotJava [
    <!ENTITY % special "A | IMG | APPLET | OBJECT | FONT | BASEFONT | BR | SCRIPT | MAP
                        | NOBR | WBR | BLINK | SPAN">
]]>

<![ %HTML.3.2.Conflict [
    <!ENTITY % special "A | IMG | APPLET | FONT | BASEFONT | BR | SCRIPT | MAP">
]]>

<!ENTITY % form "INPUT | SELECT | TEXTAREA">

<!ENTITY % text "#PCDATA | %font | %phrase | %special | %form">

<![ %HTML.HotJava [
    <!ELEMENT (%font|%phrase) - - (%text | CENTER | P | DL | UL | OL)*>
]]>
<![ %HTML.3.2.Conflict [
    <!ELEMENT (%font|%phrase) - - (%text)*>
]]>


<!-- there are also 16 widely known color names although
  the resulting colors are implementation dependent:

   aqua, black, blue, fuchsia, gray, green, lime, maroon,
   navy, olive, purple, red, silver, teal, white, and yellow

 These colors were originally picked as being the standard
 16 colors supported with the Windows VGA palette.
 -->

<![ %HTML.HotJava [
    <!ELEMENT FONT - - (%text | CENTER | P | DL | UL | OL)*     -- local change to font -->
]]>
<![ %HTML.3.2.Conflict [
    <!ELEMENT FONT - - (%text)*     -- local change to font -->
]]>
<!ATTLIST FONT
    size    CDATA   #IMPLIED    -- [+]nn e.g. size="+1", size=4 --
    color   CDATA   #IMPLIED    -- #RRGGBB in hex, e.g. red: color="#FF0000" --
    >

<!ELEMENT BASEFONT - O EMPTY    -- base font size (1 to 7)-->
<!ATTLIST BASEFONT
    size    CDATA   #IMPLIED    -- e.g. size=3 --
    >

<!ELEMENT BR    - O EMPTY    -- forced line break -->
<!ATTLIST BR
        clear (left|all|right|none) none -- control of text flow --
        >


<!--================== HTML content models ================================-->
<!--
    HTML has three basic content models:

        %text       character level elements and text strings
        %flow       block-like elements e.g. paragraphs and lists
        %bodytext   as (b) plus headers and ADDRESS
-->

<!ENTITY % block
     "P | %list | %preformatted | DL | DIV | CENTER | NOSCRIPT |
      BLOCKQUOTE | FORM | ISINDEX | HR | TABLE | OBJECT">

<!-- %flow is used for DD and LI -->

<!ENTITY % flow "(%block | %text)*">

<!--=================== Document Body =====================================-->


<![ %HTML.HotJava [
    <!ENTITY % body.content "(%heading | %block | %text | ADDRESS | FRAMESET |
                             NOFRAMES | NOHOTJAVA | ANIMATE)*">

]]>

<![ %HTML.3.2.Conflict [
    <!ENTITY % body.content "(%heading | %text | %block | ADDRESS)*">
]]>

<!ENTITY % color "CDATA" -- a color specification: #HHHHHH @@ details? -->

<!ENTITY % body-color-attrs "
        bgcolor %color #IMPLIED
        text %color #IMPLIED
        link %color #IMPLIED
        vlink %color #IMPLIED
        alink %color #IMPLIED
        ">

<!ELEMENT BODY O O  %body.content>
<![ %HTML.HotJava [
    <!ATTLIST BODY
	    background %URL #IMPLIED  -- texture tile for document background --
	    %body-color-attrs;  -- bgcolor, text, link, vlink, alink --
	    width NUTOKEN #IMPLIED
	    height NUTOKEN #IMPLIED
	    >
]]>

<![ %HTML.3.2.Conflict [
    <!ATTLIST BODY
            background %URL #IMPLIED  -- texture tile for document background --
            %body-color-attrs;  -- bgcolor, text, link, vlink, alink --
	    >
]]>


<!ENTITY % address.content "((%text;) | P)*">

<!ELEMENT ADDRESS - - %address.content>

<!ELEMENT DIV - - %body.content>
<![ %HTML.HotJava [
    <!ATTLIST DIV
            align   (left|center|right) left -- alignment of following text --
            >
]]>

<![ %HTML.3.2.Conflict [
    <!ATTLIST DIV
            align   (left|center|right) #IMPLIED -- alignment of following text --
	    >
]]>

<!-- CENTER is a shorthand for DIV with ALIGN=CENTER -->
<!ELEMENT center - - %body.content>

<!--================== The Anchor Element =================================-->

<!ENTITY % SHAPE "(rect|circle|poly|default)">
<!ENTITY % COORDS "CDATA" -- comma separated list of numbers -->

<![ %HTML.HotJava [
    <!ELEMENT A - - (%text|%heading|PRE)* -(A)>
    <!ATTLIST A
	    name    CDATA   #IMPLIED    -- named link end --
	    href    %URL    #IMPLIED    -- URL for linked resource --
	    rel     CDATA   #IMPLIED    -- forward link types --
	    rev     CDATA   #IMPLIED    -- reverse link types --
	    title   CDATA   #IMPLIED    -- advisory title string --
	    target  CDATA   #IMPLIED
       	    shape   %SHAPE  #IMPLIED    -- (OBJECT tag specific) -- 
	    coords  %COORDS #IMPLIED    -- always needed except for shape=default (OBJECT tag specific)--
            ismap   (ismap) #IMPLIED    -- (OBJECT tag specific) --
	    >
]]>

<![ %HTML.3.2.Conflict [
    <!ELEMENT A - - (%text)* -(A)>
    <!ATTLIST A
	    name    CDATA   #IMPLIED    -- named link end --
	    href    %URL    #IMPLIED    -- URL for linked resource --
	    rel     CDATA   #IMPLIED    -- forward link types --
	    rev     CDATA   #IMPLIED    -- reverse link types --
	    title   CDATA   #IMPLIED    -- advisory title string --
	    >
]]>

<!--================== Client-side image maps ============================-->

<!-- These can be placed in the same document or grouped in a
     separate document although this isn't yet widely supported -->


<![ %HTML.HotJava [
<!ELEMENT MAP - - (BASE|AREA)*>
]]>

<![ %HTML.3.2.Conflict [
<!ELEMENT MAP - - (AREA)*>
]]>

<!ATTLIST MAP
    name    CDATA   #IMPLIED
    >

<!ELEMENT AREA - O EMPTY>

<![ %HTML.HotJava [
    <!ATTLIST AREA
	shape   %SHAPE  rect
	coords  %COORDS #IMPLIED  -- always needed except for shape=default --
	href    %URL    #IMPLIED  -- this region acts as hypertext link --
	nohref (nohref) #IMPLIED  -- this region has no action --
	alt     CDATA   #IMPLIED  -- make HotJava more forgiving --
	target  CDATA   #IMPLIED
	>
]]>


<![ %HTML.3.2.Conflict [
    <!ATTLIST AREA
        shape   %SHAPE  rect
        coords  %COORDS #IMPLIED  -- always needed except for shape=default --
        href    %URL    #IMPLIED  -- this region acts as hypertext link --
        nohref (nohref) #IMPLIED  -- this region has no action --
        alt     CDATA   #REQUIRED
        >
]]>

<!--================== The LINK Element ==================================-->

<!ENTITY % Types "CDATA"
        -- See Internet Draft: draft-ietf-html-relrev-00.txt
           LINK has been part of HTML since the early days
           although few browsers as yet take advantage of it.

           Relationship values can be used in principle:

                a) for document specific toolbars/menus when used
                   with the LINK element in document head:
                b) to link to a separate style sheet (rel=stylesheet)
                c) to make a link to a script (rel=script)
                d) by stylesheets to control how collections of
                   html nodes are rendered into printed documents
                e) to make a link to a printable version of this document
                   e.g. a postscript or pdf version (rel=print)
-->

<!ELEMENT LINK - O EMPTY>
<!ATTLIST LINK
        id      ID      #IMPLIED    -- SGML ID attribute --
        href    %URL    #IMPLIED    -- URL for linked resource --
        rel     %Types  #IMPLIED    -- forward link types --
        rev     %Types  #IMPLIED    -- reverse link types --
        title   CDATA   #IMPLIED    -- advisory title string --
        >

<!--=================== Images ============================================-->

<!ENTITY % Length "CDATA" -- nn for pixels or nn% for percentage length -->
<!ENTITY % Pixels "CDATA" -- integer representing length in pixels -->

<!-- Suggested widths are used for negotiating image size
     with the module responsible for painting the image.
     align=left or right cause image to float to margin
     and for subsequent text to wrap around image -->

<![ %HTML.HotJava [
    <!ENTITY % IAlign "top|middle|bottom|left|right
			|texttop|absmiddle|baseline|absbottom">
]]>

<![ %HTML.3.2.Conflict [
    <!ENTITY % IAlign "top|middle|bottom|left|right">
]]>

<!ENTITY % ImgAlign "( %IAlign | center)">

<!ELEMENT IMG    - O EMPTY --  Embedded image -->
<![ %HTML.HotJava [
    <!ATTLIST IMG
	    src     %URL         #REQUIRED  -- URL of image to embed --
	    alt     CDATA        #IMPLIED   -- for display in place of image --
	    align   %ImgAlign  	 baseline   -- vertical or horizontal alignment --
	    height  %Pixels      #IMPLIED   -- suggested height in pixels --
	    width   %Pixels      #IMPLIED   -- suggested width in pixels --
	    border  %Pixels      #IMPLIED   -- suggested link border width --
	    hspace  %Pixels      #IMPLIED   -- suggested horizontal gutter --
	    vspace  %Pixels      #IMPLIED   -- suggested vertical gutter --
	    usemap  %URL         #IMPLIED   -- use client-side image map --
	    ismap   (ismap)      #IMPLIED   -- use server image map --
	    lowsrc  %URL         #IMPLIED
	    >
]]>

<![ %HTML.3.2.Conflict [
    <!ATTLIST IMG
	    src     %URL      #REQUIRED  -- URL of image to embed --
	    alt     CDATA     #IMPLIED   -- for display in place of image --
	    align   (%IAlign) #IMPLIED   -- vertical or horizontal alignment --
	    height  %Pixels   #IMPLIED   -- suggested height in pixels --
	    width   %Pixels   #IMPLIED   -- suggested width in pixels --
	    border  %Pixels   #IMPLIED   -- suggested link border width --
	    hspace  %Pixels   #IMPLIED   -- suggested horizontal gutter --
	    vspace  %Pixels   #IMPLIED   -- suggested vertical gutter --
	    usemap  %URL      #IMPLIED   -- use client-side image map --
	    ismap   (ismap)   #IMPLIED   -- use server image map --
	    >
]]>

<!-- USEMAP points to a MAP element which may be in this document
  or an external document, although the latter is not widely supported -->

<!--=================== Java APPLET tag ===================================-->
<!--
  This tag is supported by all java enabled browsers. Applet resources
  (including their classes) are normally loaded relative to the document
  URL (or <BASE> element if it is defined). The CODEBASE attribute is used
  to change this default behavior. If the CODEBASE attribute is defined then
  it specifies a different location to find applet resources. The value
  can be an absolute URL or a relative URL. The absolute URL is used as is
  without modification and is not effected by the documents <BASE> element.
  When the codebase attribute is relative, then it is relative to the
  document URL (or <BASE> tag if defined).
-->
<![ %HTML.HotJava [
    <!ELEMENT APPLET - - (%flow|%heading|%form|TR|TD)* +(PARAM)>
    <!ATTLIST APPLET
	    codebase %URL      #IMPLIED   -- code base --
	    code     CDATA     #IMPLIED  -- class file --
	    alt      CDATA     #IMPLIED   -- for display in place of applet --
	    name     CDATA     #IMPLIED   -- applet name --
	    archive  CDATA     #IMPLIED   -- archive attribute for jar files --
	    width    %Pixels   #REQUIRED  -- suggested width in pixels --
	    height   %Pixels   #REQUIRED  -- suggested height in pixels --
	    align    (%IAlign) baseline   -- vertical or horizontal alignment --
	    hspace   %Pixels   #IMPLIED   -- suggested horizontal gutter --
	    vspace   %Pixels   #IMPLIED   -- suggested vertical gutter --
	    >
]]>

<![ %HTML.3.2.Conflict [
    <!ELEMENT APPLET - - (%text)* +(PARAM)>
    <!ATTLIST APPLET
	    codebase %URL      #IMPLIED   -- code base --
	    code     CDATA     #REQUIRED  -- class file --
	    alt      CDATA     #IMPLIED   -- for display in place of applet --
	    name     CDATA     #IMPLIED   -- applet name --
	    width    %Pixels   #REQUIRED  -- suggested width in pixels --
	    height   %Pixels   #REQUIRED  -- suggested height in pixels --
	    align    (%IAlign) #IMPLIED   -- vertical or horizontal alignment --
	    hspace   %Pixels   #IMPLIED   -- suggested horizontal gutter --
	    vspace   %Pixels   #IMPLIED   -- suggested vertical gutter --
	    >
]]>


<!-- This tag is used by both the APPLET tag and the OBJECT tag. -->
<!ELEMENT PARAM - O EMPTY>
<!ATTLIST PARAM
        name        NAME               #REQUIRED  -- The name of the parameter --
        value       CDATA              #IMPLIED   -- The value of the parameter --
        valuetype   (DATA|REF|OBJECT)  DATA       -- How to interpret value (OBJECT tag specific) --
        type        CDATA              #IMPLIED   -- Internet media type (OBJECT tag specific) --
        >

<!--
Here is an example:

    <applet codebase="applets/NervousText"
        code=NervousText.class
        width=300
        height=50>
    <param name=text value="Java is Cool!">
    <img src=sorry.gif alt="This looks better with Java support">
    </applet>
-->
<!--=================== Object Tag ===================================-->

<!--
  The OBJECT element is used to insert an object into an HTML document.
  It requires both start and end tags. The OBJECT element has the same
  content model as the HTML BODY element, except that one or more optional
  PARAM elements can be placed immediately after the OBJECT start tag and
  used to initialize the inserted object. The content of the OBJECT
  element is rendered if the object specified by the CLASSID, CODEBASE and
  DATA attributes can't be rendered (user agents may choose to display the
  content of the OBJECT element if displaying the actual element will take
  a long time to render). This provides for backwards compatibility with
  existing browsers, and allows authors to specify alternative media via
  nested OBJECT elements. 
-->

<!-- This is identical to the HMTL3.2 body.content entity.
     It differs from the HotJava body.content in that it doesnt
     have FRAMESET and NOFRAMES elements.
-->
<!ENTITY % bodytext "(%heading | %flow | ADDRESS)*">

<!-- OBJECT is a character-like element for inserting objects -->

<![ %HTML.3.2.Conflict [
<!ELEMENT OBJECT - - (param | %bodytext)*>
]]>

<![ %HTML.HotJava [
<!ELEMENT OBJECT - - (param | %bodytext | %form)*>
]]>


<!ATTLIST OBJECT
        id       ID        #IMPLIED   -- document wide unique id --
        class    CDATA     #IMPLIED   -- comma list of class values --
        style    CDATA     #IMPLIED   -- associated style info --
        lang     NAME      #IMPLIED   -- RFC 1766 language value --
        dir      (ltr|rtl) #IMPLIED   -- default directionality --
        declare  (declare) #IMPLIED   -- declare but don't instantiate flag --
        classid  %URL      #IMPLIED   -- identifies an implementation --
        codebase %URL      #IMPLIED   -- some systems need an additional URL --
        data     %URL      #IMPLIED   -- reference to object's data --
        type     CDATA     #IMPLIED   -- Internet media type for data --
        codetype CDATA     #IMPLIED   -- Internet media type for code --
        standby  CDATA     #IMPLIED   -- message to show while loading --
        align    (%IAlign) #IMPLIED   -- positioning inside document --
        height   %Length   #IMPLIED   -- suggested height --
        width    %Length   #IMPLIED   -- suggested width --
        border   %Length   #IMPLIED   -- suggested link border width --
        hspace   %Length   #IMPLIED   -- suggested horizontal gutter --
        vspace   %Length   #IMPLIED   -- suggested vertical gutter --
        usemap   %URL      #IMPLIED   -- reference to image map --
        shapes   (shapes)  #IMPLIED   -- object has shaped hypertext links --
        name     %URL      #IMPLIED   -- submit as part of form --
        >

                         
<!--=================== Horizontal Rule ===================================-->

<!ELEMENT HR    - O EMPTY>
<!ATTLIST HR
        align (left|right|center) #IMPLIED
        noshade (noshade) #IMPLIED
        size  %Pixels #IMPLIED
        width %Length #IMPLIED
        >
<!--=================== Paragraphs=========================================-->

<!ELEMENT P     - O (%text)*>
<!ATTLIST P
        align  (left|center|right) #IMPLIED
        >

<!--=================== Headings ==========================================-->

<!--
  There are six levels of headers from H1 (the most important)
  to H6 (the least important).
-->

<![ %HTML.HotJava [
    <!ELEMENT ( %heading )  - -  (IMG|br|hr|center|%text;)*>
]]>


<![ %HTML.3.2.Conflict [
    <!ELEMENT ( %heading )  - -  (%text;)*>
]]>

<!ATTLIST ( %heading )
        align  (left|center|right) #IMPLIED
        >

<!--=================== Preformatted Text =================================-->

<!-- excludes images and changes in font size -->

<![ %HTML.HotJava [
    <!ENTITY % pre.exclusions "BIG|SMALL|SUB|SUP">
]]>

<![ %HTML.3.2.Conflict [
     <!ENTITY % pre.exclusions "IMG|BIG|SMALL|SUB|SUP|FONT">
]]>

<![ %HTML.HotJava [
    <!ELEMENT PRE - - (%text)* +(HR|P)>
]]>

<![ %HTML.3.2.Conflict [
    <!ELEMENT PRE - - (%text)* -(%pre.exclusion)>
]]>

<!ATTLIST PRE
        width NUMBER #implied -- is this widely supported? --
        >

<![ %HTML.Deprecated [

<!ENTITY % literal "CDATA"
        -- historical, non-conforming parsing mode where
           the only markup signal is the end tag
           in full
        -->

<!ELEMENT (XMP|LISTING) - -  %literal>
<!ELEMENT PLAINTEXT - O %literal>

]]>

<!--=================== Block-like Quotes =================================-->

<!ELEMENT BLOCKQUOTE - - %body.content>

<!--=================== Lists =============================================-->

<!--
    HTML 3.2 allows you to control the sequence number for ordered lists.
    You can set the sequence number with the START and VALUE attributes.
    The TYPE attribute may be used to specify the rendering of ordered
    and unordered lists.
-->

<!-- definition lists - DT for term, DD for its definition -->


<!-- 
      Changed to enable hotjava to read netscape bookmarks.
-->
<![ %HTML.HotJava [
    <!ELEMENT DL    - -  (P|DL|DT|DD)*>
]]>

<![ %HTML.3.2.Conflict [
    <!ELEMENT DL    - -  (DT|DD)*>
]]>

<!ATTLIST DL
        compact (compact) #IMPLIED -- more compact style --
        >
<!-- 
      Changed to enable hotjava to read netscape bookmarks.
      Also hotjava's hotlist uses the same format to save its
      bookmarks.
-->
<![ %HTML.HotJava [
    <!ELEMENT DT - O  (%heading|%text)*>
]]>

<![ %HTML.3.2.Conflict [
    <!ELEMENT DT - O  (%text)*>
]]>

<!ELEMENT DD - O  %flow;>

<!-- Ordered lists OL, and unordered lists UL -->
<![ %HTML.3.2.Conflict [
    <!ELEMENT (OL|UL) - -  (LI)*>
]]>

<!-- Ordered lists OL, and unordered lists UL -->
<![ %HTML.HotJava [
    <!ELEMENT (OL|UL) - -  (P|BR|%text|OL|UL|LI)*>
]]>

<!--
       Numbering style
    1   arablic numbers     1, 2, 3, ...
    a   lower alpha         a, b, c, ...
    A   upper alpha         A, B, C, ...
    i   lower roman         i, ii, iii, ...
    I   upper roman         I, II, III, ...

    The style is applied to the sequence number which by default
    is reset to 1 for the first list item in an ordered list.

    This can't be expressed directly in SGML due to case folding.
-->

<!ENTITY % OLStyle "CDATA" -- constrained to: [1|a|A|i|I] -->

<![ %HTML.HotJava [
    <!ATTLIST OL -- ordered lists --
	    type      %OLStyle   "1"   -- numbering style --
	    start     NUMBER     #IMPLIED   -- starting sequence number --
	    compact  (compact)   #IMPLIED   -- reduced interitem spacing --
	    >
]]>

<![ %HTML.3.2.Conflict [
    <!ATTLIST OL -- ordered lists --
	    type      %OLStyle   #IMPLIED   -- numbering style --
	    start     NUMBER     #IMPLIED   -- starting sequence number --
	    compact  (compact)   #IMPLIED   -- reduced interitem spacing --
	    >
]]>

<!-- bullet styles -->

<!ENTITY % ULStyle "disc|square|circle">

<!ATTLIST UL -- unordered lists --
        type    (%ULStyle)   #IMPLIED   -- bullet style --
        compact (compact)    #IMPLIED   -- reduced interitem spacing --
        >

<![ %HTML.HotJava [
     <!ELEMENT (DIR|MENU) - -  (%list|%text|LI)* -(%preformatted | DL | DIV | CENTER |
           BLOCKQUOTE | FORM | ISINDEX | HR | TABLE | OBJECT) +(P)>
]]>

<![ %HTML.3.2.Conflict [
     <!ELEMENT (DIR|MENU) - -  (LI)* -(%block)>
]]>

<!ATTLIST DIR
        compact (compact) #IMPLIED
        >
<!ATTLIST MENU
        compact (compact) #IMPLIED
        >

<!-- <DIR>              Directory list                  -->
<!-- <DIR COMPACT>      Compact list style              -->
<!-- <MENU>             Menu list                       -->
<!-- <MENU COMPACT>     Compact list style              -->

<!-- The type attribute can be used to change the bullet style
     in unordered lists and the numbering style in ordered lists -->

<!ENTITY % LIStyle "CDATA" -- constrained to: "(%ULStyle|%OLStyle)" -->

<![ %HTML.HotJava [
    <!ELEMENT LI - O (%flow|%heading)* -- list item -->
]]>

<![ %HTML.3.2.Conflict [
    <!ELEMENT LI - O %flow -- list item -->
]]>

<!ATTLIST LI
        type    %LIStyle     #IMPLIED   -- list item style --
        value    NUMBER      #IMPLIED   -- reset sequence number --
        >

<!--================ Forms ===============================================-->

<!ELEMENT FORM - - %body.content -(FORM)>
<!ATTLIST FORM
        action %URL #IMPLIED  -- server-side form handler --
        method (%HTTP-Method) GET -- see HTTP specification --
        enctype %Content-Type; "application/x-www-form-urlencoded"
        >

<!ENTITY % InputType
        "(TEXT | PASSWORD | CHECKBOX | RADIO | SUBMIT
            | RESET | FILE | HIDDEN | IMAGE)">

<!ELEMENT INPUT - O EMPTY>

<![ %HTML.HotJava [
     <!ATTLIST INPUT
        type %InputType TEXT     -- what kind of widget is needed --
        name  CDATA #IMPLIED     -- required for all but submit and reset --
        value  CDATA #IMPLIED     -- required for radio and checkboxes --
	border   %Pixels      #IMPLIED   -- suggested image border width --
        checked	  (checked) #IMPLIED -- for radio buttons and check boxes --
        size CDATA  #IMPLIED     -- specific to each type of field --
        maxlength NUMBER #IMPLIED
        src   %URL  #IMPLIED     -- for fields with background images --
        align  (top|middle|bottom|left|right) top -- image alignment --
        >
]]>


<![ %HTML.3.2.Conflict [
     <!ATTLIST INPUT
        type %InputType TEXT     -- what kind of widget is needed --
        name  CDATA #IMPLIED     -- required for all but submit and reset --
        value  CDATA #IMPLIED     -- required for radio and checkboxes --
        checked	  (checked) #IMPLIED -- for radio buttons and check boxes --
        size CDATA  #IMPLIED     -- specific to each type of field --
        maxlength NUMBER #IMPLIED
        src   %URL  #IMPLIED     -- for fields with background images --
        align  (top|middle|bottom|left|right) top -- image alignment --
        >
]]>


<!ELEMENT SELECT - - (OPTION+)>
<!ATTLIST SELECT
        name CDATA #REQUIRED
        size NUMBER #IMPLIED
        multiple (multiple) #IMPLIED
        >

<!ELEMENT OPTION - O (#PCDATA)*>
<!ATTLIST OPTION
        selected (selected) #IMPLIED
        value  CDATA  #IMPLIED -- defaults to element content --
        >

<!-- Multi-line text input field. -->

<!ELEMENT TEXTAREA - - (#PCDATA)*>
<!ATTLIST TEXTAREA
        name CDATA #REQUIRED
        rows NUMBER #REQUIRED
        cols NUMBER #REQUIRED
        >

<!--======================= Tables ========================================-->

<!-- Widely deployed subset of the full table standard, see RFC 1942
     e.g. at http://www.ics.uci.edu/pub/ietf/html/rfc1942.txt -->

<!-- horizontal placement of table relative to window -->
<!ENTITY % Where "(left|center|right)">

<!-- horizontal alignment attributes for cell contents -->
<!ENTITY % cell.halign
        "align  (left|center|right) #IMPLIED"
        >

<!-- vertical alignment attributes for cell contents -->
<!ENTITY % cell.valign
        "valign  (top|middle|bottom|baseline)  #IMPLIED"
        >

<![ %HTML.HotJava [
    <!ELEMENT table - - (tr|caption)*     -- a little more forgiving -->
]]>

<![ %HTML.3.2.Conflict [
    <!ELEMENT table - - (caption?, tr+)>
]]>

<!-- added to enable some pages like the nbc and apple pages to display correctly -->
<![ %HTML.HotJava [
    <!ELEMENT tr - O (td|th|SCRIPT|MAP)*>
]]>

<![ %HTML.3.2.Conflict [
    <!ELEMENT tr - O (td|th)*>
]]>

<!ELEMENT (th|td) - O %body.content>


<![ %HTML.HotJava [

    <!ATTLIST table                       -- table element --
	    align     %Where;   #IMPLIED  -- table position relative to window --
	    width     %Length   #IMPLIED  -- table width relative to window --
	    border    %Pixels   #IMPLIED  -- controls frame width around table --
	    cellspacing %Pixels #IMPLIED  -- spacing between cells --
	    cellpadding %Pixels #IMPLIED  -- spacing within cells --
	    bgcolor   %color	#IMPLIED  -- def background color of all cells --
	    >
]]>

<![ %HTML.3.2.Conflict [
    <!ATTLIST table                       -- table element --
	    align     %Where;   #IMPLIED  -- table position relative to window --
	    width     %Length   #IMPLIED  -- table width relative to window --
	    border    %Pixels   #IMPLIED  -- controls frame width around table --
	    cellspacing %Pixels #IMPLIED  -- spacing between cells --
	    cellpadding %Pixels #IMPLIED  -- spacing within cells --
	    >
]]>

<![ %HTML.HotJava [
    <!ELEMENT CAPTION - - %body.content -- table or figure caption -->
]]>


<![ %HTML.3.2.Conflict [
    <!ELEMENT CAPTION - - (%text;)* -- table or figure caption -->
]]>

<![ %HTML.HotJava [
    <!ATTLIST CAPTION
	    align (top|bottom) top
	    >
]]>

<![ %HTML.3.2.Conflict [
    <!ATTLIST CAPTION
	    align (top|bottom) #IMPLIED
	    >
]]>

<![ %HTML.HotJava [
    <!ATTLIST tr                       -- table row --
	    %cell.halign;              -- horizontal alignment in cells --
	    %cell.valign;              -- vertical alignment in cells --
	    bgcolor %color  #IMPLIED   -- def bkg color for cells in row --
	    >
]]>

<![ %HTML.3.2.Conflict [
    <!ATTLIST tr                       -- table row --
	    %cell.halign;              -- horizontal alignment in cells --
	    %cell.valign;              -- vertical alignment in cells --
	    >
]]>

<![ %HTML.HotJava [

    <!ATTLIST (th|td)                  -- header or data cell --
	    nowrap (nowrap)  #IMPLIED  -- suppress word wrap --
	    bgcolor %color   #IMPLIED  -- cell background color --
	    rowspan NUMBER   1         -- number of rows spanned by cell --
	    colspan NUMBER   1         -- number of cols spanned by cell --
	    %cell.halign;              -- horizontal alignment in cell --
	    %cell.valign;              -- vertical alignment in cell --
	    width   %Length  #IMPLIED  -- suggested width for cell --
	    height  %Length  #IMPLIED  -- suggested height for cell --
	    >
]]>

<![ %HTML.3.2.Conflict [
    <!ATTLIST (th|td)                  -- header or data cell --
            nowrap (nowrap)  #IMPLIED  -- suppress word wrap --
            rowspan NUMBER   1         -- number of rows spanned by cell --
            colspan NUMBER   1         -- number of cols spanned by cell --
            %cell.halign;              -- horizontal alignment in cell --
            %cell.valign;              -- vertical alignment in cell --
            width   %Pixels  #IMPLIED  -- suggested width for cell --
            height  %Pixels  #IMPLIED  -- suggested height for cell --
            >
]]>



<!--================ Document Head ========================================-->

<!-- %head.misc defined earlier on as "SCRIPT|STYLE|META|LINK" -->

<![ %HTML.HotJava [
    <!ENTITY % head.content "TITLE? & ISINDEX? & BASE? & NEXTID?">
]]>

<![ %HTML.3.2.Conflict [
    <!ENTITY % head.content "TITLE & ISINDEX? & BASE?">
]]>

<!ELEMENT HEAD O O  (%head.content) +(%head.misc)>

<!ELEMENT TITLE - -  (#PCDATA)* -(%head.misc)
          -- The TITLE element is not considered part of the flow of text.
             It should be displayed, for example as the page header or
             window title.
          -->

<!ELEMENT ISINDEX - O EMPTY>
<!ATTLIST ISINDEX
        prompt CDATA #IMPLIED -- prompt message -->



<!--
    The BASE element gives an absolute URL for dereferencing relative
    URLs, e.g.

         <BASE href="http://foo.com/index.html">
         ...
         <IMG SRC="images/bar.gif">

    The image is deferenced to

         http://foo.com/images/bar.gif

   In the absence of a BASE element the document URL should be used.
   Note that this is not necessarily the same as the URL used to
   request the document, as the base URL may be overridden by an HTTP
   header accompanying the document.
-->

<!ELEMENT BASE - O EMPTY>

<![ %HTML.3.2.Conflict [
    <!ATTLIST BASE href %URL  #REQUIRED>
]]>

<![ %HTML.HotJava [
    <!ATTLIST BASE
         href   %URL  #IMPLIED
         target CDATA #IMPLIED
    >
]]>

<!ELEMENT META - O EMPTY -- Generic Metainformation -->
<!ATTLIST META
        http-equiv  NAME    #IMPLIED  -- HTTP response header name  --
        name        NAME    #IMPLIED  -- metainformation name       --
        content     CDATA   #REQUIRED -- associated information     --
        >

<!-- SCRIPT/STYLE are place holders for transition to next version of HTML -->

<!ELEMENT STYLE  - - (#PCDATA)*  -(%head.misc) -- style info -->

<![ %HTML.3.2.Conflict [
    <!ELEMENT SCRIPT - - (#PCDATA)*  -(%head.misc) -- script statements -->
]]>

<!-- this definition of script for hotjava is done so that all html tags
     that occur within the script tags can be ignored - given that
     currently hotjava does not support javascript.  -->
     
<![ %HTML.HotJava [
    <!ELEMENT SCRIPT - - %body.content  -(%head.misc) -- script statements -->
]]>

<![ %HTML.HotJava [
    <!ATTLIST SCRIPT
	    language    CDATA   #IMPLIED
	    >
]]>

<!--================ Document Structure ===================================-->

<!ENTITY % version.attr "VERSION CDATA #FIXED '%HTML.Version;'">

<![ %HTML.Deprecated [
    <!ENTITY % html.content "HEAD, BODY, PLAINTEXT?">
]]>
<!ENTITY % html.content "HEAD, BODY">

<!ELEMENT HTML O O  (%html.content)>
<!ATTLIST HTML
        %version.attr;
        >

<!--================ HotJava Specials =====================================-->

<!ELEMENT THEAD    - O (TR)+>
<!ELEMENT TFOOT    - O (TR)+>
<!ELEMENT TBODY    O O (TR)+>

<!ELEMENT SPAN - - (%text)*>

<!ELEMENT BLINK - - ANY>

<!ELEMENT NOBR - - (%text)+>
<!ELEMENT WBR  - O EMPTY>

<!ELEMENT NEXTID - O EMPTY>
<!ATTLIST NEXTID
        n CDATA #REQUIRED>

<!ELEMENT FRAMESET - O (FRAMESET|FRAME|NOFRAMES)*>
<!ATTLIST FRAMESET
	rows CDATA #IMPLIED
	cols CDATA #IMPLIED
>

<!ELEMENT FRAME - O EMPTY>
<!ATTLIST FRAME
	src	    CDATA	#IMPLIED
	name	    CDATA	#IMPLIED
	frameborder NUMBER	1  -- the DTD says (1|0) --
	marginwidth NUMBER	#IMPLIED
	marginheight NUMBER	#IMPLIED
	scrolling (yes|no|auto) AUTO
	noresize    (noresize)  #IMPLIED
>

<!ELEMENT NOFRAMES - - CDATA>

<!ELEMENT NOHOTJAVA - - CDATA>

<!ELEMENT ANIMATE - - CDATA>

<!ELEMENT NOSCRIPT - - (%block)+>
