document type declaration subset for HyperText Markup Language as defined by the World Wide Web project.

Scripting is disabled and therefore annotations cannot be shown.
<!-- html.dtd - document type declaration subset for
                HyperText Markup Language as defined
		by the World Wide Web project.

 $Id: html.dtd,v 1.1 92/08/19 18:37:58 connolly Exp $

	15 Jul 92 by connolly@convex.com
	 6 Aug 92 revision: match HTML.c better
	18 Aug 92 revision: FrameMaker integration

	See also: http://info.cern.ch/hypertext/WWW/MarkUp/Tags.html
	          http://info.cern.ch/hypertext/WWW/MarkUp/HTML2.html
  -->

<!--      Character entities       -->
<!-- I wonder if we could just use numeric character entities, as
     long as we're just referencing ASCII characters.
     That is, write &#68; in stead of &lt; -->

<!ENTITY lt "<">
<!ENTITY gt ">">
<!ENTITY amp "&">
<!ENTITY bullet "&#183" -- @@@ NeXT only -->

<!-- parameter entities (DTD macros) -->

<!ENTITY % a.a "NAME CDATA #IMPLIED
	 TYPE CDATA #IMPLIED
	 HREF CDATA #IMPLIED">
<!ENTITY % a.list "COMPACT CDATA #IMPLIED">

<!ENTITY % heading "H1|H2|H3|H4|H5|H6" >
<!ENTITY % list "UL|OL|DIR|MENU">
<!ENTITY % pass "P|#PCDATA" -- aka pass_character -->
<!ENTITY % raw "XMP|LISTING">
<!-- PlainText is more than 8 characters, and changing the
     NAMELEN capacity involves using an SGML declaration different
     from the default, which is a hassle.

     Besides: the semantics of PlainText can't
     be captured by real SGML anyway.

     If we were willing to muck with NAMELEN, we could use
     the <PLAINTEXT> tag to mark the _end_ of the SGML document,
     and treat the rest of the data in the stream using normal
     plain text conventions.
 -->

<!--     Document structure       -->

<!ELEMENT HTML	O O  ((TITLE? & NEXTID? & ISINDEX?), DOCUMENT)>

<!ENTITY % body "%heading|%list|DL|%pass|%raw|address">
<!ELEMENT DOCUMENT O O ((%heading), (%body)+) +(A)>
<!-- The DOCUMENT element is necessary to avoid mixed content
     in the HTML element. Mixed content and optional elements
     don't mix very well.

     BUT it introduces minimization into the HTML format. Hmm...
 -->


<!ELEMENT TITLE	- -  (#PCDATA)>

<!ELEMENT ISINDEX - O EMPTY >
<!ELEMENT NEXTID - O EMPTY >
<!ATTLIST NEXTID ID NUMBER #REQUIRED>
<!-- as noted in Tags.html, the conventional <NEXTID 10> is
     illegal. Use <NEXTID ID=10> to comply with this DTD. -->

<!ELEMENT ADDRESS - O (%pass)+>

<!ELEMENT (%heading)	- -  (%pass)+
	--Tags.html says titles should fit on one line, but
	the browser handles paragraph breaks inside headings
	gracefully. -->

<!ELEMENT (%list) - -  ((LI|%pass)+)>
<!ATTLIST (%list) %a.list>

<!ELEMENT DL	- -  (DT|DD|%pass)+>
<!ATTLIST DL %a.list>

<!ELEMENT (LI|DT|DD)	- O  EMPTY>

<!ELEMENT A	- -  (%body)+>
<!ATTLIST A %a.a; >

<!ELEMENT P	- O  EMPTY>

<!ELEMENT (%raw) - -  CDATA>
<!-- BUG:
tags.html says that you can put anything but </XMP> in the
text of an XMP element. SGML says that ETAGO, "</" ends a CDATA
section.
-->