# 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.

# 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.

yesorno = xsd:NMTOKEN
# no if zero(s), yes if any other value
pcd = text
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.
tbl.table-titles.mdl = title
tbl.table-main.mdl = tgroup+
tbl.table.mdl = tbl.table-titles.mdl | tbl.table-main.mdl
tbl.table.att = attribute pgwide { yesorno }?
bodyatt = empty
tbl.tgroup.mdl = colspec*, thead?, tbody
tbl.tgroup.att = empty
tbl.thead.att = empty
tbl.tbody.att = empty
tbl.colspec.att = empty
tbl.row.mdl = entry+
tbl.row.att = empty
tbl.entry.mdl = paracon*
tbl.entry.att = empty
# =====  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 "
table = element table { table.attlist, tbl.table.mdl }
table.attlist &=
  attribute frame {
    "top" | "bottom" | "topbot" | "all" | "sides" | "none"
  }?,
  attribute colsep { yesorno }?,
  attribute rowsep { yesorno }?,
  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    ""
tgroup = element tgroup { tgroup.attlist, tbl.tgroup.mdl }
tgroup.attlist &=
  attribute cols { xsd:NMTOKEN },
  attribute colsep { yesorno }?,
  attribute rowsep { yesorno }?,
  attribute align { "left" | "right" | "center" | "justify" | "char" }?,
  tbl.tgroup.att
# Default declarations previously defined in this entity and
# referenced below include:
# ENTITY % tbl.colspec.att   ""
colspec = element colspec { colspec.attlist, empty }
colspec.attlist &=
  attribute colnum { xsd:NMTOKEN }?,
  attribute colname { xsd:NMTOKEN }?,
  attribute colwidth { text }?,
  attribute colsep { yesorno }?,
  attribute rowsep { yesorno }?,
  attribute align { "left" | "right" | "center" | "justify" | "char" }?,
  attribute char { text }?,
  attribute charoff { xsd:NMTOKEN }?,
  tbl.colspec.att
# Default declarations previously defined in this entity and
# referenced below include:
# ENTITY % tbl.thead.att      ""
thead = element thead { thead.attlist, row+ }
thead.attlist &=
  attribute valign { "top" | "middle" | "bottom" }?,
  tbl.thead.att
# Default declarations previously defined in this entity and
# referenced below include:
# ENTITY % tbl.tbody.att     ""
tbody = element tbody { tbody.attlist, row+ }
tbody.attlist &=
  attribute valign { "top" | "middle" | "bottom" }?,
  tbl.tbody.att
# Default declarations previously defined in this entity and
# referenced below include:
# ENTITY % tbl.row.mdl       "entry+"
# ENTITY % tbl.row.att       ""
row = element row { row.attlist, tbl.row.mdl }
row.attlist &=
  attribute rowsep { yesorno }?,
  attribute valign { "top" | "middle" | "bottom" }?,
  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     ""
entry = element entry { entry.attlist, tbl.entry.mdl }
entry.attlist &=
  attribute colname { xsd:NMTOKEN }?,
  attribute namest { xsd:NMTOKEN }?,
  attribute nameend { xsd:NMTOKEN }?,
  attribute morerows { xsd:NMTOKEN }?,
  attribute colsep { yesorno }?,
  attribute rowsep { yesorno }?,
  attribute align { "left" | "right" | "center" | "justify" | "char" }?,
  attribute char { text }?,
  attribute charoff { xsd:NMTOKEN }?,
  attribute valign { "top" | "middle" | "bottom" }?,
  tbl.entry.att
title |= notAllowed
start = table
