<!--
 DOCTYPE HTMLPLUS
DTD for HTML+ 

Markup minimisation should be avoided, otherwise the default <!SGML> declaration is fine. Browsers should be forgiving of markup errors.

Common Attributes:

id      the id attribute allows authors to name elements such as headers 
        and paragraphs as potential destinations for links. Note that 
        links don't specify points, but rather extended objects.
index   allows authors to specify how given headers etc should be 
        indexed as primary or secondary keys, where "/" separates primary 
        from secondary keys, ";" separates multiple entries

 <!ENTITY % foo "X | Y | Z"> is a macro definition for parameters and in 
 subsequent statements, the string "%foo;" is expanded to "X | Y | Z"

 Various classes of SGML text types:

  #CDATA  text which doesn't include markup or entity references
  #RCDATA text with entity references but no markup
  #PCDATA text occurring in a context in which markup and entity references 
     may occur.

  <!ELEMENT tagname - - CONTENT> elements needing end tags
  <!ELEMENT tagname - o CONTENT> elements with optional end tags
  <!ELEMENT tagname - o EMPTY> elements without content or end tags

The content definition is:
       -  an entity definition as defined above
       -  a tagname
       -  (brackets enclosing the above)
These may be combined with the operators:
  A*      A occurs zero or more times
  A+      A occurs one or more times
  A|B     implies either A or B
  A?      A occurs zero or one times
  A,B     implies first A then B
  A&B     either or both A and B (in either order)
-->

<!ENTITY % URL "CDATA" -- a URL or URN designating a hypertext node -->
<!ENTITY % emph1 "I|B|U|S|SUP|SUB|TT">
<!ENTITY % emph2 "CITE|PERSON|ACRONYM|ABBREV|EM|STRONG">
<!ENTITY % emph3 "CMD|ARG|KBD|VAR|DFN|CODE|SAMP|REMOVED|ADDED">
<!ENTITY % emph4 "FOOTNOTE|MARGIN">
<!ENTITY % emphnoq "%emph1|%emph2|%emph3|%emph4">
<!ENTITY % emph "%emphnoq|Q">
<!ENTITY % misc "RENDER|INPUT|TEXTAREA|SELECT">
<!ENTITY % text "#PCDATA|A|IMAGE|%emph|%misc|BR|CHANGED">
<!ENTITY % list "UL|OL|DL|MENU|DIR">
<!ENTITY % blocks "TABLE|FORM|MATH|NOTE|QUOTE|ABSTRACT|BYLINE|ADDRESS|HR">
<!ENTITY % paras "FIG|PRE|LIT|%list|%blocks">
<!ENTITY % heading "H1|H2|H3|H4|H5|H6"> 
<!ENTITY % setup "TITLE? & ISINDEX? & NEXTID? & LINK* & BASE? & RENDER*">
<!ENTITY % math "BOX|%text;">
<!ENTITY % inputs "INPUT|TEXTAREA|SELECT|OPTION">

<!-- the id attribute should be of type ID, but then they will be -->
<!-- converted to uppercase, after which LaTeX doesn't recognize them -->
<!-- anymore... -->
<!ENTITY % common.attr 
        "id      CDATA   #IMPLIED -- link destination --
	 lang    CDATA   #IMPLIED -- ISO language abbreviation --
	 index   CDATA   #IMPLIED -- entries for index compilation --">

<!ENTITY null "" -- expands to nothing at all -->
<!ENTITY ptag "<P>" -- start paragraph -->
<!ENTITY pendtag "</P>" -- end paragraph -->
<!ENTITY psplit "</P><P>" -- between paragraphs -->
<!ENTITY qtag "<Q>" -- start quote -->
<!ENTITY qendtag "</Q>" -- end quote -->

<!SHORTREF global -- gobbles up blank space --
	"&#RS;B"	null	-- ignore start of line plus blanks --
--	"&#RS;"		null	- - ignore start of line itself --
--	"B&#RE;"	null	- - ignore blanks plus end of line --
--	"&#RE;"		null	- - ignore end of line itself --
>
<!SHORTREF textmap -- used in elements that may contain {P|R}CDATA --
	'"'		qtag
	'%'		percnt
	'#'		num
	'--'		ndash
	'~'		nbsp
	'{'		lcub
	'}'		rcub
	'|'		verbar
	'_'		lowbar
	"&#RS;&#RE;"	null	-- ignore empty lines --
	"&#RS;B&#RE;"	null	-- ignore empty lines --
	"&#RS;B"	null	-- ignore start of line plus blanks --
	"&#RS;"		null	-- ignore start of line --
