DTD for XSL Formatting Objects

<?xml version="1.0" encoding="iso-8859-1"?>
<!-- 
 This DTD has been developed in order to validate XSL FO documents 
 conformant to XSL WD of March 27, 2000. The namespace prefix is 
 
 xmlns:fo="http://www.w3.org/1999/XSL/Format".
 This DTD also makes provision for few extensions to XSL WD, put 
 into a separate namespace: 
 xmlns:rx="http://www.renderx.com/XSL/Extensions".
 Please e-mail your comments to Nikolai Grigoriev <grig@renderx.com>
 (c) EnRoot, 2000. 
-->
<!-- *******************************************************************
INTRODUCTORY NOTES
1. As compared to the draft of 1999年04月21日, the current one is hard
to validate by a DTD: attributes are now universally inheritable due
to the adoption of the 'inherit' value from CSS2; and even for the 
content model, presence of universal wrappers like fo:wrapper makes 
it impossible to trace a neat distinction between inline-level and 
block-level content. Therefore, this version of the DTD cannot reliably
detect inconsistencies in attribute sets: it works only for empty
inline elements and top-level elements (fo:layout-master-set and its
descendants). 
2. In order for the validation to work properly, you should first
clean out all the contents of fo:instream-graphics, as these may 
contain elements outside the FO namespace. It is expected that, prior
to validation, a filtering script should be run on the FO document. 
DEVIATIONS FROM THE DRAFT
1. Content model for <fo:layout-master-set> is made more strict:
at least one fo:simple-page-master should be present.
2. In the WD, page and region-body margins may be expressed in terms
of space-*. This does not make any sense, as far as no stacked 
constraint may occur. For this reason, I have disabled spaces
in this context, leaving only plain old CSS margins.
3. Attributes of elements inside fo:layout-master-set may have a value 
of 'inherit'. However, I have disabled the occurrence of such attributes
on parent elements: inheriting them buys us little in terms of 
conciseness, but is error-prone in the initial phase.
4. Table-omit-{header|footer}-at-break is added a value of 'inherit',
to align it with the rest of table attributes. (If table-layout may have
it, why these two should not?)
5. Text-align has a closed list of values, neglecting the <string> value
type. The reason is practical: many stylesheet writers are used to write 
"centered" and "justified", whereas the correct values for this version 
of the draft are "center" and "justify"; catching this error in the DTD
turned out to be useful. Moreover, <string> values are poorly described 
in the draft (nothing but a reference to CSS2), and are unlikely to be 
implemented soon. (Ultimate reason: changing the attribute value back to 
CDATA is a matter of few seconds ;-)).
6. Three extension properties are added to enable functionality already
implemented in XEP engine but excluded from the draft:
rx:footnote-area-placement
 This is a property of a page-master. It controls the area from which
 the footnote area is subtracted in multicolumn layouts:
 "within-page" (default) places all footnotes in a single rectangular
 area subtracted from region-body, as specified in the draft;
 "within-column" creates a footnote area within the column area where
 the footnote anchor occurs;
 "within-last-column" creates a footnote area within the last column
 on the page where the footnote anchor occurs.
rx:footnote-area-placement
 This property controls glyph area height calculation strategy.
 "uniform" (default) sets a single height to all glyphs in the font,
 based on ascender/descender values for the entire font, as specified
 in the draft;
 "per-character" uses actual glyph height for every character.
rx:line-count
 Specifies the number of lines affected by fo:initial-master-set;
 default is 1.
******************************************************************** -->
<!-- *************************************************************** -->
<!-- Entity definitions for groups of formatting objects -->
<!-- *************************************************************** -->
<!ENTITY % basic-inlines "
 fo:bidi-override
 | fo:character
 | fo:external-graphic
 | fo:instream-foreign-object 
 | fo:inline
 | fo:inline-container
 | fo:leader
 | fo:page-number
 | fo:page-number-citation
 | fo:simple-link
 | fo:multi-toggle
">
<!ENTITY % basic-blocks "
 fo:block
 | fo:block-container
 | fo:table-and-caption
 | fo:table
 | fo:list-block
">
<!ENTITY % out-of-lines "
 fo:footnote
 | fo:float
">
<!ENTITY % wrappers "
 fo:multi-switch
 | fo:multi-properties
 | fo:wrapper 
 | fo:marker
 | fo:retrieve-marker
">
<!ENTITY % inlines " 
 #PCDATA 
 | %basic-inlines; 
 | %out-of-lines; 
 | %wrappers;
">
<!ENTITY % blocks " 
 %basic-blocks; 
 | %out-of-lines; 
 | %wrappers;
">
<!ENTITY % mixed-level " 
 #PCDATA 
 | %basic-inlines; 
 | %basic-blocks; 
 | %out-of-lines; 
 | %wrappers;
">
<!-- *************************************************************** -->
<!-- Entity definitions for common groups of properties -->
<!-- This grouping reflects properties cooccurrence, rather than -->
<!-- property semantics. It does not correspond to grouping in the -->
<!-- draft. -->
<!-- *************************************************************** -->
<!-- Accessibility Properties -->
<!ENTITY % accessibility-properties "
 source-document CDATA #IMPLIED
 role CDATA #IMPLIED
">
<!-- Relative Position Properties -->
<!-- 'position' shorthand property also makes part of this group -->
<!ENTITY % relative-position-properties "
 relative-position ( auto | static | relative | inherit ) #IMPLIED
 position ( static | relative | absolute | fixed | inherit) #IMPLIED
 top CDATA #IMPLIED
 right CDATA #IMPLIED
 bottom CDATA #IMPLIED
 left CDATA #IMPLIED
">
<!-- Absolute or Relative Position Properties -->
<!-- There is no object that can be positioned only absolutely. -->
<!-- Therefore, absolute and relative positioning properties are -->
<!-- grouped together -->
<!ENTITY % absolute-or-relative-position-properties "
 absolute-position ( auto | absolute | fixed | inherit ) #IMPLIED
 %relative-position-properties;
