<!-- ............................................................... -->
<!-- XML specification DTD ......................................... -->
<!-- ............................................................... -->

<!--
TYPICAL INVOCATION:
#  <!DOCTYPE spec PUBLIC
#       "-//W3C//DTD Specification::19980323//EN"
#       "http://www.w3.org/XML/Group/DTD/xmlspec.dtd">

PURPOSE:
  This DTD was developed for use with the XML family of W3C
  specifications.  It is an XML-compliant DTD based in part on
  the TEI Lite and Sweb DTDs.

DEPENDENCIES:
  None.

CHANGE HISTORY:
  The list of changes is at the end of the DTD.

  For all details, see the design report at:

    <http://www.w3.org/XML/Group/DTD/xmlspec-report.htm>

  The "typical invocation" FPI always gets updated to reflect the
  date of the most recent changes.

  Search this file for "#" in the first column to see change history
  comments.

MAINTAINER:
  Eve Maler
  ArborText Inc.
  elm@arbortext.com
  voice: +1 781 270 5750
  fax:   +1 781 273 3760
-->

<!-- ............................................................... -->
<!-- Entities for characters and symbols ........................... -->

<!--
#1998-03-10: maler: Added &ldquo; and &rdquo;.
#                   Used 8879:1986-compatible decimal character
#                   references.
#                   Merged charent.mod file back into main file.
-->

<!ENTITY lt     "&#38;#60;">
<!ENTITY gt     "&#62;">
<!ENTITY amp    "&#38;#38;">
<!ENTITY apos   "&#39;">
<!ENTITY quot   "&#34;">
<!ENTITY mdash  "--">
<!ENTITY nbsp   "&#160;">
<!ENTITY ldquo  "#x201C;">
<!ENTITY rdquo  "#x201D;">

<!-- ............................................................... -->
<!-- Entities for classes of standalone elements ................... -->

<!--
#1997-10-16: maler: Added table to %illus.class;.
#1997-11-28: maler: Added htable to %illus.class;.
#1997-12-29: maler: IGNOREd table.
#1998-03-10: maler: Removed SGML Open-specific %illus.class;.
#                   Added "local" entities for customization.
-->

<!ENTITY % local.p.class        "">
<!ENTITY % p.class              "p
                                %local.p.class;">

<!ENTITY % local.statusp.class  "">
<!ENTITY % statusp.class        "statusp
                                %local.statusp.class;">

<!ENTITY % local.list.class     "">
<!ENTITY % list.class           "ulist|olist|slist|glist
                                %local.list.class;">

<!ENTITY % local.speclist.class "">
<!ENTITY % speclist.class       "orglist|blist
                                %local.speclist.class;">

<!ENTITY % local.note.class     "">
<!ENTITY % note.class           "note|wfcnote|vcnote
                                %local.note.class;">

<!ENTITY % local.illus.class    "">
<!ENTITY % illus.class          "eg|graphic|scrap|htable
                                %local.illus.class;">

<!-- ............................................................... -->
<!-- Entities for classes of phrase-level elements ................. -->

<!--
#1997-12-29: maler: Added xspecref to %ref.class;.
#1998-03-10: maler: Added %ednote.class;.
#                   Added "local" entities for customization.
-->

<!ENTITY % local.annot.class    "">
<!ENTITY % annot.class          "footnote
                                %local.annot.class;">

<!ENTITY % local.termdef.class    "">
<!ENTITY % termdef.class        "termdef|term
                                %local.termdef.class;">

<!ENTITY % local.emph.class    "">
<!ENTITY % emph.class           "emph|quote
                                %local.emph.class;">

<!ENTITY % local.ref.class    "">
<!ENTITY % ref.class            "bibref|specref|termref|titleref
                                |xspecref|xtermref
                                %local.ref.class;">

<!ENTITY % local.loc.class    "">
<!ENTITY % loc.class            "loc
                                %local.loc.class;">

<!ENTITY % local.tech.class    "">
<!ENTITY % tech.class           "kw|nt|xnt|code
                                %local.tech.class;">

<!ENTITY % local.ednote.class    "">
<!ENTITY % ednote.class         "ednote
                                %local.ednote.class;">

