<!-- ===================================================================

     Apache Documentation DTD (Version 1.1)

PURPOSE:
  This DTD was developed to create a simple yet powerful document
  type for software documentation for use with the Apache projects.
  It is an XML-compliant DTD and it's maintained by the Apache XML
  project.

TYPICAL INVOCATION:

  <!DOCTYPE document PUBLIC
       "-//APACHE//DTD Documentation Vx.y//EN"
       "document-vxy.dtd">

  where

    x := major version
    y := minor version

NOTES:
  Many of the design patterns used in this DTD were take from the
  W3C XML Specification DTD edited by Eve Maler <elm@arbortext.com>.

  Where possible, great care has been used to reuse HTML tag
  names to reduce learning efforts and to allow HTML editors to be
  used for complex authorings like tables and lists.

EXTENSIBILITY:
  This DTD includes several empty placeholders that can be used to
  extend it. These placeholders are implemented with empty entities. Here
  is the list of those empty entities and what they are used for:
  
    - local.inline: this entity should contain extended definitions of 
                    elements that can be used 'inline', or directly inside
                    the content. An example for this entity could be 

                        <!ENTITY % local.inline "|citation">

    - local.blocks: this entity should contain extended definitions of
                    elements that behave as 'blocks', thus can be visually
                    rendered as areas on the canvas. An example for this
                    entity could be:

                        <!ENTITY % local.blocks "|poem">

    - local.sections: this entity should contain extended definitions of
                      elements that behave as 'sections', thus can be considered
                      containers of block-level elements. An example for
                      this entity could be:

                        <!ENTITY % local.sections "|chapter">

    - local.headers: this entity should contain extended definitions of
                     elements that behave as parts of the document header.
                     An example for this header could be:

                        <!ENTITY % local.headers ", notes?">

    - local.footers: this entity should contain extended definitions of
                     elements that behave as parts of the document footer.
                     An example for this header could be:

                        <!ENTITY % local.footers ", annotations*">
  
  
AUTHORS:
  Stefano Mazzocchi <stefano@apache.org>
  Steven Noels <stevenn@outerthought.org>

FIXME:
  - should "form" tags be included?

CHANGE HISTORY:
[Version 1.0]
  19991121 Initial version. (SM)
  19991123 Replaced "res" with more standard "strong" for emphasis. (SM)
  19991124 Added "fork" element for window forking behavior. (SM)
  19991124 Added "img-inline" element to separate from "img". (SM)
  19991129 Removed "affiliation" from "author". (SM)
  19991129 Made "author" empty and moved "name|email" as attributes. (SM)
  19991215 Simplified table section. (SM)
  19991215 Changed "img-block" in more friendly "figure". (SM)
  20000125 Added the "icon" image. (SM)
  20000126 Allowed "anchor" in all levels. (SM)
  20000404 Removed the "role" attribute from common-xxx.att. (SM)
  20000815 Allowed "code" inside "strong" and "em". (SM)
[Version 1.1]
  20011212 Used public identifiers for external entities. (SM)
  20011212 Removed xlink attributes since not used. (SM)
  20011212 Removed "connect" since not required at this level. (SM) 
  20011218 Added "warning" as a block level object. (SM)
  20011218 Removed explicitly numbered sections ("s1|s2|s3|s4"). (SM)
  20011218 Added "section" element. (SM)  
  20011218 Allowed "body" to have blocks without a section. (SM)
  20011218 Removed "sl" since not really different from "ul". (SM)
  20020214 Moved empty placeholder entity declarations up front (SNS)
  20020214 Corrected content model of content.mix parameter entity (SNS)

COPYRIGHT:
  Copyright (c) @year@ The Apache Software Foundation.

  Permission to copy in any form is granted provided this notice is
  included in all copies. Permission to redistribute is granted
  provided this file is distributed untouched in all its parts and
  included files.

==================================================================== -->




<!-- =============================================================== -->
<!-- Common character entities (included from external file) -->
<!-- =============================================================== -->

<!ENTITY % ISOlat1 PUBLIC
    "ISO 8879:1986//ENTITIES Added Latin 1//EN//XML"
    "ISOlat1.pen">
%ISOlat1;

<!ENTITY % ISOpub PUBLIC
    "ISO 8879:1986//ENTITIES Publishing//EN//XML"
    "ISOpub.pen">
