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

     Apache Changes DTD (Version 1.1)

PURPOSE:
  This DTD was developed to create a simple yet powerful document
  type for software development changes 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 Changes Vx.y//EN"
       "changes-vxy.dtd">

  where

    x := major version
    y := minor version

NOTES:
  It is important, expecially in open developped software projects, to keep
  track of software changes both to give users indications of bugs that might
  have been resolved, as well, and not less important, to provide credits
  for the support given to the project. It is considered vital to provide
  adequate payback using recognition and credits to let users and developers
  feel part of the community, thus increasing development power.

AUTHORS:
  Stefano Mazzocchi <stefano@apache.org>

FIXME:

CHANGE HISTORY:
[Version 1.0]
  19991129 Initial version. (SM)
  20000316 Added bugfixing attribute. (SM)
[Version 1.1]
  20011212 Used public identifiers for external entities (SM)
  
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.

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

<!-- =============================================================== -->
<!-- Include the Documentation DTD -->
<!-- =============================================================== -->

<!ENTITY % document PUBLIC
    "-//APACHE//DTD Documentation V1.1//EN"
    "document-v11.dtd">
%document;

<!-- =============================================================== -->
<!-- Common entities -->
<!-- =============================================================== -->

<!ENTITY % types "add|remove|update|fix">

<!-- =============================================================== -->
<!-- Document Type Definition -->
<!-- =============================================================== -->

<!ELEMENT changes (devs, release*)>
<!ATTLIST changes %common.att;
                  %title.att;>

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

    <!ELEMENT release (action+)>
    <!ATTLIST release %common.att;
                      version  CDATA  #REQUIRED
                      date     CDATA  #REQUIRED>

        <!ELEMENT action (%content.mix;)*>
        <!ATTLIST action %common.att;
                         dev  IDREF  #REQUIRED
                         type (%types;)  #IMPLIED
                         due-to CDATA #IMPLIED
                         due-to-email CDATA #IMPLIED
                         fixes-bug CDATA #IMPLIED>

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