<?xml version="1.0" encoding="iso-8859-1"?> <!-- This DTD has been developed in order to validate XSL FO documents conformant to XSL CR of November 21, 2000. The namespace prefix is xmlns:fo="http://www.w3.org/1999/XSL/Format". This DTD also makes provision for few extensions to XSL CR, put into a separate namespace: xmlns:rx="http://www.renderx.com/XSL/Extensions". Please e-mail your comments to Nikolai Grigoriev <grig@renderx.com> © RenderX, 1999-2000. --> <!-- ******************************************************************* This DTD was written in mind to validate testcases for the new XSL FO draft. Therefore, it is restrictive with respect to the CR: some rare XSL FO features have been dropped in order to validate others more reliably. Unless a document intentionally uses some of the functionality listed below in the introductory notes, it shall be conformant to this DTD in order to be a valid XSL FO document. INTRODUCTORY NOTES 1.XSL FO are hard to validate by a DTD: attributes are 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: real checks are performed 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-foreign-object and all non-FO elements from fo:declarations. 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. (I think this is more like a correction to the CR, rather than a deviation from it). 2. In the CR, 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. Only basic values for writing-mode are included. 7. "Reference-orientation" is given <angle> values, besides numeric ones described in the CR. 8. Several 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:glyph-area-height 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:inline-height-shift-adjustment Specifies if the border around an inline element should take baseline shifts in consideration. rx:background-content-height rx:background-content-width rx:background-scaling These properties are exact analogs of 'content-height', 'content-width' and 'scaling' but apply to the background image. ******************************************************************** --> <!-- *************************************************************** --> <!-- 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:basic-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 rx:background-content-height CDATA #IMPLIED rx:background-content-width CDATA #IMPLIED rx:background-scaling ( uniform | non-uniform) #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-bottom-width.length CDATA #IMPLIED border-bottom-width.conditionality ( discard | retain) #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-end-width.length CDATA #IMPLIED border-end-width.conditionality ( discard | retain) #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-left-width.length CDATA #IMPLIED border-left-width.conditionality ( discard | retain) #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-right-width.length CDATA #IMPLIED border-right-width.conditionality ( discard | retain) #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-start-width.length CDATA #IMPLIED border-start-width.conditionality ( discard | retain) #IMPLIED border-style CDATA #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-top-width.length CDATA #IMPLIED border-top-width.conditionality ( discard | retain) #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-bottom.length CDATA #IMPLIED padding-bottom.conditionality ( discard | retain) #IMPLIED padding-end CDATA #IMPLIED padding-end.length CDATA #IMPLIED padding-end.conditionality ( discard | retain) #IMPLIED padding-left CDATA #IMPLIED padding-left.length CDATA #IMPLIED padding-left.conditionality ( discard | retain) #IMPLIED padding-right CDATA #IMPLIED padding-right.length CDATA #IMPLIED padding-right.conditionality ( discard | retain) #IMPLIED padding-start CDATA #IMPLIED padding-start.length CDATA #IMPLIED padding-start.conditionality ( discard | retain) #IMPLIED padding-top CDATA #IMPLIED padding-top.length CDATA #IMPLIED padding-top.conditionality ( discard | retain) #IMPLIED "> <!-- Border Precedence Properties for tables --> <!ENTITY % border-precedence-properties " border-after-precedence CDATA #IMPLIED border-before-precedence CDATA #IMPLIED border-end-precedence CDATA #IMPLIED border-start-precedence 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 | error-if-overflow | inherit ) #IMPLIED display-align ( auto | before | center | after | inherit ) #IMPLIED reference-orientation ( 0 | 90 | 180 | 270 | -90 | -180 | -270 | 0deg | 90deg | 180deg | 270deg | -90deg | -180deg | -270deg | 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-selection-strategy (auto | character-by-character | inherit) #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 margin-after CDATA #IMPLIED margin-start CDATA #IMPLIED margin-end CDATA #IMPLIED margin-before 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 alignment-baseline ( auto | baseline | before-edge | text-before-edge | middle | central | after-edge | text-after-edge | top | text-top | bottom | text-bottom | ideographic | alphabetic | hanging | mathematical | inherit ) #IMPLIED baseline-shift CDATA #IMPLIED dominant-baseline ( auto | use-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 --> <!-- [!]<!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 | treat-as-zero-width-space | inherit ) #IMPLIED space-treatment ( ignore | preserve | ignore-if-before-linefeed | ignore-if-after-linefeed | ignore-if-surrounding-linefeed | inherit ) #IMPLIED white-space ( normal | pre | nowrap | inherit ) #IMPLIED white-space-collapse ( false | true | inherit ) #IMPLIED wrap-option ( no-wrap | nowrap | 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 | true | false | 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 text-altitude CDATA #IMPLIED text-depth CDATA #IMPLIED glyph-orientation-horizontal ( 0 | 90 | 180 | 270 | -90 | -180 | -270 | 0deg | 90deg | 180deg | 270deg |-90deg | -180deg | -270deg | inherit ) #IMPLIED glyph-orientation-vertical ( 0 | 90 | 180 | 270 | -90 | -180 | -270 | 0deg | 90deg | 180deg | 270deg |-90deg | -180deg | -270deg | inherit ) #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 ( true | false | inherit ) #IMPLIED table-omit-footer-at-break ( true | false | 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 CR, as well as all features that --> <!-- may assume a value of "inherit" (because all such features are --> <!-- also permitted at parent elements). By XSL CR design, this set --> <!-- comprises nearly all attributes. --> <!-- =============================================================== --> <!ENTITY % inheritable-properties " color CDATA #IMPLIED relative-align ( before | baseline | inherit ) #IMPLIED span ( none | all | inherit ) #IMPLIED rx:inline-height-shift-adjustment ( consider-shifts | disregard-shifts | inherit ) #IMPLIED %accessibility-properties; %absolute-or-relative-position-properties; %border-padding-background-properties; %border-precedence-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; %area-alignment-properties-inline; %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; %font-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 | error-if-overflow | 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 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 media-usage CDATA #IMPLIED size CDATA #IMPLIED reference-orientation ( 0 | 90 | 180 | 270 | -90 | -180 | -270 | 0deg | 90deg | 180deg | 270deg | -90deg | -180deg | -270deg | 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 %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 ( %mixed-level; )*> <!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 ( true | false ) #IMPLIED number-columns-spanned CDATA #IMPLIED number-rows-spanned CDATA #IMPLIED starts-row ( true | false ) #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:basic-link ( %mixed-level; )* > <!ATTLIST fo:basic-link %inline-properties; external-destination CDATA #IMPLIED internal-destination CDATA #IMPLIED indicate-destination ( true | false ) #IMPLIED show-destination ( replace | new ) #IMPLIED destination-placement-offset CDATA #IMPLIED target-processing-context CDATA #IMPLIED target-presentation-context CDATA #IMPLIED target-stylesheet 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 ( true | false ) #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 >