>
<!SHORTREF pmap -- used in paragraphs --
	'"'		qtag
	'%'		percnt
	'#'		num
	'--'		ndash
	'~'		nbsp
	'{'		lcub
	'}'		rcub
	'|'		verbar
	'_'		lowbar
--	"&#RS;&#RE;"	ptag  --
--	"&#RS;B&#RE;"	ptag  --
>
<!SHORTREF qmap -- used in quotes --
	'"'		qendtag
	'%'		percnt
	'#'		num
	'--'		ndash
	'~'		nbsp
	'{'		lcub
	'}'		rcub
	'|'		verbar
	'_'		lowbar
	"&#RS;&#RE;"	null	-- ignore empty lines --
	"&#RS;B&#RE;"	null	-- ignore empty lines --
>
<!SHORTREF nomap -- used in elements that may contain {P|R}CDATA --
	'"'		qtag
	'%'		percnt
	'#'		num
	'--'		ndash
	'~'		nbsp
	'{'		lcub
	'}'		rcub
	'|'		verbar
	'_'		lowbar
>
<!SHORTREF literalmap -- used in PRE elements --
	'"'		qtag
	'%'		percnt
	'#'		num
	'--'		ndash
	'~'		nbsp
	'{'		lcub
	'}'		rcub
	'|'		verbar
	'_'		lowbar
>


<!ELEMENT HTMLPLUS o o (HEAD, BODY)>
<!ATTLIST HTMLPLUS
        version CDATA #IMPLIED -- the HTML+ version number --
        forms   (on|off) on    -- used to disable form filling -->
<!-- <!USEMAP global HTMLPLUS> -->


<!ELEMENT HEAD o o (%setup;) -- delimits document wide properties -->
<!ELEMENT BODY o o (P|%paras|%heading)* -- delimits document's body -->
<!USEMAP pmap BODY>


		       <!-- Document title -->


