<!-- XML EXCHANGE TABLE MODEL DECLARATION MODULE -->

<!-- This set of declarations defines the XML version of the Exchange
     Table Model as of the date shown in the Formal Public Identifier
     (FPI) for this entity.

     This set of declarations may be referred to using a public external
     entity declaration and reference as shown in the following three
     lines:

     <!ENTITY % calstblx
       PUBLIC "-//OASIS//DTD XML Exchange Table Model 19990315//EN">
       %calstblx;

     If various parameter entities used within this set of declarations
     are to be given non-default values, the appropriate declarations
     should be given before calling in this package (i.e., before the
     "%calstblx;" reference).
-->

<!-- The motivation for this XML version of the Exchange Table Model
     is simply to create an XML version of the SGML Exchange Table
     Model. By design, no effort has been made to "improve" the model.

     This XML version incorporates the logical bare minimum changes
     necessary to make the Exchange Table Model a valid XML DTD.

     It has been modified slightly for use in the combined HTML/CALS models
     supported by DocBook V4.3 and later.
-->

<!-- The XML version of the Exchange Table Model differs from
     the SGML version in the following ways:

     The following parameter entities have been removed:

       - tbl.table.excep, tbl.hdft.excep, tbl.row.excep, tbl.entry.excep
         There are no exceptions in XML. The following normative statement
         is made in lieu of exceptions: the exchange table model explicitly
         forbids a table from occurring within another table. If the
         content model of an entry includes a table element, then this
         cannot be enforced by the DTD, but it is a deviation from the
         exchange table model to include a table within a table.

       - tbl.hdft.name, tbl.hdft.mdl, tbl.hdft.excep, tbl.hdft.att
         The motivation for these elements was to change the table
         header/footer elements. Since XML does not allow element declarations
         to contain name groups, and the exchange table model does not
         allow a table to contain footers, the continued presence of these
         attributes seems unnecessary.

     The following parameter entity has been added:

       - tbl.thead.att
         This entity parameterizes the attributes on thead. It replaces
         the tbl.hdft.att parameter entity.

     Other miscellaneous changes:

       - Tag ommission indicators have been removed
       - Comments have been removed from declarations
       - NUMBER attributes have been changed to NMTOKEN
       - NUTOKEN attributes have been to changed to NMTOKEN
       - Removed the grouping characters around the content model
         parameter entry for the 'entry' element. This is necessary
         so that an entry can contain #PCDATA and be defined as an
         optional, repeatable OR group beginning with #PCDATA.
-->

<!-- This entity includes a set of element and attribute declarations
     that partially defines the Exchange table model.  However, the model
     is not well-defined without the accompanying natural language
     description of the semantics (meanings) of these various elements,
     attributes, and attribute values.  The semantic writeup, also available
     from SGML Open, should be used in conjunction with this entity.
-->