%ISOpub;

<!ENTITY % ISOtech PUBLIC
    "ISO 8879:1986//ENTITIES General Technical//EN//XML"
    "ISOtech.pen">
%ISOtech;

<!ENTITY % ISOnum PUBLIC
    "ISO 8879:1986//ENTITIES Numeric and Special Graphic//EN//XML"
    "ISOnum.pen">
%ISOnum;

<!ENTITY % ISOdia PUBLIC
    "ISO 8879:1986//ENTITIES Diacritical Marks//EN//XML"
    "ISOdia.pen">
%ISOdia;

<!-- =============================================================== -->
<!-- Useful entities for increased DTD readability -->
<!-- =============================================================== -->

<!ENTITY % text "#PCDATA">

<!-- Entities referred to later on are defined up front -->

<!ENTITY % markup "strong|em|code|sub|sup">
<!ENTITY % special-inline "br|img|icon">
<!ENTITY % links "link|jump|fork">
<!ENTITY % paragraphs "p|source|note|warning|fixme">
<!ENTITY % tables "table">
<!ENTITY % lists "ol|ul|dl">
<!ENTITY % special-blocks "figure|anchor">


<!-- =============================================================== -->
<!-- Entities for general XML compliance -->
<!-- =============================================================== -->

<!-- Common attributes
        Every element has an ID attribute (sometimes required,
        but usually optional) for links. %common.att;
        is for common attributes where the ID is optional, and
        %common-idreq.att; is for common attributes where the
        ID is required.
-->
<!ENTITY % common.att
        'id                     ID              #IMPLIED
         xml:lang               NMTOKEN         #IMPLIED'>
<!ENTITY % common-idreq.att
        'id                     ID              #REQUIRED
         xml:lang               NMTOKEN         #IMPLIED'>


<!-- xml:space attribute ===============================================
        Indicates that the element contains white space
        that the formatter or other application should retain,
        as appropriate to its function.
==================================================================== -->
<!ENTITY % xmlspace.att
        'xml:space (default|preserve) #FIXED "preserve"'>


<!-- def attribute =====================================================
        Points to the element where the relevant definition can be
        found, using the IDREF mechanism.  %def.att; is for optional
        def attributes, and %def-req.att; is for required def
        attributes.
==================================================================== -->
<!ENTITY % def.att
        'def                    IDREF           #IMPLIED'>
<!ENTITY % def-req.att
        'def                    IDREF           #REQUIRED'>


<!-- ref attribute =====================================================
        Points to the element where more information can be found,
        using the IDREF mechanism.  %ref.att; is for optional
        ref attributes, and %ref-req.att; is for required ref
        attributes.
================================================================== -->
<!ENTITY % ref.att
        'ref                    IDREF           #IMPLIED'>
<!ENTITY % ref-req.att
        'ref                    IDREF           #REQUIRED'>


<!-- =============================================================== -->
<!-- Entities for general usage -->
<!-- =============================================================== -->


<!-- Key attribute =====================================================
        Optionally provides a sorting or indexing key, for cases when
        the element content is inappropriate for this purpose.
==================================================================== -->
<!ENTITY % key.att
        'key                    CDATA           #IMPLIED'>



<!-- Title attributes ==================================================
        Indicates that the element requires to have a title attribute.
==================================================================== -->
<!ENTITY % title.att
        'title                  CDATA           #REQUIRED'>



<!-- Name attributes ==================================================
        Indicates that the element requires to have a name attribute.
==================================================================== -->
<!ENTITY % name.att
        'name                   CDATA           #REQUIRED'>



<!-- Email attributes ==================================================
        Indicates that the element requires to have an email attribute.
==================================================================== -->
<!ENTITY % email.att
        'email                  CDATA           #REQUIRED'>


<!-- Link attributes ===================================================
        Indicates that the element requires to have hyperlink attributes.
==================================================================== -->

<!ENTITY % link.att
        'href      CDATA                         #IMPLIED
         role      CDATA                         #IMPLIED
         title     CDATA                         #IMPLIED '>



<!-- =============================================================== -->
<!-- General definitions -->
<!-- =============================================================== -->

<!-- A person is a general human entity -->
<!ELEMENT person EMPTY>
<!ATTLIST person %common.att;
                 %name.att;
                 %email.att;>