">
<!-- Aural Properties -->
<!-- 'cue' and 'pause' shorthand properties are also included -->
<!ENTITY % aural-properties "
 azimuth CDATA #IMPLIED
 cue CDATA #IMPLIED
 cue-after CDATA #IMPLIED
 cue-before CDATA #IMPLIED
 elevation CDATA #IMPLIED
 pause CDATA #IMPLIED
 pause-after CDATA #IMPLIED
 pause-before CDATA #IMPLIED
 pitch CDATA #IMPLIED
 pitch-range CDATA #IMPLIED
 play-during CDATA #IMPLIED
 richness CDATA #IMPLIED
 speak ( normal | none | spell-out | inherit ) #IMPLIED
 speak-header ( once | always | inherit ) #IMPLIED
 speak-numeral ( digits | continuous | inherit ) #IMPLIED
 speak-punctuation ( code | none | inherit ) #IMPLIED
 speech-rate CDATA #IMPLIED
 stress CDATA #IMPLIED
 voice-family CDATA #IMPLIED
 volume CDATA #IMPLIED
">
<!-- Common Border, Padding, and Background Properties -->
<!-- Relative shorthand properties are also included -->
<!ENTITY % border-padding-background-properties "
 background CDATA #IMPLIED
 background-attachment ( scroll | fixed | inherit ) #IMPLIED
 background-color CDATA #IMPLIED
 background-image CDATA #IMPLIED
 background-position CDATA #IMPLIED
 background-position-vertical CDATA #IMPLIED
 background-position-horizontal CDATA #IMPLIED
 background-repeat ( repeat | repeat-x | repeat-y 
 | no-repeat | inherit ) #IMPLIED
 border CDATA #IMPLIED
 border-after-color CDATA #IMPLIED
 border-after-style ( none | hidden | dotted | dashed 
 | solid | double | groove | ridge 
 | inset | outset | inherit ) #IMPLIED
 border-after-width CDATA #IMPLIED
 border-after-width.length CDATA #IMPLIED
 border-after-width.conditionality ( discard | retain) #IMPLIED
 border-before-color CDATA #IMPLIED
 border-before-style ( none | hidden | dotted | dashed 
 | solid | double | groove | ridge 
 | inset | outset | inherit ) #IMPLIED
 border-before-width CDATA #IMPLIED
 border-before-width.length CDATA #IMPLIED
 border-before-width.conditionality ( discard | retain) #IMPLIED
 border-bottom CDATA #IMPLIED
 border-bottom-color CDATA #IMPLIED
 border-bottom-style ( none | hidden | dotted | dashed 
 | solid | double | groove | ridge 
 | inset | outset | inherit ) #IMPLIED
 border-bottom-width CDATA #IMPLIED
 border-color CDATA #IMPLIED
 border-end-color CDATA #IMPLIED
 border-end-style ( none | hidden | dotted | dashed 
 | solid | double | groove | ridge 
 | inset | outset | inherit ) #IMPLIED
 border-end-width CDATA #IMPLIED
 border-left CDATA #IMPLIED
 border-left-color CDATA #IMPLIED
 border-left-style ( none | hidden | dotted | dashed 
 | solid | double | groove | ridge 
 | inset | outset | inherit ) #IMPLIED
 border-left-width CDATA #IMPLIED
 border-right CDATA #IMPLIED
 border-right-color CDATA #IMPLIED
 border-right-style ( none | hidden | dotted | dashed 
 | solid | double | groove | ridge 
 | inset | outset | inherit ) #IMPLIED
 border-right-width CDATA #IMPLIED
 border-start-color CDATA #IMPLIED
 border-start-style ( none | hidden | dotted | dashed 
 | solid | double | groove | ridge 
 | inset | outset | inherit ) #IMPLIED
 border-start-width CDATA #IMPLIED
 border-style ( none | hidden | dotted | dashed 
 | solid | double | groove | ridge 
 | inset | outset | inherit ) #IMPLIED
 border-top CDATA #IMPLIED
 border-top-color CDATA #IMPLIED
 border-top-style ( none | hidden | dotted | dashed 
 | solid | double | groove | ridge 
 | inset | outset | inherit ) #IMPLIED
 border-top-width CDATA #IMPLIED
 border-width CDATA #IMPLIED
 padding CDATA #IMPLIED
 padding-after CDATA #IMPLIED
 padding-after.length CDATA #IMPLIED
 padding-after.conditionality ( discard | retain) #IMPLIED
 padding-before CDATA #IMPLIED
 padding-before.length CDATA #IMPLIED
 padding-before.conditionality ( discard | retain) #IMPLIED
 padding-bottom CDATA #IMPLIED
 padding-end CDATA #IMPLIED
 padding-left CDATA #IMPLIED
 padding-right CDATA #IMPLIED
 padding-start CDATA #IMPLIED
 padding-top CDATA #IMPLIED
">
<!-- Box Size Properties -->
<!ENTITY % box-size-properties "
 height CDATA #IMPLIED
 min-height CDATA #IMPLIED
 max-height CDATA #IMPLIED
 width CDATA #IMPLIED
 min-width CDATA #IMPLIED
 max-width CDATA #IMPLIED
 inline-progression-dimension CDATA #IMPLIED
 inline-progression-dimension.minimum CDATA #IMPLIED
 inline-progression-dimension.optimum CDATA #IMPLIED
 inline-progression-dimension.maximum CDATA #IMPLIED
 block-progression-dimension CDATA #IMPLIED
 block-progression-dimension.minimum CDATA #IMPLIED
 block-progression-dimension.optimum CDATA #IMPLIED
 block-progression-dimension.maximum CDATA #IMPLIED
">
<!-- Common Area Properties -->
<!ENTITY % area-properties "
 clip CDATA #IMPLIED
 overflow ( visible | hidden | scroll | auto | inherit ) #IMPLIED
 display-align ( auto | before | center | after | inherit ) #IMPLIED
 reference-orientation ( 0 | 90 | 180 | 270 
 | -90 | -180 | -270 | inherit ) #IMPLIED
 writing-mode ( lr-tb | rl-tb | tb-rl | lr | rl | tb | inherit ) #IMPLIED