<!-- In order to use the Exchange table model, various parameter entity
     declarations are required.  A brief description is as follows:

     ENTITY NAME      WHERE USED              WHAT IT IS

     %yesorno         In ATTLIST of:          An attribute declared value
                      almost all elements     for a "boolean" attribute

     %paracon         In content model of:    The "text" (logical content)
                      <entry>                 of the model group for <entry>

     %titles          In content model of:    The "title" part of the model
                      table element           group for the table element

     %tbl.table.name  In declaration of:      The name of the "table"
                      table element           element

     %tbl.table-titles.mdl In content model of: The model group for the title
                      table elements          part of the content model for
                                              table element

     %tbl.table.mdl   In content model of:    The model group for the content
                      table elements          model for table element,
                                              often (and by default) defined
                                              in terms of %tbl.table-titles.mdl
                                              and tgroup

     %tbl.table.att   In ATTLIST of:          Additional attributes on the
                      table element           table element

     %bodyatt         In ATTLIST of:          Additional attributes on the
                      table element           table element (for backward
                                              compatibility with the SGML
                                              model)

     %tbl.tgroup.mdl  In content model of:    The model group for the content
                      <tgroup>                model for <tgroup>

     %tbl.tgroup.att  In ATTLIST of:          Additional attributes on the
                      <tgroup>                <tgroup> element

     %tbl.thead.att   In ATTLIST of:          Additional attributes on the
                      <thead>                 <thead> element

     %tbl.tbody.att   In ATTLIST of:          Additional attributes on the
                      <tbody>                 <tbody> element

     %tbl.colspec.att In ATTLIST of:          Additional attributes on the
                      <colspec>               <colspec> element

     %tbl.row.mdl     In content model of:    The model group for the content
                      <row>                   model for <row>

     %tbl.row.att     In ATTLIST of:          Additional attributes on the
                      <row>                   <row> element

     %tbl.entry.mdl   In content model of:    The model group for the content
                      <entry>                 model for <entry>

     %tbl.entry.att   In ATTLIST of:          Additional attributes on the
                      <entry>                 <entry> element

     This set of declarations will use the default definitions shown below
     for any of these parameter entities that are not declared before this
     set of declarations is referenced.
-->

<!-- These definitions are not directly related to the table model, but are
     used in the default CALS table model and may be defined elsewhere (and
     prior to the inclusion of this table module) in the referencing DTD. -->

<!ENTITY % yesorno 'NMTOKEN'> <!-- no if zero(s), yes if any other value -->
<!ENTITY % titles  'title?'>
<!ENTITY % pcd "#PCDATA">
<!ENTITY % paracon '%pcd;'> <!-- default for use in entry content -->

<!--
The parameter entities as defined below change and simplify the CALS table
model as published (as part of the Example DTD) in MIL-HDBK-28001.  The
resulting simplified DTD has support from the SGML Open vendors and is
therefore more interoperable among different systems.

These following declarations provide the Exchange default definitions
for these entities.  However, these entities can be redefined (by giving
the appropriate parameter entity declaration(s) prior to the reference
to this Table Model declaration set entity) to fit the needs of the
current application.

Note, however, that changes may have significant effect on the ability to
interchange table information.  These changes may manifest themselves
in useability, presentation, and possible structure information degradation.
-->

<!ENTITY % tbl.table.name       "table">
<!ENTITY % tbl.table-titles.mdl "%titles;,">
<!ENTITY % tbl.table-main.mdl   "tgroup+">
<!ENTITY % tbl.table.mdl        "%tbl.table-titles.mdl; %tbl.table-main.mdl;">
<!ENTITY % tbl.table.att        "
    pgwide      %yesorno;       #IMPLIED ">
<!ENTITY % bodyatt              "">
<!ENTITY % tbl.tgroup.mdl       "colspec*,thead?,tbody">
<!ENTITY % tbl.tgroup.att       "">
<!ENTITY % tbl.thead.att        "">
<!ENTITY % tbl.tbody.att        "">
<!ENTITY % tbl.colspec.att      "">
<!ENTITY % tbl.row.mdl          "entry+">
<!ENTITY % tbl.row.att          "">
<!ENTITY % tbl.entry.mdl        "(%paracon;)*">
<!ENTITY % tbl.entry.att        "">

<!ENTITY % tbl.frame.attval     "top|bottom|topbot|all|sides|none">
<!ENTITY % tbl.tbody.mdl        "row+">

<!-- =====  Element and attribute declarations follow. =====  -->

<!--
     Default declarations previously defined in this entity and
     referenced below include:
     ENTITY % tbl.table.name       "table"
     ENTITY % tbl.table-titles.mdl "%titles;,"
     ENTITY % tbl.table.mdl        "%tbl.table-titles; tgroup+"
     ENTITY % tbl.table.att        "
                        pgwide          %yesorno;       #IMPLIED "
-->

<!--doc:???-->
<!ELEMENT %tbl.table.name; (%tbl.table.mdl;)>