<!-- =============================================================== -->
<!-- Content definitions -->
<!-- =============================================================== -->

<!ENTITY % local.inline "">

<!ENTITY % link-content.mix "%text;|%markup;|%special-inline; %local.inline;">

<!ENTITY % content.mix "%link-content.mix;|%links;">

    <!-- ==================================================== -->
    <!-- Phrase Markup -->
    <!-- ==================================================== -->

    <!-- Strong (typically bold) -->
    <!ELEMENT strong (%text;|code)*>
    <!ATTLIST strong %common.att;>

    <!-- Emphasis (typically italic) -->
    <!ELEMENT em (%text;|code)*>
    <!ATTLIST em %common.att;>
    
    <!-- Code (typically monospaced) -->
    <!ELEMENT code (%text;)>
    <!ATTLIST code %common.att;>

    <!-- Superscript (typically smaller and higher) -->
    <!ELEMENT sup (%text;)>
    <!ATTLIST sup %common.att;>

    <!-- Subscript (typically smaller and lower) -->
    <!ELEMENT sub (%text;)>
    <!ATTLIST sub %common.att;>

    <!-- ==================================================== -->
    <!-- Hypertextual Links -->
    <!-- ==================================================== -->

    <!-- hyperlink (equivalent of <a ...>) -->
    <!ELEMENT link (%link-content.mix;)*>
    <!ATTLIST link %common.att;
                   %link.att;>

    <!-- windows-replacing link (equivalent of <a ... target="_top">) -->
    <!ELEMENT jump (%link-content.mix;)*>
    <!ATTLIST jump %common.att;
                   %link.att;>

    <!-- window-forking link (equivalent of <a ... target="_new">) -->
    <!ELEMENT fork (%link-content.mix;)*>
    <!ATTLIST fork %common.att;
                   %link.att;>

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

    <!-- Breakline Object (typically forces line break) -->
    <!ELEMENT br EMPTY>
    <!ATTLIST br %common.att;>

    <!-- Image Object (typically an inlined image) -->
    <!ELEMENT img EMPTY>
    <!ATTLIST img src    CDATA  #REQUIRED
                  alt    CDATA  #REQUIRED
                  height CDATA  #IMPLIED
                  width  CDATA  #IMPLIED
                  usemap CDATA  #IMPLIED
                  ismap  (ismap) #IMPLIED
                  %common.att;>

    <!-- Image Icon (typically an inlined image placed as graphical item) -->
    <!ELEMENT icon EMPTY>
    <!ATTLIST icon src    CDATA  #REQUIRED
                   alt    CDATA  #REQUIRED
                   height CDATA  #IMPLIED
                   width  CDATA  #IMPLIED
                   %common.att;>


<!-- =============================================================== -->
<!-- Blocks definitions -->
<!-- =============================================================== -->

<!ENTITY % local.blocks "">