">
<!-- Common Font Properties -->
<!-- 'font' shorthand property is also included -->
<!-- [RenderX] 'rx:glyph-area-height' is added as an extension -->
<!ENTITY % font-properties "
 font CDATA #IMPLIED
 font-family CDATA #IMPLIED
 font-size CDATA #IMPLIED
 font-size-adjust CDATA #IMPLIED
 font-stretch (normal | wider | narrower 
 | ultra-condensed | extra-condensed | condensed
 | semi-condensed | semi-expanded | expanded 
 | extra-expanded | ultra-expanded | inherit) #IMPLIED
 font-style ( normal | italic | oblique | backslant | inherit) #IMPLIED
 font-variant ( normal | small-caps | inherit ) #IMPLIED
 font-weight (normal | bold | bolder | lighter | inherit 
 | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900) #IMPLIED
 rx:glyph-area-height ( per-character | uniform ) #IMPLIED
">
<!-- Common Hyphenation Properties - Inline -->
<!-- 'xml:lang' shorthand property is also included -->
<!ENTITY % hyphenation-properties-inline "
 country CDATA #IMPLIED
 language CDATA #IMPLIED
 script CDATA #IMPLIED
 xml:lang CDATA #IMPLIED
 hyphenate ( false | true | inherit ) #IMPLIED
 hyphenation-character CDATA #IMPLIED
 hyphenation-push-character-count CDATA #IMPLIED
 hyphenation-remain-character-count CDATA #IMPLIED
">
<!-- Common Hyphenation Properties - Block -->
<!ENTITY % hyphenation-properties-block "
 hyphenation-keep ( auto | column | page | inherit ) #IMPLIED
 hyphenation-ladder-count CDATA #IMPLIED
 %hyphenation-properties-inline;
">
<!-- Common CSS Margin Properties -->
<!-- 'margin' shorthand property is also included -->
<!ENTITY % margin-properties-CSS "
 margin CDATA #IMPLIED
 margin-bottom CDATA #IMPLIED
 margin-left CDATA #IMPLIED
 margin-right CDATA #IMPLIED
 margin-top CDATA #IMPLIED
">
<!-- Common Margin Properties - Block -->
<!ENTITY % margin-properties-block "
 %margin-properties-CSS;
 space-after CDATA #IMPLIED
 space-after.minimum CDATA #IMPLIED
 space-after.optimum CDATA #IMPLIED
 space-after.maximum CDATA #IMPLIED
 space-after.precedence CDATA #IMPLIED
 space-after.conditionality ( retain | discard ) #IMPLIED
 space-before CDATA #IMPLIED
 space-before.minimum CDATA #IMPLIED
 space-before.optimum CDATA #IMPLIED
 space-before.maximum CDATA #IMPLIED
 space-before.precedence CDATA #IMPLIED
 space-before.conditionality ( retain | discard ) #IMPLIED
 start-indent CDATA #IMPLIED
 end-indent CDATA #IMPLIED
">
<!-- Common Margin Properties - Inline -->
<!ENTITY % margin-properties-inline "
 %margin-properties-block;
 space-start CDATA #IMPLIED
 space-start.minimum CDATA #IMPLIED
 space-start.optimum CDATA #IMPLIED
 space-start.maximum CDATA #IMPLIED
 space-start.precedence CDATA #IMPLIED
 space-start.conditionality ( retain | discard ) #IMPLIED
 space-end CDATA #IMPLIED
 space-end.minimum CDATA #IMPLIED
 space-end.optimum CDATA #IMPLIED
 space-end.maximum CDATA #IMPLIED
 space-end.precedence CDATA #IMPLIED
 space-end.conditionality ( retain | discard ) #IMPLIED
">
<!-- Area Alignment Properties - inline -->
<!-- 'vertical-align' shorthand is added --> 
<!ENTITY % area-alignment-properties-inline "
 alignment-adjust CDATA #IMPLIED
 baseline-identifier ( baseline | before-edge | text-before-edge 
 | middle | after-edge | text-after-edge 
 | ideographic | alphabetic | hanging 
 | mathematical | inherit ) #IMPLIED
 baseline-shift CDATA #IMPLIED
 dominant-baseline ( auto | autosense-script | no-change 
 | reset-size | ideographic | alphabetic 
 | hanging | mathematical | inherit ) #IMPLIED
 vertical-align CDATA #IMPLIED
">
<!-- Line Height Properties -->
<!ENTITY % line-height-properties "
 line-height CDATA #IMPLIED
 line-height.minimum CDATA #IMPLIED
 line-height.optimum CDATA #IMPLIED
 line-height.maximum CDATA #IMPLIED
 line-height.precedence CDATA #IMPLIED
 line-height.conditionality ( retain | discard ) #IMPLIED
 line-height-shift-adjustment CDATA #IMPLIED
">
<!-- Line Related Properties -->
<!-- <string> values are excluded from text-align -->
<!ENTITY % line-related-properties "
 text-align ( start | center | end | justify 
 | inside | outside | left | right | inherit ) #IMPLIED
 text-align-last ( relative | start | center | end | justify 
 | inside | outside | left | right | inherit ) #IMPLIED
 text-indent CDATA #IMPLIED
 last-line-end-indent CDATA #IMPLIED
 line-stacking-strategy ( line-height | font-height 
 | max-height | inherit ) #IMPLIED
 linefeed-treatment ( ignore | preserve 
 | treat-as-space | inherit ) #IMPLIED
 space-treatment ( ignore | preserve | inherit ) #IMPLIED
 white-space-collapse ( false | true | inherit ) #IMPLIED
 wrap-option ( no-wrap | wrap | inherit ) #IMPLIED
 unicode-bidi ( normal | embed | bidi-override | inherit ) #IMPLIED
 direction ( ltr | rtl | inherit ) #IMPLIED
