<!-- JAVADOC.DTD DRAFT Version 0.4 by Kenneth Murphy murphyk@umsystem.edu -->

<!-- 
================================ PURPOSE ======================================
This DTD is designed to capture the output of JavaDoc as an XML document
through the use of the JavaDocXML Doclet. The hope is that by having the
JavaDoc documentation in an XML format, it will be easier for application
developers working with XML to treat their java source documentation in the
same way they treat any other XML document within their publication framework.

This DTD should reflect the information contained within the RootDoc object passed
to the JavaDocXML Doclet by JavaDoc. The RootDoc object and the rest of the javaDoc Doclet
API is specified at

http://java.sun.com/products/jdk/1.2/docs/tooldocs/javadoc/doclet/index.html

The only information that appears to be difficult to derive from this DTD that is easy
to obtain from the RootDoc object is the information about serialization. However,
this information should be derivable by manually looking for the correct serialization methods
and other related structures.

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

<!ELEMENT javadoc (package*, 
                   class*, 
                   interface*)>
<!ELEMENT package (doc?,
                   package*, 
                   class*, 
                   interface*)>
<!ATTLIST package
          name CDATA #REQUIRED>
<!ELEMENT class (doc?,
                 extends_class?,
                 implements?,
                 field*, 
                 constructor*, 
                 method*,
                 innerclass*)>
<!ATTLIST class
          name CDATA #REQUIRED
          extensibility (abstract | final | default) #IMPLIED
          access (package | public) "package">
<!ELEMENT innerclass (doc?,
                      extends?,
                      implements?,
                      field*, 
                      constructor*, 
                      method*)>
<!ATTLIST innerclass
          name CDATA #REQUIRED
          abstract (true | false) "false"
          anonymous (true | false) "false"
          final (true | false) "false"
          static (true | false) "false"
          access (private | package | protected | public) "package">
<!ELEMENT interface (doc?,
                     extends_interface?,
                     field*,
                     method*)>
<!ATTLIST interface
          name CDATA #REQUIRED
          access (private | package | protected | public) "package">
<!ELEMENT extends_class (classref+)>
<!ELEMENT extends_interface (interfaceref+)>
<!ELEMENT implements (interfaceref+)>
<!ELEMENT throws (classref)+>
<!ELEMENT classref EMPTY>
<!ATTLIST classref
          name CDATA #REQUIRED>
<!ELEMENT interfaceref EMPTY>
<!ATTLIST interfaceref
          name CDATA #REQUIRED>
<!ELEMENT methodref EMPTY>
<!ATTLIST methodref
          name CDATA #REQUIRED>
<!ELEMENT packageref EMPTY>
<!ATTLIST packageref
          name CDATA #REQUIRED> 
<!ELEMENT primitive EMPTY>
<!ATTLIST primitive
          type (void | boolean | int | long | byte | short | double | float | char) #REQUIRED>
<!ELEMENT field (doc?, (classref | interfaceref | primitive))>
<!ATTLIST field
          name CDATA #REQUIRED
          dimension CDATA #IMPLIED
          synthetic (true | false) "false"
          static (true | false) "false"
          final (true | false) "false"
          transient (true | false) "false"
          volatile (true | false) "false"
          access (private | package | protected | public) "package">
<!ELEMENT constructor (doc?,
                       parameter*,
                       throws*)>
<!ATTLIST constructor
          name CDATA #REQUIRED
          synthetic (true | false) "false"
          access (private | package | protected | public) "package">
<!ELEMENT method (doc?,
                  returns,
                  parameter*,
                  throws*)>
<!ATTLIST method
          name CDATA #REQUIRED
          native (true | false) "false"
          synthetic (true | false) "false"
          static (true | false) "false"
          extensibility (abstract | final | default) #IMPLIED
          synchronized (true | false) "false"
          access (private | package | protected | public) "package">
<!ELEMENT returns (classref | interfaceref | primitive)>
<!ATTLIST returns
          dimension CDATA #IMPLIED>
<!ELEMENT parameter (classref | interfaceref | primitive)>
<!ATTLIST parameter
          name CDATA #REQUIRED
          final (true | false) "false"
          dimension CDATA #IMPLIED>
<!ELEMENT dimension (#PCDATA)>
<!ELEMENT doc (#PCDATA | 
               linktag |
               authortag |
               versiontag |
               paramtag |
               returntag |
               exceptiontag |
               throwstag |
               seetag |
               sincetag |
               deprecatedtag |
               serialtag |
               serialfieldtag |
               serialdatatag)*>
<!ELEMENT linktag (#PCDATA)>
<!ATTLIST linktag
          src CDATA #REQUIRED>
<!ELEMENT authortag (#PCDATA | linktag)*>
<!ELEMENT versiontag (#PCDATA | linktag)*>
<!ELEMENT paramtag (#PCDATA | linktag)*>
<!ATTLIST paramtag
          name CDATA #REQUIRED>
<!ELEMENT returntag (#PCDATA | linktag)*>
<!ELEMENT exceptiontag (#PCDATA | classref | linktag)*>
<!ELEMENT throwstag (#PCDATA | classref | linktag)*>
<!ELEMENT seetag (#PCDATA | linktag)*>
<!ATTLIST seetag
          src CDATA #REQUIRED>
<!ELEMENT sincetag (#PCDATA | linktag)*>
<!ELEMENT deprecatedtag (#PCDATA | linktag)*>
<!ELEMENT serialtag (#PCDATA | linktag)*>
<!ELEMENT serialfieldtag (#PCDATA | linktag)*>
<!ATTLIST serialfieldtag
          fieldname CDATA #REQUIRED
          fieldtype CDATA #REQUIRED>
<!ELEMENT serialdatatag (#PCDATA | linktag)*>
