# =============================================================

# HEADER

# =============================================================

# MODULE:    XML EXCHANGE TABLE MODEL DECLARATION MODULE

# VERSION:   1.1

# DATE:      June 2006

#

# =============================================================

# (C) Copyright OASIS Open 2005, 2006.

# (C) Copyright IBM Corporation 2001, 2004.

# All Rights Reserved.

#

# UPDATES:

# 2005.11.15 RDA: Corrected the "Delivered as" system ID

# 2006.06.07 RDA: Make universal attributes universal

# (DITA 1.1 proposal #12)

# =============================================================

# Delivered as file "tblDecl.mod"

# =============================================================

# XML EXCHANGE TABLE MODEL DECLARATION MODULE

# OASIS DITA 1.0 notes:
#      The Exchange Table Model replaces the original CALS-based model
#      used in development versions of the DITA definition.
#      This set of declarations defines the XML version of the Exchange
#      Table Model as adapted for OASIS DITA version 1.0.
#      The base for the DITA version of the Exchange Table Model is
#      defined at http://www.oasis-open.org/specs/tm9901.htm .
#      The DITA version specifically extends this model with these DITA-
#      specific content and attribute adaptations to the DITA processing
#      requirements:
# 
# STRUCTURE:
# 
# Introduce the DITA-unique <desc> element (optional after <title>); this element
# enables more consistent presentation of both figures and tables.
# 
# 
# ATTRIBUTES:
# 
# For the <table> element, add:
#   %univ-atts; which consists of:
#     %select-atts; [for selection, conditional processing]
#     %id-atts; [for conref and linking]
#     %localization-atts (@translate + @xml:lang) [for NLS processing support]
#     %global-atts; (@xtrf + @xtrc) [for tracing and messaging support in processors]
#     @class [for specialization support]
#   @outputclass [for role designation (ie, styles, future migrations)]
#   @rowheader [for accessibility support in processing]
#   %display-atts; which consists of:
#     @scale [for presentational equivalence with other scaled exhibits: fig, pre, lines, simpletable]
#     @frame (already part of table)
#     @pgwide (already part of table, same intent as original @expanse)
# 
# For <tgroup>, <thead>, <tbody>, and <row>, add:
#   %univ-atts;
#   %global-atts;
#   @class
#   @outputclass [for role designation (ie, styles, future migrations)]
# 
# For <entry>, add:
#   %id-atts;
#   %global-atts
#   @class
#   @outputclass [for role designation (ie, styles, future migrations)]
#   @rev [for indication of revised content for flag-based processing]
#

# DITA specialization support: element redefinition for expansion

# The Formal Public Identifier (FPI) for this DITA adaptation of
# the Exchange Table Model shall be:
# 
# "-//OASIS//ELEMENTS DITA Exchange Table Model//EN"
# 
# This set of declarations may be referred to using a public external
# entity declaration and reference as shown in the following three
# lines:
# 
# <!ENTITY % tableXML
#   PUBLIC "-//OASIS//ELEMENTS DITA Exchange Table Model//EN">
#   %tableXML;

# 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.
# 
# Note that DITA properties are added in cumulative declarations at the end.

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

namespace a = "http://relaxng.org/ns/compatibility/annotations/1.0"

yesorno = xsd:NMTOKEN
# no if zero(s), yes if any other value
paracon = tblcell.cnt
# 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?, desc?)?
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 = 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 = 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 = 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 = 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 = 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 = 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 = 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
# =============================================================

# DITA BEHAVIOR ATTRIBUTES

# =============================================================
table.attlist &=
  attribute rowheader { "firstcol" | "norowheader" }?,
  attribute scale {
    "50"
    | "60"
    | "70"
    | "80"
    | "90"
    | "100"
    | "110"
    | "120"
    | "140"
    | "160"
    | "180"
    | "200"
  }?,
  univ-atts,
  attribute outputclass { text }?
tgroup.attlist &=
  univ-atts,
  attribute outputclass { text }?
thead.attlist &=
  univ-atts,
  attribute outputclass { text }?
tbody.attlist &=
  univ-atts,
  attribute outputclass { text }?
row.attlist &=
  univ-atts,
  attribute outputclass { text }?
entry.attlist &=
  id-atts,
  localization-atts,
  attribute rev { text }?,
  attribute outputclass { text }?
colspec.attlist &= id-atts, localization-atts
# =============================================================

# DITA SPECIALIZATION ATTRIBUTE DECLARATIONS

# =============================================================
table.attlist &=
  global-atts,
  [ a:defaultValue = "- topic/table " ] attribute class { text }?
tgroup.attlist &=
  global-atts,
  [ a:defaultValue = "- topic/tgroup " ] attribute class { text }?
colspec.attlist &=
  global-atts,
  [ a:defaultValue = "- topic/colspec " ] attribute class { text }?
thead.attlist &=
  global-atts,
  [ a:defaultValue = "- topic/thead " ] attribute class { text }?
tbody.attlist &=
  global-atts,
  [ a:defaultValue = "- topic/tbody " ] attribute class { text }?
row.attlist &=
  global-atts,
  [ a:defaultValue = "- topic/row " ] attribute class { text }?
entry.attlist &=
  global-atts,
  [ a:defaultValue = "- topic/entry " ] attribute class { text }?
# ================== End XML Exchange Table Model =============