">
<!-- Character Properties -->
<!ENTITY % character-properties "
 letter-spacing CDATA #IMPLIED
 letter-spacing.minimum CDATA #IMPLIED
 letter-spacing.optimum CDATA #IMPLIED
 letter-spacing.maximum CDATA #IMPLIED
 letter-spacing.precedence CDATA #IMPLIED
 letter-spacing.conditionality ( retain | discard ) #IMPLIED
 word-spacing CDATA #IMPLIED
 word-spacing.minimum CDATA #IMPLIED
 word-spacing.optimum CDATA #IMPLIED
 word-spacing.maximum CDATA #IMPLIED
 word-spacing.precedence CDATA #IMPLIED
 word-spacing.conditionality ( retain | discard ) #IMPLIED
 treat-as-word-space ( auto | yes | no | inherit ) #IMPLIED
 text-decoration NMTOKENS #IMPLIED
 score-spaces ( true | false | inherit ) #IMPLIED
 text-shadow CDATA #IMPLIED
 text-transform ( capitalize | uppercase | lowercase 
 | none | inherit ) #IMPLIED
 suppress-at-line-break ( auto | suppress | retain | inherit ) #IMPLIED
 font-height-override-before CDATA #IMPLIED
 font-height-override-after CDATA #IMPLIED
 glyph-orientation-horizontal CDATA #IMPLIED
 glyph-orientation-vertical CDATA #IMPLIED
 %font-properties;
 %line-height-properties;
">
<!-- Common Keeps and Breaks Properties - Atomic objects -->
<!-- 'page-break-*' shorthand properties are also included -->
<!ENTITY % keeps-and-breaks-properties-atomic "
 break-after ( auto | column | page 
 | even-page | odd-page | inherit ) #IMPLIED
 break-before ( auto | column | page 
 | even-page | odd-page | inherit ) #IMPLIED
 keep-with-next CDATA #IMPLIED
 keep-with-next.within-line CDATA #IMPLIED
 keep-with-next.within-column CDATA #IMPLIED
 keep-with-next.within-page CDATA #IMPLIED
 keep-with-previous CDATA #IMPLIED
 keep-with-previous.within-line CDATA #IMPLIED
 keep-with-previous.within-column CDATA #IMPLIED
 keep-with-previous.within-page CDATA #IMPLIED
 page-break-after ( auto | always | avoid 
 | left | right | inherit ) #IMPLIED
 page-break-before ( auto | always | avoid 
 | left | right | inherit ) #IMPLIED
">
<!-- Common Keeps and Breaks Properties - Inline -->
<!-- 'page-break-inside' shorthand property is also included -->
<!ENTITY % keeps-and-breaks-properties-inline "
 %keeps-and-breaks-properties-atomic;
 keep-together CDATA #IMPLIED
 keep-together.within-line CDATA #IMPLIED
 keep-together.within-column CDATA #IMPLIED
 keep-together.within-page CDATA #IMPLIED
 page-break-inside ( avoid | auto | inherit ) #IMPLIED
">
<!-- Common Keeps and Breaks Properties - Block -->
<!ENTITY % keeps-and-breaks-properties-block "
 %keeps-and-breaks-properties-inline;
 orphans CDATA #IMPLIED
 widows CDATA #IMPLIED
">
<!-- Leader and Rule Properties -->
<!ENTITY % leader-properties "
 leader-alignment ( none | reference-area | page | inherit ) #IMPLIED
 leader-pattern ( space | rule | dots 
 | use-content | inherit ) #IMPLIED
 leader-pattern-width CDATA #IMPLIED
 leader-length CDATA #IMPLIED
 leader-length.minimum CDATA #IMPLIED
 leader-length.optimum CDATA #IMPLIED
 leader-length.maximum CDATA #IMPLIED
 rule-style ( none | dotted | dashed | solid | double 
 | groove | ridge | inherit ) #IMPLIED
 rule-thickness CDATA #IMPLIED
">
<!-- Table Properties -->
<!-- 'border-spacing' shorthand property is also included -->
<!-- 'inherit' property added to table-omit-...er-at-break -->
<!ENTITY % table-properties "
 border-collapse ( collapse | separate | inherit ) #IMPLIED
 border-spacing CDATA #IMPLIED
 border-separation CDATA #IMPLIED
 border-separation.inline-progression-dimension CDATA #IMPLIED
 border-separation.block-progression-dimension CDATA #IMPLIED
 caption-side ( before | after | start | end 
 | top | bottom | left | right | inherit ) #IMPLIED
 empty-cells ( show | hide | inherit ) #IMPLIED
 table-layout ( auto | fixed | inherit ) #IMPLIED
 table-omit-header-at-break ( yes | no | inherit ) #IMPLIED
 table-omit-footer-at-break ( yes | no | inherit ) #IMPLIED
">
<!-- List Properties -->
<!ENTITY % list-properties "
 provisional-distance-between-starts CDATA #IMPLIED
 provisional-label-separation CDATA #IMPLIED
">
<!-- Float Properties -->
<!ENTITY % float-properties "
 float ( before | start | end | left | right | none | inherit ) #IMPLIED
 clear ( start | end | left | right | both | none | inherit ) #IMPLIED
">
<!-- Visibility Properties -->
<!ENTITY % visibility-properties "
 visibility ( visible | hidden | collapse | inherit ) #IMPLIED
 z-index CDATA #IMPLIED
">
<!-- =============================================================== -->
<!-- Set of all inheritable properties. This includes attributes -->
<!-- marked as inheritable in the WD, as well as all features that -->
<!-- may assume a value of "inherit" (because all such features are -->
<!-- also permitted at parent elements). By XSL WD design, this set -->
<!-- comprises nearly all attributes. -->
<!-- =============================================================== -->
<!ENTITY % inheritable-properties " 
 color CDATA #IMPLIED
 relative-align ( before | baseline | inherit ) #IMPLIED
 span ( none | all | inherit ) #IMPLIED 
 %accessibility-properties;
 %absolute-or-relative-position-properties;
 %border-padding-background-properties;
 %aural-properties;
 %box-size-properties;
 %margin-properties-inline;
 %area-properties;
 %area-alignment-properties-inline;
 %character-properties;
 %table-properties;
 %list-properties;
 %float-properties;
 %line-related-properties;
 %leader-properties;
 %keeps-and-breaks-properties-block;
 %hyphenation-properties-block;
 %visibility-properties;
