<!-- Typical use:

<!DOCTYPE fot PUBLIC "-//James Clark//DTD DSSSL Flow Object Tree//EN" "fot.dtd">

-->
<!ENTITY % length-spec "CDATA">
<!-- represents length-spec or #f; #f is represented by empty value -->
<!ENTITY % opt-length-spec "CDATA"> 
<!ENTITY % length "NMTOKEN">
<!ENTITY % enum "NMTOKEN">
<!ENTITY % enum-or-boolean "NMTOKEN">
<!ENTITY % boolean "(true|false)">

<!ENTITY % flow "
(paragraph
|sequence
|display-group
|line-field
|link
|scroll
|marginalia
|leader
|sideline
|box
|score
|table-row
|math-sequence
|unmath
|subscript
|superscript
|grid
|grid-cell
|paragraph-break
|external-graphic
|rule
|alignment-point
|table-column
|character
|simple-page-sequence
|fraction
|script
|mark
|fence
|radical
|math-operator
|table
|table-part
|table-cell
|multi-mode
|page-number
|text
|sdata
|a
|define-glyph-subst-table)*">

<!ELEMENT fot %flow;>
<!ELEMENT text (#PCDATA)>
<!ELEMENT sdata EMPTY>
<!ATTLIST sdata name CDATA #REQUIRED text CDATA #REQUIRED>

<!ELEMENT paragraph %flow;>
<!ELEMENT sequence %flow;>
<!ELEMENT display-group %flow;>
<!ELEMENT line-field %flow;>
<!ELEMENT link %flow;>
<!ELEMENT scroll %flow;>
<!ELEMENT marginalia %flow;>
<!ELEMENT leader %flow;>
<!ELEMENT sideline %flow;>
<!ELEMENT box %flow;>
<!ELEMENT score %flow;>
<!ELEMENT table-row %flow;>
<!ELEMENT math-sequence %flow;>
<!ELEMENT unmath %flow;>
<!ELEMENT subscript %flow;>
<!ELEMENT superscript %flow;>
<!ELEMENT grid %flow;>
<!ELEMENT grid-cell %flow;>
<!ELEMENT paragraph-break EMPTY>
<!ELEMENT external-graphic EMPTY>
<!ELEMENT rule EMPTY>
<!ELEMENT alignment-point EMPTY>
<!ELEMENT table-column EMPTY>
<!ELEMENT character EMPTY>

<!ELEMENT page-number EMPTY>
<!ATTLIST page-number ref CDATA #IMPLIED>

<!ELEMENT define-glyph-subst-table (glyph-subst*)>
<!ATTLIST define-glyph-subst-table id ID #REQUIRED>

<!ELEMENT glyph-subst EMPTY>
<!ATTLIST glyph-subst old CDATA #REQUIRED new CDATA #REQUIRED>

<!ELEMENT a EMPTY>
<!ATTLIST a
  name CDATA #REQUIRED
>

<!ELEMENT simple-page-sequence
  ((simple-page-sequence.right-header
    |simple-page-sequence.center-header
    |simple-page-sequence.left-footer
    |simple-page-sequence.right-footer
    |simple-page-sequence.center-footer
    |simple-page-sequence.header-footer)*,
  %flow;)
>

<!ELEMENT simple-page-sequence.left-header %flow;>
<!ELEMENT simple-page-sequence.right-header %flow;>
<!ELEMENT simple-page-sequence.center-header %flow;>
<!ELEMENT simple-page-sequence.left-footer %flow;>
<!ELEMENT simple-page-sequence.right-footer %flow;>
<!ELEMENT simple-page-sequence.center-footer %flow;>

<!ENTITY % hf "
  front %boolean; #IMPLIED
  first %boolean; #IMPLIED
">

<!ATTLIST simple-page-sequence.right-header %hf;>
<!ATTLIST simple-page-sequence.center-header %hf;>
<!ATTLIST simple-page-sequence.left-footer %hf;>
<!ATTLIST simple-page-sequence.right-footer %hf;>
<!ATTLIST simple-page-sequence.center-footer %hf;>

<!ELEMENT table
(table.before-row-border, table.after-row-border,
 table.before-column-border, table.after-column-border,
 %flow;)>

<!ELEMENT table.before-row-border EMPTY>
<!ELEMENT table.after-row-border EMPTY>
<!ELEMENT table.before-column-border EMPTY>
<!ELEMENT table.after-column-border EMPTY>

<!ELEMENT table-part
 (table-part.principal, table-part.header, table-part.footer)
>

<!ELEMENT table-part.header %flow;>
<!ELEMENT table-part.footer %flow;>
<!ELEMENT table-part.principal %flow;>

<!ELEMENT table-cell
(table-cell.before-row-border, table-cell.after-row-border,
 table-cell.before-column-border, table-cell.after-column-border,
 %flow;)>

<!ELEMENT table-cell.before-row-border EMPTY>
<!ELEMENT table-cell.after-row-border EMPTY>
<!ELEMENT table-cell.before-column-border EMPTY>
<!ELEMENT table-cell.after-column-border EMPTY>

<!ELEMENT fraction
 (fraction.fraction-bar, fraction.numerator, fraction.denominator)>
<!ELEMENT fraction.numerator %flow;>
<!ELEMENT fraction.denominator %flow;>
<!ELEMENT fraction.fraction-bar EMPTY>

<!ELEMENT script (script.principal,
 script.pre-sup, script.pre-sub,
 script.post-sup, script.post-sub,
 script.mid-sup, script.mid-sub)>

<!ELEMENT script.principal %flow;>
<!ELEMENT script.pre-sup %flow;>
<!ELEMENT script.pre-sub %flow;>
<!ELEMENT script.post-sup %flow;>
<!ELEMENT script.post-sub %flow;>
<!ELEMENT script.mid-sup %flow;>
<!ELEMENT script.mid-sub %flow;>

<!ELEMENT mark (mark.principal, mark.over-mark, mark.under-mark)>
<!ELEMENT mark.principal %flow;>
<!ELEMENT mark.over-mark %flow;>
<!ELEMENT mark.under-mark %flow;>

<!ELEMENT fence (fence.principal, fence.open, fence.close)>
<!ELEMENT fence.principal %flow;>
<!ELEMENT fence.open %flow;>
<!ELEMENT fence.close %flow;>

<!ELEMENT radical (radical.radical?, radical.principal, radical.degree)>
<!ELEMENT radical.principal %flow;>
<!ELEMENT radical.degree %flow;>
<!ELEMENT radical.radical EMPTY>

<!ELEMENT math-operator (math-operator.principal, math-operator.operator,
           math-operator.lower-limit, math-operator.upper-limit)>
<!ELEMENT math-operator.principal %flow;>
<!ELEMENT math-operator.operator %flow;>
<!ELEMENT math-operator.lower-limit %flow;>
<!ELEMENT math-operator.upper-limit %flow;>

<!ELEMENT multi-mode (multi-mode.mode, multi-mode.mode+)>
<!ELEMENT multi-mode.mode %flow;>
<!ATTLIST multi-mode.mode
  name CDATA #IMPLIED
  desc CDATA #IMPLIED
>

<!ENTITY % inherited-characteristics "
font-size %length; #IMPLIED
font-family-name CDATA #IMPLIED
font-weight %enum-or-boolean; #IMPLIED
font-posture %enum-or-boolean; #IMPLIED
start-indent %length-spec; #IMPLIED
end-indent %length-spec; #IMPLIED
first-line-start-indent %length-spec; #IMPLIED
last-line-end-indent %length-spec; #IMPLIED
line-spacing %length-spec; #IMPLIED
min-pre-line-spacing %opt-length-spec; #IMPLIED
min-post-line-spacing %opt-length-spec; #IMPLIED
min-leading %opt-length-spec; #IMPLIED
field-width %length-spec; #IMPLIED
lines %enum; #IMPLIED
quadding %enum; #IMPLIED
display-alignment %enum; #IMPLIED
field-align %enum; #IMPLIED
marginalia-side %enum; #IMPLIED
principal-mode-simultaneous %boolean; #IMPLIED
marginalia-sep %length-spec; #IMPLIED
marginalia-keep-with-previous %boolean; #IMPLIED
grid-equidistant-rows %boolean; #IMPLIED
grid-equidistant-columns %boolean; #IMPLIED
color CDATA #IMPLIED
background-color CDATA #IMPLIED
page-width %length; #IMPLIED
page-height %length; #IMPLIED
left-margin %length; #IMPLIED
right-margin %length; #IMPLIED
top-margin %length; #IMPLIED
bottom-margin %length; #IMPLIED
header-margin %length; #IMPLIED
footer-margin %length; #IMPLIED
border-present %boolean; #IMPLIED
hyphenate %boolean; #IMPLIED
kern %boolean; #IMPLIED
ligature %boolean; #IMPLIED
score-spaces %boolean; #IMPLIED
float-out-marginalia %boolean; #IMPLIED
float-out-sidelines %boolean; #IMPLIED
float-out-line-numbers %boolean; #IMPLIED
cell-background %boolean; #IMPLIED
span-weak %boolean; #IMPLIED
ignore-record-end %boolean; #IMPLIED
numbered-lines %boolean; #IMPLIED
hanging-punct %boolean; #IMPLIED
box-open-end %boolean; #IMPLIED
truncate-leader %boolean; #IMPLIED
align-leader %boolean; #IMPLIED
table-part-omit-middle-header %boolean; #IMPLIED
table-part-omit-middle-footer %boolean; #IMPLIED
border-omit-at-break %boolean; #IMPLIED
line-join %enum; #IMPLIED
line-cap %enum; #IMPLIED
line-number-side %enum; #IMPLIED
kern-mode %enum; #IMPLIED
input-whitespace-treatment %enum; #IMPLIED
filling-direction %enum; #IMPLIED
writing-mode %enum; #IMPLIED
last-line-quadding %enum; #IMPLIED
math-display-mode %enum; #IMPLIED
script-pre-align %enum; #IMPLIED
script-post-align %enum; #IMPLIED
script-mid-sup-align %enum; #IMPLIED
script-mid-sub-align %enum; #IMPLIED
numerator-align %enum; #IMPLIED
denominator-align %enum; #IMPLIED
grid-position-cell-type %enum; #IMPLIED
grid-column-alignment %enum; #IMPLIED
grid-row-Alignment %enum; #IMPLIED
box-type %enum; #IMPLIED
glyph-alignment-mode %enum; #IMPLIED
box-border-alignment %enum; #IMPLIED
cell-row-alignment %enum; #IMPLIED
border-alignment %enum; #IMPLIED
sideline-side %enum; #IMPLIED
hyphenation-keep %enum-or-boolean; #IMPLIED
font-structure %enum-or-boolean; #IMPLIED
font-proportionate-width %enum-or-boolean; #IMPLIED
cell-crossed %enum-or-boolean; #IMPLIED
position-point-shift %length-spec; #IMPLIED
start-margin %length-spec; #IMPLIED
end-margin %length-spec; #IMPLIED
sideline-sep %length-spec; #IMPLIED
asis-wrap-indent %length-spec; #IMPLIED
line-number-sep %length-spec; #IMPLIED
last-line-justify-limit %length-spec; #IMPLIED
justify-glyph-space-max-add %length-spec; #IMPLIED
justify-glyph-space-max-remove %length-spec; #IMPLIED
table-corner-radius %length-spec; #IMPLIED
box-corner-radius %length-spec; #IMPLIED
line-thickness %length; #IMPLIED
cell-before-row-margin %length; #IMPLIED
cell-after-row-margin %length; #IMPLIED
cell-before-column-margin %length; #IMPLIED
cell-after-column-margin %length; #IMPLIED
line-sep %length; #IMPLIED
box-size-before %length; #IMPLIED
box-size-after %length; #IMPLIED
country NMTOKEN #IMPLIED
language NMTOKEN #IMPLIED
expand-tabs NMTOKEN #IMPLIED
hyphenation-ladder-count NMTOKEN #IMPLIED
layer NMTOKEN #IMPLIED
background-layer NMTOKEN #IMPLIED
border-priority NMTOKEN #IMPLIED
line-repeat NMTOKEN #IMPLIED
span NMTOKEN #IMPLIED
min-leader-repeat NMTOKEN #IMPLIED
hyphenation-remain-char-count NMTOKEN #IMPLIED
hyphenation-push-char-count NMTOKEN #IMPLIED
widow-count NMTOKEN #IMPLIED
orphan-count NMTOKEN #IMPLIED
background-tile CDATA #IMPLIED
line-breaking-method CDATA #IMPLIED
line-composition-method CDATA #IMPLIED
implicit-bidi-method CDATA #IMPLIED
glyph-subst-method CDATA #IMPLIED
glyph-reorder-method CDATA #IMPLIED
hyphenation-method CDATA #IMPLIED
table-auto-width-method CDATA #IMPLIED
font-name CDATA #IMPLIED
escapement-space-before CDATA #IMPLIED
escapement-space-after CDATA #IMPLIED
glyph-subst-table NMTOKENS #IMPLIED
">

<!ENTITY % display-nic "
  position-preference %enum-or-boolean; #IMPLIED
  keep-with-next %boolean; 'false'
  keep-with-previous %boolean; 'false'
  may-violate-keep-before %boolean; 'false'
  may-violate-keep-after %boolean; 'false'
  keep %enum-or-boolean; #IMPLIED
  break-before %enum-or-boolean; #IMPLIED
  break-after %enum-or-boolean; #IMPLIED
  space-before CDATA #IMPLIED
  space-before-conditional %boolean; #IMPLIED
  space-before-priority NMTOKEN #IMPLIED
  space-after CDATA #IMPLIED
  space-after-conditional %boolean; #IMPLIED
  space-after-priority NMTOKEN #IMPLIED
">

<!ENTITY % inline-nic "
  break-before-priority NMTOKEN #IMPLIED
  break-after-priority NMTOKEN #IMPLIED
">

<!ATTLIST sequence %inherited-characteristics;>
<!ATTLIST line-field %inherited-characteristics;>
<!ATTLIST simple-page-sequence %inherited-characteristics;>
<!ATTLIST fraction %inherited-characteristics;>
<!ATTLIST fraction.fraction-bar %inherited-characteristics;>
<!ATTLIST math-sequence %inherited-characteristics;>
<!ATTLIST unmath %inherited-characteristics;>
<!ATTLIST subscript %inherited-characteristics;>
<!ATTLIST superscript %inherited-characteristics;>
<!ATTLIST script %inherited-characteristics;>
<!ATTLIST mark %inherited-characteristics;>
<!ATTLIST fence %inherited-characteristics;>
<!ATTLIST radical %inherited-characteristics;>
<!ATTLIST math-operator %inherited-characteristics;>
<!ATTLIST sideline %inherited-characteristics;>
<!ATTLIST scroll %inherited-characteristics;>
<!ATTLIST marginalia %inherited-characteristics;>
<!ATTLIST multi-mode %inherited-characteristics;>
<!ATTLIST table-row %inherited-characteristics;>
<!ATTLIST table.before-row-border %inherited-characteristics;>
<!ATTLIST table.after-row-border %inherited-characteristics;>
<!ATTLIST table.before-column-border %inherited-characteristics;>
<!ATTLIST table.after-column-border %inherited-characteristics;>
<!ATTLIST table-cell.before-row-border %inherited-characteristics;>
<!ATTLIST table-cell.after-row-border %inherited-characteristics;>
<!ATTLIST table-cell.before-column-border %inherited-characteristics;>
<!ATTLIST table-cell.after-column-border %inherited-characteristics;>

<!ATTLIST table-column
  column-number NMTOKEN #REQUIRED
  n-columns-spanned NMTOKEN #IMPLIED
  width %length-spec; #IMPLIED
  %inherited-characteristics;
>

<!ATTLIST table
  width %length-spec; #IMPLIED
  minimum-width %boolean; "false"
  %display-nic;
  %inherited-characteristics;
>

<!-- column-number of 0 has a special meaning: it identifies a dummy cell that
     can be used to fill out the row if it later proves necessary to do so -->
<!ATTLIST table-cell
  column-nmtoken NMTOKEN #REQUIRED
  n-columns-spanned NMTOKEN #IMPLIED
  n-rows-spanned NMTOKEN #IMPLIED
  %inherited-characteristics;
>

<!ATTLIST link
  destination.idref CDATA #IMPLIED
  destination.entity CDATA #IMPLIED
  destination.system-id CDATA #IMPLIED
  destination.element-index NMTOKEN #IMPLIED
  destination.grove-index NMTOKEN #IMPLIED
  %inherited-characteristics;
>

<!ATTLIST box
  display %boolean; "false"
  %display-nic;
  %inline-nic;
  %inherited-characteristics;
>

<!ATTLIST score
  type (before|through|after|char) #IMPLIED
  type.length-spec %length-spec; #IMPLIED
  char CDATA #IMPLIED
  %inherited-characteristics;
>

<!ATTLIST leader
  length %length-spec; #IMPLIED
  %inherited-characteristics;
  %inline-nic;
>
  
<!ATTLIST rule
  orientation (horizontal|vertical|escapement|line-progression)
              #REQUIRED
  length %length-spec; #IMPLIED
  %display-nic;
  %inline-nic;
  %inherited-characteristics;
>

<!ATTLIST external-graphic
  display %boolean; "false"
  scale %enum; #IMPLIED
  scale-x NMTOKEN #IMPLIED
  scale-y NMTOKEN #IMPLIED
  max-width %length-spec; #IMPLIED
  max-height %length-spec; #IMPLIED
  entity-system-id CDATA #REQUIRED
  notation-system-id CDATA #REQUIRED
  escapement-direction %enum; #IMPLIED
  position-point-x %length-spec; #IMPLIED
  position-point-y %length-spec; #IMPLIED
  %inline-nic;
  %display-nic;
  %inherited-characteristics;
>

<!ATTLIST display-group
  coalesce-id CDATA #IMPLIED
  %display-nic;
  %inherited-characteristics;
>

<!ATTLIST paragraph
  %display-nic;
  %inherited-characteristics;
>

<!ATTLIST paragraph-break
  %display-nic;
  %inherited-characteristics;
>

<!ATTLIST table-part
  %display-nic;
  %inherited-characteristics;
>

<!ENTITY % character-c "
  char CDATA #IMPLIED
  glyph-id CDATA #IMPLIED
  drop-after-line-break %boolean; #IMPLIED
  drop-unless-before-line-break %boolean; #IMPLIED
  punct %boolean; #IMPLIED
  space %boolean; #IMPLIED
  input-tab %boolean; #IMPLIED
  input-whitespace %boolean; #IMPLIED
  record-end %boolean; #IMPLIED
  break-before-priority NMTOKEN #IMPLIED
  break-after-priority NMTOKEN #IMPLIED
  math-font-posture %enum-or-boolean; #IMPLIED
  math-class %enum; #IMPLIED
  script CDATA #IMPLIED
  %inherited-characteristics;">

<!ATTLIST character %character-c;>
<!ATTLIST radical.radical %character-c;>

<!ATTLIST grid
  grid-n-columns NMTOKEN #IMPLIED
  grid-n-rows NMTOKEN #IMPLIED
  %inherited-characteristics;
>

<!ATTLIST grid-cell
  column-number NMTOKEN #IMPLIED
  row-number NMTOKEN #IMPLIED
  %inherited-characteristics;
>
