From: "Hiro Yoshioka yoshioka@jrd.dec.com 12-Jan-1994 1446" <yoshioka@jrdv04.enet.dec-j.co.jp>
Real-Date: Wed, 12 Jan 94 14:49:14 +0900
Subject: [infotalk,00683] RE: HTML+ DTD
Message-Id: <9401120549.AA26435@jrdmax.jrd.dec.com>


こんにちは,よしおかです.
本年もよろしくお願いいたしますう.

>こんにちは、高田です。

>HTML+ 用の DTD を書いている Dave_Raggett <dsr@hplb.hpl.hp.com> が、
>ISO-2022-JP を意識した charset の記述やら何やらを入れてくれたようなの
>ですが、私には全くもって何のことやら分かりません。(^_^;

私も何がなんだか判りませんが,社内の人間にきいてみました.

以下参照.

よ

From:	JRDV04::NAGAMATSU    "NAGAMATSU, Masato" 12-JAN-1994 10:03:20.67
To:	JRDV04::YOSHIOKA
CC:	UENO,NAGAMATSU
Subj:	RE: HTML+ DTD

あんまり役にたたないリプライですが.

ちょっと気になったのは
1行目の

<!SGML  "ISO 8879:1986"
                 ^
                ここんとこ

と 33 行目の
CHARSET
        BASESET "ISO 646:1983//CHARSET
                        ^ ここんとこ.

が私の持っている資料では "-"(ハイフン)になってます.
":" コロンでもいいようになったのかな. 

あとご質問の「ISO-2022-JP を意識した charset の記述やら何やらを入れてくれた
のか否か」の件ですが, これは 44 行目の

        BASESET "ISO Registration Number 100//CHARSET
                 ECMA-94 Right Part of Latin Alphabet Nr. 1//ESC 2/13 4/1"

のことだと思います. 私の持っている資料には
"ISO Registration Number 100//CHARSET
ECMA-94 Right Part of Latin Alphabet Nr. 1//ESC 2/13 4/1"
という公開識別子は載っていません. 最近できたんでしょうか.

ついでにちょっと説明しますと
SGML では SGML 宣言によって文字集合を指定することができます.
キーワードは BASESET です. この BASESET の次に公開されているおまじないを
書くことによって, SGML 文書内で使われるコードセットを宣言します.

次の DESCSET の意味は
        DESCSET 128  32  UNUSED  -- 128 番目の文字から 32 文字は使わない
                160  95  32      -- 160 番目の文字から 95 文字は BASESET の
                                     32 番目から 126 番目の文字にマップする.
                255   1  UNUSED  -- 255 番目の文字は使わない.
となっています.
私はコードのことはよくわからないのですが, いわゆる右側を使う状態って
やつですかこれは.

問題は公開識別子 "ISO Registration Number 100//CHARSET
ECMA-94 Right Part of Latin Alphabet Nr. 1//ESC 2/13 4/1"
の実態を知ることだと思います.


From: TAKADA Toshihiro (高田敏弘) <takada@seraph.ntt.jp>
Real-Date: Wed, 12 Jan 1994 04:43:06 +0900
Subject: [infotalk,00682] HTML+ DTD
Message-Id: <9401111943.AA13289@seraph.ntt.jp>


こんにちは、高田です。

HTML+ 用の DTD を書いている Dave_Raggett <dsr@hplb.hpl.hp.com> が、
ISO-2022-JP を意識した charset の記述やら何やらを入れてくれたようなの
ですが、私には全くもって何のことやら分かりません。(^_^;

もし本当に、ちゃんと DTD で文字集合の切り換えとかが定義されるのならば、
こんな嬉しいことはありませんので、どなたか SGML 方面が分かる方、ちょっ
と見てもらえませんか?

著者(?)の Dave_Raggett さんは "... expect to complete this write up by
mid-February." と言ってますので早めにコメントしてあげられれば良いと思い
ます。

折角ですので、ぜひぜひよろしくお願いします。

# そんなら自分がやれって言わないで... (^_^;;;

========================================================================
NTT基礎研究所 情報科学研究部                                 高田敏弘
<http://www.ntt.jp/people/takada/>                  takada@nttlab.ntt.JP
========================================================================

--------------------------- htmlplus.dtd.txt ---------------------------

<!SGML  "ISO 8879:1986"
--
  Document Type Definition for the HyperText Markup Language Plus 
  for use with the World Wide Web application (HTML+ DTD).
  This DTD is designed for use with SGML authoring tools and
  it is expected that most browsers will tolerate omissions,
  in particular, missing DIVn elements and <P> start tags
  following headers.

     The HTML+ DTD which is structured as an HTML core plus a
     number of additional modules which can be included by an
     entity definition in a document's <!DOCTYPE> element.
     You can include specific features in your document
     using the DOCTYPE declaration at the start, e.g.

     <!DOCTYPE htmlplus [
        <!ENTITY % HTML.tables "INCLUDE">
        <!ENTITY % HTML.forms "INCLUDE">
     ]>

     This spec also allows for authors to extend the DTD and
     to define how any new elements are rendered in terms of
     existing ones. This should be used with caution.

     I would like to acknowledge the influence of the TEI DTDs
     which proved very helpful in restructuring the DTD.

     Dave Raggett 11th January 1994

     This version fixes some errors in the earlier version
     to do with start tags and definitions of parameter entities.
--
CHARSET
        BASESET "ISO 646:1983//CHARSET
                 International Reference Version (IRV)//ESC 2/5 4/0"
        DESCSET 0   9   UNUSED
                9   2   9
                11  2   UNUSED
                13  1   13
                14 18   UNUSED
                32 95   32
               127  1   UNUSED
        BASESET "ISO Registration Number 100//CHARSET
                 ECMA-94 Right Part of Latin Alphabet Nr. 1//ESC 2/13 4/1"
        DESCSET 128  32  UNUSED
                160  95  32
                255   1  UNUSED

CAPACITY        SGMLREF
                TOTALCAP        150000
                GRPCAP          150000

SCOPE   DOCUMENT
SYNTAX
        SHUNCHAR CONTROLS  0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
                           19 20 21 22 23 24 25 26 27 28 29 30 31 127 255
        BASESET "ISO 646:1983//CHARSET
                 International Reference Version (IRV)//ESC 2/5 4/0"
        DESCSET 0 128 0
        FUNCTION RE         13
                 RS         10
                 SPACE      32
                 TAB SEPCHAR 9
        NAMING   LCNMSTRT ""
                 UCNMSTRT ""
                 LCNMCHAR ".-"
                 UCNMCHAR ".-"
                 NAMECASE GENERAL YES
                          ENTITY  NO
        DELIM    GENERAL  SGMLREF
                 SHORTREF SGMLREF
        NAMES    SGMLREF
        QUANTITY SGMLREF
                 NAMELEN  32
                 TAGLVL   100
                 LITLEN   1024
                 GRPGTCNT 150
                 GRPCNT   64

FEATURES
  MINIMIZE
    DATATAG  NO
    OMITTAG  YES
    RANK     NO
    SHORTTAG NO
  LINK
    SIMPLE   NO
    IMPLICIT NO
    EXPLICIT NO
  OTHER
    CONCUR  NO
    SUBDOC  NO
    FORMAL  YES
  APPINFO NONE
>

<!DOCTYPE HTMLPLUS [

<!-- DTD for HTML+ 
Markup minimisation should be avoided, otherwise the default <!SGML>
declaration is fine. Browsers should be forgiving of markup errors,
while authoring tools *should* enforce compliance with the DTD.

Common Attributes:

id      This 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.

charset This allows authors to switch to a different char set for
        quotations or list etc. This is particularly useful for oriental
        languages which need two byte character codes, e.g. see RFC 1468
        "Japanese Character Encoding for Internet Messages"
-->
        
<!-- ENTITY DECLARATIONS
 <!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.
-->

<!-- Core HTML+ DTD omits following features -->
<!ENTITY % HTML.math "IGNORE">
<!ENTITY % HTML.tables "IGNORE">
<!ENTITY % HTML.figures "IGNORE">
<!ENTITY % HTML.emph "IGNORE">
<!ENTITY % HTML.forms "IGNORE">
<!ENTITY % HTML.captions "IGNORE">

<!ENTITY % cextra "" -- for character-like elements -->
<!ENTITY % pextra "" -- for paragraph-like elements -->

<!-- %cextra; and %pextra are designed to allow document specific
     extensions to the HTML+ DTD, e.g.

      <!DOCTYPE htmlplus [
        <!ENTITY % cextra "|PROPNAME">
        <!ELEMENT PROPNAME - - CDATA>
      ]>

     Use the RENDER element to specify how the browser should
     display new elements in terms of existing ones, e.g.

      <RENDER tag="PROPNAME" style="I">
-->

<!ENTITY % URL "CDATA" -- a URL or URN designating a hypertext node -->

<!-- Browsers should render the following types of emphasis
     distinctly when the obvious rendering is impractical

     I = italic, B = bold, U = underline, S = strikethru,
     TT = teletype font, SUP = superscript, SUB = subscript
     REV = reverse video for highlighting hit areas in the result of a query
     Q = inline quote (render according to local conventions)
-->

<!ENTITY % emph1 "I|B|U|TT|CITE|EM|STRONG|KBD|VAR|DFN|CODE|SAMP">
<!ENTITY % emph2 "S|Q|PERSON|ACRONYM|ABBREV|CMD|ARG|REMOVED|ADDED|REV">
<!ENTITY % emph3 "SUP|SUB|CHANGED">

<![ %HTML.emph [ <!ENTITY % emph  "%emph1;|%emph2;|%emph3;"> ]]>
<!ENTITY % emph  "%emph1;">

<![ %HTML.emph [ <!ENTITY % misc1 "|RENDER|FOOTNOTE|MARGIN"> ]]>
<!ENTITY % misc1 "">

<![ %HTML.forms [ <!ENTITY % misc2 "|INPUT|TEXTAREA|SELECT"> ]]>
<!ENTITY % misc2 "">

<!ENTITY % misc "BR %misc1 %misc2; %cextra;">

<![ %HTML.figures [ <!ENTITY % text "#PCDATA|A|IMG|FIG|%emph;|%misc;"> ]]>
<!ENTITY % text "#PCDATA|A|IMG|%emph;|%misc;">

<![ %HTML.emph [ <!ENTITY % paras "P|PRE|LIT %pextra;"> ]]>
<!ENTITY % paras "P|PRE %pextra;">

<!ENTITY % lists "UL|OL|DL">

<![ %HTML.emph [ <!ENTITY % block1 "NOTE|QUOTE|ABSTRACT|ADDRESS|HR"> ]]>
<!ENTITY % block1 "ADDRESS|HR">

<![ %HTML.tables [ <!ENTITY % block2 "|TABLE"> ]]>
<!ENTITY % block2 "">

<![ %HTML.forms [ <!ENTITY % block3 "|FORM"> ]]>
<!ENTITY % block3 "">

<![ %HTML.math [ <!ENTITY % block4 "|MATH"> ]]>
<!ENTITY % block4 "">

<!ENTITY % block "%block1; %block2; %block3; %block4;">

<![ %HTML.emph [<!ENTITY % setup1 "& RENDER*"> ]]>
<!ENTITY % setup1 "">

<!ENTITY % setup "(TITLE? & ISINDEX? & BASE? & META* & LINK* %setup1;)">

<!ENTITY % main "%block;|%lists;|%paras;">

<!-- these entities are used to simplify element definitions -->

<!ENTITY % heading "H1|H2|H3|H4|H5|H6"> 
<!ENTITY % table "P|%heading;|%lists;">
<!ENTITY % math "BOX|ARRAY|ROOT|%text;">

<!-- Browsers should as a minimum support the following types
     of INPUT fields, in addition to TEXTAREA and SELECT:

     text, checkbox, radio, submit, and reset

   password, int, float, date, url can be mapped to text fields
   while image, scribble and audio fields can be ignored
-->

<![ %HTML.forms [
 <!ENTITY % fields "text|password|checkbox|radio|submit|reset|int|
                          float|date|url|range|image|scribble|audio">
]]>


<!-- Core DTD includes basic Latin-1 entities -->
<!ENTITY % ISOlat1 PUBLIC "ISO 8879-1986//ENTITIES Added Latin 1//EN">
%ISOlat1;

<!-- additional entities normally found in Latin-1 char sets-->
<!ENTITY % ISOnum PUBLIC "ISO 8879-1986//ENTITIES Numeric and Special Graphic//EN">
%ISOnum;

<!-- diacritical marks normally found in Latin-1 char sets-->
<!ENTITY % ISOdia PUBLIC "ISO 8879-1986//ENTITIES Diacritical Marks//EN">
%ISOdia;

<!-- misc. from ISO Publishing entities -->
<!ENTITY ndash  SDATA "[ndash ]"--=en dash-->
<!ENTITY mdash  SDATA "[ndash ]"--=em dash-->
<!ENTITY ensp   SDATA "[ensp  ]"--=en space (1/2-em)-->
<!ENTITY emsp   SDATA "[emsp  ]"--=em space-->
<!ENTITY hellip SDATA "[hellip]"--=ellipsis (horizontal)-->
<!ENTITY vellip SDATA "[vellip]"--=ellipsis (vertical)-->

<!-- maths symbols when needed -->
<![ %HTML.math [
    <!ENTITY % ISOtech PUBLIC "ISO 8879-1986//ENTITIES General Technical//EN">
    %ISOtech;

    <!ENTITY % ISOgrk3 PUBLIC "ISO 8879-1986//ENTITIES Greek Symbols//EN">
    %ISOgrk3;

    <!ENTITY % ISOamso PUBLIC "ISO 8879-1986//ENTITIES Added Math Symbols: Ordinary//EN">
    %ISOamso;

    <!ENTITY % ISOamsr PUBLIC "ISO 8879-1986//ENTITIES Added Math Symbols: Relations//EN">
    %ISOamsr;

    <!ENTITY % ISOamsc PUBLIC "ISO 8879-1986//ENTITIES Added Math Symbols: Delimiters//EN">
    %ISOamsc;

    <!-- misc. from ISO Binary and Large operators -->

    <!ENTITY thinsp SDATA "[thinsp]"--=thin space (1/6 em)-->
    <!ENTITY coprod SDATA "[coprod]"--/coprod L: coproduct operator-->
    <!ENTITY prod   SDATA "[prod  ]"--/prod L: product operator-->
    <!ENTITY sum    SDATA "[sum   ]"--/sum L: summation operator-->
]]>

<!-- Basic types of elements:
  <!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 A B or B A)
-->

<!ELEMENT HTMLPLUS O O (HEAD, BODY)>
<!ATTLIST HTMLPLUS
        version CDATA #IMPLIED -- the HTML+ version number --
        charset CDATA   #IMPLIED -- eg "ISO-2022-JP" for japanese -->

<!ELEMENT HEAD O O (%setup;) -- delimits document wide properties -->
<!ELEMENT BODY O O ((%main;)*, DIV6*, DIV5*, DIV4*, DIV3*, DIV2*, DIV1*)>

<!--
 The following causes each header to imply a container of everything
 up to (but not including) the next peer or higher level header

 Note that this violates the SGML standard which forbids omission
 of start tags unless the tag is the only thing permitted at this
 point. This restriction was introduced to simplify parser writing :-(
-->

<!ELEMENT DIV1 O O (H1, (%main;)*, DIV6*, DIV5*, DIV4*, DIV3*, DIV2*)>
<!ELEMENT DIV2 O O (H2, (%main;)*, DIV6*, DIV5*, DIV4*, DIV3*)>
<!ELEMENT DIV3 O O (H3, (%main;)*, DIV6*, DIV5*, DIV4*)>
<!ELEMENT DIV4 O O (H4, (%main;)*, DIV6*, DIV5*)>
<!ELEMENT DIV5 O O (H5, (%main;)*, DIV6*)>
<!ELEMENT DIV6 O O (H6, (%main;)*)>

<!ATTLIST (DIV6|DIV5|DIV4|DIV3|DIV2|DIV1)
        id      ID      #IMPLIED -- link destination --
        charset CDATA   #IMPLIED -- eg "ISO-2022-JP" for japanese -->

<!-- Document headers -->
<!ELEMENT (%heading;) - - (#PCDATA | %emph;)+>
<!ATTLIST (%heading;)
        id      ID      #IMPLIED -- defines link destination --
        charset CDATA   #IMPLIED -- eg "ISO-2022-JP" for japanese -->

<!-- character emphasis -->
<!ELEMENT (%emph1;) - - (%text;)*>
<!ATTLIST (%emph1;)
        id      ID      #IMPLIED -- link destination --
        charset CDATA   #IMPLIED -- eg "ISO-2022-JP" for japanese -->

<!-- Paragraphs which act as containers for the following text -->
<!ELEMENT P O O (%text;)+>
<!ATTLIST P
        id      ID      #IMPLIED -- link destination --
        charset CDATA   #IMPLIED -- eg "ISO-2022-JP" for japanese --
        align   (left|indent|center|right|justify) left>

<!ELEMENT HR - O EMPTY -- Horizontal Rule -->
<!ELEMENT BR - O EMPTY -- forced line break -->

<!ELEMENT PRE - - (%text;)+ -- preformatted fixed pitch text -->
<!ATTLIST PRE
        id      ID      #IMPLIED -- link destination --
        charset CDATA   #IMPLIED -- eg "ISO-2022-JP" for japanese -->

<!ELEMENT ADDRESS - - (P)+ -- info on author -->
<!ATTLIST ADDRESS
        id      ID      #IMPLIED -- link destination --
        charset CDATA   #IMPLIED -- eg "ISO-2022-JP" for japanese -->

<!-- Lists which can be nested -->
<!ELEMENT OL - - (LI)+ -- ordered list -->
<!ATTLIST OL
        id      ID      #IMPLIED
        charset CDATA   #IMPLIED    -- eg "ISO-2022-JP" for japanese --
        compact (compact) #IMPLIED  -- reduced interitem spacing -->

<!ELEMENT UL - - (LI)+ -- unordered list -->
<!ATTLIST UL
        id      ID      #IMPLIED    -- link destination --
        charset CDATA   #IMPLIED    -- eg "ISO-2022-JP" for japanese --
        compact (compact) #IMPLIED  -- reduced interitem spacing --
        plain   (plain) #IMPLIED    -- suppress bullets --
        wrap (vert|horiz|none) none -- multicolumn list wrap style -->

<!-- List items for UL and OL lists
 The icon or label overides the default rendering -->
<!ELEMENT LI - O (DL|UL|OL|P|HR)+>
<!ATTLIST LI
        id      ID      #IMPLIED
        charset CDATA   #IMPLIED -- eg "ISO-2022-JP" for japanese --
        icon    %URL;   #IMPLIED -- icon for use in place of bullet --
        label   CDATA   #IMPLIED -- when you can't show the icon -->

<!-- Definition Lists (terms + definitions) -->
<!ELEMENT DL - - (DT*,DD)+>
<!ATTLIST DL
        id      ID      #IMPLIED
        charset CDATA   #IMPLIED    -- eg "ISO-2022-JP" for japanese --
        compact (compact) #IMPLIED  -- reduced interitem spacing -->

<!ELEMENT DT - O (%text;)+          -- term text -- >
<!ELEMENT DD - O (P|UL|OL|DL|HR)+   -- definition text -- >
<!ATTLIST (DT|DD)
        id      ID      #IMPLIED
        charset CDATA   #IMPLIED -- eg "ISO-2022-JP" for japanese -->

<!-- Hypertext Links from points within document nodes

 The HREF attribute specifies the link destination as a URL or URN.
 In figures, the SHAPE attribute defines the extent of the link as
 a polygonal region. The PLAY attribute specifies an accompanyment,
 e.g. a talking head or just a simple sound sequence that is to be
 played upon following the link.

 The PRINT attribute determines how the browser should deal with
 links when printing the document out. This makes it possible for
 users to print out a document and related subdocuments with a
 single menu action.

 The TITLE attribute may be used for links in which the destination
 node doesn't define a title itself, e.g. non-html documents.
-->

<!ELEMENT A - - (#PCDATA | IMG | %emph;)*>
<!ATTLIST A
        id      ID      #IMPLIED -- as target of link --
        charset CDATA   #IMPLIED -- eg "ISO-2022-JP" for japanese --
        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 --
        print   CDATA   #IMPLIED -- reference/footnote/section --
        title   CDATA   #IMPLIED -- when otherwise unavailable -->

<!-- Other kinds of relationships between documents

 There are a set of standard RELationship types which alter the
 browser's navigation menu, e.g. Next, Previous, UseIndex, ...

 The AFTER attribute specifies a delay after which if the user
 has done nothing, the browser should follow the link. This makes
 it possible to run storyboards

 The IDREF attribute makes it possible to specify annotation links
 separately from the document text flow. With HTTP, servers can
 use the WWW-Link: header to "insert" such annotations into a
 document.
-->

<!ELEMENT LINK - O EMPTY>
<!ATTLIST LINK
        id      ID      #IMPLIED -- to allow meta info on links --
        charset CDATA   #IMPLIED -- eg "ISO-2022-JP" for japanese --
        from    IDREF   #IMPLIED -- starting point --
        href    %URL;   #IMPLIED -- destination node --
        rel     CDATA   #IMPLIED -- forward relationship type --
        rev     CDATA   #IMPLIED -- reverse relationship type --
        print   CDATA   #IMPLIED -- reference/footnote/section --
        title   CDATA   #IMPLIED -- when otherwise unavailable -->

<!-- Document title -->
<!ELEMENT TITLE - - (#PCDATA | %emph;)+>
<!ATTLIST TITLE
        id      ID      #IMPLIED -- link destination --
        charset CDATA   #IMPLIED -- eg "ISO-2022-JP" for japanese -->

<!-- Original document URL for resolving relative URLs  -->
<!ELEMENT BASE - O EMPTY>
<!ATTLIST BASE HREF %URL; #IMPLIED>

<!-- Signifies the document's URL accepts queries,
     and may be implied by HTTP header info -->
<!ELEMENT ISINDEX - O EMPTY>
<!ATTLIST ISINDEX href %URL; #IMPLIED -- defaults to document's URL -->

<!--
 Servers should read the document head to generate HTTP headers
 corresponding to META elements, e.g. if the document contains:

        <meta name="Expires" value="Tue, 04 Dec 1993 21:29:02 GMT">

 The server should include the HTTP date format header field:

        Expires: Tue, 04 Dec 1993 21:29:02 GMT

 Other likely names are "Created", "Owner" (a name) and
 "Reply-To" (an email address)
-->

<!ELEMENT META - O EMPTY>
<!ATTLIST META
        id      ID      #IMPLIED -- to allow meta info  --
        name    CDATA   #IMPLIED -- HTTP header e.g. "Expires" --
        value   CDATA   #IMPLIED -- associated value -->

<![ %HTML.emph [

<!-- additional character emphasis -->
<!ELEMENT (%emph2;) - - (%text;)*>
<!ATTLIST (%emph2;)
        id      ID      #IMPLIED -- link destination --
        charset CDATA   #IMPLIED -- eg "ISO-2022-JP" for japanese -->

<!ELEMENT (SUP|SUB) - - (%text;)* -- superscripts and subscripts -->
<!ATTLIST (SUP|SUB)
        id      ID      #IMPLIED -- link destination --
        charset CDATA   #IMPLIED -- eg "ISO-2022-JP" for japanese --
        pre     (pre)   #IMPLIED -- for use as prefixes for math -->

<!ELEMENT (FOOTNOTE|MARGIN) - - (%text;)* -(FOOTNOTE|MARGIN)>
<!ATTLIST (FOOTNOTE|MARGIN)
        id      ID      #IMPLIED -- link destination --
        charset CDATA   #IMPLIED -- eg "ISO-2022-JP" for japanese -->

<!-- RENDER only appears in the document head -->
<!ELEMENT RENDER -O EMPTY -- how to render unknown elements -->
<!ATTLIST RENDER
        id      ID      #IMPLIED -- to allow meta info  --
        tag     CDATA   #IMPLIED -- tag name --
        equiv   CDATA   #IMPLIED -- HTML+ equivalent tag name --
        style   NAMES   #IMPLIED -- space separated list of styles -->

<!ELEMENT LIT - - (TAB|%text;)+ -- literal variable pitch text -->
<!ATTLIST LIT
        id      ID      #IMPLIED -- link destination --
        charset CDATA   #IMPLIED -- eg "ISO-2022-JP" for japanese -->

<!ELEMENT TAB - O EMPTY -- tabs for imported text -->
<!ATTLIST TAB
        id      ID      #IMPLIED -- to allow meta info  --
        at      NUMBER  #IMPLIED -- in em units or width of an "m" --
        align   (left|center|right|decimal) left -- tab alignment -->

<!ELEMENT QUOTE - - (P*) -- block quote -->
<!ATTLIST QUOTE
        id      ID      #IMPLIED -- link destination --
        charset CDATA   #IMPLIED -- eg "ISO-2022-JP" for japanese -->

<!ELEMENT ABSTRACT - - (P*) -- document summary -->
<!ATTLIST ABSTRACT
        id      ID      #IMPLIED -- link destination --
        charset CDATA   #IMPLIED -- eg "ISO-2022-JP" for japanese -->

<!-- often rendered with an icon in left margin,
     the role is shown before the first paragraph -->
<!ELEMENT NOTE - - (P*) -- admonishment -->
<!ATTLIST NOTE
        id      ID      #IMPLIED -- link destination --
        charset CDATA   #IMPLIED -- eg "ISO-2022-JP" for japanese --
        role (Simple|Tip|Note|Warning|Error) Simple >

<!-- change bars can bridge markup boundaries -->
<!ELEMENT CHANGED - O EMPTY>
<!ATTLIST CHANGED -- one of id or idref is always required --
        id      ID      #IMPLIED -- signals start of changes --
        idref   IDREF   #IMPLIED -- signals end of changes -->
]]>


<![ %HTML.caption [

<!ELEMENT CAPTION - - (%text;)+ -- table or figure caption -->
<!ATTLIST CAPTION
        id      ID      #IMPLIED
        charset CDATA   #IMPLIED -- eg "ISO-2022-JP" for japanese -->
]]>

<![ %HTML.tables [

<!ENTITY % HTML.captions "INCLUDE">

<!-- a pre-pass is needed to count columns and determine
     min/max widths before sizing to match window size -->

<!ELEMENT TABLE - - (CAPTION?, (TR)*) -- mixed headers and data -->
<!ATTLIST TABLE
        id      ID      #IMPLIED
        border (border) #IMPLIED -- draw borders --
        charset CDATA   #IMPLIED -- eg "ISO-2022-JP" for japanese -->

<!ELEMENT TR O O (TH|TD)* -- acts like row separator -->
<!ATTLIST TR id ID #IMPLIED>

<!ELEMENT TH - O (%table;)* -- a header cell -->
<!ATTLIST TH
        id      ID      #IMPLIED
        colspan NUMBER    1      -- columns spanned --
        rowspan NUMBER    1      -- rows spanned --
        align (left|center|right|numeric) center
        charset CDATA   #IMPLIED -- eg "ISO-2022-JP" for japanese -->

<!ELEMENT TD - O (%table;)* -- a data cell -->
<!ATTLIST TD
        id      ID      #IMPLIED
        colspan NUMBER    1      -- columns spanned --
        rowspan NUMBER    1      -- rows spanned --
        align (left|center|right|numeric) center
        charset CDATA   #IMPLIED -- eg "ISO-2022-JP" for japanese -->
]]>

<![ %HTML.forms [

<!--
 The form contents are sent to the server upon pressing a submit
 button or a field with the update attribute. The HTTP reply status
 code signifies whether the data is a new document or whether it just
 specifies updates to field values. For the latter the ID values
 are used to specify which field is involved.

 Fields can be disabled (greyed out) or marked as being in error.
 The MESSAGE element may be used by the server to set error messages.
 Servers can store state information in forms with the STATE element.
-->

<!ELEMENT FORM - - (STATE?, (%main;)*, MESSAGE?) -(FORM) -- forms can't be nested -->
<!ATTLIST FORM
        id      ID      #IMPLIED
        action  %URL;   #IMPLIED -- defaults for URL for current doc --
        method  CDATA   #IMPLIED -- GET, PUT, POST, DELETE etc. --
        enctype CDATA   #IMPLIED -- encoding type for form transfers --
        charset CDATA   #IMPLIED -- eg "ISO-2022-JP" for japanese -->

<!--
 This element is opaque to the client and *NOT* rendered,
 It is used by servers to store state info so that the
 server itself remains stateless. The state data is sent
 the server along with the form contents. Similarly servers
 can send back state data with form updates.
-->
<!ELEMENT STATE - - (#CDATA)>
<!ATTLIST STATE
        id      ID      #IMPLIED -- to allow meta info  -->

<!-- input fields in forms - I want to throw out maxlength as it is over
     the default NAMELEN limit of 8 chararcters, but leave it in for now -->
<!ELEMENT INPUT - O EMPTY>
<!ATTLIST INPUT
        id      ID      #IMPLIED -- to allow meta info  --
        name    CDATA   #IMPLIED -- attribute name (may not be unique) --
        type    (%fields) text   -- a wide variety of field types --
        charset CDATA   #IMPLIED -- eg "ISO-2022-JP" for japanese --
        size    CDATA   #IMPLIED -- visible size of text fields --
        min     NUMBER  #IMPLIED -- for range controls --
        max     NUMBER  #IMPLIED -- for range controls or text fields --
        maxlength NUMBER #IMPLIED -- max length of text fields (equiv to max)--
        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 IMAGE, SCRIBBLE & AUDIO fields --
        alt     CDATA   #IMPLIED -- alternative text for VT100's etc --
        align (top|middle|bottom) top -- for IMAGE fields only --
        update (update) #IMPLIED -- for dynamic updates by server -->

<!-- multiline text input fields, we probably will want
     to generalise this to accept arbitrary clipboard data
     e.g. hypertext and images, in addition to plain text -->
<!ELEMENT TEXTAREA - - RCDATA -- multi-line text fields -->
<!ATTLIST TEXTAREA
        id      ID      #IMPLIED -- to allow meta info  --
        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 --
        charset CDATA   #IMPLIED -- eg "ISO-2022-JP" for japanese --
        update (update) #IMPLIED -- for dynamic updates by server -->

<!ELEMENT SELECT - - (OPTION+) -- combo style selection lists -->
<!ATTLIST SELECT
        id      ID      #IMPLIED -- to allow meta info  --
        name    CDATA   #IMPLIED -- attribute name (may not be unique) --
        multiple (multiple) #IMPLIED -- permits multiple selections --
        error   (error) #IMPLIED -- if in error --
        charset CDATA   #IMPLIED -- eg "ISO-2022-JP" for japanese --
        update (update) #IMPLIED -- for dynamic updates by server -->

<!ELEMENT OPTION - - RCDATA>
<!ATTLIST OPTION
        id      ID      #IMPLIED -- to allow meta info  --
        selected (selected) #IMPLIED -- if initially selected --
        disabled (disabled) #IMPLIED -- if grayed out --
        charset CDATA   #IMPLIED -- eg "ISO-2022-JP" for japanese -->

<!-- used by server to set warning/error messages -->
<!ELEMENT MESSAGE - - RCDATA -- place for error/warning/info -->
<!ATTLIST MESSAGE
        id      ID      #IMPLIED -- to allow meta info  --
        status  (info|warning|error) info
        charset CDATA   #IMPLIED -- eg "ISO-2022-JP" for japanese -->
]]>

<![ %HTML.figures [

<!ENTITY % HTML.captions "INCLUDE">

<!-- figures which subsume the role of the earlier IMG element.

  Behaves identically to IMG for align = top, middle or bottom.
  Otherwise figure is inserted after next line break (soft or hard).
  For align=left, the image is left aligned and text is flowed
  on the right of the image, and similarly for align=right, with
  no text flow for align=center (the default). The caption is
  placed under the image.

  The <A> element is used for shaped buttons handled by browser,
  while the ISMAP mechanism sends pointer clicks/drags to server.
  The text contained by this element is used for text-only displays
  and authors should remember to provide effective descriptions,
  including label text for shaped buttons.
-->
<!ELEMENT FIG - - (CAPTION?,(%text;)*)>
<!ATTLIST FIG
        id      ID      #IMPLIED
        align   (top|middle|bottom|left|center|right) center -- position --
        ismap   (ismap) #IMPLIED -- server can handle mouse clicks/drags --
        src     %URL;   #IMPLIED -- link to image data --
        charset CDATA   #IMPLIED -- eg "ISO-2022-JP" for japanese -->
]]>

<!-- img is left in for at least the short term -->
<!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 chromakey --
        alt     CDATA   #IMPLIED -- description for text-only displays --
        ismap   (ismap) #IMPLIED  -- send mouse clicks/drags to server -->

<![ %HTML.math [

<!-- Proposal for representing formulae

  Delimiters should stretch to match the size of the delimited
  object. <SUB> and <SUP> are used for subscripts and superscripts

                                     i j
  X<SUP PRE>i</SUP><SUP>j</SUP>  is   X
-->

<!ELEMENT MATH - - (%math;)*>
<!ATTLIST MATH id ID #IMPLIED>

<!-- Invisible brackets which may also be
     used for numerators and denominators:

                                   1 + X
     <BOX>1 + X<OVER>Y</BOX>  is  _______
                                     Y

                                 _____
     <BOX><OVER>X + Y</BOX>  is  X + Y
-->
<!ELEMENT BOX - - ((%math;)*, (OVER, (%math;)*)?)>

<!-- Horizontal line between numerator and denominator
     The symbol attribute allows authors to supply an
     entity name for an arrow symbol etc.
 -->
<!ELEMENT OVER - O EMPTY>
<!ATTLIST OVER symbol ENTITY #IMPLIED>

<!-- Roots - default to square root -->
<!ELEMENT ROOT - - (%math;)*>
<!ATTLIST ROOT root CDATA #IMPLIED>

<!-- LaTeX like arrays. The align attribute specifies
     a single letter for each column, which also determines
     how the column should be aligned, e.g. align=ccc"

        "l"     left
        "c"     center
        "r"     right
-->
<!ELEMENT ARRAY - - (ITEM)+>
<!ATTLIST ARRAY align CDATA #REQUIRED>

<!ELEMENT ITEM - O (%math;)*>

]]>

<!-- The END -->
]>