<!ELEMENT TITLE - - (#PCDATA | %emph;)+>
<!ATTLIST TITLE %common.attr>
<!USEMAP textmap TITLE>



		      <!-- Document headers -->


<!ELEMENT (%heading;) - - (#PCDATA | %emph;)+>
<!ATTLIST (%heading;) %common.attr>
<!USEMAP textmap (%heading;)>



		     <!-- character emphasis -->


<!ELEMENT (%emphnoq;) - - (%text;)*>
<!ATTLIST (%emphnoq;) %common.attr>

<!ELEMENT Q - - (%text;)*>
<!ATTLIST Q %common.attr>
<!USEMAP qmap Q>

<!ELEMENT RENDER - o EMPTY -- how to render unknown elements -->
<!ATTLIST RENDER
        tag     CDATA   #IMPLIED -- tag name --
        style   CDATA   #IMPLIED -- comma separated list of styles -->



			 <!-- Paragraphs -->


<!ELEMENT P o o (%text|%paras|L)+>
<!ATTLIST P
	%common.attr
        align   (left|indent|center|right|justify) justify -- was: left -->
<!USEMAP pmap P>

<!ELEMENT L - o (%text;)+ -(L)>
<!ATTLIST L
	%common.attr
        align   (left|indent|center|right|justify) left>

<!ELEMENT HR - o EMPTY -- Horizontal Rule -->
<!ELEMENT BR - o EMPTY -- line break in normal text-->

<!ELEMENT LIT - - (TAB|%text)+ -- preformatted text -->
<!ATTLIST LIT %common.attr>
<!USEMAP nomap LIT>

<!ELEMENT PRE - - CDATA -- preformatted, typewriter style text -->
<!ATTLIST PRE %common.attr>
<!USEMAP literalmap PRE>

<!ELEMENT TAB - o EMPTY -- tabs for imported text -->
<!ATTLIST TAB
        at      NUMBER  #IMPLIED -- measured in widths of a capital M --
        align   (left|center|right|decimal) left -- tab alignment -->

<!ELEMENT QUOTE - - (P)+ -- block quote -->
<!ATTLIST QUOTE %common.attr>

<!ELEMENT ABSTRACT - - (P)+ -- document summary -->
<!ATTLIST ABSTRACT %common.attr>

<!ELEMENT BYLINE o o (P)+ -- info on author -->
<!ATTLIST BYLINE %common.attr>

<!ELEMENT ADDRESS - - (BYLINE) -- compatibility with HTML -->

<!ELEMENT NOTE - - (P)+ -- admonishment -->
<!ATTLIST NOTE
	%common.attr
        role    CDATA   #IMPLIED -- e.g. Tip, Note, Warning, or Error -->

		  <!-- Lists which can be nested -->

<!ELEMENT OL - - (LI+) -- ordered list -->
<!ATTLIST OL
	%common.attr
        compact (compact)       #IMPLIED>
<!USEMAP global OL -- gobble up all blank space -->

<!ELEMENT UL - - (LI+) -- unordered list -->
<!ATTLIST UL
	%common.attr
        compact (compact) #IMPLIED  -- reduced interitem spacing --
        plain   (plain) #IMPLIED -- suppress bullets --
        wrap    (vert|horiz) vert -- multicolumn list wrap style -->
<!USEMAP global UL -- gobble up all blank space -->

<!ELEMENT MENU - - (LI+) -- plain single column list -->
<!ATTLIST MENU %common.attr>
<!USEMAP global MENU -- gobble up all blank space -->

<!ELEMENT DIR - - (LI+) -- plain multi column list -->
<!ATTLIST DIR %common.attr>
<!USEMAP global DIR -- gobble up all blank space -->



	       <!-- List items for UL and OL lists -->


<!ELEMENT LI - o ((%text|%paras|P)*)>
<!ATTLIST LI
	%common.attr
        src     %URL;   #IMPLIED -- icon for use in place of bullet -->



	   <!-- Definition Lists (terms + definitions) -->


<!ELEMENT DL - - (DT+, DD)+>
<!ATTLIST DL
	%common.attr
        compact (compact)       #IMPLIED>
<!USEMAP global DL -- gobble up all blank space -->

<!ELEMENT DT - o (%text)+ -- term text -->
<!ATTLIST DT %common.attr>
<!USEMAP textmap DT>

<!ELEMENT DD - o ((%text|%paras|P)*) -- definition text -- >
<!ATTLIST DD %common.attr>



		 <!-- captions for tables/figures -->


<!ELEMENT CAPTION - - (%text)+ -- table or figure caption -->
<!ATTLIST CAPTION %common.attr>
<!USEMAP textmap CAPTION>



			   <!-- tables -->


<!ELEMENT TABLE - - (CAPTION?, (TB|TH|TD|TR)*) -- mixed headers and data -->
<!ATTLIST TABLE
	%common.attr
        border (border) #IMPLIED -- draw borders -->
<!USEMAP global TABLE>

<!ELEMENT (TH|TD) - o (%text)* -- a header cell or data cell -->
<!ATTLIST (TH|TD)
        colspan NUMBER    1     -- columns spanned --
        rowspan NUMBER    1     -- rows spanned --
        align   (left|center|right) center -- alignment in cell --
        lang    CDATA   #IMPLIED -- ISO language abbreviation -->

<!ELEMENT TR - o EMPTY -- row separator -->
<!ATTLIST TR id ID #IMPLIED>

<!ELEMENT TB - o EMPTY -- extra row separator -->



		      <!-- interactive forms -->


<!ELEMENT FORM - - (MH?, (P|%paras|%heading)*) -(FORM) +(%inputs)
					-- forms can't nest -->
<!ATTLIST FORM
	%common.attr
        action  %URL;   #IMPLIED -- defaults for URL for current doc --
        method  CDATA   #IMPLIED -- PUT, POST, DELETE etc. -->
<!USEMAP global FORM>

<!ELEMENT MH - - CDATA -- one or more RFC 822 header fields -->
<!ATTLIST MH hidden (hidden) #IMPLIED -- hide the mail headers from view -->

<!ELEMENT INPUT - o EMPTY>
<!ATTLIST INPUT
        name    CDATA   #IMPLIED -- attribute name (may not be unique) --
        type    CDATA   #IMPLIED -- a wide variety of field types --
        size    CDATA   #IMPLIED -- visible size of text fields --
        min     NUMBER  #IMPLIED -- for range controls --
        max     NUMBER  #IMPLIED -- for range controls or text fields --
        value   CDATA   #IMPLIED -- attribute value (altered by user) --
        checked (checked) #IMPLIED -- for check boxes and radio buttons --
        disabled (disabled) #IMPLIED -- if grayed out --
        error   (error) #IMPLIED -- if in error --
        src      %URL;  #IMPLIED -- for certain fields e.g. IMAGEs --
        align (top|middle|bottom) top -- for IMAGE fields only --
        lang    CDATA   #IMPLIED -- ISO language abbreviation -->

<!ELEMENT TEXTAREA - - CDATA -- multi-line text fields -->
<!ATTLIST TEXTAREA
        name    CDATA   #IMPLIED -- attribute name (may not be unique) --
        cols    NUMBER  #IMPLIED -- visible width in characters --
        rows    NUMBER  #IMPLIED -- visible height in characters --
        disabled (disabled) #IMPLIED -- if grayed out --
        error   (error) #IMPLIED -- if in error --
        lang    CDATA   #IMPLIED -- ISO language abbreviation -->

<!ELEMENT SELECT - - (OPTION+) -- combo style selection lists -->
<!ATTLIST SELECT
        name    CDATA   #IMPLIED -- attribute name (may not be unique) --
        several (several) #IMPLIED -- permits multiple selections --
        error   (error) #IMPLIED -- if in error --
        lang    CDATA   #IMPLIED -- ISO language abbreviation -->

<!ELEMENT OPTION - - CDATA>
<!ATTLIST OPTION
        selected (selected) #IMPLIED -- if initially selected --
        disabled (disabled) #IMPLIED -- if grayed out --
        lang    CDATA   #IMPLIED -- ISO language abbreviation -->



		 <!-- Images, floating or inline -->


<!ELEMENT FIG - - (CAPTION?, P*)>
<!ATTLIST FIG
	%common.attr
        align   (left|center|right|float) float -- position --
        ismap   (ismap) #IMPLIED -- server can handle mouse clicks/drags --
        src     %URL;   #IMPLIED -- link to image data --
	width	CDATA	#IMPLIED -- extra -->
<!USEMAP global FIG>

<!ELEMENT IMG - o EMPTY>
<!ATTLIST IMG
        src     %URL;   #REQUIRED -- where to get image data --
        align   (top|middle|bottom) top  -- top, middle or bottom --
        seethru CDATA   #IMPLIED  -- for transparency --
        ismap   (ismap) #IMPLIED  -- send mouse clicks/drags to server --
        lang    CDATA   #IMPLIED -- ISO language abbreviation -->

<!ELEMENT IMAGE - - (#PCDATA)>
<!ATTLIST IMAGE
        src     %URL;   #REQUIRED -- where to get image data --
        align   (top|middle|bottom) top  -- top, middle or bottom --
        seethru CDATA   #IMPLIED  -- for transparency --
        ismap   (ismap) #IMPLIED  -- send mouse clicks/drags to server --
        lang    CDATA   #IMPLIED -- ISO language abbreviation -->
<!USEMAP textmap IMAGE>
<!USEMAP global FIG>



	     <!-- proposal for representing formulae -->


<!ELEMENT MATH - - (%math;)*>
<!ATTLIST MATH id ID #IMPLIED>
<!ELEMENT BOX - - ((%math;)*, (OVER, (%math;)*)?)>
<!ELEMENT OVER - o EMPTY>



			 <!-- change bars -->


<!ELEMENT CHANGED - o EMPTY -- for change bars -->
<!ATTLIST CHANGED -- one of id and idref is always required --
        id      ID      #IMPLIED -- signals start of changes --
        idref   IDREF   #IMPLIED -- signals end of changes -->



      <!-- Hypertext Links from points within document nodes -->


<!ELEMENT A - - (#PCDATA|IMAGE|%emph|BR)*>
<!ATTLIST A
	%common.attr
        name    CDATA   #IMPLIED -- for backwards compatibility with HTML--
        shape   CDATA   #IMPLIED -- list of points for shaped buttons --
        href    %URL;   #IMPLIED -- destination node --
        rel     CDATA   #IMPLIED -- forward relationship type --
        rev     CDATA   #IMPLIED -- reverse relationship type --
        methods CDATA   #IMPLIED -- supported public methods --
        effect  CDATA   #IMPLIED -- replace/new/overlay/embed --
        print   CDATA   #IMPLIED -- reference/footnote/section --
        title   CDATA   #IMPLIED -- when otherwise unavailable --
        type    CDATA   #IMPLIED -- for presentation cues --
        size    NAMES   #IMPLIED -- for progress cues -->



       <!-- Other kinds of relationships between documents -->


<!ELEMENT LINK - o EMPTY>
<!ATTLIST LINK
        idref  IDREF    #IMPLIED -- starting point --
        href    %URL;   #IMPLIED -- destination node --
        rel    CDATA    #IMPLIED -- forward relationship type --
        rev    CDATA    #IMPLIED -- reverse relationship type --
        methods CDATA   #IMPLIED -- supported public methods -->



     <!-- Original document URL for resolving relative URLs  -->


<!ELEMENT BASE - o EMPTY>
<!ATTLIST BASE HREF %URL; #IMPLIED>



	<!-- Signifies the document's URL accepts queries -->


<!ELEMENT ISINDEX - o EMPTY>
<!ATTLIST ISINDEX href %URL; #IMPLIED -- defaults to document's URL -->



<!-- For use with autonumbering editors - don't reuse ids, allocate next one
starting from this one -->
<!ELEMENT NEXTID - o EMPTY>
<!ATTLIST NEXTID N NAME #REQUIRED>



<!ENTITY % general SYSTEM>
%general

<!-- The END -->