<!-- ............................................................... -->
<!-- Entities for mixtures of standalone elements .................. -->

<!--
#1997-09-30: maler: Created %p.mix; to eliminate p from self.
#1997-09-30: maler: Added %speclist.class; to %obj.mix; and %p.mix;.
#1997-09-30: maler: Added %note.class; to %obj.mix; and %p.mix;.
#1997-10-16: maler: Created %entry.mix;.  Note that some elements
#                   left out here are still allowed in termdef,
#                   which entry can contain through %p.pcd.mix;.
#1997-11-28: maler: Added %p.class; to %statusobj.mix;.
#1998-03-10: maler: Added %ednote.class; to all mixtures, except
#                   %p.mix; and %statusobj.mix;, because paragraphs
#                   and status paragraphs will contain ednote
#                   through %p.pcd.mix;.
#1998-03-123: maler: Added %termdef.mix; (broken out from
#                    %termdef.pcd.mix;).
-->

<!ENTITY % div.mix
        "%p.class;|%list.class;|%speclist.class;|%note.class;
        |%illus.class;|%ednote.class;">
<!ENTITY % obj.mix
        "%p.class;|%list.class;|%speclist.class;|%note.class;
        |%illus.class;|%ednote.class;">
<!ENTITY % p.mix
        "%list.class;|%speclist.class;|%note.class;|%illus.class;">
<!ENTITY % entry.mix
        "%list.class;|note|eg|graphic|%ednote.class;">
<!ENTITY % statusobj.mix
        "%p.class;|%statusp.class;|%list.class;">
<!ENTITY % hdr.mix
        "%p.class;|%list.class;|%ednote.class;">
<!ENTITY % termdef.mix
        "%note.class;|%illus.class;">

<!-- ............................................................... -->
<!-- Entities for mixtures of #PCDATA and phrase-level elements .... -->

<!--    Note that %termdef.pcd.mix contains %note.class;
        and %illus.class;, considered standalone elements. -->

<!--
#1997-09-30: maler: Added scrap and %note.class; to %termdef.pcd.mix;.
#1997-11-28: maler: Added %loc.class; to %p.pcd.mix;.
#1998-03-10: maler: Added %ednote.class; to all mixtures.
#1998-03-23: maler: Moved some %termdef.pcd.mix; stuff out to
#                   %termdef.mix;.
-->

<!ENTITY % p.pcd.mix
        "#PCDATA|%annot.class;|%termdef.class;|%emph.class;
        |%ref.class;|%tech.class;|%loc.class;|%ednote.class;">
<!ENTITY % statusp.pcd.mix
        "#PCDATA|%annot.class;|%termdef.class;|%emph.class;
        |%ref.class;|%tech.class;|%loc.class;|%ednote.class;">
<!ENTITY % head.pcd.mix
        "#PCDATA|%annot.class;|%emph.class;|%tech.class;|%ednote.class;">
<!ENTITY % label.pcd.mix
        "#PCDATA|%annot.class;|%termdef.class;|%emph.class;|%tech.class;
        |%ednote.class;">
<!ENTITY % eg.pcd.mix
        "#PCDATA|%annot.class;|%emph.class;|%ednote.class;">
<!ENTITY % termdef.pcd.mix
        "#PCDATA|term|%emph.class;|%ref.class;|%tech.class;
        |%ednote.class;">
<!ENTITY % bibl.pcd.mix
        "#PCDATA|%emph.class;|%ref.class;|%loc.class;|%ednote.class;">
<!ENTITY % tech.pcd.mix
        "#PCDATA|%ednote.class;">
<!ENTITY % loc.pcd.mix
        "#PCDATA|%loc.class;|%ednote.class;">

<!-- ............................................................... -->
<!-- Entities for customizable content models ...................... -->

<!--
#1998-03-10: maler: Added customization entities.
-->

<!ENTITY % spec.mdl
        "header, front?, body, back?">

<!ENTITY % header.mdl
        "title, subtitle?, version, w3c-designation, w3c-doctype,
        pubdate, notice*, publoc, prevlocs?, latestloc?, authlist,
        status, abstract, pubstmt?, sourcedesc?, langusage,
        revisiondesc">

<!ENTITY % pubdate.mdl
        "day?, month, year">