">
<!-- =============================================================== -->
<!-- Common property subsets. -->
<!-- =============================================================== -->
<!-- Properties for every block that may contain text children -->
<!ENTITY % block-properties " 
 id CDATA #IMPLIED
 %inheritable-properties;
">
<!-- Properties for nonempty inline elements -->
<!ENTITY % inline-properties " 
 id CDATA #IMPLIED
 %inheritable-properties;
">
<!-- Properties for empty inline elements that contain characters -->
<!ENTITY % empty-inline-properties " 
 id CDATA #IMPLIED
 color CDATA #IMPLIED
 %accessibility-properties;
 %aural-properties;
 %relative-position-properties;
 %character-properties;
 %border-padding-background-properties;
 %hyphenation-properties-inline;
 %visibility-properties;
">
<!-- Properties for graphical inline elements -->
<!ENTITY % graphic-properties " 
 id CDATA #IMPLIED
 content-type CDATA #IMPLIED
 %accessibility-properties;
 %relative-position-properties;
 %aural-properties;
 %border-padding-background-properties;
 %margin-properties-inline;
 %area-alignment-properties-inline;
 %box-size-properties;
 %line-height-properties;
 %keeps-and-breaks-properties-atomic;
 content-height CDATA #IMPLIED
 content-width CDATA #IMPLIED
 scaling ( uniform | non-uniform | inherit ) #IMPLIED
 scaling-method ( auto | integer-pixels 
 | resample-any-method | inherit ) #IMPLIED
 overflow ( visible | hidden | scroll | auto | inherit ) #IMPLIED
">
<!-- *************************************************************** -->
<!-- Content models and attributes -->
<!-- -->
<!-- A. Element structure for top-level elements -->
<!-- *************************************************************** -->
<!-- =============================================================== -->
<!-- Root element. Contains everything, generates nothing. It has an -->
<!-- id, a FO namespace prefix declaration, and other namespace -->
<!-- declarations if used. It can also bear inheritable properties, -->
<!-- passed further to fo:flows/fo:static-contents. Inheritable -->
<!-- properties from fo:layout-master-set are banned in this version -->
<!-- of the DTD. -->
<!-- =============================================================== -->
<!ELEMENT fo:root (
 fo:layout-master-set,
 fo:declarations?,
 fo:page-sequence+
 )
>
<!ATTLIST fo:root
 xmlns:fo CDATA #REQUIRED
 xmlns:rx CDATA #IMPLIED
 %inheritable-properties;
>
<!-- =============================================================== -->
<!-- Color profile declarations -->
<!-- =============================================================== -->
<!ELEMENT fo:declarations (
 fo:color-profile+
 )
>
<!ELEMENT fo:color-profile EMPTY >
<!ATTLIST fo:color-profile
 src CDATA #REQUIRED
 color-profile-name CDATA #REQUIRED
 rendering-intent CDATA #IMPLIED
>
<!-- =============================================================== -->
<!-- Layout-master-set. Contains a set of page-masters. Neither of -->
<!-- its descendants generates any area, so no inherited elements -->
<!-- can be specified on it or on its children. -->
<!-- Content model made more strict than in the draft, to enforce -->
<!-- that a page-sequence-master be always accompanied by at least -->
<!-- one simple-page-master. -->
<!-- =============================================================== -->
<!ELEMENT fo:layout-master-set 
 (
 fo:page-sequence-master*, fo:simple-page-master,
 ( fo:simple-page-master | fo:page-sequence-master )*
 ) 
>
<!-- =============================================================== -->
<!-- Page sequence master -->
<!-- =============================================================== -->
<!ELEMENT fo:page-sequence-master (
 (
 fo:single-page-master-reference
 | fo:repeatable-page-master-reference
 | fo:repeatable-page-master-alternatives
 )+
 )
>
<!ATTLIST fo:page-sequence-master
 master-name CDATA #REQUIRED
>
<!-- =============================================================== -->
<!-- Sequence specifiers are predefined sequences of page masters -->
<!-- that are used by page sequence master to construct a desired -->
<!-- page collection. -->
<!-- =============================================================== -->
<!ELEMENT fo:single-page-master-reference EMPTY>
<!ATTLIST fo:single-page-master-reference
 master-name CDATA #REQUIRED
>
<!ELEMENT fo:repeatable-page-master-reference EMPTY>
<!ATTLIST fo:repeatable-page-master-reference
 master-name CDATA #REQUIRED
 maximum-repeats CDATA #IMPLIED
>
<!ELEMENT fo:repeatable-page-master-alternatives 
 ( fo:conditional-page-master-reference+ )
>
<!ATTLIST fo:repeatable-page-master-alternatives
 maximum-repeats CDATA #IMPLIED
>
<!ELEMENT fo:conditional-page-master-reference EMPTY>
<!ATTLIST fo:conditional-page-master-reference
 master-name CDATA #REQUIRED
 page-position ( first | last | rest | any | inherit ) #IMPLIED
 odd-or-even ( odd | even | any | inherit ) #IMPLIED
 blank-or-not-blank ( blank | not-blank | any | inherit ) #IMPLIED
>
<!-- =============================================================== -->
<!-- Simple page master defines a page layout. It does not -->
<!-- explicitly generate any content. Most of its properties are -->
<!-- local except for writing-mode and reference-orientation that -->
<!-- are inherited by the underlying region-* objects. -->
<!-- =============================================================== -->
<!-- NOTE. We could think about a common background/padding/border -->
<!-- for every page instance generated by the page master. For such -->
<!-- a scope, we may add borders/padding/background to its features. -->
<!-- However, in the current version this is ruled out explicitly by -->
<!-- the WD XSL specs. -->
<!-- [RenderX] rx:footnote-area-placement property added to specify -->
<!-- the location of the footnote region -->
<!ELEMENT fo:simple-page-master 
 (
 fo:region-body,
 fo:region-before?,
 fo:region-after?,
 fo:region-start?,
 fo:region-end?
 )
