/ libxml2 / test / valid / dtds / xmlspec.dtd
xmlspec.dtd
   1  <!-- ............................................................... -->
   2  <!-- XML specification DTD ......................................... -->
   3  <!-- ............................................................... -->
   4  
   5  <!--
   6  TYPICAL INVOCATION:
   7  #  <!DOCTYPE spec PUBLIC
   8  #       "-//W3C//DTD Specification::19980521//EN"
   9  #       "http://www.w3.org/XML/1998/06/xmlspec-19980521.dtd">
  10  
  11  PURPOSE:
  12    This DTD was developed for use with the XML family of W3C
  13    specifications.  It is an XML-compliant DTD based in part on
  14    the TEI Lite and Sweb DTDs.
  15  
  16  DEPENDENCIES:
  17    None.
  18  
  19  CHANGE HISTORY:
  20    The list of changes is at the end of the DTD.
  21  
  22    For all details, see the design report at:
  23  
  24  #   <http://www.w3.org/XML/1998/06/xmlspec-report-19980521.htm>
  25  
  26    The "typical invocation" FPI always gets updated to reflect the
  27    date of the most recent changes.
  28  
  29    Search this file for "#" in the first column to see change history
  30    comments.
  31  
  32  MAINTAINER:
  33    Eve Maler
  34    ArborText Inc.
  35    elm@arbortext.com
  36    voice: +1 781 270 5750
  37    fax:   +1 781 273 3760
  38  -->
  39  
  40  <!-- ............................................................... -->
  41  <!-- Entities for characters and symbols ........................... -->
  42  
  43  <!--
  44  #1998-03-10: maler: Added &ldquo; and &rdquo;.
  45  #                   Used 8879:1986-compatible decimal character
  46  #                   references.
  47  #                   Merged charent.mod file back into main file.
  48  #1998-05-14: maler: Fixed ldquo and rdquo.  Gave mdash a real number.
  49  -->
  50  
  51  <!ENTITY lt     "&#38;#60;">
  52  <!ENTITY gt     "&#62;">
  53  <!ENTITY amp    "&#38;#38;">
  54  <!ENTITY apos   "&#39;">
  55  <!ENTITY quot   "&#34;">
  56  <!ENTITY nbsp   "&#160;">
  57  <!--
  58  <!ENTITY mdash  "&#x2014;">
  59  <!ENTITY ldquo  "&#x201C;">
  60  <!ENTITY rdquo  "&#x201D;">
  61  -->
  62  
  63  <!-- ............................................................... -->
  64  <!-- Entities for classes of standalone elements ................... -->
  65  
  66  <!--
  67  #1997-10-16: maler: Added table to %illus.class;.
  68  #1997-11-28: maler: Added htable to %illus.class;.
  69  #1997-12-29: maler: IGNOREd table.
  70  #1998-03-10: maler: Removed SGML Open-specific %illus.class;.
  71  #                   Added "local" entities for customization.
  72  #1998-05-14: maler: Added issue to %note.class;.
  73  #                   Removed %[local.]statusp.class;.
  74  #1998-05-21: maler: Added constraintnote to %note.class;.
  75  -->
  76  
  77  <!ENTITY % local.p.class        "">
  78  <!ENTITY % p.class              "p
  79                                  %local.p.class;">
  80  
  81  <!ENTITY % local.list.class     "">
  82  <!ENTITY % list.class           "ulist|olist|slist|glist
  83                                  %local.list.class;">
  84  
  85  <!ENTITY % local.speclist.class "">
  86  <!ENTITY % speclist.class       "orglist|blist
  87                                  %local.speclist.class;">
  88  
  89  <!ENTITY % local.note.class     "">
  90  <!ENTITY % note.class           "note|issue|wfcnote|vcnote
  91                                  |constraintnote %local.note.class;">
  92  
  93  <!ENTITY % local.illus.class    "">
  94  <!ENTITY % illus.class          "eg|graphic|scrap|htable
  95                                  %local.illus.class;">
  96  
  97  <!-- ............................................................... -->
  98  <!-- Entities for classes of phrase-level elements ................. -->
  99  
 100  <!--
 101  #1997-12-29: maler: Added xspecref to %ref.class;.
 102  #1998-03-10: maler: Added %ednote.class;.
 103  #                   Added "local" entities for customization.
 104  -->
 105  
 106  <!ENTITY % local.annot.class    "">
 107  <!ENTITY % annot.class          "footnote
 108                                  %local.annot.class;">
 109  
 110  <!ENTITY % local.termdef.class    "">
 111  <!ENTITY % termdef.class        "termdef|term
 112                                  %local.termdef.class;">
 113  
 114  <!ENTITY % local.emph.class    "">
 115  <!ENTITY % emph.class           "emph|quote
 116                                  %local.emph.class;">
 117  
 118  <!ENTITY % local.ref.class    "">
 119  <!ENTITY % ref.class            "bibref|specref|termref|titleref
 120                                  |xspecref|xtermref
 121                                  %local.ref.class;">
 122  
 123  <!ENTITY % local.loc.class    "">
 124  <!ENTITY % loc.class            "loc
 125                                  %local.loc.class;">
 126  
 127  <!ENTITY % local.tech.class    "">
 128  <!ENTITY % tech.class           "kw|nt|xnt|code
 129                                  %local.tech.class;">
 130  
 131  <!ENTITY % local.ednote.class    "">
 132  <!ENTITY % ednote.class         "ednote
 133                                  %local.ednote.class;">
 134  
 135  <!-- ............................................................... -->
 136  <!-- Entities for mixtures of standalone elements .................. -->
 137  
 138  <!--
 139  #1997-09-30: maler: Created %p.mix; to eliminate p from self.
 140  #1997-09-30: maler: Added %speclist.class; to %obj.mix; and %p.mix;.
 141  #1997-09-30: maler: Added %note.class; to %obj.mix; and %p.mix;.
 142  #1997-10-16: maler: Created %entry.mix;.  Note that some elements
 143  #                   left out here are still allowed in termdef,
 144  #                   which entry can contain through %p.pcd.mix;.
 145  #1997-11-28: maler: Added %p.class; to %statusobj.mix;.
 146  #1998-03-10: maler: Added %ednote.class; to all mixtures, except
 147  #                   %p.mix; and %statusobj.mix;, because paragraphs
 148  #                   and status paragraphs will contain ednote
 149  #                   through %p.pcd.mix;.
 150  #1998-03-23: maler: Added %termdef.mix; (broken out from
 151  #                    %termdef.pcd.mix;).
 152  #1998-05-14: maler: Removed %statusobj.mix; and all mentions of
 153  #                   %statusp.mix;.
 154  -->
 155  
 156  <!ENTITY % div.mix
 157          "%p.class;|%list.class;|%speclist.class;|%note.class;
 158          |%illus.class;|%ednote.class;">
 159  <!ENTITY % obj.mix
 160          "%p.class;|%list.class;|%speclist.class;|%note.class;
 161          |%illus.class;|%ednote.class;">
 162  <!ENTITY % p.mix
 163          "%list.class;|%speclist.class;|%note.class;|%illus.class;">
 164  <!ENTITY % entry.mix
 165          "%list.class;|note|eg|graphic|%ednote.class;">
 166  <!ENTITY % hdr.mix
 167          "%p.class;|%list.class;|%ednote.class;">
 168  <!ENTITY % termdef.mix
 169          "%note.class;|%illus.class;">
 170  
 171  <!-- ............................................................... -->
 172  <!-- Entities for mixtures of #PCDATA and phrase-level elements .... -->
 173  
 174  <!--    Note that %termdef.pcd.mix contains %note.class;
 175          and %illus.class;, considered standalone elements. -->
 176  
 177  <!--
 178  #1997-09-30: maler: Added scrap and %note.class; to %termdef.pcd.mix;.
 179  #1997-11-28: maler: Added %loc.class; to %p.pcd.mix;.
 180  #1998-03-10: maler: Added %ednote.class; to all mixtures.
 181  #1998-03-23: maler: Moved some %termdef.pcd.mix; stuff out to
 182  #                   %termdef.mix;.
 183  #1998-05-14: maler: Removed %statusp.pcd.mix;.
 184  #1998-05-21: maler: Added constraint element to %eg.pcd.mix;.
 185  -->
 186  
 187  <!ENTITY % p.pcd.mix
 188          "#PCDATA|%annot.class;|%termdef.class;|%emph.class;
 189          |%ref.class;|%tech.class;|%loc.class;|%ednote.class;">
 190  <!ENTITY % head.pcd.mix
 191          "#PCDATA|%annot.class;|%emph.class;|%tech.class;|%ednote.class;">
 192  <!ENTITY % label.pcd.mix
 193          "#PCDATA|%annot.class;|%termdef.class;|%emph.class;|%tech.class;
 194          |%ednote.class;">
 195  <!ENTITY % eg.pcd.mix
 196          "#PCDATA|%annot.class;|%emph.class;|%ednote.class;|constraint">
 197  <!ENTITY % termdef.pcd.mix
 198          "#PCDATA|term|%emph.class;|%ref.class;|%tech.class;
 199          |%ednote.class;">
 200  <!ENTITY % bibl.pcd.mix
 201          "#PCDATA|%emph.class;|%ref.class;|%loc.class;|%ednote.class;">
 202  <!ENTITY % tech.pcd.mix
 203          "#PCDATA|%ednote.class;">
 204  <!ENTITY % loc.pcd.mix
 205          "#PCDATA|%loc.class;|%ednote.class;">
 206  
 207  <!-- ............................................................... -->
 208  <!-- Entities for customizable content models ...................... -->
 209  
 210  <!--
 211  #1998-03-10: maler: Added customization entities.
 212  #1998-05-14: maler: Allowed prevlocs and latestloc in either order.
 213  -->
 214  
 215  <!ENTITY % spec.mdl
 216          "header, front?, body, back?">
 217  
 218  <!ENTITY % header.mdl
 219          "title, subtitle?, version, w3c-designation, w3c-doctype,
 220          pubdate, notice*, publoc, ((prevlocs, latestloc?) |
 221          (latestloc, prevlocs?))?, authlist, status, abstract,
 222          pubstmt?, sourcedesc?, langusage, revisiondesc">
 223  
 224  <!ENTITY % pubdate.mdl
 225          "day?, month, year">
 226  
 227  <!-- ............................................................... -->
 228  <!-- Entities for common attributes ................................ -->
 229  
 230  <!--    key attribute:
 231          Optionally provides a sorting or indexing key, for cases when
 232          the element content is inappropriate for this purpose. -->
 233  <!ENTITY % key.att
 234          'key                    CDATA           #IMPLIED'>
 235  
 236  <!--    def attribute:
 237          Points to the element where the relevant definition can be
 238          found, using the IDREF mechanism.  %def.att; is for optional
 239          def attributes, and %def-req.att; is for required def
 240          attributes. -->
 241  <!ENTITY % def.att
 242          'def                    IDREF           #IMPLIED'>
 243  <!ENTITY % def-req.att
 244          'def                    IDREF           #REQUIRED'>
 245  
 246  <!--    ref attribute:
 247          Points to the element where more information can be found,
 248          using the IDREF mechanism.  %ref.att; is for optional
 249          ref attributes, and %ref-req.att; is for required ref
 250          attributes. -->
 251  <!ENTITY % ref.att
 252          'ref                    IDREF           #IMPLIED'>
 253  <!ENTITY % ref-req.att
 254          'ref                    IDREF           #REQUIRED'>
 255  
 256  <!--
 257  #1998-03-23: maler: Added show and actuate attributes to href.
 258  #                   Added semi-common xml:space attribute.
 259  -->
 260  
 261  <!--    HREF and source attributes:
 262          Points to the element where more information or source data
 263          can be found, using the URL (XLL simple link) mechanism.
 264          For some purposes, is associated with additional XLL
 265          attributes. %href.att; is for optional HREF attributes,
 266          and %href-req.att; is for required HREF attributes.
 267          %source-req.att; is for the source attribute, which
 268          is always required. -->
 269  <!ENTITY % href.att
 270          'xml:link               CDATA           #FIXED "simple"
 271          href                    CDATA           #IMPLIED
 272          show                    CDATA           #FIXED "embed"
 273          actuate                 CDATA           #FIXED "auto"'>
 274  
 275  <!ENTITY % href-req.att
 276          'xml:link               CDATA           #FIXED "simple"
 277          href                    CDATA           #REQUIRED
 278          show                    CDATA           #FIXED "embed"
 279          actuate                 CDATA           #FIXED "auto"'>
 280  
 281  <!ENTITY % source-req.att
 282          'xml:link               CDATA           #FIXED "simple"
 283          xml:attributes          NMTOKENS        #FIXED "href source"
 284          source                  CDATA           #REQUIRED
 285          show                    CDATA           #FIXED "embed"
 286          actuate                 CDATA           #FIXED "auto"'>
 287  
 288  <!--    xml:space attribute:
 289          Indicates that the element contains white space
 290          that the formatter or other application should retain,
 291          as appropriate to its function. -->
 292  <!ENTITY % xmlspace.att
 293          'xml:space              (default
 294                                  |preserve)      #FIXED "preserve"'>
 295  
 296  <!--    Common attributes:
 297          Every element has an ID attribute (sometimes required,
 298          but usually optional) for links, and a Role attribute
 299          for extending the useful life of the DTD by allowing
 300          authors to make subclasses for any element. %common.att;
 301          is for common attributes where the ID is optional, and
 302          %common-idreq.att; is for common attributes where the
 303          ID is required. -->
 304  <!ENTITY % common.att
 305          'id                     ID              #IMPLIED
 306          role                    NMTOKEN         #IMPLIED'>
 307  <!ENTITY % common-idreq.att
 308          'id                     ID              #REQUIRED
 309          role                    NMTOKEN         #IMPLIED'>
 310  
 311  <!-- ............................................................... -->
 312  <!-- Common elements ............................................... -->
 313  
 314  <!--    head: Title on divisions, productions, and the like -->
 315  <!ELEMENT head (%head.pcd.mix;)*>
 316  <!ATTLIST head %common.att;>
 317  
 318  <!-- ............................................................... -->
 319  <!-- Major specification structure ................................. -->
 320  
 321  <!--
 322  #1998-03-10: maler: Made spec content model easily customizable.
 323  -->
 324  
 325  <!ELEMENT spec (%spec.mdl;)>
 326  <!ATTLIST spec %common.att;>
 327  
 328  <!ELEMENT front (div1+)>
 329  <!ATTLIST front %common.att;>
 330  
 331  <!ELEMENT body (div1+)>
 332  <!ATTLIST body %common.att;>
 333  
 334  <!--
 335  #1997-09-30: maler: Added inform-div1 to back content.
 336  -->
 337  
 338  <!ELEMENT back ((div1+, inform-div1*) | inform-div1+)>
 339  <!ATTLIST back %common.att;>
 340  
 341  <!ELEMENT div1 (head, (%div.mix;)*, div2*)>
 342  <!ATTLIST div1 %common.att;>
 343  
 344  <!--
 345  #1997-09-30: maler: Added inform-div1 declarations.
 346  -->
 347  
 348  <!--    inform-div1: Non-normative division in back matter -->
 349  <!ELEMENT inform-div1 (head, (%div.mix;)*, div2*)>
 350  <!ATTLIST inform-div1 %common.att;>
 351  
 352  <!ELEMENT div2 (head, (%div.mix;)*, div3*)>
 353  <!ATTLIST div2 %common.att;>
 354  
 355  <!ELEMENT div3 (head, (%div.mix;)*, div4*)>
 356  <!ATTLIST div3 %common.att;>
 357  
 358  <!ELEMENT div4 (head, (%div.mix;)*)>
 359  <!ATTLIST div4 %common.att;>
 360  
 361  <!-- Specification header .......... -->
 362  
 363  <!--
 364  #1998-03-10: maler: Made header content model easily customizable.
 365  -->
 366  
 367  <!ELEMENT header (%header.mdl;)>
 368  <!ATTLIST header %common.att;>
 369  
 370  <!--    Example of title: "Extensible Cheese Language (XCL)" -->
 371  <!ELEMENT title (#PCDATA)>
 372  <!ATTLIST title %common.att;>
 373  
 374  <!--    Example of subtitle: "A Cheesy Specification" -->
 375  <!ELEMENT subtitle (#PCDATA)>
 376  <!ATTLIST subtitle %common.att;>
 377  
 378  <!--    Example of version: "Version 666.0" -->
 379  <!ELEMENT version (#PCDATA)>
 380  <!ATTLIST version %common.att;>
 381  
 382  <!--    Example of w3c-designation: "WD-xcl-19991231" -->
 383  <!ELEMENT w3c-designation (#PCDATA)>
 384  <!ATTLIST w3c-designation %common.att;>
 385  
 386  <!--    Example of w3c-doctype: "World Wide Web Consortium Working
 387          Draft" -->
 388  <!ELEMENT w3c-doctype (#PCDATA)>
 389  <!ATTLIST w3c-doctype %common.att;>
 390  
 391  <!--
 392  #1998-03-10: maler: Made pubdate content model easily customizable.
 393  -->
 394  
 395  <!ELEMENT pubdate (%pubdate.mdl;)>
 396  <!ATTLIST pubdate %common.att;>
 397  
 398  <!ELEMENT day (#PCDATA)>
 399  <!ATTLIST day %common.att;>
 400  
 401  <!ELEMENT month (#PCDATA)>
 402  <!ATTLIST month %common.att;>
 403  
 404  <!ELEMENT year (#PCDATA)>
 405  <!ATTLIST year %common.att;>
 406  
 407  <!--    Example of notice: "This draft is for public comment..." -->
 408  <!ELEMENT notice (%hdr.mix;)+>
 409  <!ATTLIST notice %common.att;>
 410  
 411  <!ELEMENT publoc (loc+)>
 412  <!ATTLIST publoc %common.att;>
 413  
 414  <!ELEMENT prevlocs (loc+)>
 415  <!ATTLIST prevlocs %common.att;>
 416  
 417  <!ELEMENT latestloc (loc+)>
 418  <!ATTLIST latestloc %common.att;>
 419  
 420  <!--      loc (defined in "Phrase-level elements" below) -->
 421  
 422  <!ELEMENT authlist (author+)>
 423  <!ATTLIST authlist %common.att;>
 424  
 425  <!--
 426  #1997-09-30: maler: Made affiliation optional.
 427  #1998-03-10: maler: Made email optional.
 428  -->
 429  
 430  <!ELEMENT author (name, affiliation?, email?)>
 431  <!ATTLIST author %common.att;>
 432  
 433  <!ELEMENT name (#PCDATA)>
 434  <!ATTLIST name
 435          %common.att;
 436          %key.att;>
 437  
 438  <!ELEMENT affiliation (#PCDATA)>
 439  <!ATTLIST affiliation %common.att;>
 440  
 441  <!ELEMENT email (#PCDATA)>
 442  <!--    HREF attribute:
 443          email functions as a hypertext reference through this
 444          required attribute.  Typically the reference would use
 445          the mailto: scheme. -->
 446  <!ATTLIST email
 447          %common.att;
 448          %href-req.att;>
 449  
 450  <!--
 451  #1998-05-15: maler: Changed status content from %statusobj.mix;
 452  #                   to plain %obj.mix;.  statusp is obsolete.
 453  -->
 454  
 455  <!ELEMENT status (%obj.mix;)+>
 456  <!ATTLIST status %common.att;>
 457  
 458  <!ELEMENT abstract (%hdr.mix;)*>
 459  <!ATTLIST abstract %common.att;>
 460  
 461  <!ELEMENT pubstmt (%hdr.mix;)+>
 462  <!ATTLIST pubstmt %common.att;>
 463  
 464  <!ELEMENT sourcedesc (%hdr.mix;)+>
 465  <!ATTLIST sourcedesc %common.att;>
 466  
 467  <!ELEMENT langusage (language+)>
 468  <!ATTLIST langusage %common.att;>
 469  
 470  <!ELEMENT language (#PCDATA)>
 471  <!ATTLIST language %common.att;>
 472  
 473  <!ELEMENT revisiondesc (%hdr.mix;)+>
 474  <!ATTLIST revisiondesc %common.att;>
 475  
 476  <!-- ............................................................... -->
 477  <!-- Standalone elements ........................................... -->
 478  
 479  <!-- Paragraphs .................... -->
 480  
 481  <!--
 482  #1997-09-30: maler: Changed from %obj.mix; to %p.mix;.
 483  #1997-12-29: maler: Changed order of %p.mix; and %p.pcd.mix;
 484  #                   references.
 485  #1997-12-29: maler: Changed order of %statusobj.mix; and
 486  #                   %statusp.pcd.mix; references.
 487  #1998-05-14: maler: Removed statusp declarations.
 488  -->
 489  
 490  <!ELEMENT p (%p.pcd.mix;|%p.mix;)*>
 491  <!ATTLIST p %common.att;>
 492  
 493  <!-- Lists ......................... -->
 494  
 495  <!ELEMENT ulist (item+)>
 496  <!--    spacing attribute:
 497          Use "normal" to get normal vertical spacing for items;
 498          use "compact" to get less spacing.  The default is dependent
 499          on the stylesheet. -->
 500  <!ATTLIST ulist
 501          %common.att;
 502          spacing         (normal|compact)        #IMPLIED>
 503  
 504  <!ELEMENT olist (item+)>
 505  <!--    spacing attribute:
 506          Use "normal" to get normal vertical spacing for items;
 507          use "compact" to get less spacing.  The default is dependent
 508          on the stylesheet. -->
 509  <!ATTLIST olist
 510          %common.att;
 511          spacing         (normal|compact)        #IMPLIED>
 512  
 513  <!ELEMENT item (%obj.mix;)+>
 514  <!ATTLIST item %common.att;>
 515  
 516  <!ELEMENT slist (sitem+)>
 517  <!ATTLIST slist %common.att;>
 518  
 519  <!ELEMENT sitem (%p.pcd.mix;)*>
 520  <!ATTLIST sitem %common.att;>
 521  
 522  <!ELEMENT glist (gitem+)>
 523  <!ATTLIST glist %common.att;>
 524  
 525  <!ELEMENT gitem (label, def)>
 526  <!ATTLIST gitem %common.att;>
 527  
 528  <!ELEMENT label (%label.pcd.mix;)*>
 529  <!ATTLIST label %common.att;>
 530  
 531  <!ELEMENT def (%obj.mix;)*>
 532  <!ATTLIST def %common.att;>
 533  
 534  <!-- Special lists ................. -->
 535  
 536  <!ELEMENT blist (bibl+)>
 537  <!ATTLIST blist %common.att;>
 538  
 539  <!ELEMENT bibl (%bibl.pcd.mix;)*>
 540  <!--    HREF attribute:
 541          bibl optionally functions as a hypertext reference to the
 542          referred-to resource through this attribute. -->
 543  <!ATTLIST bibl
 544          %common.att;
 545          %href.att;
 546          %key.att;>
 547  
 548  <!ELEMENT orglist (member+)>
 549  <!ATTLIST orglist %common.att;>
 550  
 551  <!--
 552  #1997-09-30: maler: Added optional affiliation.
 553  -->
 554  
 555  <!ELEMENT member (name, affiliation?, role?)>
 556  <!ATTLIST member %common.att;>
 557  
 558  <!--      name (defined in "Specification header" above) -->
 559  <!--      affiliation (defined in "Specification header" above) -->
 560  
 561  <!ELEMENT role (#PCDATA)>
 562  <!ATTLIST role %common.att;>
 563  
 564  <!-- Notes ......................... -->
 565  
 566  <!ELEMENT note (%obj.mix;)+>
 567  <!ATTLIST note %common.att;>
 568  
 569  <!--
 570  #1998-05-14: maler: Declared issue element.
 571  -->
 572  
 573  <!ELEMENT issue (%obj.mix;)+>
 574  <!ATTLIST issue %common-idreq.att;>
 575  
 576  <!ELEMENT wfcnote (head, (%obj.mix;)+)>
 577  <!--    ID attribute:
 578          wfcnote must have an ID so that it can be pointed to
 579          from a wfc element in a production. -->
 580  <!ATTLIST wfcnote
 581          %common-idreq.att;>
 582  
 583  <!ELEMENT vcnote (head, (%obj.mix;)+)>
 584  <!--    ID attribute:
 585          vcnote must have an ID so that it can be pointed to
 586          from a vc element in a production. -->
 587  <!ATTLIST vcnote
 588          %common-idreq.att;>
 589  
 590  <!--
 591  #1998-05-21: maler: Declared generic constraintnote element.
 592  -->
 593  
 594  <!ELEMENT constraintnote (head, (%obj.mix;)+)>
 595  <!--    ID attribute:
 596          cnote must have an ID so that it can be pointed to
 597          from a constraint element in a production. -->
 598  <!--    type attribute:
 599          cnote must have a type value keyword so that it can be
 600          correctly characterized in the specification. -->
 601  <!ATTLIST constraintnote
 602          %common-idreq.att;
 603          type            NMTOKEN         #REQUIRED>
 604  
 605  <!-- Illustrations ................. -->
 606  
 607  <!--
 608  #1998-03-23: maler: Added xml:space attribute.
 609  -->
 610  
 611  <!ELEMENT eg (%eg.pcd.mix;)*>
 612  <!ATTLIST eg
 613          %common.att;
 614          %xmlspace.att;>
 615  
 616  <!ELEMENT graphic EMPTY>
 617  <!--    source attribute:
 618          The graphic data must reside at the location pointed to.
 619          This is a hypertext reference, but for practical purposes,
 620          for now it should just be a pathname. -->
 621  <!ATTLIST graphic
 622          %common.att;
 623          %source-req.att;
 624          alt             CDATA           #IMPLIED>
 625  
 626  <!--
 627  #1997-11-28: maler: Added prodgroup to scrap and defined it.
 628  #1998-05-21: maler: Added constraint to prod.
 629  -->
 630  
 631  <!ELEMENT scrap (head, (prodgroup+ | prod+ | bnf))>
 632  <!--    lang attribute:
 633          The scrap can link to a description of the language used,
 634          found in a language element in the header. -->
 635  <!ATTLIST scrap
 636          %common.att;
 637          lang            IDREF           #IMPLIED>
 638  
 639  <!ELEMENT prodgroup (prod+)>
 640  <!--    pcw<n> attributes:
 641          Presentational attributes to control the width
 642          of the "pseudo-table" columns used to output
 643          groups of productions. -->
 644  <!ATTLIST prodgroup
 645          %common.att;
 646          pcw1            CDATA           #IMPLIED
 647          pcw2            CDATA           #IMPLIED
 648          pcw3            CDATA           #IMPLIED
 649          pcw4            CDATA           #IMPLIED
 650          pcw5            CDATA           #IMPLIED
 651  >
 652  
 653  <!ELEMENT prod (lhs, (rhs, (com|wfc|vc|constraint)*)+)>
 654  <!--    ID attribute:
 655          The production must have an ID so that cross-references
 656          (specref) and mentions of nonterminals (nt) can link to
 657          it. -->
 658  <!ATTLIST prod
 659          %common-idreq.att;>
 660  
 661  <!ELEMENT lhs (#PCDATA)>
 662  <!ATTLIST lhs %common.att;>
 663  
 664  <!ELEMENT rhs (#PCDATA|nt|xnt|com)*>
 665  <!ATTLIST rhs %common.att;>
 666  
 667  <!--      nt and xnt (defined in "Phrase-level elements" below) -->
 668  
 669  <!--
 670  #1997-11-28: maler: Added loc and bibref to com content.
 671  -->
 672  
 673  <!ELEMENT com (#PCDATA|loc|bibref)*>
 674  <!ATTLIST com %common.att;>
 675  
 676  <!--    wfc: Should generate the head of the wfcnote pointed to -->
 677  <!ELEMENT wfc EMPTY>
 678  <!--    def attribute:
 679          Each well formedness tagline in a production must link to the
 680          wfcnote that defines it. -->
 681  <!ATTLIST wfc
 682          %def-req.att;
 683          %common.att;>
 684  
 685  <!--    vc: Should generate the head of the vcnote pointed to -->
 686  <!ELEMENT vc EMPTY>
 687  <!--    def attribute:
 688          Each validity tagline in a production must link to the vcnote
 689          that defines it. -->
 690  <!ATTLIST vc
 691          %def-req.att;
 692          %common.att;>
 693  
 694  <!--
 695  #1998-05-21: maler: Declared generic constraint element.
 696  -->
 697  
 698  <!--    constraint: Should generate the head of the constraintnote
 699          pointed to -->
 700  <!ELEMENT constraint EMPTY>
 701  <!--    def attribute:
 702          Each constraint tagline in a production must link to the
 703          constraint note that defines it. -->
 704  <!ATTLIST constraint
 705          %def-req.att;
 706          %common.att;>
 707  
 708  <!--
 709  #1998-03-23: maler: Added xml:space attribute.
 710  -->
 711  
 712  <!--    bnf: Un-marked-up production -->
 713  <!ELEMENT bnf (%eg.pcd.mix;)*>
 714  <!ATTLIST bnf
 715          %common.att;
 716          %xmlspace.att;>
 717  
 718  <!--
 719  #1997-10-16: maler: Added table mechanism.
 720  #1997-11-28: maler: Added non-null system ID to entity declaration.
 721  #                   Added HTML table module.
 722  #1997-12-29: maler: IGNOREd SGML Open table model.
 723  #1998-03-10: maler: Removed SGML Open table model.
 724  #                   Merged html-tbl.mod file into main file.
 725  #                   Added %common.att; to all HTML table elements.
 726  #1998-05-14: maler: Replaced table model with full HTML 4.0 model.
 727  #                   Removed htable in favor of table.
 728  #                   Removed htbody in favor of tbody.
 729  -->
 730  
 731  <!ENTITY % cellhalign.att
 732          'align          (left|center
 733                          |right|justify
 734                          |char)          #IMPLIED
 735          char            CDATA           #IMPLIED
 736          charoff         CDATA           #IMPLIED'>
 737  
 738  <!ENTITY % cellvalign.att
 739          'valign         (top|middle
 740                          |bottom
 741                          |baseline)      #IMPLIED'>
 742  
 743  <!ENTITY % thtd.att
 744          'abbr           CDATA           #IMPLIED
 745          axis            CDATA           #IMPLIED
 746          headers         IDREFS          #IMPLIED
 747          scope           (row
 748                          |col
 749                          |rowgroup
 750                          |colgroup)      #IMPLIED
 751          rowspan         NMTOKEN         "1"
 752          colspan         NMTOKEN         "1"'>
 753  
 754  <!ENTITY % width.att
 755          'width          CDATA           #IMPLIED'>
 756  
 757  <!ENTITY % span.att
 758          'span           NMTOKEN         "1"'>
 759  
 760  <!ELEMENT table
 761          (caption?, (col*|colgroup*), thead?, tfoot?, tbody+)>
 762  <!ATTLIST table
 763          %common.att;
 764          %width.att;
 765          summary         CDATA           #IMPLIED
 766          border          CDATA           #IMPLIED
 767          frame           (void|above
 768                          |below|hsides
 769                          |lhs|rhs
 770                          |vsides|box
 771                          |border)        #IMPLIED
 772          rules           (none|groups
 773                          |rows|cols
 774                          |all)           #IMPLIED
 775          cellspacing     CDATA           #IMPLIED
 776          cellpadding     CDATA           #IMPLIED>
 777  
 778  <!ELEMENT caption (%p.pcd.mix;)*>
 779  <!ATTLIST caption %common.att;>
 780  
 781  <!ELEMENT col EMPTY>
 782  <!ATTLIST col
 783          %common.att;
 784          %span.att;
 785          %width.att;
 786          %cellhalign.att;
 787          %cellvalign.att;>
 788  
 789  <!ELEMENT colgroup (col)*>
 790  <!ATTLIST colgroup
 791          %common.att;
 792          %span.att;
 793          %width.att;
 794          %cellhalign.att;
 795          %cellvalign.att;>
 796  
 797  <!ELEMENT thead (tr)+>
 798  <!ATTLIST thead
 799          %common.att;
 800          %cellhalign.att;
 801          %cellvalign.att;>
 802  
 803  <!ELEMENT tfoot (tr)+>
 804  <!ATTLIST tfoot
 805          %common.att;
 806          %cellhalign.att;
 807          %cellvalign.att;>
 808  
 809  <!ELEMENT tbody (tr)+>
 810  <!ATTLIST tbody
 811          %common.att;
 812          %cellhalign.att;
 813          %cellvalign.att;>
 814  
 815  <!ELEMENT tr (th|td)+>
 816  <!ATTLIST tr
 817          %common.att;
 818          %cellhalign.att;
 819          %cellvalign.att;>
 820  
 821  <!ELEMENT th (%p.pcd.mix;|%p.mix;)*>
 822  <!ATTLIST th
 823          %common.att;
 824          %thtd.att;
 825          %cellhalign.att;
 826          %cellvalign.att;>
 827  
 828  <!ELEMENT td (%p.pcd.mix;|%p.mix;)*>
 829  <!ATTLIST td
 830          %common.att;
 831          %thtd.att;
 832          %cellhalign.att;
 833          %cellvalign.att;>
 834  
 835  <!-- ............................................................... -->
 836  <!-- Phrase-level elements ......................................... -->
 837  
 838  <!--    bibref: Should generate, in square brackets, "key" on bibl -->
 839  <!ELEMENT bibref EMPTY>
 840  <!--    ref attribute:
 841          A bibliography reference must link to the bibl element that
 842          describes the resource. -->
 843  <!ATTLIST bibref
 844          %common.att;
 845          %ref-req.att;>
 846  
 847  <!ELEMENT code (%tech.pcd.mix;)*>
 848  <!ATTLIST code %common.att;>
 849  
 850  <!--
 851  #1998-03-10: maler: Declared ednote and related elements.
 852  -->
 853  
 854  <!ELEMENT ednote (name?, date?, edtext)>
 855  <!ATTLIST ednote %common.att;>
 856  
 857  <!ELEMENT date (#PCDATA)>
 858  <!ATTLIST date %common.att;>
 859  
 860  <!ELEMENT edtext (#PCDATA)>
 861  <!ATTLIST edtext %common.att;>
 862  
 863  <!ELEMENT emph (#PCDATA)>
 864  <!ATTLIST emph %common.att;>
 865  
 866  <!--    footnote: Both footnote content and call to footnote -->
 867  <!ELEMENT footnote (%obj.mix;)+>
 868  <!ATTLIST footnote %common.att;>
 869  
 870  <!ELEMENT kw (%tech.pcd.mix;)*>
 871  <!ATTLIST kw %common.att;>
 872  
 873  <!ELEMENT loc (#PCDATA)>
 874  <!--    HREF attribute:
 875          The purpose of a loc element is to function as a hypertext
 876          link to a resource.  (Ideally, the content of loc will also
 877          mention the URI of the resource, so that readers of the
 878          printed version will be able to locate the resource.) -->
 879  <!ATTLIST loc
 880          %common.att;
 881          %href-req.att;>
 882  
 883  <!ELEMENT nt (#PCDATA)>
 884  <!--    def attribute:
 885          The nonterminal must link to the production that defines
 886          it. -->
 887  <!ATTLIST nt
 888          %common.att;
 889          %def-req.att;>
 890  
 891  <!--
 892  #1998-03-10: maler: Declared quote.
 893  -->
 894  
 895  <!--    quote: Scare quotes and other purely presentational quotes -->
 896  <!ELEMENT quote (%p.pcd.mix;)*>
 897  <!ATTLIST quote %common.att;>
 898  
 899  <!--    specref: Should generate italic "[n.n], Section Title" for
 900          div, "n" for numbered item, "[n]" for production, or
 901          "Issue n" for issue -->
 902  <!ELEMENT specref EMPTY>
 903  <!--    ref attribute:
 904          The purpose of a specref element is to link to a div, item
 905          in an olist, or production in the current spec. -->
 906  <!ATTLIST specref
 907          %common.att;
 908          %ref-req.att;>
 909  
 910  <!ELEMENT term (#PCDATA)>
 911  <!ATTLIST term %common.att;>
 912  
 913  <!ELEMENT termdef (%termdef.pcd.mix;|%termdef.mix;)*>
 914  <!--    ID attribute:
 915          A term definition must have an ID so that it can be linked
 916          to from termref elements. -->
 917  <!--    term attribute:
 918          The canonical form of the term or phrase being defined must
 919          appear in this attribute, even if the term or phrase also
 920          appears in the element content in identical form (e.g., in
 921          the term element). -->
 922  <!ATTLIST termdef
 923          %common-idreq.att;
 924          term            CDATA           #REQUIRED>
 925  
 926  <!ELEMENT termref (#PCDATA)>
 927  <!--    ref attribute:
 928          A term reference must link to the termdef element that
 929          defines the term. -->
 930  <!ATTLIST termref
 931          %common.att;
 932          %def-req.att;>
 933  
 934  <!ELEMENT titleref (#PCDATA)>
 935  <!--    HREF attribute:
 936          A title reference can optionally function as a hypertext
 937          link to the resource with this title. -->
 938  <!ATTLIST titleref
 939          %common.att;
 940          %href.att;>
 941  
 942  <!ELEMENT xnt (#PCDATA)>
 943  <!--    HREF attribute:
 944          The nonterminal must hyperlink to a resource that serves
 945          to define it (e.g., a production in a related XML
 946          specification). -->
 947  <!ATTLIST xnt
 948          %common.att;
 949          %href-req.att;>
 950  
 951  <!--
 952  #1997-12-29: maler: Declared xspecref.
 953  -->
 954  
 955  <!ELEMENT xspecref (#PCDATA)>
 956  <!--    HREF attribute:
 957          The spec reference must hyperlink to the resource to
 958          cross-refer to (e.g., a section in a related XML
 959          specification). -->
 960  <!ATTLIST xspecref
 961          %common.att;
 962          %href-req.att;>
 963  
 964  <!ELEMENT xtermref (#PCDATA)>
 965  <!--    HREF attribute:
 966          The term reference must hyperlink to the resource that
 967          serves to define the term (e.g., a term definition in
 968          a related XML specification). -->
 969  <!ATTLIST xtermref
 970          %common.att;
 971          %href-req.att;>
 972  
 973  <!-- ............................................................... -->
 974  <!-- Unused elements for ADEPT ..................................... -->
 975  
 976  <!--
 977  #1997-09-30: maler: Added unusued elements.
 978  #1997-10-14: maler: Fixed div to move nested div to the mixture.
 979  #1998-05-14: maler: Added key-term, htable, and htbody.
 980  -->
 981  
 982  <!--    The following elements are purposely declared but never
 983          referenced.  Declaring them allows them to be pasted from
 984          an HTML document or an earlier version of an XML spec document
 985          into a document using this DTD in ADEPT.  The ATD Context
 986          Transformation mechanism will try to convert them to the
 987          appropriate element for this DTD.  While this conversion
 988          will not work for all fragments, it does allow many cases
 989          to work reasonably well. -->
 990  
 991  <!ELEMENT div
 992          (head?, (%div.mix;|ul|ol|h1|h2|h3|h4|h5|h6|div)*)>
 993  <!ELEMENT h1 (%head.pcd.mix;|em|a)*>
 994  <!ELEMENT h2 (%head.pcd.mix;|em|a)*>
 995  <!ELEMENT h3 (%head.pcd.mix;|em|a)*>
 996  <!ELEMENT h4 (%head.pcd.mix;|em|a)*>
 997  <!ELEMENT h5 (%head.pcd.mix;|em|a)*>
 998  <!ELEMENT h6 (%head.pcd.mix;|em|a)*>
 999  <!ELEMENT pre (%eg.pcd.mix;|em)*>
1000  <!ELEMENT ul (item|li)*>
1001  <!ELEMENT ol (item|li)*>
1002  <!ELEMENT li (#PCDATA|%obj.mix;)*>
1003  <!ELEMENT em (#PCDATA)>
1004  <!ELEMENT a (#PCDATA)>
1005  
1006  <!ELEMENT key-term (#PCDATA)>
1007  <!ELEMENT htable
1008          (caption?, (col*|colgroup*), thead?, tfoot?, tbody+)>
1009  <!ELEMENT htbody (tr)+>
1010  <!ELEMENT statusp (%p.pcd.mix;|%p.mix;)*>
1011  
1012  <!-- ............................................................... -->
1013  <!-- Change history ................................................ -->
1014  
1015  <!--
1016  #1997-08-18: maler
1017  #- Did a major revision.
1018  #1997-09-10: maler
1019  #- Updated FPI.
1020  #- Removed namekey element and put key attribute on name element.
1021  #- Made statusp element and supporting entities.
1022  #- Added slist element with sitem+ content.
1023  #- Required head on scrap and added new bnf subelement.
1024  #- Added an xnt element and allowed it and nt in regular text and rhs.
1025  #- Removed the ntref element.
1026  #- Added back the com element to the content of rhs.
1027  #- Added a key attribute to bibl.
1028  #- Removed the ident element.
1029  #- Added a term element to be used inside termdef.
1030  #- Added an xtermref element parallel to termref.
1031  #- Beefed up DTD comments.
1032  #1997-09-12: maler
1033  #- Allowed term element in general text.
1034  #- Changed bibref to EMPTY.
1035  #- Added ref.class to termdef.pcd.mix.
1036  #1997-09-14: maler
1037  #- Changed main attribute of xtermref from def to href.
1038  #- Added termdef.class to label contents.
1039  #1997-09-30: maler
1040  #- Added character entity module and added new entities.
1041  #- Removed p from appearing directly in self; created %p.mix;.
1042  #- Added inform-div (non-normative division) element.
1043  #- Fixed xtermref comment to mention HREF, not ref.
1044  #- Extended orglist model to allow optional affiliation.
1045  #- Modified author to make affiliation optional.
1046  #- Added %speclist.class; and %note.class; to %obj.mix; and %p.mix;.
1047  #- Added %note.class; and %illus.class; to %termdef.pcd.mix;.
1048  #- Added unused HTML elements.
1049  #- Put empty system ID next to public ID in entity declarations.
1050  #1997-10-14: maler
1051  #- Fixed "unused" div content model to move nested div to mixture.
1052  #1997-10-16: maler
1053  #- Added SGML Open Exchange tables.
1054  #1997-11-28: maler
1055  #- Added support for prodgroup and its attributes.
1056  #- Added support for HTML tables.
1057  #- Added loc and bibref to content of com.
1058  #- Added loc to general p content models.
1059  #- Allowed p as alternative to statusp in status.
1060  #- Added non-null system IDs to external parameter entity declarations.
1061  #- (Modified the SGML Open table module to make it XML-compliant.)
1062  #- (Modified the character entity module.)
1063  #1997-12-29: maler
1064  #- Moved #PCDATA occurrences to come before GIs in content models.
1065  #- Removed use of the SGML Open table module.
1066  #- Added xspecref element.
1067  #- Ensured that all FPIs contain 4-digit year.
1068  #- (Modified the character entity module.)
1069  #1998-03-10: maler
1070  #- Merged the character entity and table modules into the main file.
1071  #- Added ldquo and rdquo entities.
1072  #- Added common attributes to prodgroup.
1073  #- Made the email element in header optional.
1074  #- Removed reference to the SGML Open table model.
1075  #- Added ednote element.
1076  #- Added quote element.
1077  #- Updated XLink usage to reflect 3 March 1998 WD.
1078  #- Added "local" entities to the class entities for customization.
1079  #- Parameterized several content models to allow for customization.
1080  #1998-03-23: maler
1081  #- Cleaned up some comments and removed some others.
1082  #- Added xml:space semi-common attribute to eg and bnf elements.
1083  #- Added show and embed attributes on all the uses of href.
1084  #- Added %common.att; to all HTML table elements.
1085  #- Added a real URI to the "typical invocation" comment.
1086  #1998-05-14: maler
1087  #- Fixed mdash, ldquo, and rdquo character entities.
1088  #- Switched to the full HTML 4.0 table model.
1089  #- Removed htable/htbody elements and replaced them with table/tbody.
1090  #- Added issue element to %note.class; and declared it.
1091  #- Allowed prevlocs and latestloc in either order.
1092  #- Added key-term, htable, htbody, and statusp as unused elements.
1093  #- Removed real statusp element in favor of plain p.
1094  #1998-05-21: maler
1095  #- Declared generic constraint and constraintnote elements.
1096  #- Added constraintnote to %note.class;.
1097  #- Added constraint to %eg.pcd.mix; and prod content model.
1098  -->
1099  
1100  <!-- ............................................................... -->
1101  <!-- End of XML specification DTD .................................. -->
1102  <!-- ............................................................... -->