<!-- ............................................................... -->
<!-- Entities for common attributes ................................ -->

<!--    key attribute:
        Optionally provides a sorting or indexing key, for cases when
        the element content is inappropriate for this purpose. -->
<!ENTITY % key.att
        'key                    CDATA           #IMPLIED'>

<!--    def attribute:
        Points to the element where the relevant definition can be
        found, using the IDREF mechanism.  %def.att; is for optional
        def attributes, and %def-req.att; is for required def
        attributes. -->
<!ENTITY % def.att
        'def                    IDREF           #IMPLIED'>
<!ENTITY % def-req.att
        'def                    IDREF           #REQUIRED'>

<!--    ref attribute:
        Points to the element where more information can be found,
        using the IDREF mechanism.  %ref.att; is for optional
        ref attributes, and %ref-req.att; is for required ref
        attributes. -->
<!ENTITY % ref.att
        'ref                    IDREF           #IMPLIED'>
<!ENTITY % ref-req.att
        'ref                    IDREF           #REQUIRED'>

<!--
#1998-03-23: maler: Added show and actuate attributes to href.
#                   Added semi-common xml:space attribute.
-->

<!--    HREF and source attributes:
        Points to the element where more information or source data
        can be found, using the URL (XLL simple link) mechanism.
        For some purposes, is associated with additional XLL
        attributes. %href.att; is for optional HREF attributes,
        and %href-req.att; is for required HREF attributes.
        %source-req.att; is for the source attribute, which
        is always required. -->
<!ENTITY % href.att
        'xml:link               CDATA           #FIXED "simple"
        href                    CDATA           #IMPLIED
        show                    CDATA           #FIXED "embed"
        actuate                 CDATA           #FIXED "auto"'>

<!ENTITY % href-req.att
        'xml:link               CDATA           #FIXED "simple"
        href                    CDATA           #REQUIRED
        show                    CDATA           #FIXED "embed"
        actuate                 CDATA           #FIXED "auto"'>

<!ENTITY % source-req.att
        'xml:link               CDATA           #FIXED "simple"
        xml:attributes          NMTOKENS        #FIXED "href source"
        source                  CDATA           #REQUIRED
        show                    CDATA           #FIXED "embed"
        actuate                 CDATA           #FIXED "auto"'>

<!--    xml:space attribute:
        Indicates that the element contains white space
        that the formatter or other application should retain,
        as appropriate to its function. -->
<!ENTITY % xmlspace.att
        'xml:space              (default
                                |preserve)      #FIXED "preserve"'>

<!--    Common attributes:
        Every element has an ID attribute (sometimes required,
        but usually optional) for links, and a Role attribute
        for extending the useful life of the DTD by allowing
        authors to make subclasses for any element. %common.att;
        is for common attributes where the ID is optional, and
        %common-idreq.att; is for common attributes where the
        ID is required. -->
<!ENTITY % common.att
        'id                     ID              #IMPLIED
        role                    NMTOKEN         #IMPLIED'>
<!ENTITY % common-idreq.att
        'id                     ID              #REQUIRED
        role                    NMTOKEN         #IMPLIED'>

<!-- ............................................................... -->
<!-- Common elements ............................................... -->

<!--    head: Title on divisions, productions, and the like -->
<!ELEMENT head (%head.pcd.mix;)*>
<!ATTLIST head %common.att;>

<!-- ............................................................... -->
<!-- Major specification structure ................................. -->

<!--
#1998-03-10: maler: Made spec content model easily customizable.
-->

<!ELEMENT spec (%spec.mdl;)>
<!ATTLIST spec %common.att;>

<!ELEMENT front (div1+)>
<!ATTLIST front %common.att;>

<!ELEMENT body (div1+)>
<!ATTLIST body %common.att;>

<!--
#1997-09-30: maler: Added inform-div1 to back content.
-->

<!ELEMENT back ((div1+, inform-div1*) | inform-div1+)>
<!ATTLIST back %common.att;>

<!ELEMENT div1 (head, (%div.mix;)*, div2*)>
<!ATTLIST div1 %common.att;>

<!--
#1997-09-30: maler: Added inform-div1 declarations.
-->