>
<!ATTLIST fo:simple-page-master
 %margin-properties-CSS;
 master-name CDATA #REQUIRED
 page-height CDATA #IMPLIED
 page-width CDATA #IMPLIED
 size CDATA #IMPLIED
 reference-orientation ( 0 | 90 | 180 | 270 
 |-90 | -180 | -270 | inherit ) #IMPLIED
 writing-mode ( lr-tb | rl-tb | tb-rl | lr | rl | tb | inherit ) #IMPLIED
 rx:footnote-area-placement ( within-page | within-column 
 | within-last-column ) #IMPLIED
>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<!-- Regions. The page instance is divided into subareas, whose -->
<!-- properties are described by the five region-* elements. These -->
<!-- elements by themselves do not generate any content. -->
<!-- Reference-orientation and writing-mode may be inherited from -->
<!-- the page master; all other features are local. -->
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<!ENTITY % region-properties "
 %border-padding-background-properties;
 %area-properties;
 region-name CDATA #IMPLIED
">
<!-- =============================================================== -->
<!-- Body region: middle of the page. Unlike side regions, this one -->
<!-- may have multiple columns. -->
<!-- [!] We have restricted margin properties to be margin-only, -->
<!-- allowing no spaces. This is done because no clear semantics -->
<!-- can be ascribed to single components of a space vector. -->
<!-- =============================================================== -->
<!ELEMENT fo:region-body EMPTY>
<!ATTLIST fo:region-body
 %region-properties;
 %margin-properties-CSS;
 column-count CDATA #IMPLIED
 column-gap CDATA #IMPLIED
>
<!-- =============================================================== -->
<!-- Side regions: page edges. These regions have extent and -->
<!-- precedence that is used to arbitrate corner conflicts. Side -->
<!-- regions are viewed as frames, and may not have margins. -->
<!-- Extent made obligatory: its default value of 0.0pt does not -->
<!-- make much sense. -->
<!-- =============================================================== -->
<!ENTITY % side-region-properties "
 %region-properties;
 extent CDATA #REQUIRED
 precedence ( true | false | inherit ) #IMPLIED
">
<!ELEMENT fo:region-before EMPTY>
<!ATTLIST fo:region-before %side-region-properties;>
<!ELEMENT fo:region-after EMPTY>
<!ATTLIST fo:region-after %side-region-properties;>
<!ELEMENT fo:region-start EMPTY>
<!ATTLIST fo:region-start %side-region-properties;>
<!ELEMENT fo:region-end EMPTY>
<!ATTLIST fo:region-end %side-region-properties;>
<!-- =============================================================== -->
<!-- Page sequence defines the order of choosing page masters to -->
<!-- accomodate all the contents generated by its fo:flow and -->
<!-- fo:static-content children, and the way of numbering them. -->
<!-- =============================================================== -->
<!ELEMENT fo:page-sequence
 (
 fo:title?,
 fo:static-content*,
 fo:flow
 )
>
<!ATTLIST fo:page-sequence
 id CDATA #IMPLIED
 master-name CDATA #REQUIRED
 initial-page-number CDATA #IMPLIED
 force-page-count ( auto | even | odd | end-on-even 
 | end-on-odd | no-force | inherit) #IMPLIED
 format CDATA #IMPLIED
 letter-value ( auto | alphabetic | traditional ) #IMPLIED
 grouping-separator CDATA #IMPLIED
 grouping-size CDATA #IMPLIED
 %inheritable-properties;
>
<!-- =============================================================== -->
<!-- Title may not contain out-of-lines. -->
<!-- =============================================================== -->
<!ELEMENT fo:title 
 ( #PCDATA 
 | %basic-inlines; 
 | %wrappers; )*
>
<!ATTLIST fo:title %inheritable-properties;>
<!-- *************************************************************** -->
<!-- B. Element structure for content-bearing elements --> 
<!-- *************************************************************** -->
<!-- =============================================================== -->
<!-- Flows. They are just sequences of blocks. 'flow-name' feature -->
<!-- defines linkage of the flow to a region in the page master. -->
<!-- =============================================================== -->
<!ENTITY % flow-properties "
 id CDATA #IMPLIED 
 flow-name CDATA #REQUIRED
 %inheritable-properties;
">
<!ELEMENT fo:static-content ( %blocks; )+ >
<!ATTLIST fo:static-content %flow-properties; >
<!ELEMENT fo:flow ( %blocks; )+ >
<!ATTLIST fo:flow %flow-properties; >
<!-- =============================================================== -->
<!-- Block is the base element for all content areas. Besides -->
<!-- properties used to format the block itself, it also conveys -->
<!-- formatting information to its inline-level children. -->
<!-- =============================================================== -->
<!ELEMENT fo:block (
 #PCDATA
 | fo:initial-property-set
 | %basic-inlines; 
 | %basic-blocks; 
 | %out-of-lines; 
 | %wrappers; 
 )*
>
<!ATTLIST fo:block %block-properties;>
<!-- =============================================================== -->
<!-- Block container -->
<!-- =============================================================== -->
<!ELEMENT fo:block-container ( %blocks; )+ >
<!ATTLIST fo:block-container %block-properties;>
<!-- *************************************************************** -->
<!-- Inline elements --> 
<!-- *************************************************************** -->
<!-- =============================================================== -->
<!-- Unicode bidi-override -->
<!-- =============================================================== -->
<!ELEMENT fo:bidi-override ( %inlines; )*>
<!ATTLIST fo:bidi-override %inline-properties;>
<!-- =============================================================== -->
<!-- Single character -->
<!-- =============================================================== -->
<!ELEMENT fo:character EMPTY>
<!ATTLIST fo:character
 character CDATA #REQUIRED
 %empty-inline-properties;
