1<!--
2   Extensible HTML version 1.0 Strict DTD
3
4   This is the same as HTML 4.0 Strict except for
5   changes due to the differences between XML and SGML.
6
7   Namespace = http://www.w3.org/1999/xhtml
8
9   For further information, see: http://www.w3.org/TR/xhtml1
10
11   Copyright (c) 1998-1999 W3C (MIT, INRIA, Keio),
12   All Rights Reserved.
13
14   This DTD module is identified by the PUBLIC and SYSTEM identifiers:
15
16   PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
17   SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
18
19
20-->
21
22<!--================ Character mnemonic entities =========================-->
23
24<!ENTITY % HTMLlat1 PUBLIC
25   "-//W3C//ENTITIES Latin 1 for XHTML//EN"
26   "xhtml-lat1.ent">
27%HTMLlat1;
28
29<!ENTITY % HTMLsymbol PUBLIC
30   "-//W3C//ENTITIES Symbols for XHTML//EN"
31   "xhtml-symbol.ent">
32%HTMLsymbol;
33
34<!ENTITY % HTMLspecial PUBLIC
35   "-//W3C//ENTITIES Special for XHTML//EN"
36   "xhtml-special.ent">
37%HTMLspecial;
38
39<!--================== Imported Names ====================================-->
40
41<!ENTITY % ContentType "CDATA">
42    <!-- media type, as per [RFC2045] -->
43
44<!ENTITY % ContentTypes "CDATA">
45    <!-- comma-separated list of media types, as per [RFC2045] -->
46
47<!ENTITY % Charset "CDATA">
48    <!-- a character encoding, as per [RFC2045] -->
49
50<!ENTITY % Charsets "CDATA">
51    <!-- a space separated list of character encodings, as per [RFC2045] -->
52
53<!ENTITY % LanguageCode "NMTOKEN">
54    <!-- a language code, as per [RFC1766] -->
55
56<!ENTITY % Character "CDATA">
57    <!-- a single character from [ISO10646] -->
58
59<!ENTITY % Number "CDATA">
60    <!-- one or more digits -->
61
62<!ENTITY % LinkTypes "CDATA">
63    <!-- space-separated list of link types -->
64
65<!ENTITY % MediaDesc "CDATA">
66    <!-- single or comma-separated list of media descriptors -->
67
68<!ENTITY % URI "CDATA">
69    <!-- a Uniform Resource Identifier, see [RFC2396] -->
70
71<!ENTITY % UriList "CDATA">
72    <!-- a space separated list of Uniform Resource Identifiers -->
73
74<!ENTITY % Datetime "CDATA">
75    <!-- date and time information. ISO date format -->
76
77<!ENTITY % Script "CDATA">
78    <!-- script expression -->
79
80<!ENTITY % StyleSheet "CDATA">
81    <!-- style sheet data -->
82
83<!ENTITY % Text "CDATA">
84    <!-- used for titles etc. -->
85
86<!ENTITY % FrameTarget "NMTOKEN">
87    <!-- render in this frame -->
88
89<!ENTITY % Length "CDATA">
90    <!-- nn for pixels or nn% for percentage length -->
91
92<!ENTITY % MultiLength "CDATA">
93    <!-- pixel, percentage, or relative -->
94
95<!ENTITY % MultiLengths "CDATA">
96    <!-- comma-separated list of MultiLength -->
97
98<!ENTITY % Pixels "CDATA">
99    <!-- integer representing length in pixels -->
100
101<!-- these are used for image maps -->
102
103<!ENTITY % Shape "(rect|circle|poly|default)">
104
105<!ENTITY % Coords "CDATA">
106    <!-- comma separated list of lengths -->
107
108<!--=================== Generic Attributes ===============================-->
109
110<!-- core attributes common to most elements
111  id       document-wide unique id
112  class    space separated list of classes
113  style    associated style info
114  title    advisory title/amplification
115-->
116<!ENTITY % coreattrs
117 "id          ID             #IMPLIED
118  class       CDATA          #IMPLIED
119  style       %StyleSheet;   #IMPLIED
120  title       %Text;         #IMPLIED"
121  >
122
123<!-- internationalization attributes
124  lang        language code (backwards compatible)
125  xml:lang    language code (as per XML 1.0 spec)
126  dir         direction for weak/neutral text
127-->
128<!ENTITY % i18n
129 "lang        %LanguageCode; #IMPLIED
130  xml:lang    %LanguageCode; #IMPLIED
131  dir         (ltr|rtl)      #IMPLIED"
132  >
133
134<!-- attributes for common UI events
135  onclick     a pointer button was clicked
136  ondblclick  a pointer button was double clicked
137  onmousedown a pointer button was pressed down
138  onmouseup   a pointer button was released
139  onmousemove a pointer was moved onto the element
140  onmouseout  a pointer was moved away from the element
141  onkeypress  a key was pressed and released
142  onkeydown   a key was pressed down
143  onkeyup     a key was released
144-->
145<!ENTITY % events
146 "onclick     %Script;       #IMPLIED
147  ondblclick  %Script;       #IMPLIED
148  onmousedown %Script;       #IMPLIED
149  onmouseup   %Script;       #IMPLIED
150  onmouseover %Script;       #IMPLIED
151  onmousemove %Script;       #IMPLIED
152  onmouseout  %Script;       #IMPLIED
153  onkeypress  %Script;       #IMPLIED
154  onkeydown   %Script;       #IMPLIED
155  onkeyup     %Script;       #IMPLIED"
156  >
157
158<!-- attributes for elements that can get the focus
159  accesskey   accessibility key character
160  tabindex    position in tabbing order
161  onfocus     the element got the focus
162  onblur      the element lost the focus
163-->
164<!ENTITY % focus
165 "accesskey   %Character;    #IMPLIED
166  tabindex    %Number;       #IMPLIED
167  onfocus     %Script;       #IMPLIED
168  onblur      %Script;       #IMPLIED"
169  >
170
171<!ENTITY % attrs "%coreattrs; %i18n; %events;">
172
173<!--=================== Text Elements ====================================-->
174
175<!ENTITY % special
176   "br | span | bdo | object | img | map">
177
178<!ENTITY % fontstyle "tt | i | b | big | small">
179
180<!ENTITY % phrase "em | strong | dfn | code | q | sub | sup |
181                   samp | kbd | var | cite | abbr | acronym">
182
183<!ENTITY % inline.forms "input | select | textarea | label | button">
184
185<!-- these can occur at block or inline level -->
186<!ENTITY % misc "ins | del | script | noscript">
187
188<!ENTITY % inline "a | %special; | %fontstyle; | %phrase; | %inline.forms;">
189
190<!-- %Inline; covers inline or "text-level" elements -->
191<!ENTITY % Inline "(#PCDATA | %inline; | %misc;)*">
192
193<!--================== Block level elements ==============================-->
194
195<!ENTITY % heading "h1|h2|h3|h4|h5|h6">
196<!ENTITY % lists "ul | ol | dl">
197<!ENTITY % blocktext "pre | hr | blockquote | address">
198
199<!ENTITY % block
200     "p | %heading; | div | %lists; | %blocktext; | fieldset | table">
201
202<!ENTITY % Block "(%block; | form | %misc;)*">
203
204<!-- %Flow; mixes Block and Inline and is used for list items etc. -->
205<!ENTITY % Flow "(#PCDATA | %block; | form | %inline; | %misc;)*">
206
207<!--================== Content models for exclusions =====================-->
208
209<!-- a elements use %Inline; excluding a -->
210
211<!ENTITY % a.content
212   "(#PCDATA | %special; | %fontstyle; | %phrase; | %inline.forms; | %misc;)*">
213
214<!-- pre uses %Inline excluding img, object, big, small, sup or sup -->
215
216<!ENTITY % pre.content
217   "(#PCDATA | a | br | span | bdo | map | tt | i | b |
218      %phrase; | %inline.forms;)*">
219
220<!-- form uses %Block; excluding form -->
221
222<!ENTITY % form.content "(%block; | %misc;)*">
223
224<!-- button uses %Flow; but excludes a, form and form controls -->
225
226<!ENTITY % button.content
227   "(#PCDATA | p | %heading; | div | %lists; | %blocktext; |
228    table | %special; | %fontstyle; | %phrase; | %misc;)*">
229
230<!--================ Document Structure ==================================-->
231
232<!-- the namespace URI designates the document profile -->
233
234<!ELEMENT html (head, body)>
235<!ATTLIST html
236  %i18n;
237  xmlns       %URI;          #FIXED 'http://www.w3.org/1999/xhtml'
238  >
239
240<!--================ Document Head =======================================-->
241
242<!ENTITY % head.misc "(script|style|meta|link|object)*">
243
244<!-- content model is %head.misc; combined with a single
245     title and an optional base element in any order -->
246
247<!ELEMENT head (%head.misc;,
248     ((title, %head.misc;, (base, %head.misc;)?) |
249      (base, %head.misc;, (title, %head.misc;))))>
250
251<!ATTLIST head
252  %i18n;
253  profile     %URI;          #IMPLIED
254  >
255
256<!-- The title element is not considered part of the flow of text.
257       It should be displayed, for example as the page header or
258       window title. Exactly one title is required per document.
259    -->
260<!ELEMENT title (#PCDATA)>
261<!ATTLIST title %i18n;>
262
263<!-- document base URI -->
264
265<!ELEMENT base EMPTY>
266<!ATTLIST base
267  href        %URI;          #IMPLIED
268  >
269
270<!-- generic metainformation -->
271<!ELEMENT meta EMPTY>
272<!ATTLIST meta
273  %i18n;
274  http-equiv  CDATA          #IMPLIED
275  name        CDATA          #IMPLIED
276  content     CDATA          #REQUIRED
277  scheme      CDATA          #IMPLIED
278  >
279
280<!--
281  Relationship values can be used in principle:
282
283   a) for document specific toolbars/menus when used
284      with the link element in document head e.g.
285        start, contents, previous, next, index, end, help
286   b) to link to a separate style sheet (rel="stylesheet")
287   c) to make a link to a script (rel="script")
288   d) by stylesheets to control how collections of
289      html nodes are rendered into printed documents
290   e) to make a link to a printable version of this document
291      e.g. a PostScript or PDF version (rel="alternate" media="print")
292-->
293
294<!ELEMENT link EMPTY>
295<!ATTLIST link
296  %attrs;
297  charset     %Charset;      #IMPLIED
298  href        %URI;          #IMPLIED
299  hreflang    %LanguageCode; #IMPLIED
300  type        %ContentType;  #IMPLIED
301  rel         %LinkTypes;    #IMPLIED
302  rev         %LinkTypes;    #IMPLIED
303  media       %MediaDesc;    #IMPLIED
304  >
305
306<!-- style info, which may include CDATA sections -->
307<!ELEMENT style (#PCDATA)>
308<!ATTLIST style
309  %i18n;
310  type        %ContentType;  #REQUIRED
311  media       %MediaDesc;    #IMPLIED
312  title       %Text;         #IMPLIED
313  xml:space   (preserve)     #FIXED 'preserve'
314  >
315
316<!-- script statements, which may include CDATA sections -->
317<!ELEMENT script (#PCDATA)>
318<!ATTLIST script
319  charset     %Charset;      #IMPLIED
320  type        %ContentType;  #REQUIRED
321  src         %URI;          #IMPLIED
322  defer       (defer)        #IMPLIED
323  xml:space   (preserve)     #FIXED 'preserve'
324  >
325
326<!-- alternate content container for non script-based rendering -->
327
328<!ELEMENT noscript %Block;>
329<!ATTLIST noscript
330  %attrs;
331  >
332
333<!--=================== Document Body ====================================-->
334
335<!ELEMENT body %Block;>
336<!ATTLIST body
337  %attrs;
338  onload          %Script;   #IMPLIED
339  onunload        %Script;   #IMPLIED
340  >
341
342<!ELEMENT div %Flow;>  <!-- generic language/style container -->
343<!ATTLIST div
344  %attrs;
345  >
346
347<!--=================== Paragraphs =======================================-->
348
349<!ELEMENT p %Inline;>
350<!ATTLIST p
351  %attrs;
352  >
353
354<!--=================== Headings =========================================-->
355
356<!--
357  There are six levels of headings from h1 (the most important)
358  to h6 (the least important).
359-->
360
361<!ELEMENT h1  %Inline;>
362<!ATTLIST h1
363   %attrs;
364   >
365
366<!ELEMENT h2 %Inline;>
367<!ATTLIST h2
368   %attrs;
369   >
370
371<!ELEMENT h3 %Inline;>
372<!ATTLIST h3
373   %attrs;
374   >
375
376<!ELEMENT h4 %Inline;>
377<!ATTLIST h4
378   %attrs;
379   >
380
381<!ELEMENT h5 %Inline;>
382<!ATTLIST h5
383   %attrs;
384   >
385
386<!ELEMENT h6 %Inline;>
387<!ATTLIST h6
388   %attrs;
389   >
390
391<!--=================== Lists ============================================-->
392
393<!-- Unordered list -->
394
395<!ELEMENT ul (li)+>
396<!ATTLIST ul
397  %attrs;
398  >
399
400<!-- Ordered (numbered) list -->
401
402<!ELEMENT ol (li)+>
403<!ATTLIST ol
404  %attrs;
405  >
406
407<!-- list item -->
408
409<!ELEMENT li %Flow;>
410<!ATTLIST li
411  %attrs;
412  >
413
414<!-- definition lists - dt for term, dd for its definition -->
415
416<!ELEMENT dl (dt|dd)+>
417<!ATTLIST dl
418  %attrs;
419  >
420
421<!ELEMENT dt %Inline;>
422<!ATTLIST dt
423  %attrs;
424  >
425
426<!ELEMENT dd %Flow;>
427<!ATTLIST dd
428  %attrs;
429  >
430
431<!--=================== Address ==========================================-->
432
433<!-- information on author -->
434
435<!ELEMENT address %Inline;>
436<!ATTLIST address
437  %attrs;
438  >
439
440<!--=================== Horizontal Rule ==================================-->
441
442<!ELEMENT hr EMPTY>
443<!ATTLIST hr
444  %attrs;
445  >
446
447<!--=================== Preformatted Text ================================-->
448
449<!-- content is %Inline; excluding "img|object|big|small|sub|sup" -->
450
451<!ELEMENT pre %pre.content;>
452<!ATTLIST pre
453  %attrs;
454  xml:space (preserve) #FIXED 'preserve'
455  >
456
457<!--=================== Block-like Quotes ================================-->
458
459<!ELEMENT blockquote %Block;>
460<!ATTLIST blockquote
461  %attrs;
462  cite        %URI;          #IMPLIED
463  >
464
465<!--=================== Inserted/Deleted Text ============================-->
466
467<!--
468  ins/del are allowed in block and inline content, but its
469  inappropriate to include block content within an ins element
470  occurring in inline content.
471-->
472<!ELEMENT ins %Flow;>
473<!ATTLIST ins
474  %attrs;
475  cite        %URI;          #IMPLIED
476  datetime    %Datetime;     #IMPLIED
477  >
478
479<!ELEMENT del %Flow;>
480<!ATTLIST del
481  %attrs;
482  cite        %URI;          #IMPLIED
483  datetime    %Datetime;     #IMPLIED
484  >
485
486<!--================== The Anchor Element ================================-->
487
488<!-- content is %Inline; except that anchors shouldn't be nested -->
489
490<!ELEMENT a %a.content;>
491<!ATTLIST a
492  %attrs;
493  charset     %Charset;      #IMPLIED
494  type        %ContentType;  #IMPLIED
495  name        NMTOKEN        #IMPLIED
496  href        %URI;          #IMPLIED
497  hreflang    %LanguageCode; #IMPLIED
498  rel         %LinkTypes;    #IMPLIED
499  rev         %LinkTypes;    #IMPLIED
500  accesskey   %Character;    #IMPLIED
501  shape       %Shape;        "rect"
502  coords      %Coords;       #IMPLIED
503  tabindex    %Number;       #IMPLIED
504  onfocus     %Script;       #IMPLIED
505  onblur      %Script;       #IMPLIED
506  >
507
508<!--===================== Inline Elements ================================-->
509
510<!ELEMENT span %Inline;> <!-- generic language/style container -->
511<!ATTLIST span
512  %attrs;
513  >
514
515<!ELEMENT bdo %Inline;>  <!-- I18N BiDi over-ride -->
516<!ATTLIST bdo
517  %coreattrs;
518  %events;
519  lang        %LanguageCode; #IMPLIED
520  xml:lang    %LanguageCode; #IMPLIED
521  dir         (ltr|rtl)      #REQUIRED
522  >
523
524<!ELEMENT br EMPTY>   <!-- forced line break -->
525<!ATTLIST br
526  %coreattrs;
527  >
528
529<!ELEMENT em %Inline;>   <!-- emphasis -->
530<!ATTLIST em %attrs;>
531
532<!ELEMENT strong %Inline;>   <!-- strong emphasis -->
533<!ATTLIST strong %attrs;>
534
535<!ELEMENT dfn %Inline;>   <!-- definitional -->
536<!ATTLIST dfn %attrs;>
537
538<!ELEMENT code %Inline;>   <!-- program code -->
539<!ATTLIST code %attrs;>
540
541<!ELEMENT samp %Inline;>   <!-- sample -->
542<!ATTLIST samp %attrs;>
543
544<!ELEMENT kbd %Inline;>  <!-- something user would type -->
545<!ATTLIST kbd %attrs;>
546
547<!ELEMENT var %Inline;>   <!-- variable -->
548<!ATTLIST var %attrs;>
549
550<!ELEMENT cite %Inline;>   <!-- citation -->
551<!ATTLIST cite %attrs;>
552
553<!ELEMENT abbr %Inline;>   <!-- abbreviation -->
554<!ATTLIST abbr %attrs;>
555
556<!ELEMENT acronym %Inline;>   <!-- acronym -->
557<!ATTLIST acronym %attrs;>
558
559<!ELEMENT q %Inline;>   <!-- inlined quote -->
560<!ATTLIST q
561  %attrs;
562  cite        %URI;          #IMPLIED
563  >
564
565<!ELEMENT sub %Inline;> <!-- subscript -->
566<!ATTLIST sub %attrs;>
567
568<!ELEMENT sup %Inline;> <!-- superscript -->
569<!ATTLIST sup %attrs;>
570
571<!ELEMENT tt %Inline;>   <!-- fixed pitch font -->
572<!ATTLIST tt %attrs;>
573
574<!ELEMENT i %Inline;>   <!-- italic font -->
575<!ATTLIST i %attrs;>
576
577<!ELEMENT b %Inline;>   <!-- bold font -->
578<!ATTLIST b %attrs;>
579
580<!ELEMENT big %Inline;>   <!-- bigger font -->
581<!ATTLIST big %attrs;>
582
583<!ELEMENT small %Inline;>   <!-- smaller font -->
584<!ATTLIST small %attrs;>
585
586<!--==================== Object ======================================-->
587<!--
588  object is used to embed objects as part of HTML pages.
589  param elements should precede other content. Parameters
590  can also be expressed as attribute/value pairs on the
591  object element itself when brevity is desired.
592-->
593
594<!ELEMENT object (#PCDATA | param | %block; | form | %inline; | %misc;)*>
595<!ATTLIST object
596  %attrs;
597  declare     (declare)      #IMPLIED
598  classid     %URI;          #IMPLIED
599  codebase    %URI;          #IMPLIED
600  data        %URI;          #IMPLIED
601  type        %ContentType;  #IMPLIED
602  codetype    %ContentType;  #IMPLIED
603  archive     %UriList;      #IMPLIED
604  standby     %Text;         #IMPLIED
605  height      %Length;       #IMPLIED
606  width       %Length;       #IMPLIED
607  usemap      %URI;          #IMPLIED
608  name        NMTOKEN        #IMPLIED
609  tabindex    %Number;       #IMPLIED
610  >
611
612<!--
613  param is used to supply a named property value.
614  In XML it would seem natural to follow RDF and support an
615  abbreviated syntax where the param elements are replaced
616  by attribute value pairs on the object start tag.
617-->
618<!ELEMENT param EMPTY>
619<!ATTLIST param
620  id          ID             #IMPLIED
621  name        CDATA          #IMPLIED
622  value       CDATA          #IMPLIED
623  valuetype   (data|ref|object) "data"
624  type        %ContentType;  #IMPLIED
625  >
626
627<!--=================== Images ===========================================-->
628
629<!--
630   To avoid accessibility problems for people who aren't
631   able to see the image, you should provide a text
632   description using the alt and longdesc attributes.
633   In addition, avoid the use of server-side image maps.
634   Note that in this DTD there is no name attribute. That
635   is only available in the transitional and frameset DTD.
636-->
637
638<!ELEMENT img EMPTY>
639<!ATTLIST img
640  %attrs;
641  src         %URI;          #REQUIRED
642  alt         %Text;         #REQUIRED
643  longdesc    %URI;          #IMPLIED
644  height      %Length;       #IMPLIED
645  width       %Length;       #IMPLIED
646  usemap      %URI;          #IMPLIED
647  ismap       (ismap)        #IMPLIED
648  >
649
650<!-- usemap points to a map element which may be in this document
651  or an external document, although the latter is not widely supported -->
652
653<!--================== Client-side image maps ============================-->
654
655<!-- These can be placed in the same document or grouped in a
656     separate document although this isn't yet widely supported -->
657
658<!ELEMENT map ((%block; | form | %misc;)+ | area+)>
659<!ATTLIST map
660  %i18n;
661  %events;
662  id          ID             #REQUIRED
663  class       CDATA          #IMPLIED
664  style       %StyleSheet;   #IMPLIED
665  title       %Text;         #IMPLIED
666  name        NMTOKEN        #IMPLIED
667  >
668
669<!ELEMENT area EMPTY>
670<!ATTLIST area
671  %attrs;
672  shape       %Shape;        "rect"
673  coords      %Coords;       #IMPLIED
674  href        %URI;          #IMPLIED
675  nohref      (nohref)       #IMPLIED
676  alt         %Text;         #REQUIRED
677  tabindex    %Number;       #IMPLIED
678  accesskey   %Character;    #IMPLIED
679  onfocus     %Script;       #IMPLIED
680  onblur      %Script;       #IMPLIED
681  >
682
683<!--================ Forms ===============================================-->
684<!ELEMENT form %form.content;>   <!-- forms shouldn't be nested -->
685
686<!ATTLIST form
687  %attrs;
688  action      %URI;          #REQUIRED
689  method      (get|post)     "get"
690  enctype     %ContentType;  "application/x-www-form-urlencoded"
691  onsubmit    %Script;       #IMPLIED
692  onreset     %Script;       #IMPLIED
693  accept      %ContentTypes; #IMPLIED
694  accept-charset %Charsets;  #IMPLIED
695  >
696
697<!--
698  Each label must not contain more than ONE field
699  Label elements shouldn't be nested.
700-->
701<!ELEMENT label %Inline;>
702<!ATTLIST label
703  %attrs;
704  for         IDREF          #IMPLIED
705  accesskey   %Character;    #IMPLIED
706  onfocus     %Script;       #IMPLIED
707  onblur      %Script;       #IMPLIED
708  >
709
710<!ENTITY % InputType
711  "(text | password | checkbox |
712    radio | submit | reset |
713    file | hidden | image | button)"
714   >
715
716<!-- the name attribute is required for all but submit & reset -->
717
718<!ELEMENT input EMPTY>     <!-- form control -->
719<!ATTLIST input
720  %attrs;
721  type        %InputType;    "text"
722  name        CDATA          #IMPLIED
723  value       CDATA          #IMPLIED
724  checked     (checked)      #IMPLIED
725  disabled    (disabled)     #IMPLIED
726  readonly    (readonly)     #IMPLIED
727  size        CDATA          #IMPLIED
728  maxlength   %Number;       #IMPLIED
729  src         %URI;          #IMPLIED
730  alt         CDATA          #IMPLIED
731  usemap      %URI;          #IMPLIED
732  tabindex    %Number;       #IMPLIED
733  accesskey   %Character;    #IMPLIED
734  onfocus     %Script;       #IMPLIED
735  onblur      %Script;       #IMPLIED
736  onselect    %Script;       #IMPLIED
737  onchange    %Script;       #IMPLIED
738  accept      %ContentTypes; #IMPLIED
739  >
740
741<!ELEMENT select (optgroup|option)+>  <!-- option selector -->
742<!ATTLIST select
743  %attrs;
744  name        CDATA          #IMPLIED
745  size        %Number;       #IMPLIED
746  multiple    (multiple)     #IMPLIED
747  disabled    (disabled)     #IMPLIED
748  tabindex    %Number;       #IMPLIED
749  onfocus     %Script;       #IMPLIED
750  onblur      %Script;       #IMPLIED
751  onchange    %Script;       #IMPLIED
752  >
753
754<!ELEMENT optgroup (option)+>   <!-- option group -->
755<!ATTLIST optgroup
756  %attrs;
757  disabled    (disabled)     #IMPLIED
758  label       %Text;         #REQUIRED
759  >
760
761<!ELEMENT option (#PCDATA)>     <!-- selectable choice -->
762<!ATTLIST option
763  %attrs;
764  selected    (selected)     #IMPLIED
765  disabled    (disabled)     #IMPLIED
766  label       %Text;         #IMPLIED
767  value       CDATA          #IMPLIED
768  >
769
770<!ELEMENT textarea (#PCDATA)>     <!-- multi-line text field -->
771<!ATTLIST textarea
772  %attrs;
773  name        CDATA          #IMPLIED
774  rows        %Number;       #REQUIRED
775  cols        %Number;       #REQUIRED
776  disabled    (disabled)     #IMPLIED
777  readonly    (readonly)     #IMPLIED
778  tabindex    %Number;       #IMPLIED
779  accesskey   %Character;    #IMPLIED
780  onfocus     %Script;       #IMPLIED
781  onblur      %Script;       #IMPLIED
782  onselect    %Script;       #IMPLIED
783  onchange    %Script;       #IMPLIED
784  >
785
786<!--
787  The fieldset element is used to group form fields.
788  Only one legend element should occur in the content
789  and if present should only be preceded by whitespace.
790-->
791<!ELEMENT fieldset (#PCDATA | legend | %block; | form | %inline; | %misc;)*>
792<!ATTLIST fieldset
793  %attrs;
794  >
795
796<!ELEMENT legend %Inline;>     <!-- fieldset label -->
797<!ATTLIST legend
798  %attrs;
799  accesskey   %Character;    #IMPLIED
800  >
801
802<!--
803 Content is %Flow; excluding a, form and form controls
804-->
805<!ELEMENT button %button.content;>  <!-- push button -->
806<!ATTLIST button
807  %attrs;
808  name        CDATA          #IMPLIED
809  value       CDATA          #IMPLIED
810  type        (button|submit|reset) "submit"
811  disabled    (disabled)     #IMPLIED
812  tabindex    %Number;       #IMPLIED
813  accesskey   %Character;    #IMPLIED
814  onfocus     %Script;       #IMPLIED
815  onblur      %Script;       #IMPLIED
816  >
817
818<!--======================= Tables =======================================-->
819
820<!-- Derived from IETF HTML table standard, see [RFC1942] -->
821
822<!--
823 The border attribute sets the thickness of the frame around the
824 table. The default units are screen pixels.
825
826 The frame attribute specifies which parts of the frame around
827 the table should be rendered. The values are not the same as
828 CALS to avoid a name clash with the valign attribute.
829-->
830<!ENTITY % TFrame "(void|above|below|hsides|lhs|rhs|vsides|box|border)">
831
832<!--
833 The rules attribute defines which rules to draw between cells:
834
835 If rules is absent then assume:
836     "none" if border is absent or border="0" otherwise "all"
837-->
838
839<!ENTITY % TRules "(none | groups | rows | cols | all)">
840
841<!-- horizontal placement of table relative to document -->
842<!ENTITY % TAlign "(left|center|right)">
843
844<!-- horizontal alignment attributes for cell contents
845
846  char        alignment char, e.g. char=':'
847  charoff     offset for alignment char
848-->
849<!ENTITY % cellhalign
850  "align      (left|center|right|justify|char) #IMPLIED
851   char       %Character;    #IMPLIED
852   charoff    %Length;       #IMPLIED"
853  >
854
855<!-- vertical alignment attributes for cell contents -->
856<!ENTITY % cellvalign
857  "valign     (top|middle|bottom|baseline) #IMPLIED"
858  >
859
860<!ELEMENT table
861     (caption?, (col*|colgroup*), thead?, tfoot?, (tbody+|tr+))>
862<!ELEMENT caption  %Inline;>
863<!ELEMENT thead    (tr)+>
864<!ELEMENT tfoot    (tr)+>
865<!ELEMENT tbody    (tr)+>
866<!ELEMENT colgroup (col)*>
867<!ELEMENT col      EMPTY>
868<!ELEMENT tr       (th|td)+>
869<!ELEMENT th       %Flow;>
870<!ELEMENT td       %Flow;>
871
872<!ATTLIST table
873  %attrs;
874  summary     %Text;         #IMPLIED
875  width       %Length;       #IMPLIED
876  border      %Pixels;       #IMPLIED
877  frame       %TFrame;       #IMPLIED
878  rules       %TRules;       #IMPLIED
879  cellspacing %Length;       #IMPLIED
880  cellpadding %Length;       #IMPLIED
881  >
882
883<!ENTITY % CAlign "(top|bottom|left|right)">
884
885<!ATTLIST caption
886  %attrs;
887  >
888
889<!--
890colgroup groups a set of col elements. It allows you to group
891several semantically related columns together.
892-->
893<!ATTLIST colgroup
894  %attrs;
895  span        %Number;       "1"
896  width       %MultiLength;  #IMPLIED
897  %cellhalign;
898  %cellvalign;
899  >
900
901<!--
902 col elements define the alignment properties for cells in
903 one or more columns.
904
905 The width attribute specifies the width of the columns, e.g.
906
907     width=64        width in screen pixels
908     width=0.5*      relative width of 0.5
909
910 The span attribute causes the attributes of one
911 col element to apply to more than one column.
912-->
913<!ATTLIST col
914  %attrs;
915  span        %Number;       "1"
916  width       %MultiLength;  #IMPLIED
917  %cellhalign;
918  %cellvalign;
919  >
920
921<!--
922    Use thead to duplicate headers when breaking table
923    across page boundaries, or for static headers when
924    tbody sections are rendered in scrolling panel.
925
926    Use tfoot to duplicate footers when breaking table
927    across page boundaries, or for static footers when
928    tbody sections are rendered in scrolling panel.
929
930    Use multiple tbody sections when rules are needed
931    between groups of table rows.
932-->
933<!ATTLIST thead
934  %attrs;
935  %cellhalign;
936  %cellvalign;
937  >
938
939<!ATTLIST tfoot
940  %attrs;
941  %cellhalign;
942  %cellvalign;
943  >
944
945<!ATTLIST tbody
946  %attrs;
947  %cellhalign;
948  %cellvalign;
949  >
950
951<!ATTLIST tr
952  %attrs;
953  %cellhalign;
954  %cellvalign;
955  >
956
957
958<!-- Scope is simpler than headers attribute for common tables -->
959<!ENTITY % Scope "(row|col|rowgroup|colgroup)">
960
961<!-- th is for headers, td for data and for cells acting as both -->
962
963<!ATTLIST th
964  %attrs;
965  abbr        %Text;         #IMPLIED
966  axis        CDATA          #IMPLIED
967  headers     IDREFS         #IMPLIED
968  scope       %Scope;        #IMPLIED
969  rowspan     %Number;       "1"
970  colspan     %Number;       "1"
971  %cellhalign;
972  %cellvalign;
973  >
974
975<!ATTLIST td
976  %attrs;
977  abbr        %Text;         #IMPLIED
978  axis        CDATA          #IMPLIED
979  headers     IDREFS         #IMPLIED
980  scope       %Scope;        #IMPLIED
981  rowspan     %Number;       "1"
982  colspan     %Number;       "1"
983  %cellhalign;
984  %cellvalign;
985  >
986
987