<!--    inform-div1: Non-normative division in back matter -->
<!ELEMENT inform-div1 (head, (%div.mix;)*, div2*)>
<!ATTLIST inform-div1 %common.att;>

<!ELEMENT div2 (head, (%div.mix;)*, div3*)>
<!ATTLIST div2 %common.att;>

<!ELEMENT div3 (head, (%div.mix;)*, div4*)>
<!ATTLIST div3 %common.att;>

<!ELEMENT div4 (head, (%div.mix;)*)>
<!ATTLIST div4 %common.att;>

<!-- Specification header .......... -->

<!--
#1998-03-10: maler: Made header content model easily customizable.
-->

<!ELEMENT header (%header.mdl;)>
<!ATTLIST header %common.att;>

<!--    Example of title: "Extensible Cheese Language (XCL)" -->
<!ELEMENT title (#PCDATA)>
<!ATTLIST title %common.att;>

<!--    Example of subtitle: "A Cheesy Specification" -->
<!ELEMENT subtitle (#PCDATA)>
<!ATTLIST subtitle %common.att;>

<!--    Example of version: "Version 666.0" -->
<!ELEMENT version (#PCDATA)>
<!ATTLIST version %common.att;>

<!--    Example of w3c-designation: "WD-xcl-19991231" -->
<!ELEMENT w3c-designation (#PCDATA)>
<!ATTLIST w3c-designation %common.att;>

<!--    Example of w3c-doctype: "World Wide Web Consortium Working
        Draft" -->
<!ELEMENT w3c-doctype (#PCDATA)>
<!ATTLIST w3c-doctype %common.att;>

<!--
#1998-03-10: maler: Made pubdate content model easily customizable.
-->

<!ELEMENT pubdate (%pubdate.mdl;)>
<!ATTLIST pubdate %common.att;>

<!ELEMENT day (#PCDATA)>
<!ATTLIST day %common.att;>

<!ELEMENT month (#PCDATA)>
<!ATTLIST month %common.att;>

<!ELEMENT year (#PCDATA)>
<!ATTLIST year %common.att;>

<!--    Example of notice: "This draft is for public comment..." -->
<!ELEMENT notice (%hdr.mix;)+>
<!ATTLIST notice %common.att;>

<!ELEMENT publoc (loc+)>
<!ATTLIST publoc %common.att;>

<!ELEMENT prevlocs (loc+)>
<!ATTLIST prevlocs %common.att;>

<!ELEMENT latestloc (loc+)>
<!ATTLIST latestloc %common.att;>

<!--      loc (defined in "Phrase-level elements" below) -->

<!ELEMENT authlist (author+)>
<!ATTLIST authlist %common.att;>

<!--
#1997-09-30: maler: Made affiliation optional.
#1998-03-10: maler: Made email optional.
-->

<!ELEMENT author (name, affiliation?, email?)>
<!ATTLIST author %common.att;>

<!ELEMENT name (#PCDATA)>
<!ATTLIST name
        %common.att;
        %key.att;>

<!ELEMENT affiliation (#PCDATA)>
<!ATTLIST affiliation %common.att;>

<!ELEMENT email (#PCDATA)>
<!--    HREF attribute:
        email functions as a hypertext reference through this
        required attribute.  Typically the reference would use
        the mailto: scheme. -->
<!ATTLIST email
        %common.att;
        %href-req.att;>

<!--    The status element now contains both statusp and p, and
        the latter now allows loc.  Use p; statusp will be removed
        eventually. -->
<!ELEMENT status (%statusobj.mix;)+>
<!ATTLIST status %common.att;>

<!ELEMENT abstract (%hdr.mix;)*>
<!ATTLIST abstract %common.att;>

<!ELEMENT pubstmt (%hdr.mix;)+>
<!ATTLIST pubstmt %common.att;>

<!ELEMENT sourcedesc (%hdr.mix;)+>
<!ATTLIST sourcedesc %common.att;>

<!ELEMENT langusage (language+)>
<!ATTLIST langusage %common.att;>

<!ELEMENT language (#PCDATA)>
<!ATTLIST language %common.att;>

<!ELEMENT revisiondesc (%hdr.mix;)+>
<!ATTLIST revisiondesc %common.att;>

<!-- ............................................................... -->
<!-- Standalone elements ........................................... -->

<!-- Paragraphs .................... -->

<!--
#1997-09-30: maler: Changed from %obj.mix; to %p.mix;.
#1997-12-29: maler: Changed order of %p.mix; and %p.pcd.mix; references.
#1997-12-29: maler: Changed order of %statusobj.mix; and %statusp.pcd.mix;
#                   references.
-->

<!ELEMENT p (%p.pcd.mix;|%p.mix;)*>
<!ATTLIST p %common.att;>

<!--    statusp: Special paragraph that allows loc inside it (note that
        p now also allows loc) -->
<!ELEMENT statusp (%statusp.pcd.mix;|%statusobj.mix;)*>
<!ATTLIST statusp %common.att;>

<!-- Lists ......................... -->

<!ELEMENT ulist (item+)>
<!--    spacing attribute:
        Use "normal" to get normal vertical spacing for items;
        use "compact" to get less spacing.  The default is dependent
        on the stylesheet. -->
<!ATTLIST ulist
        %common.att;
        spacing         (normal|compact)        #IMPLIED>

<!ELEMENT olist (item+)>
<!--    spacing attribute:
        Use "normal" to get normal vertical spacing for items;
        use "compact" to get less spacing.  The default is dependent
        on the stylesheet. -->
<!ATTLIST olist
        %common.att;
        spacing         (normal|compact)        #IMPLIED>

<!ELEMENT item (%obj.mix;)+>
<!ATTLIST item %common.att;>

<!ELEMENT slist (sitem+)>
<!ATTLIST slist %common.att;>

<!ELEMENT sitem (%p.pcd.mix;)*>
<!ATTLIST sitem %common.att;>

<!ELEMENT glist (gitem+)>
<!ATTLIST glist %common.att;>

<!ELEMENT gitem (label, def)>
<!ATTLIST gitem %common.att;>

<!ELEMENT label (%label.pcd.mix;)*>
<!ATTLIST label %common.att;>

<!ELEMENT def (%obj.mix;)*>
<!ATTLIST def %common.att;>

<!-- Special lists ................. -->

<!ELEMENT blist (bibl+)>
<!ATTLIST blist %common.att;>

<!ELEMENT bibl (%bibl.pcd.mix;)*>
<!--    HREF attribute:
        bibl optionally functions as a hypertext reference to the
        referred-to resource through this attribute. -->
<!ATTLIST bibl
        %common.att;
        %href.att;
        %key.att;>

<!ELEMENT orglist (member+)>
<!ATTLIST orglist %common.att;>

<!--
#1997-09-30: maler: Added optional affiliation.
-->

<!ELEMENT member (name, affiliation?, role?)>
<!ATTLIST member %common.att;>

<!--      name (defined in "Specification header" above) -->
<!--      affiliation (defined in "Specification header" above) -->

<!ELEMENT role (#PCDATA)>
<!ATTLIST role %common.att;>

<!-- Notes ......................... -->

<!ELEMENT note (%obj.mix;)+>
<!ATTLIST note %common.att;>

<!ELEMENT wfcnote (head, (%obj.mix;)+)>
<!--    ID attribute:
        wfcnote must have an ID so that it can be pointed to
        from a wfc element in a production. -->
<!ATTLIST wfcnote
        %common-idreq.att;>

<!ELEMENT vcnote (head, (%obj.mix;)+)>
<!--    ID attribute:
        vcnote must have an ID so that it can be pointed to
        from a vc element in a production. -->
<!ATTLIST vcnote
        %common-idreq.att;>

<!-- Illustrations ................. -->

<!--
#1998-03-23: maler: Added xml:space attribute.
-->

<!ELEMENT eg (%eg.pcd.mix;)*>
<!ATTLIST eg
        %common.att;
        %xmlspace.att;>

<!ELEMENT graphic EMPTY>
<!--    source attribute:
        The graphic data must reside at the location pointed to.
        This is a hypertext reference, but for practical purposes,
        for now it should just be a pathname. -->
<!ATTLIST graphic
        %common.att;
        %source-req.att;
        alt             CDATA           #IMPLIED>

<!--
#1997-11-28: maler: Added prodgroup to scrap and defined it.
-->

<!ELEMENT scrap (head, (prodgroup+ | prod+ | bnf))>
<!--    lang attribute:
        The scrap can link to a description of the language used,
        found in a language element in the header. -->
<!ATTLIST scrap
        %common.att;
        lang            IDREF           #IMPLIED>

<!ELEMENT prodgroup (prod+)>
<!--    pcw<n> attributes:
        Presentational attributes to control the width
        of the "pseudo-table" columns used to output
        groups of productions. -->
<!ATTLIST prodgroup
        %common.att;
        pcw1            CDATA           #IMPLIED
        pcw2            CDATA           #IMPLIED
        pcw3            CDATA           #IMPLIED
        pcw4            CDATA           #IMPLIED
        pcw5            CDATA           #IMPLIED
>

<!ELEMENT prod (lhs, (rhs, (com|wfc|vc)*)+)>
<!--    ID attribute:
        The production must have an ID so that cross-references
        (specref) and mentions of nonterminals (nt) can link to
        it. -->
<!ATTLIST prod
        %common-idreq.att;>

<!ELEMENT lhs (#PCDATA)>
<!ATTLIST lhs %common.att;>

<!ELEMENT rhs (#PCDATA|nt|xnt|com)*>
<!ATTLIST rhs %common.att;>

<!--      nt and xnt (defined in "Phrase-level elements" below) -->

<!--
#1997-11-28: maler: Added loc and bibref to com content.
-->

<!ELEMENT com (#PCDATA|loc|bibref)*>
<!ATTLIST com %common.att;>

<!--    wfc: Should generate the head of the wfcnote pointed to -->
<!ELEMENT wfc EMPTY>
<!--    def attribute:
        Each well formedness tagline in a production must link to the
        wfcnote that defines it. -->
<!ATTLIST wfc
        %def-req.att;
        %common.att;>

<!--    vc: Should generate the head of the vcnote pointed to -->
<!ELEMENT vc EMPTY>
<!--    def attribute:
        Each validity tagline in a production must link to the vcnote
        that defines it. -->
<!ATTLIST vc
        %def-req.att;
        %common.att;>

<!--
#1998-03-23: maler: Added xml:space attribute.
-->

<!--    bnf: Un-marked-up production -->
<!ELEMENT bnf (%eg.pcd.mix;)*>
<!ATTLIST bnf
        %common.att;
        %xmlspace.att;>

<!--
#1997-10-16: maler: Added table mechanism.
#1997-11-28: maler: Added non-null system ID to entity declaration.
#                   Added HTML table module.
#1997-12-29: maler: IGNOREd SGML Open table model.
#1998-03-10: maler: Removed SGML Open table model.
#                   Merged html-tbl.mod file into main file.
#                   Added %common.att; to all HTML table elements.
-->

<!--    TR and TD attributes:
        Alignment attributes.  No default. -->
<!ENTITY % trtd.att
        "align          (left
                        |center
                        |right)         #IMPLIED
        valign          (top
                        |middle
                        |bottom)        #IMPLIED">

<!ELEMENT htable (htbody+)>
<!ATTLIST htable
          border        CDATA           "0"
          cellpadding   CDATA           "0"
          align         (left
                        |center
                        |right)         "left">

<!ELEMENT htbody (tr+)>
<!ATTLIST htbody %common.att;>

<!ELEMENT tr     (td+)>
<!ATTLIST tr
        %common.att;
        %trtd.att;>

<!ELEMENT td     (%p.pcd.mix;)*>
<!ATTLIST td
        %common.att;
        %trtd.att;
        bgcolor         CDATA           #IMPLIED
        rowspan         CDATA           "1"
        colspan         CDATA           "1">

<!-- ............................................................... -->
<!-- Phrase-level elements ......................................... -->

<!--    bibref: Should generate, in square brackets, "key" on bibl -->
<!ELEMENT bibref EMPTY>
<!--    ref attribute:
        A bibliography reference must link to the bibl element that
        describes the resource. -->
<!ATTLIST bibref
        %common.att;
        %ref-req.att;>

<!ELEMENT code (%tech.pcd.mix;)*>
<!ATTLIST code %common.att;>

<!--
#1998-03-10: maler: Declared ednote and related elements.
-->

<!ELEMENT ednote (name?, date?, edtext)>
<!ATTLIST ednote %common.att;>

<!ELEMENT date (#PCDATA)>
<!ATTLIST date %common.att;>

<!ELEMENT edtext (#PCDATA)>
<!ATTLIST edtext %common.att;>

<!ELEMENT emph (#PCDATA)>
<!ATTLIST emph %common.att;>

<!--    footnote: Both footnote content and call to footnote -->
<!ELEMENT footnote (%obj.mix;)+>
<!ATTLIST footnote %common.att;>

<!ELEMENT kw (%tech.pcd.mix;)*>
<!ATTLIST kw %common.att;>

<!ELEMENT loc (#PCDATA)>
<!--    HREF attribute:
        The purpose of a loc element is to function as a hypertext
        link to a resource.  (Ideally, the content of loc will also
        mention the URI of the resource, so that readers of the
        printed version will be able to locate the resource.) -->
<!ATTLIST loc
        %common.att;
        %href-req.att;>

<!ELEMENT nt (#PCDATA)>
<!--    def attribute:
        The nonterminal must link to the production that defines
        it. -->
<!ATTLIST nt
        %common.att;
        %def-req.att;>

<!--
#1998-03-10: maler: Declared quote.
-->

<!--    quote: Scare quotes and other purely presentational quotes -->
<!ELEMENT quote (%p.pcd.mix;)*>
<!ATTLIST quote %common.att;>

<!--    specref: Should generate italic "[n.n], Section Title" for
        div, "n" for numbered item, or "[n]" for production -->
<!ELEMENT specref EMPTY>
<!--    ref attribute:
        The purpose of a specref element is to link to a div, item
        in an olist, or production in the current spec. -->
<!ATTLIST specref
        %common.att;
        %ref-req.att;>

<!ELEMENT term (#PCDATA)>
<!ATTLIST term %common.att;>

<!ELEMENT termdef (%termdef.pcd.mix;|%termdef.mix;)*>
<!--    ID attribute:
        A term definition must have an ID so that it can be linked
        to from termref elements. -->
<!--    term attribute:
        The canonical form of the term or phrase being defined must
        appear in this attribute, even if the term or phrase also
        appears in the element content in identical form (e.g., in
        the term element). -->
<!ATTLIST termdef
        %common-idreq.att;
        term            CDATA           #REQUIRED>

<!ELEMENT termref (#PCDATA)>
<!--    ref attribute:
        A term reference must link to the termdef element that
        defines the term. -->
<!ATTLIST termref
        %common.att;
        %def-req.att;>

<!ELEMENT titleref (#PCDATA)>
<!--    HREF attribute:
        A title reference can optionally function as a hypertext
        link to the resource with this title. -->
<!ATTLIST titleref
        %common.att;
        %href.att;>

<!ELEMENT xnt (#PCDATA)>
<!--    HREF attribute:
        The nonterminal must hyperlink to a resource that serves
        to define it (e.g., a production in a related XML
        specification). -->
<!ATTLIST xnt
        %common.att;
        %href-req.att;>

<!--
#1997-12-29: maler: Declared xspecref.
-->

<!ELEMENT xspecref (#PCDATA)>
<!--    HREF attribute:
        The spec reference must hyperlink to the resource to
        cross-refer to (e.g., a section in a related XML
        specification). -->
<!ATTLIST xspecref
        %common.att;
        %href-req.att;>

<!ELEMENT xtermref (#PCDATA)>
<!--    HREF attribute:
        The term reference must hyperlink to the resource that
        serves to define the term (e.g., a term definition in
        a related XML specification). -->
<!ATTLIST xtermref
        %common.att;
        %href-req.att;>

<!-- ............................................................... -->
<!-- Unused elements for ADEPT ..................................... -->

<!--
#1997-09-30: maler: Added unusued elements.
#1997-10-14: maler: Fixed div to move nested div to the mixture.
-->

<!--    The following elements are purposely declared but never
        referenced.  Declaring them allows them to be pasted from
        an HTML document into a document using this DTD in ADEPT.
        The ATD Context Transformation mechanism will try to convert
        them to the appropriate element for this DTD.  While this
        conversion will not work for all fragments, it does allow
        many cases to work reasonably well. -->

<!ELEMENT div
        (head?, (%div.mix;|ul|ol|h1|h2|h3|h4|h5|h6|div)*)>
<!ELEMENT h1 (%head.pcd.mix;|em|a)*>
<!ELEMENT h2 (%head.pcd.mix;|em|a)*>
<!ELEMENT h3 (%head.pcd.mix;|em|a)*>
<!ELEMENT h4 (%head.pcd.mix;|em|a)*>
<!ELEMENT h5 (%head.pcd.mix;|em|a)*>
<!ELEMENT h6 (%head.pcd.mix;|em|a)*>
<!ELEMENT pre (%eg.pcd.mix;|em)*>
<!ELEMENT ul (item|li)*>
<!ELEMENT ol (item|li)*>
<!ELEMENT li (#PCDATA|%obj.mix;)*>
<!ELEMENT em (#PCDATA)>
<!ELEMENT a (#PCDATA)>

<!-- ............................................................... -->
<!-- Change history ................................................ -->

<!--
#1997-08-18: maler
#- Did a major revision.
#1997-09-10: maler
#- Updated FPI.
#- Removed namekey element and put key attribute on name element.
#- Made statusp element and supporting entities.
#- Added slist element with sitem+ content.
#- Required head on scrap and added new bnf subelement.
#- Added an xnt element and allowed it and nt in regular text and rhs.
#- Removed the ntref element.
#- Added back the com element to the content of rhs.
#- Added a key attribute to bibl.
#- Removed the ident element.
#- Added a term element to be used inside termdef.
#- Added an xtermref element parallel to termref.
#- Beefed up DTD comments.
#1997-09-12: maler
#- Allowed term element in general text.
#- Changed bibref to EMPTY.
#- Added ref.class to termdef.pcd.mix.
#1997-09-14: maler
#- Changed main attribute of xtermref from def to href.
#- Added termdef.class to label contents.
#1997-09-30: maler
#- Added character entity module and added new entities.
#- Removed p from appearing directly in self; created %p.mix;.
#- Added inform-div (non-normative division) element.
#- Fixed xtermref comment to mention HREF, not ref.
#- Extended orglist model to allow optional affiliation.
#- Modified author to make affiliation optional.
#- Added %speclist.class; and %note.class; to %obj.mix; and %p.mix;.
#- Added %note.class; and %illus.class; to %termdef.pcd.mix;.
#- Added unused HTML elements.
#- Put empty system ID next to public ID in entity declarations.
#1997-10-14: maler
#- Fixed "unused" div content model to move nested div to mixture.
#1997-10-16: maler
#- Added SGML Open Exchange tables.
#1997-11-28: maler
#- Added support for prodgroup and its attributes.
#- Added support for HTML tables.
#- Added loc and bibref to content of com.
#- Added loc to general p content models.
#- Allowed p as alternative to statusp in status.
#- Added non-null system IDs to external parameter entity declarations.
#- (Modified the SGML Open table module to make it XML-compliant.)
#- (Modified the character entity module.)
#1997-12-29: maler
#- Moved #PCDATA occurrences to come before GIs in content models.
#- Removed use of the SGML Open table module.
#- Added xspecref element.
#- Ensured that all FPIs contain 4-digit year.
#- (Modified the character entity module.)
#1997-03-10: maler
#- Merged the character entity and table modules into the main file.
#- Added ldquo and rdquo entities.
#- Added common attributes to prodgroup.
#- Made the email element in header optional.
#- Removed reference to the SGML Open table model.
#- Added ednote element.
#- Added quote element.
#- Updated XLink usage to reflect 3 March 1998 WD.
#- Added "local" entities to the class entities for customization.
#- Parameterized several content models to allow for customization.
#1997-03-23: maler
#- Cleaned up some comments and removed some others.
#- Added xml:space semi-common attribute to eg and bnf elements.
#- Added show and embed attributes on all the uses of href.
#- Added %common.att; to all HTML table elements.
#- Added a real URI to the "typical invocation" comment.
-->

<!-- ............................................................... -->
<!-- End of XML specification DTD .................................. -->
<!-- ............................................................... -->