>
<!-- =============================================================== -->
<!-- Initial property set specifies properties for one or more lines -->
<!-- =============================================================== -->
<!ELEMENT fo:initial-property-set EMPTY>
<!ATTLIST fo:initial-property-set 
 rx:line-count CDATA #IMPLIED
 %empty-inline-properties; 
>
<!-- =============================================================== -->
<!-- External graphic -->
<!-- =============================================================== -->
<!ELEMENT fo:external-graphic EMPTY >
<!ATTLIST fo:external-graphic
 %graphic-properties;
 src CDATA #IMPLIED
>
<!-- =============================================================== -->
<!-- In-stream graphic -->
<!-- =============================================================== -->
<!ELEMENT fo:instream-foreign-object EMPTY >
<!ATTLIST fo:instream-foreign-object %graphic-properties;>
<!-- =============================================================== -->
<!-- Inline -->
<!-- =============================================================== -->
<!ELEMENT fo:inline ( %inlines; )*>
<!ATTLIST fo:inline %inline-properties;>
<!-- =============================================================== -->
<!-- Inline container -->
<!-- =============================================================== -->
<!ELEMENT fo:inline-container ( %blocks; )*>
<!ATTLIST fo:inline-container %inline-properties;>
<!-- =============================================================== -->
<!-- Leader -->
<!-- =============================================================== -->
<!ELEMENT fo:leader ( %inlines; )*>
<!ATTLIST fo:leader %inline-properties;>
<!-- =============================================================== -->
<!-- Page Number -->
<!-- =============================================================== -->
<!ELEMENT fo:page-number EMPTY>
<!ATTLIST fo:page-number %empty-inline-properties;>
<!-- =============================================================== -->
<!-- Page number citation -->
<!-- =============================================================== -->
<!ELEMENT fo:page-number-citation EMPTY>
<!ATTLIST fo:page-number-citation
 %empty-inline-properties;
 ref-id CDATA #REQUIRED 
>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<!-- Formatting objects for tables. -->
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<!-- =============================================================== -->
<!-- Table & Caption is a wrapper to all the stuff pertinent to a -->
<!-- given table. It generates a block consisting of two subblocks: -->
<!-- one for the caption, another one for the table itself. The -->
<!-- placement of these two blocks is controlled by the -->
<!-- 'caption-side' property: if caption-side="before"|"after" (or -->
<!-- their absolute orientation equivalents), the two blocks are -->
<!-- drawn one after another; if it is "start"|"end", then the -->
<!-- caption is displayed on the correspondent side of the table. -->
<!-- In this case, the relative alignment of the two blocks is given -->
<!-- by the 'relative-align'/'display-align' property. -->
<!-- -->
<!-- =============================================================== -->
<!ELEMENT fo:table-and-caption (
 fo:table-caption?,
 fo:table
 )
>
<!ATTLIST fo:table-and-caption %block-properties;>
<!-- =============================================================== -->
<!-- Table caption is an area container. -->
<!-- =============================================================== -->
<!ELEMENT fo:table-caption ( %blocks; )+ >
<!ATTLIST fo:table-caption %block-properties;>
<!-- =============================================================== -->
<!-- fo:table is the basic element for all tables. All the contents -->
<!-- placed inside it is distributed over a single rectangular grid -->
<!-- of rows and columns. -->
<!-- =============================================================== -->
<!ELEMENT fo:table (
 fo:table-column*,
 fo:table-header?,
 fo:table-footer?,
 fo:table-body+
 )
>
<!ATTLIST fo:table %block-properties;>
<!-- =============================================================== -->
<!-- Table column specifies common properties to ascribe to all -->
<!-- cells in a column *or a group of columns*. Note that, if both -->
<!-- 'number-columns-repeated' and 'number-columns-spanned' exceed -->
<!-- 1, the column counter is increased by 'number-columns-spanned'. -->
<!-- it means that you only set properties for columns: --> 
<!-- 'column-number' -->
<!-- 'column-number' + 'number-columns-spanned' -->
<!-- 'column-number' + 2 * 'number-columns-spanned' -->
<!-- and so on, leaving default properties for intermediate columns. -->
<!-- =============================================================== -->
<!ELEMENT fo:table-column EMPTY >
<!ATTLIST fo:table-column
 column-number CDATA #IMPLIED
 column-width CDATA #IMPLIED
 number-columns-repeated CDATA #IMPLIED
 number-columns-spanned CDATA #IMPLIED
 %inheritable-properties;
>
<!-- =============================================================== -->
<!-- Table header, table footer, and table body are wrappers for -->
<!-- groups of rows. They contain either one or more fo:table-rows, -->
<!-- or one or more fo:table-cells; in the latter case, row breaks -->
<!-- are specified in the cells by 'starts-row'/'ends-row'. --> 
<!-- All these elements are identical both in the content structure -->
<!-- and in the attributes. -->
<!-- =============================================================== -->
<!ENTITY % row-group " fo:table-row+ | fo:table-cell+ ">
<!ELEMENT fo:table-header ( %row-group; ) >
<!ATTLIST fo:table-header
 id CDATA #IMPLIED 
 %inheritable-properties; 
>
<!ELEMENT fo:table-footer ( %row-group;) >
<!ATTLIST fo:table-footer
 id CDATA #IMPLIED 
 %inheritable-properties; 
>
<!ELEMENT fo:table-body ( %row-group; )>
<!ATTLIST fo:table-body
 id CDATA #IMPLIED 
 %inheritable-properties; 
>
<!-- =============================================================== -->
<!-- Table row. -->
<!-- =============================================================== -->
<!ELEMENT fo:table-row ( fo:table-cell+ ) >
<!ATTLIST fo:table-row
 id CDATA #IMPLIED 
 %inheritable-properties; 