<!ENTITY % blocks "%paragraphs;|%tables;|%lists;|%special-blocks; %local.blocks;">

    <!-- ==================================================== -->
    <!-- Paragraphs -->
    <!-- ==================================================== -->

    <!-- Text Paragraph (normally vertically space delimited) -->
    <!ELEMENT p (%content.mix;)*>
    <!ATTLIST p %common.att;>

    <!-- Source Paragraph (normally space is preserved) -->
    <!ELEMENT source (%content.mix;)*>
    <!ATTLIST source %common.att;
                     %xmlspace.att;>

    <!-- Note Paragraph (normally shown encapsulated) -->
    <!ELEMENT note (%content.mix;)*>
    <!ATTLIST note %common.att;>

    <!-- Warning Paragraph (normally shown with eye-catching colors) -->
    <!ELEMENT warning (%content.mix;)*>
    <!ATTLIST warning %common.att;>

    <!-- Fixme Paragraph (normally not shown) -->
    <!ELEMENT fixme (%content.mix;)*>
    <!ATTLIST fixme author CDATA #REQUIRED
                    %common.att;>

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

    <!-- Attributes that indicate the spanning of the table cell -->
    <!ENTITY % cell.span 
        'colspan CDATA "1"
         rowspan CDATA "1"'>

    <!-- Table element -->
    <!ELEMENT table (caption?, tr+)>
    <!ATTLIST table %common.att;>

        <!-- The table title -->
        <!ELEMENT caption (%content.mix;)*>
        <!ATTLIST caption %common.att;>

        <!-- The table row element -->
        <!ELEMENT tr (th|td)+>
        <!ATTLIST tr %common.att;>

            <!-- The table row header element -->
            <!ELEMENT th (%content.mix;)*>
            <!ATTLIST th %common.att;
                         %cell.span;>

            <!-- The table row description element -->
            <!ELEMENT td (%content.mix;)*>
            <!ATTLIST td %common.att;
                         %cell.span;>

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

    <!-- List item -->
    <!ELEMENT li (%content.mix;|%lists;)*>
    <!ATTLIST li %common.att;>
    
    <!-- Unordered list (typically bulleted) -->
    <!ELEMENT ul (li|%lists;)+>
    <!--    spacing attribute:
            Use "normal" to get normal vertical spacing for items;
            use "compact" to get less spacing.  The default is dependent
            on the stylesheet. -->
    <!ATTLIST ul
            %common.att;
            spacing         (normal|compact)        #IMPLIED>

    <!-- Ordered list (typically numbered) -->
    <!ELEMENT ol (li|%lists;)+>
    <!--    spacing attribute:
            Use "normal" to get normal vertical spacing for items;
            use "compact" to get less spacing.  The default is dependent
            on the stylesheet. -->
    <!ATTLIST ol
            %common.att;
            spacing         (normal|compact)        #IMPLIED>

    <!-- Definition list (typically two-column) -->
    <!ELEMENT dl (dt,dd)+>
    <!ATTLIST dl %common.att;>

        <!-- Definition term -->
        <!ELEMENT dt (%content.mix;)*>
        <!ATTLIST dt %common.att;>

        <!-- Definition description -->
        <!ELEMENT dd (%content.mix;)*>
        <!ATTLIST dd %common.att;>

    <!-- ==================================================== -->
    <!-- Special Blocks -->
    <!-- ==================================================== -->

    <!-- Image Block (typically a separated and centered image) -->
    <!ELEMENT figure EMPTY>
    <!ATTLIST figure src    CDATA  #REQUIRED
                     alt    CDATA  #REQUIRED
                     height CDATA  #IMPLIED
                     width  CDATA  #IMPLIED
                     usemap CDATA  #IMPLIED
                     ismap  (ismap) #IMPLIED
                     %common.att;>

    <!-- anchor point (equivalent of <a name="...">, typically not rendered) -->
    <!ELEMENT anchor EMPTY>
    <!ATTLIST anchor %common-idreq.att;>


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

<!ELEMENT document (header?, body, footer?)>
<!ATTLIST document %common.att;>

    <!-- ==================================================== -->
    <!-- Header -->
    <!-- ==================================================== -->

    <!ENTITY % local.headers "">

    <!ELEMENT header (title, subtitle?, version?, type?, authors,
                      notice*, abstract? %local.headers;)>
    <!ATTLIST header %common.att;>

    <!ELEMENT title (%text;)>
    <!ATTLIST title %common.att;>

    <!ELEMENT subtitle (%text;)>
    <!ATTLIST subtitle %common.att;>

    <!ELEMENT version (%text;)>
    <!ATTLIST version %common.att;>

    <!ELEMENT type (%text;)>
    <!ATTLIST type %common.att;>

    <!ELEMENT authors (person+)>
    <!ATTLIST authors %common.att;>

    <!ELEMENT notice (%content.mix;)*>
    <!ATTLIST notice %common.att;>

    <!ELEMENT abstract (%content.mix;)*>
    <!ATTLIST abstract %common.att;>

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

    <!ENTITY % local.sections "">

    <!ENTITY % sections "section %local.sections;">

    <!ELEMENT body (%sections;|%blocks;)+>
    <!ATTLIST body %common.att;>

    <!ELEMENT section (%sections;|%blocks;)*>
    <!ATTLIST section %title.att; %common.att;>

    <!-- ==================================================== -->
    <!-- Footer -->
    <!-- ==================================================== -->

    <!ENTITY % local.footers "">

    <!ELEMENT footer (legal %local.footers;)>

        <!ELEMENT legal (%content.mix;)*>
        <!ATTLIST legal %common.att;>

<!-- =============================================================== -->
<!-- End of DTD -->
<!-- =============================================================== -->