<!ATTLIST %tbl.table.name;
        frame           (%tbl.frame.attval;)                    #IMPLIED
        colsep          %yesorno;                               #IMPLIED
        rowsep          %yesorno;                               #IMPLIED
        %tbl.table.att;
        %bodyatt;
>

<!--
     Default declarations previously defined in this entity and
     referenced below include:
     ENTITY % tbl.tgroup.mdl    "colspec*,thead?,tbody"
     ENTITY % tbl.tgroup.att    ""
-->

<!--doc:A wrapper for the main content of a table, or part of a table.-->
<!ELEMENT tgroup (%tbl.tgroup.mdl;) >

<!ATTLIST tgroup
        cols            NMTOKEN                                 #REQUIRED
        colsep          %yesorno;                               #IMPLIED
        rowsep          %yesorno;                               #IMPLIED
        align           (left|right|center|justify|char)        #IMPLIED
        %tbl.tgroup.att;
>

<!--
     Default declarations previously defined in this entity and
     referenced below include:
     ENTITY % tbl.colspec.att   ""
-->

<!--doc:Specifications for a column in a table.-->
<!ELEMENT colspec EMPTY >

<!ATTLIST colspec
        colnum          NMTOKEN                                 #IMPLIED
        colname         NMTOKEN                                 #IMPLIED
        colwidth        CDATA                                   #IMPLIED
        colsep          %yesorno;                               #IMPLIED
        rowsep          %yesorno;                               #IMPLIED
        align           (left|right|center|justify|char)        #IMPLIED
        char            CDATA                                   #IMPLIED
        charoff         NMTOKEN                                 #IMPLIED
        %tbl.colspec.att;
>

<!--
     Default declarations previously defined in this entity and
     referenced below include:
     ENTITY % tbl.thead.att      ""
-->

<!--doc:A table header consisting of one or more rows.-->
<!ELEMENT thead (row+)>

<!ATTLIST thead
        valign          (top|middle|bottom)                     #IMPLIED
        %tbl.thead.att;
>

<!--
     Default declarations previously defined in this entity and
     referenced below include:
     ENTITY % tbl.tbody.att     ""
-->

<!--doc:A wrapper for the rows of a table or informal table.-->
<!ELEMENT tbody (%tbl.tbody.mdl;)>

<!ATTLIST tbody
        valign          (top|middle|bottom)                     #IMPLIED
        %tbl.tbody.att;
>

<!--
     Default declarations previously defined in this entity and
     referenced below include:
     ENTITY % tbl.row.mdl       "entry+"
     ENTITY % tbl.row.att       ""
-->

<!--doc:A row in a table.-->
<!ELEMENT row (%tbl.row.mdl;)>

<!ATTLIST row
        rowsep          %yesorno;                               #IMPLIED
        valign          (top|middle|bottom)                     #IMPLIED
        %tbl.row.att;
>


<!--
     Default declarations previously defined in this entity and
     referenced below include:
     ENTITY % paracon           "#PCDATA"
     ENTITY % tbl.entry.mdl     "(%paracon;)*"
     ENTITY % tbl.entry.att     ""
-->

<!--doc:A cell in a table.-->
<!ELEMENT entry (%tbl.entry.mdl;)*>

<!ATTLIST entry
        colname         NMTOKEN                                 #IMPLIED
        namest          NMTOKEN                                 #IMPLIED
        nameend         NMTOKEN                                 #IMPLIED
        morerows        NMTOKEN                                 #IMPLIED
        colsep          %yesorno;                               #IMPLIED
        rowsep          %yesorno;                               #IMPLIED
        align           (left|right|center|justify|char)        #IMPLIED
        char            CDATA                                   #IMPLIED
        charoff         NMTOKEN                                 #IMPLIED
        valign          (top|middle|bottom)                     #IMPLIED
        %tbl.entry.att;
>