>
<!-- =============================================================== -->
<!-- Table cell. -->
<!-- =============================================================== -->
<!ELEMENT fo:table-cell ( %blocks; )+ >
<!ATTLIST fo:table-cell
 %block-properties; 
 column-number CDATA #IMPLIED
 ends-row ( yes | no ) #IMPLIED
 number-columns-spanned CDATA #IMPLIED
 number-rows-spanned CDATA #IMPLIED
 starts-row ( yes | no ) #IMPLIED
>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<!-- Formatting objects for lists. -->
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<!-- =============================================================== -->
<!-- List block is a block, with some extra features to control the -->
<!-- disposition of list items. -->
<!-- =============================================================== -->
<!ELEMENT fo:list-block ( fo:list-item+ ) >
<!ATTLIST fo:list-block %block-properties;>
<!-- =============================================================== -->
<!-- List item is a coupling of item label and item body. -->
<!-- =============================================================== -->
<!ELEMENT fo:list-item ( fo:list-item-label, fo:list-item-body ) >
<!ATTLIST fo:list-item %block-properties;>
<!-- =============================================================== -->
<!-- List item label and list item body -->
<!-- =============================================================== -->
<!ELEMENT fo:list-item-label ( %blocks; )+ >
<!ATTLIST fo:list-item-label %block-properties;>
<!ELEMENT fo:list-item-body ( %blocks;)+ >
<!ATTLIST fo:list-item-body %block-properties;>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<!-- Out-of-lines. -->
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<!-- =============================================================== -->
<!-- Floats and footnotes resemble containers. Accordingly, we treat -->
<!-- them as block sequences. -->
<!-- =============================================================== -->
<!ELEMENT fo:float ( %blocks; )+ >
<!ATTLIST fo:float %block-properties;>
<!ELEMENT fo:footnote (
 fo:inline,
 fo:footnote-body 
 )
>
<!ATTLIST fo:footnote %block-properties;>
<!ELEMENT fo:footnote-body ( %blocks; )+ >
<!ATTLIST fo:footnote-body %block-properties;>
<!-- =============================================================== -->
<!-- Simple link. From the formatting point of view, it's nothing -->
<!-- but a regular inline sequence. -->
<!-- =============================================================== -->
<!ELEMENT fo:simple-link ( %mixed-level; )* >
<!ATTLIST fo:simple-link
 %inline-properties;
 external-destination CDATA #IMPLIED
 internal-destination CDATA #IMPLIED
 indicate-destination ( yes | no ) #IMPLIED
 show-destination ( replace | new ) #IMPLIED
 destination-placement-offset CDATA #IMPLIED
>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<!-- Wrappers and Markers. -->
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<!-- =============================================================== -->
<!-- Wrapper. This may be useful but breaks every effort to validate -->
<!-- content models for blocks and inlines. -->
<!-- =============================================================== -->
<!ELEMENT fo:wrapper ( %mixed-level; )* >
<!ATTLIST fo:wrapper 
 id CDATA #IMPLIED
 %inheritable-properties; 
>
<!-- =============================================================== -->
<!-- Marker. This element may embrace any content but cannot pass -->
<!-- properties to its children; so, it may not have features other -->
<!-- than marker-class-name. -->
<!-- =============================================================== -->
<!ELEMENT fo:marker ( %mixed-level; )* >
<!ATTLIST fo:marker 
 marker-class-name CDATA #IMPLIED
>
<!-- =============================================================== -->
<!-- Marker retrieval. -->
<!-- =============================================================== -->
<!ELEMENT fo:retrieve-marker EMPTY>
<!ATTLIST fo:retrieve-marker 
 retrieve-class-name CDATA #IMPLIED
 retrieve-position ( first-starting-within-page 
 | first-including-carryover 
 | last-starting-within-page 
 | last-ending-within-page ) #IMPLIED
 retrieve-boundary ( page | page-sequence | document ) #IMPLIED
>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<!-- Multistate stuff. This section is the least developed in the -->
<!-- whole DTD, and most solutions are arbitrary. We beg thy pardon. -->
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<!-- =============================================================== -->
<!-- Switch. This is a pure logical operator; no formatting may be -->
<!-- conveyed through it. -->
<!-- =============================================================== -->
<!ELEMENT fo:multi-switch ( fo:multi-case )+ >
<!ATTLIST fo:multi-switch
 %inheritable-properties; 
 id CDATA #IMPLIED
 auto-restore ( yes | no ) #IMPLIED
>
<!-- =============================================================== -->
<!-- Single case. Block-level formatting may be conveyed. -->
<!-- =============================================================== -->
<!ELEMENT fo:multi-case ( %mixed-level; )* >
<!ATTLIST fo:multi-case
 %inheritable-properties; 
 id CDATA #IMPLIED
 starting-state CDATA #IMPLIED
 case-name CDATA #IMPLIED
 case-title CDATA #IMPLIED
>
<!-- =============================================================== -->
<!-- Toggle. This is a typical inline. -->
<!-- =============================================================== -->
<!ELEMENT fo:multi-toggle ( %inlines; )*>
<!ATTLIST fo:multi-toggle
 %inheritable-properties; 
 id CDATA #IMPLIED
 switch-to CDATA #IMPLIED
>
<!-- =============================================================== -->
<!-- Multi-properties is listed among block-level elements. -->
<!-- Formatting common to all property sets can be specified here; -->
<!-- we expect it to be block-level only. -->
<!-- =============================================================== -->
<!ELEMENT fo:multi-properties 
 (
 fo:multi-property-set+,
 fo:wrapper
 )
>
<!ATTLIST fo:multi-properties %block-properties;>
<!-- =============================================================== -->
<!-- Multi property set. Since these are properties of a -->
<!-- fo:multi-properties that is considered a block, we accept only -->
<!-- block properties here. -->
<!-- =============================================================== -->
<!ELEMENT fo:multi-property-set EMPTY>
<!ATTLIST fo:multi-property-set
 %block-properties;
 active-state ( link | visited | active | hover | focus ) #REQUIRED
>

AltStyle によって変換されたページ (->オリジナル) /