[Accessibility conventions are described at the bottom of the page]

3. Basic concepts of XSL-FO
[> 4.][< 2.2.3][^^^]
3.0 Essential concepts and terminology
[> 3.1][> 4.][< 3.][^^][^^^]
Layout-based vs. content-based formatting
[[1] - layout-based formatting respects the constraints of the target medium
[[2] - limitations or capacities of target may constrain content or appearance
][1] - content-based formatting respects the quantity and identity of the information
[[2] - generates as much of the target medium as required to accommodate the information
]]
Formatting is different than rendering
[[1] - expressing what you want done vs. expressing how it is accomplished
 [1] - similar to difference between declarative and imperative programming
 [1] - similar to difference between XSLT "transformation by example" and other approaches of "transformation by algorithm"
]
Differing processing model concepts are expressed using unambiguous terminology
[[1] - an XSL-FO instance with elements and attributes
 [1] - a formatting object tree with objects and properties
 [1] - a refined formatting object tree with objects and area traits
 [1] - an area tree with areas and traits
]
Formatting model and vocabulary properties extend what is currently available for web presentation
[[1] - adds arbitrary boundaries as pages instead of infinite-length canvas in a browser
 [1] - inspired by DSSSL but diverges more closely to CSS2
 [1] - classes of XSL-FO properties:
[[2] - CSS properties by copy (unchanged CSS2 semantics)
 [2] - CSS properties with extended values
 [2] - CSS properties "broken apart" to a finer granularity
 [2] - XSL-FO-specific properties
][1] - supports multiple writing directions and reference orientations
]
The XSL-FO objects covered in this chapter are:
[[1] - <[root]> ([6.4.2])
[[2] - the document element of the XSL-FO instance
][1] - <[layout-master-set]> ([6.4.7])
[[2] - the collection of definitions of page geometries and page sequencing and selection patterns
][1] - <[page-sequence]> ([6.4.5])
[[2] - the specification of that information to be paginated over a sequence of pages with common static information
][1] - [F1.1]<[page-sequence-wrapper]> ([6.4.6])
[[2] - the specification of inherited properties across a number of page sequences
][1] - <[flow]> ([6.4.19])
[[2] - the content that is flowed to as many pages as required and formatted according to the appearance properties
]]
3.1 Basic concepts
[> 3.2][< 3.0][^^][^^^]
3.1.1 Layout-based vs. content-based formatting
[> 3.1.2][> 3.2][> 4.][< 3.0][^^][^^^]
Layout-based formatting accommodates the medium
[[1] - often uses absolute positioning, sizing and page counting
[[2] - a magazine may need a particular columnist's article to appear on the right-hand edge of page 7 and the three lead stories within the first four pages
][1] - rules of layout dictate the quantity and appearance of content
 [1] - typically unstructured authoring and formatting
[[2] - desktop publishing, journalism, etc.
]]
Content-based formatting accommodates the information
[[1] - rules of content dictate the layout of information (rule-based formatting)
 [1] - 40,000 to 60,000 pages in a single aircraft maintenance manual cannot be individually formatted
 [1] - typically highly-structured authoring and formatting
[[2] - technical publications: pharmaceutical, aerospace, automotive, etc.
]]
XSL-FO oriented more to content-based formatting than layout-based formatting
[[1] - because XSL-FO is flow-based not page-based
[[2] - page breaks are triggered by the need of content flowed into a page sequence
 [2] - the stylesheet writer does not lay out every page in an XSL-FO stream
][1] - a "turn the crank" approach, not a "tweak and peek" approach
[[2] - mechanical accommodation of content
][1] - limited support of the order of specific page sequences
[[2] - high-caliber copy-fitting often cannot be mechanical or unattended
]]
XSL-FO is not oriented to loose-leaf publishing
[[1] - no inherent maintenance facilities for past versions of individual pages
 [1] - no inherent support of change pages (a.k.a. "A pages")
 [1] - no inherent support of lists of effective pages
]
3.1.2 Formatting vs. Rendering
[> 3.2][> 4.][< 3.1.1][^][^^][^^^]
An XSL-FO instance describes the intent of how a stream of information is to be formatted
[[1] - XSL-FO instance typically generated by a stylesheet acting on an instance of XML information
[[2] - the original vocabulary of the XML source is transformed into the XSL-FO vocabulary
[[3] - the #PCDATA and attribute content is rewrapped in formatting vocabulary
][2] - resulting transformed file is useful for diagnostics when reified as syntax
 [2] - opportunity for store and forward applications of formatting intent
][1] - no feedback loop from the formatter to the stylesheet (unlike interactive agents)
[[2] - XSL-FO information must be complete with respect to all desired behaviors of the formatter
 [2] - special formatting cases or conditions can be accommodated through contingencies expressed in the XSL-FO semantics
]]
Information to be formatted is repackaged from the source vocabulary into the formatting vocabulary
[[1] - information arranged in a collection of formatting objects, each specifying a part of:
[[2] - layout
[[3] - the location of the information positioned on the target medium
 [3] - areas defined by the user and located within other areas
[[4] - hierarchical tree of rectangles on each page
]][2] - appearance/impartation
[[3] - the conveyance of the information to the user
 [3] - visual formatting (font, size, color, weight, etc.)
 [3] - aural synthesis (voice, volume, azimuth, pitch, etc.)
][2] - pagination/flow
[[3] - the parceling of a stream of content within the layout areas
 [3] - generating areas as required to accommodate the quantity of information
]][1] - objects are expressed in an XSL-FO XML instance as elements
]
A complete alphabetical list of formatting objects is in [Chapter C.].
[[1] - it is not necessary to know all objects to get effective results
]
Formatter responsible for interpreting intent to be rendered
[[1] - following the Recommendation the formatter determines what is to be rendered
[[2] - how the formatter interprets the formatting objects is defined in excruciating detail
][1] - some properties are specifically targeted to certain media
]
The semantics of rendering are not described in detail
[[1] - device-specific rendition based on semantics of formatting objects
 [1] - how the rendering agent accomplishes the task of effecting the result of formatting is entirely up to the agent
[[2] - must produce the same result as the intent described by the Recommendation
]]
Rendering, itself, may be a multiple-step process
[[1] - production of another intermediate formatting language
[[2] - e.g. TeX
][1] - production of an electronic representation of the final form page description
[[2] - e.g. Portable Document Format (PDF) by Adobe
 [2] - e.g. Standard Page Description Language (SPDL) - ISO/IEC 10180
][1] - interpretation and rendering to the physical final form
[[2] - e.g. paper from the page description language
][1] - could be many steps to final result
[[2] - e.g. XML to XSL-FO to TeX to PDF to paper
]]
3.2 Processing model
[> 3.3][< 3.1.2][^^][^^^]
3.2.1 Processing model of formatting
[> 3.3][> 4.][< 3.1.2][^^][^^^]
From formatting objects to area tree in a well-defined process:
[Figure 3.1: XSL processing model flow summary
A six-part diagram shows the flow from the top left part, across the parts along to the top, to the bottom left part, across the bottom to the bottom right part.
The top-left part, labeled "Creating", shows an XSL-FO instance. The bottom right, labeled "Rendering", shows a group of renderings in different media.
The top middle part shows a tree of circles and is labeled "Instance tree (elements, attributes, text)."
The top right part shows a tree of circles and is labeled "FO tree (objects and properties)."
The bottom left part shows a tree of circles and is labeled "Refined FO tree (objects and traits)."
The bottom middle part shows a tree of circles and is labeled "Area tree (areas and traits)."
]
Formatting vocabulary represents typographical abstractions available to the designer
[[1] - documented as semantics in the XSL-FO Recommendation
 [1] - expressed as the intent of the designer for the formatting of the page
[[2] - in elements, attributes and text using the XSL-FO vocabulary
][1] - may be created outside of the formatter in an XML instance of XSL-FO
 [1] - information represented within the formatter as an Instance Tree
]
Formatting objects represent the specifications of layout, appearance and pagination
[[1] - information interpreted as the Formatting Object Tree
 [1] - most elements and text become formatting objects
[[2] - in-stream foreign object elements do not become objects
 [2] - certain white-space-only text nodes do not become objects
 [2] - constructs not from the XSL-FO namespace that are used in <[declarations]> do not become objects
][1] - attributes become properties
[[2] - any property can be specified on any element
]]
Properties are refined to traits where applicable for each formatting object
[[1] - information interpreted as the Refined Formatting Object Tree
 [1] - a single property may become one or more traits of any kind
[[2] - formatting traits (e.g. size and position)
 [2] - rendering traits (e.g. style and appearance)
][1] - shorthand expansion into individual granules of properties
 [1] - expression evaluation for computed properties
[[2] - example: property of "2em" becomes a trait of "40pt" if the font size is "20pt"
][1] - some traits are inherited from ancestral property specifications
[[2] - some properties are not inherited but can be explicitly inherited on request
 [2] - inapplicable properties are removed from the refined tree
][1] - once all traits that are applicable to formatting objects are determined, all traits not applicable to a given object are removed
]
Geometric areas on pages are returned from interpretation of formatting objects and their traits
[[1] - information interpreted as areas in the Area Tree
[[2] - the formal theoretical expression of the semantics represented by the vocabulary
][1] - the interpretation of some objects does not return any areas
 [1] - the interpretation of some objects returns exactly one area
 [1] - the interpretation of some objects returns as many areas as needed by descendent objects
 [1] - all areas in XSL-FO 1.0 are rectangular or square
 [1] - each area has geometric page position, z-layer position, content, background, padding, borders
 [1] - a stylesheet writer has the desired layout of areas in mind and determines which objects will return the desired areas in the desired order
 [1] - page areas are ordered but not geometrically related
]
Rendering agent effects the impartation of areas according to the medium
[[1] - Recommendation gives guidelines for each area and trait for visual and aural media
[[2] - some traits are only applicable to interactive media
][1] - some missing trait values can be arbitrarily inferred by the rendering agent (e.g. font, volume)
 [1] - the process of rendering is not specified in the Recommendation
]
Recommendation is written to lead a formatter implementer in carrying out requirements
[[1] - some traits are boolean values targeted to the implementer and reflecting an area's role or relative order to other areas
 [1] - rigor of Recommendation needed for finely-tuned typographical nuances
[[2] - not written to lead the stylesheet writer in writing a stylesheet
 [2] - many very complex interactions are not important to many stylesheets
][1] - simple things can be done simply
]
3.3 Formatting object XML vocabulary
[> 3.4][< 3.2.1][^^][^^^]
3.3.1 Vocabulary structure
[> 3.3.2][> 3.4][> 4.][< 3.2.1][^^][^^^]
The semantics of a formatting object are defined in terms of areas and their traits
[[1] - which areas the object generates (if any)
 [1] - where the areas are placed in the area tree hierarchy
 [1] - interactions with areas from and specifications for other objects
 [1] - see [Objects summarized by name - Section C.1.1] for a list of all objects
 [1] - see [Prototypical hierarchy - Section C.1.2] for a prototypical hierarchy
]
Formatting objects are specified using elements, attributes, and text
[[1] - may be a stand-alone XML instance being interpreted by a formatter
 [1] - may be a node tree passed as the result of transformation
]
XSL-FO elements must use the URI "http://www.w3.org/1999/XSL/Format" for the namespace
[[1] - extension elements must not use the XSL-FO URI
 [1] - extension attributes must have a non-null prefix
 [1] - extension constructs must be ignored if not recognized by an XSL-FO processor
 [1] - the default namespace may be used for the XSL-FO elements
 [1] - un-prefixed attributes are assumed to be in the vocabulary of the element to which they are attached
]
Element-type and attribute names:
[[1] - all letters are lowercase
 [1] - a hyphen separates multiple words in a single name
 [1] - a dot separates names from their compound components
 [1] - some abbreviations are used if the name is already used in XML or HTML
]
Examples:
[[1] - [space-before]="12pt"
[[2] - all compound components are set to their initial values
][1] - [space-before].conditionality="retain"
[[2] - sets the individual compound component to retain the space if at the beginning or termination of a reference area
]]
Every property is allowed to be specified on every object
[[1] - provides for inheritance in the formatting object tree during refinement
 [1] - only those traits meaningful to a formatting object are in the refined formatting object tree
[[2] - utilized by some or all of the areas created by the object
][1] - see [Property summary - Section D.3.3] for a list of all properties
]
Every object may have a unique identifier specified using [id]= property
[[1] - used as the target of a reference from other objects
 [1] - value is not inherited from other objects
 [1] - value is assigned to the first child area generated for the object
[[2] - if the object doesn't generate any areas, the identifier is lost
]]
Extension objects and/or properties are allowed in any other namespace
[[1] - e.g. xmlns:axf="http://www.antennahouse.com/names/XSL/Extensions"
[[2] - identifies extension functionality described by Antenna House, Inc.
][1] - e.g. xmlns:rx="http://www.renderx.com/XSL/Extensions"
[[2] - identifies extension functionality described by RenderX
][1] - e.g. xmlns:ibex="http://www.xmlpdf.com/2003/ibex/Format"
[[2] - identifies extension functionality described by Ibex
][1] - e.g. xmlns:dope="http://www.compart.net/xmlns/cpfo"
[[2] - identifies extension functionality described by Compart DOPE
][1] - e.g. xmlns:at="http://www.arbortext.com/namespace/XslFoExtensions"
[[2] - identifies extension functionality described by Arbortext
][1] - no restrictions on who or which tools can support extended functionality
 [1] - important portability issue
[[2] - no obligation for any tool to support any extension functionality
]]
Non-XSL-FO namespaces are allowed for embedded graphic images
[[1] - e.g. xmlns:svg="http://www.w3.org/2000/svg"
[[2] - the W3C SVG 2-dimensional graphics vocabulary
][1] - e.g. xmlns:math="http://www.w3.org/1998/Math/MathML"
[[2] - the W3C Mathematical markup language
]]
3.3.2 Direct vs. constraint property specification
[> 3.3.3][> 3.4][> 4.][< 3.3.1][^][^^][^^^]
Properties influence the behavior of an object in the creation of areas for the formatted result
[[1] - properties are specified in an XSL-FO XML instance or node tree as attributes
[[2] - properties become traits in the area tree
][1] - strategic use can promote maintainability or consistency
[[2] - placement in the hierarchy for inheritance
 [2] - specified algorithmically for contextually sensitive behavior
][1] - some properties directly specify a formatting result
[[2] - e.g. [color]= property
 [2] - the foreground color is specified regardless of the context in the area tree
][1] - some properties constrain the formatting result based on an interpretation of context in the area tree
[[2] - e.g. [space-before]= property
 [2] - the amount of space before the area is constrained to the value specified but may be discarded if the area's conditionality allows it to be discarded and the area is at the beginning of a reference area
][1] - compound properties are comprised of components for fine-grained specification
[[2] - often originate from the CSS2 specification but specify too many aspects of formatting
 [2] - e.g. space-before.optimum=, space-before.minimum=, space-before.maximum=, space-before.conditionality= and space-before.precedence= components
][1] - properties can influence either layout or appearance or both
]
A complete alphabetical list of formatting properties is in [Chapter D.].
[[1] - it is not necessary to know all properties to get effective results
]
3.3.3 Property value expressions
[> 3.3.4][> 3.4][> 4.][< 3.3.2][^][^^][^^^]
A property's value can be the evaluation of an expression
[[1] - may include fixed values
[[2] - e.g. space-before="24pt div 2"
][1] - may include contextually-sensitive values
[[2] - e.g. space-before="[from-parent](font-size) div 2"
][1] - same operators as in XPath 1.0
 [1] - includes same operands as in XPath 1.0
 [1] - includes length values as operands that are not allowed in XPath 1.0
 [1] - expressions influenced by the font size evaluate the font size before evaluating any other components of the expression
]
Core function library defined for property expressions
[[1] - functions with access to property values of the current node
[[2] - e.g. [inherited-property-value](property-name)
[[3] - this obtains a value that may be specified on the current node or may be inherited from the closest ancestral node that specifies the value
]][1] - functions with access to property values of other nodes
[[2] - e.g. [from-parent](property-name)
[[3] - this looks for the property value directly from the parent object specification
][2] - e.g. [merge-property-values](property-name)
[[3] - this looks for the property value directly from the particular sibling object specification corresponding to a given state of the user interface
]][1] - summarized in [Functions summarized by name - Section B.2.3]
]
Numerous property data types
[[1] - summarized in [Property data types - Section D.2.1]
 [1] - simple-valued and compound-valued values
]
Numerous functions available for expressions
[[1] - summarized in [Functions summarized by name - Section B.2.3]
 [1] - numeric functions can be applied to length values by reducing the "unit power" and adding it back again after
[[2] - a length has a unit power of 1, while a number has a unit value of zero
 [2] - e.g. [round]() takes a number argument and not a length argument
 [2] - can use: round( length-value div 1.0cm ) * 1.0cm
]]
3.3.4 Inherited properties
[> 3.3.5][> 3.4][> 4.][< 3.3.3][^][^^][^^^]
Inheritable properties need not be specified for a formatting object
[[1] - when not specified, the ancestry of the formatting object tree is examined for the closest specification
 [1] - all inheritance completed during refinement before the area tree is created
 [1] - see [Inherited properties - Section D.3.1] for a summary
]
Inheritance goes "through" block-level or out-of-line constructs
[[1] - recall the nature of the processing model (see [Figure 3.1]) where refinement happens on the object tree
 [1] - often the source of unexpected results in a stylesheet's result
 [1] - e.g. the same [start-indent]= property used to indent a table is inherited by the table's cell's content
 [1] - e.g. a footnote's body inherits properties from the block in which the footnote is specified
]
Some functions can obtain property values from outside the ancestry
[[1] - the attribute can specify the result of a function call instead of a fixed value
 [1] - e.g. [merge-property-values]()
 [1] - e.g. [from-table-column]()
]
Some properties look like they are inherited, but do not go "through" out-of-line constructs
[[1] - e.g. [text-decoration]=
[[2] - when specified on a block-level construct, it affects all inline descendants of the block, but not any descendants of any out of line areas found in the block such as float or footnote bodies (though footnote inline areas are affected)
]]
3.3.5 Shorthand properties
[> 3.3.6][> 3.4][> 4.][< 3.3.4][^][^^][^^^]
Shorthand properties specify a number of standalone properties using a single specification
[[1] - e.g. [font]="italic small-caps bold 40pt/50pt Courier"
[[2] - one specification sets each of the following properties in order
[[3] - [font-style]=
 [3] - [font-variant]=
 [3] - [font-weight]=
 [3] - [font-size]=
 [3] - [line-height]=
 [3] - [font-family]=
]][1] - different than a compound property
[[2] - a shorthand property represents a set of standalone properties
 [2] - a compound property is comprised of a set of components
 [2] - one cannot specify a compound property on a shorthand property
][1] - individual properties of a shorthand property are supported severally
[[2] - shorthand properties can be used in conjunction with individual properties
 [2] - those that are specified are more precise than those that are inferred
][1] - shorthand properties are processed in increasing precision
[[2] - precedence order independent of attribute specification order
 [2] - more-specific attribute name has higher precedence than less-specific attribute name
[[3] - [border-color]= is more precise than [border]=
 [3] - e.g. [border-bottom-color]= is more precise than [border-color]=
][2] - border named-edge specifications have higher precedence than generic border specifications
[[3] - e.g. [border-bottom]= is more precise than [border-style]=
]]]
A processor is not obliged to support shorthand properties
[[1] - see [Shorthand properties - Section D.3.2] for a summary
 [1] - portability problem when developing a stylesheet using one processor and delivering the stylesheet to someone else using a different processor
]
3.3.6 Conformance
[> 3.3.7][> 3.4][> 4.][< 3.3.5][^][^^][^^^]
Three levels of conformance that can be claimed by a processor:
[[1] - complete
[[2] - entire Recommendation is supported
][1] - extended
[[2] - no support for shorthand properties
 [2] - very few esoteric positioning- and font-related properties not supported
 [2] - remainder of Recommendation fully supported
][1] - basic
[[2] - minimum level of pagination or aural rendering support
 [2] - fallback behaviors defined for unsupported extended facilities
][1] - implementing fallback behaviors cannot be construed as being complete conformance
]
In a given medium, a processor must support all formatting objects and properties specified for the conformance level claimed
[[1] - conformance levels are described for two rendering class distinctions
[[2] - visual media
 [2] - aural media
][1] - can implement fallback processing in other media
[[2] - conformance qualification does not include fallback processing
]]
3.3.7 Top-level formatting objects
[> 3.3.8][> 3.4][> 4.][< 3.3.6][^][^^][^^^]
All XSL-FO structures must have the following formatting objects:
[[1] - <[root]>
[[2] - the document element of an XSL-FO structure
 [2] - handy location for document-wide inherited attributes
][1] - <[layout-master-set]>
[[2] - the collection of page geometries available to use for pagination
 [2] - also collects definitions of patterns of geometry sequencing for nuances in changes of page layout
]]
All XSL-FO structures must have at least one page sequence with flowed content to be paginated
[[1] - <[page-sequence]>
[[2] - begin a new page with some content to be paginated
 [2] - defines properties and content common to all pages in the sequence
[[3] - e.g. the formatting of page numbers in the page sequence
 [3] - e.g. the definitions of static content (i.e. headers, footers, etc.) for the page geometries selected for the page sequence
][2] - as many pages will be created as is needed to accommodate the flow given for the sequence
[[3] - an exception is when the number of pages of the sequence or the starting page number of the following sequence is constrained to be an even or odd number
[[4] - the formatter will generate a blank page to accommodate the criterion
 [4] - the blank page can be defined with static content to inform the reader the page is intentionally left blank
][3] - the use of [break-before]= and [break-after]= in a sequence can cause information to start at the top of a page in the middle of the sequence
][2] - the formatter will use either the page geometry or the pattern of geometry sequencing to select the pages, in order, to accommodate the content and any blank pages
][1] - [F1.1]<[page-sequence-wrapper]>
[[2] - introduce a branch in the formatting object tree for inherited properties applicable to descendant objects
 [2] - this formatting object does not generate any output itself and is used only as a convenience for property specification
][1] - <[flow]>
[[2] - the content to be paginated in a sequence of pages of a given geometry or geometry sequence
 [2] - can only contain block-level child formatting objects as its top-level objects
]]
3.3.8 <root> Object
[> 3.3.9][> 3.4][> 4.][< 3.3.7][^][^^][^^^]
Purpose:
[[1] - the document element of an XSL-FO instance
 [1] - returns areas generated by children as a sequence of page-viewport-areas
[[2] - such areas are ordered but there is no geometric relationship between areas
]]
Content:
[[1] - [F1.0]([6.4.2]) ([​layout-master-set],[​declarations]?,[​page-sequence]+)
 [1] - [F1.1]([6.4.2]) ([​layout-master-set],[​declarations]?,[​bookmark-tree]?,([​page-sequence]|[​page-sequence-wrapper])+)
 [1] - Child objects (alphabetical):
[[2] - [F1.1]<[bookmark-tree]>([6.11.1];[Section 9.1.2 <bookmark-tree> Object])
 [2] - <[declarations]>([6.4.3];[Section 11.1.6 <declarations> Object])
 [2] - <[layout-master-set]>([6.4.7];[Section 3.3.9 <layout-master-set> Object])
 [2] - <[page-sequence]>([6.4.5];[Section 3.3.10 <page-sequence> Object])
 [2] - [F1.1]<[page-sequence-wrapper]>([6.4.6];[Section 3.3.11 <page-sequence-wrapper> Object])
]]
Property sets:
[[1] - [Common Accessibility Properties]([7.5];[Section D.1.2 Common Accessibility Properties])
]
Other optional properties:
[id=]([7.30.8];[Section D.3.3 Property summary])
[F1.1][index-class=]([7.24.1];[Section D.3.3 Property summary])
[F1.1][index-key=]([7.24.2];[Section D.3.3 Property summary])
[media-usage=]([7.27.11];[Section D.3.3 Property summary])
Property of interest:
[[1] - [media-usage]= used when establishing either pagination with bounded page length or no pagination with infinite page length
]
[Example 3-1: The document element The XSL-FO instance document element:
01  <?xml version="1.0" encoding="utf-8"?>
02  <root xmlns="http://www.w3.org/1999/XSL/Format" font-size="16pt">
03   <layout-master-set>
04   <simple-page-master master-name="bookpage"
05   page-height="297mm" page-width="210mm"
06   margin-top="15mm" margin-bottom="15mm"
07   margin-left="15mm" margin-right="15mm">
08   <region-body region-name="bookpage-body"
09   margin-top="5mm" margin-bottom="5mm"/>
10   </simple-page-master>
11   </layout-master-set>
12   <page-sequence master-reference="bookpage">
13   <title>Hello world example</title>
14   <flow flow-name="bookpage-body">
15   <block>Hello XSL-FO!</block>
16   </flow>
17   </page-sequence>
18  </root>
]
3.3.9 <layout-master-set> Object
[> 3.3.10][> 3.4][> 4.][< 3.3.8][^][^^][^^^]
Purpose:
[[1] - the collection of definitions of page geometries, available regions, and page selection patterns
]
Content:
[[1] - [F1.0]([6.4.6]) ([​simple-page-master]|[​page-sequence-master])+
 [1] - [F1.1]([6.4.7]) ([​simple-page-master]|[​page-sequence-master]|[​flow-map])+
 [1] - Child objects (alphabetical):
[[2] - [F1.1]<[flow-map]>([6.4.22];[Section 8.2.3 <flow-map> Object])
 [2] - <[page-sequence-master]>([6.4.8];[Section 8.4.5 <page-sequence-master> Object])
 [2] - <[simple-page-master]>([6.4.13];[Section 4.3.3 <simple-page-master> Object])
][1] - Referring object:
[[2] - <[root]>([6.4.2];[Section 3.3.8 <root> Object])
]]
No properties are defined for this formatting object.
[Example 3-2: The collection of all possible page layouts and their respective regions The set of layout masters:
01  <?xml version="1.0" encoding="utf-8"?>
02  <root xmlns="http://www.w3.org/1999/XSL/Format" font-size="16pt">
03   <layout-master-set>
04   <simple-page-master master-name="bookpage"
05   page-height="297mm" page-width="210mm"
06   margin-top="15mm" margin-bottom="15mm"
07   margin-left="15mm" margin-right="15mm">
08   <region-body region-name="bookpage-body"
09   margin-top="5mm" margin-bottom="5mm"/>
10   </simple-page-master>
11   </layout-master-set>
12   <page-sequence master-reference="bookpage">
13   <title>Hello world example</title>
14   <flow flow-name="bookpage-body">
15   <block>Hello XSL-FO!</block>
16   </flow>
17   </page-sequence>
18  </root>
]
3.3.10 <page-sequence> Object
[> 3.3.11][> 3.4][> 4.][< 3.3.9][^][^^][^^^]
Purpose:
[[1] - the definition of information for a sequence of pages with common static information
 [1] - generates as many pages as will fit the flowed content that is supplied
 [1] - each new page sequence begins the flow at the top of a new page
[[2] - e.g. starts of chapters, front matter, back matter, etc.
]]
Content:
[[1] - [F1.0]([6.4.5]) ([​title]?,[​static-content]*,[​flow])
 [1] - [F1.1]([6.4.5]) ([​title]?,[​folio-prefix]?,[​folio-suffix]?,[​static-content]*,[​flow]+)
 [1] - Child objects (alphabetical):
[[2] - <[flow]>([6.4.19];[Section 3.3.12 <flow> Object])
 [2] - [F1.1]<[folio-prefix]>([6.6.13];[Section 8.2.12 <folio-prefix> Object])
 [2] - [F1.1]<[folio-suffix]>([6.6.14];[Section 8.2.13 <folio-suffix> Object])
 [2] - <[static-content]>([6.4.20];[Section 8.2.10 <static-content> Object])
 [2] - <[title]>([6.4.21];[Section 4.3.6 <title> Object])
][1] - Referring objects:
[[2] - <[root]>([6.4.2];[Section 3.3.8 <root> Object])
 [2] - [F1.1]<[page-sequence-wrapper]>([6.4.6];[Section 3.3.11 <page-sequence-wrapper> Object])
]]
Required property:
[master-reference=]([7.27.9];[Section D.3.3 Property summary])
Optional properties:
[country=]([7.10.1];[Section D.3.3 Property summary])
[F1.1][flow-map-reference=]([7.27.19];[Section D.3.3 Property summary])
[force-page-count=]([7.27.6];[Section D.3.3 Property summary])
[format=]([7.26.1];[Section D.3.3 Property summary])
[grouping-separator=]([7.26.2];[Section D.3.3 Property summary])
[grouping-size=]([7.26.3];[Section D.3.3 Property summary])
[id=]([7.30.8];[Section D.3.3 Property summary])
[F1.1][index-class=]([7.24.1];[Section D.3.3 Property summary])
[F1.1][index-key=]([7.24.2];[Section D.3.3 Property summary])
[initial-page-number=]([7.27.7];[Section D.3.3 Property summary])
[language=]([7.10.2];[Section D.3.3 Property summary])
[letter-value=]([7.26.4];[Section D.3.3 Property summary])
[F1.1][reference-orientation=]([7.21.3];[Section D.3.3 Property summary])
[F1.1][writing-mode=]([7.29.7];[Section D.3.3 Property summary])
Shorthand influencing the above properties:
[F1.1][xml:lang=]([7.31.24];[Section D.3.3 Property summary])
Properties of interest:
[[1] - [master-reference]= selects the page geometry or sequencing of page geometry and the available regions within those page definitions
[[2] - cannot change the page geometry based on content found in the flow
][1] - [format]= governs how the page number is represented as a sequence of characters
[[2] - numbers, roman numerals, etc.
 [2] - formally defined by reference to XSLT(see [Format tokens from XSLT 1.0 subset - Section D.2.3 Format tokens from XSLT 1.0 subset])
]]
[Example 3-3: A sequence of pages A sequence of pages:
01  <?xml version="1.0" encoding="utf-8"?>
02  <root xmlns="http://www.w3.org/1999/XSL/Format" font-size="16pt">
03   <layout-master-set>
04   <simple-page-master master-name="bookpage"
05   page-height="297mm" page-width="210mm"
06   margin-top="15mm" margin-bottom="15mm"
07   margin-left="15mm" margin-right="15mm">
08   <region-body region-name="bookpage-body"
09   margin-top="5mm" margin-bottom="5mm"/>
10   </simple-page-master>
11   </layout-master-set>
12   <page-sequence master-reference="bookpage">
13   <title>Hello world example</title>
14   <flow flow-name="bookpage-body">
15   <block>Hello XSL-FO!</block>
16   </flow>
17   </page-sequence>
18  </root>
]
3.3.11 <page-sequence-wrapper> Object
[> 3.3.12][> 3.4][> 4.][< 3.3.10][^][^^][^^^]
Purpose:
[[1] - a formatting object used only as a home for inherited properties applicable to descendent formatting objects
 [1] - useful when formatting properties apply to some page sequences but not all
]
Content:
[[1] - [F1.1]([6.4.6]) ([​page-sequence]|[​page-sequence-wrapper])*
 [1] - Child objects (alphabetical):
[[2] - <[page-sequence]>([6.4.5];[Section 3.3.10 <page-sequence> Object])
 [2] - [F1.1]<[page-sequence-wrapper]>([6.4.6];[Section 3.3.11 <page-sequence-wrapper> Object])
][1] - Referring objects:
[[2] - <[root]>([6.4.2];[Section 3.3.8 <root> Object])
 [2] - [F1.1]<[page-sequence-wrapper]>([6.4.6];[Section 3.3.11 <page-sequence-wrapper> Object])
]]
Optional properties:
[id=]([7.30.8];[Section D.3.3 Property summary])
[F1.1][index-class=]([7.24.1];[Section D.3.3 Property summary])
[F1.1][index-key=]([7.24.2];[Section D.3.3 Property summary])
Adds a branch in the formatting object tree (as shown on [Processing model of formatting - Section 3.2.1 Processing model of formatting])
[[1] - opportunity to add inherited properties for all pages in all page sequences
]
3.3.12 <flow> Object
[> 3.4][> 4.][< 3.3.11][^][^^][^^^]
Purpose:
[[1] - the content that is flowed to as many pages as required to fit
[[2] - flowed content is not repeated by the formatter
][1] - the length of the flow governs the length of the page sequence
]
Content:
[[1] - ([6.4.19]) ([​%block;])+
 [1] - Child object:
[[2] - [%block;]([6.2];[Section 3.4.2 Block-level objects])
][1] - Referring object:
[[2] - <[page-sequence]>([6.4.5];[Section 3.3.10 <page-sequence> Object])
]]
[[1] - may begin with any number of <[marker]> children
]
Required property:
[flow-name=]([7.27.5];[Section D.3.3 Property summary])
Optional properties:
[id=]([7.30.8];[Section D.3.3 Property summary])
[F1.1][index-class=]([7.24.1];[Section D.3.3 Property summary])
[F1.1][index-key=]([7.24.2];[Section D.3.3 Property summary])
Property use:
[[1] - [flow-name]= indicates into which area on the page the child information is to be flowed
[[2] - area does not have to exist on the particular page geometry being rendered
[[3] - the method to ignore a flow on particular pages
]]]
[Example 3-4: The flow of information for an area A flow of areas for a region:
01  <?xml version="1.0" encoding="utf-8"?>
02  <root xmlns="http://www.w3.org/1999/XSL/Format" font-size="16pt">
03   <layout-master-set>
04   <simple-page-master master-name="bookpage"
05   page-height="297mm" page-width="210mm"
06   margin-top="15mm" margin-bottom="15mm"
07   margin-left="15mm" margin-right="15mm">
08   <region-body region-name="bookpage-body"
09   margin-top="5mm" margin-bottom="5mm"/>
10   </simple-page-master>
11   </layout-master-set>
12   <page-sequence master-reference="bookpage">
13   <title>Hello world example</title>
14   <flow flow-name="bookpage-body">
15   <block>Hello XSL-FO!</block>
16   </flow>
17   </page-sequence>
18  </root>
]
3.4 Groupings of formatting objects for flow
[> 4.][< 3.3.12][^^][^^^]
3.4.1 Groupings of formatting objects for flow
[> 3.4.2][> 4.][< 3.3.12][^^][^^^]
Stacking
[[1] - areas added to branches of the area tree interact with adjacent areas found in the tree
 [1] - areas stack relative to adjacent areas on the rendered result in different directions:
[[2] - block-progression direction
[[3] - e.g. top-to-bottom for the Western European writing direction
][2] - inline-progression direction
[[3] - e.g. left-to-right for the Western European writing direction
]]]
Block-level object
[[1] - stacks next to siblings in the block-progression direction
[[2] - new blocks restart in the block-progression direction
][1] - breaks the flow of information in the inline-progression direction
[[2] - siblings cannot be "beside" each other in the inline-progression direction
 [2] - e.g.: blocks, tables, lists, etc.
][1] - the <[block]> object is a frequently used construct
[[2] - e.g. for paragraphs, headings, captions, table cell contents, etc.
]]
Inline-level object
[[1] - stacks next to siblings in the inline-progression direction
 [1] - does not restart the flow of information in the block-progression direction
 [1] - specifies portions of content to be flowed into lines of the parent block where the portions are distinct from their sibling portions
]
Neutral object
[[1] - an object that is allowed anywhere without impacting the stacking of siblings or progression direction of the parent
]
Out-of-line object
[[1] - areas stack out of line to the areas of siblings of the object, without impacting the siblings of the object, by adding areas to different branches of the area tree than the siblings
 [1] - does not break the flow of information in any progression direction
]
Out-of-line inline-level object
[[1] - a portion stacks next to the siblings of the object in the line-progression direction
 [1] - a portion stacks out-of-line to the siblings of the object, without impacting the siblings of the object
]
3.4.2 Block-level objects
[> 3.4.3][> 4.][< 3.4.1][^][^^][^^^]
Those objects represented by the %block; parameter entity used in content models:
[[1] - <[block]>([6.5.2];[Section 4.2.3 <block> Object])
[[2] - the formatting specification for a block of lines, distinct from any preceding block of lines
][1] - <[block-container]>([6.5.3];[Section 7.4.3 <block-container> Object])
[[2] - the specification of a block-level reference area for contained descendant blocks
][1] - <[list-block]>([6.8.2];[Section 5.1.4 <list-block> Object])
[[2] - the parent object of a related set of child list members
][1] - <[table-and-caption]>([6.7.2];[Section 6.2.4 <table-and-caption> Object])
[[2] - the parent object of a captioned collection of tabular content
][1] - <[table]>([6.7.3];[Section 6.2.6 <table> Object])
[[2] - the parent object of an uncaptioned collection of tabular content
]]
Allowed as children of the <[flow]> object
[[1] - may also be nested inside of other constructs
]
Stacked in the block-progression-direction of flow
[[1] - these interrupt the block-progression flow of information
 [1] - two objects of these types cannot be positioned next to each other in the inline-progression-direction within the same containing object
 [1] - note that <[block-container]> can selectively be absolutely positioned outside of the flow and its areas will then not stack with its sibling areas
]
3.4.3 Inline-level objects
[> 3.4.4][> 4.][< 3.4.2][^][^^][^^^]
Those objects represented by the %inline; parameter entity used in content models:
[[1] - <[basic-link]>([6.9.2];[Section 5.3.2 <basic-link> Object])
[[2] - the inline content of the start of a unidirectional link to a single end point
][1] - <[bidi-override]>([6.6.2];[Section 11.2.5 <bidi-override> Object])
[[2] - overriding the inherent Unicode text direction for a sequence of characters
][1] - <[character]/>([6.6.3];[Section 11.1.8 <character> Object])
[[2] - the inline display of a single character
][1] - <[external-graphic]/>([6.6.5];[Section 5.2.2 <external-graphic> Object])
[[2] - the inline display of graphical or other externally-supplied information
][1] - [F1.1]<[index-key-reference]>([6.10.6];[Section 9.2.9 <index-key-reference> Object])
[[2] - an inline display of resolved page numbers
][1] - <[inline]>([6.6.7];[Section 4.2.6 <inline> Object])
[[2] - the formatting specification for inline content that is distinct from its preceding content within a line generated in a block
][1] - <[inline-container]>([6.6.8];[Section 7.4.4 <inline-container> Object])
[[2] - an inline reference area for contained blocks
][1] - <[instream-foreign-object]>([6.6.6];[Section 5.2.3 <instream-foreign-object> Object])
[[2] - the inline display of graphical or other instance-supplied information
][1] - <[leader]>([6.6.9];[Section 5.4.4 <leader> Object])
[[2] - the inline display of a rule or a sequence of characters
][1] - <[multi-toggle]>([6.9.5];[Section 12.2.4 <multi-toggle> Object])
[[2] - the specification of those interaction-sensitive formatting objects
][1] - <[page-number]/>([6.6.10];[Section 8.2.11 <page-number> Object])
[[2] - an inline-level place holder replaced with the page number of the current page
][1] - <[page-number-citation]/>([6.6.11];[Section 4.2.7 <page-number-citation> Object])
[[2] - an inline-level place holder replaced with the page number of the first normal area of the cited formatting object
][1] - [F1.1]<[page-number-citation-last]/>([6.6.12];[Section 4.2.8 <page-number-citation-last> Object])
[[2] - an inline-level place holder replaced with the page number of the last normal area of the cited formatting object
][1] - [F1.1]<[scaling-value-citation]/>([6.6.15];[Section 5.2.5 <scaling-value-citation> Object])
[[2] - the inline display of the scaling factor applied to an external graphic
]]
Not allowed as children of the <[flow]> object
[[1] - may be nested inside of constructs (including other inline constructs)
]
Stacked in the inline-progression-direction of flow
[[1] - these do not interrupt the block-progression flow of information
 [1] - they reside in the line areas generated by the formatter
]
3.4.4 Neutral objects
[> 3.4.5][> 4.][< 3.4.3][^][^^][^^^]
Objects typically allowed anywhere where #PCDATA, [%inline;], or [%block;] constructs are allowed:
[[1] - [F1.1]<[change-bar-begin]/>([6.13.2];[Section 11.1.2 <change-bar-begin> Object])
[[2] - the indication of the start of a change bar
][1] - [F1.1]<[change-bar-end]/>([6.13.3];[Section 11.1.3 <change-bar-end> Object])
[[2] - the indication of the end of a change bar
][1] - <[multi-properties]>([6.9.6];[Section 12.1.2 <multi-properties> Object])
[[2] - the collection of candidate property sets from which exactly one set influences the properties of a formatting object based on its status or the status of user interaction
][1] - <[multi-switch]>([6.9.3];[Section 12.2.2 <multi-switch> Object])
[[2] - the collection of candidate formatting object sequences from which exactly one is rendered at any given time based on an interactive condition that is influenced by the operator while being tracked by the formatter
][1] - <[retrieve-marker]/>([6.13.6];[Section 8.2.16 <retrieve-marker> Object])
[[2] - a place holder replaced with the formatting objects of the indicated marker and allowed only within static content
][1] - [F1.1]<[retrieve-table-marker]/>([6.13.7];[Section 8.2.17 <retrieve-table-marker> Object])
[[2] - a place holder replaced with the formatting objects of the indicated marker and allowed only within table header and footer or as a replacement of a table header or footer
][1] - <[wrapper]>([6.13.4];[Section 4.2.2 <wrapper> Object])
[[2] - a generic container construct for specifying inherited properties for descendent constructs
]]
Note that individual flow objects above may have constraints preventing their use in particular objects.
Areas returned by the interpretation of these objects are stacked in the progression-direction of the siblings of these objects
[[1] - except for <[retrieve-marker]> the others may be children of the <[flow]> object
]
3.4.5 Out-of-line objects
[> 3.4.6][> 4.][< 3.4.4][^][^^][^^^]
Out-of-line objects typically allowed anywhere where #PCDATA, [%inline;], or [%block;] constructs are allowed:
[[1] - <[float]>([6.12.2];[Section 7.2.2 <float> Object])
[[2] - content that is to be rendered towards either the before, start, or end edges of a region regardless of where in the region the content is defined
]]
Not stacked in the progression-direction of the sibling objects
[[1] - areas returned are contained within and governed by ancestral <[page-sequence]> object
]
Allowed as a child of the <[flow]> object
[[1] - may also be nested inside of other constructs
]
3.4.6 Out-of-line inline-level objects
[> 4.][< 3.4.5][^][^^][^^^]
Out-of-line objects allowed only inline, i.e.: anywhere where #PCDATA or [%inline;] constructs are allowed:
[[1] - <[footnote]>([6.12.3];[Section 7.3.2 <footnote> Object])
[[2] - content that is to be rendered towards the after-edge of a region regardless of where in the region the content is defined
]]
One of two generated areas stacked in the progression-direction of the sibling inline objects
[[1] - other area returned is contained within and governed by ancestral <[page-sequence]> object
]
Not allowed as a child of the <[flow]> object
[[1] - must be placed in a block to behave at the block level
]


This is an accessible version of Crane's commercial training material. The content has been specifically designed to assist screen reader software in viewing the entire textual content. Figures are replaced with text narratives.

Navigation hints are in square brackets:
[Tx.x] and [Fx.x] are textual representations of the applicability icons;
[digit] indicates list depth for nested lists;
[link [URL]] indicates the URL of a hyperlink if different than link;
[EXAMPLE] indicates an example listing of code;
[FIGURE] indicates the presence of a figure replaced by its description;
[>] jumps forward;
[<] jumps backward;
[^] jumps to start of the section;
[^^] jumps to the start of the chapter;
[^^^] jumps to the table of contents.
Suggestions for improvement are welcome: [info@CraneSoftwrights.com]
Book sales: [http://www.CraneSoftwrights.com/links/trn-acc.htm]
Information: [http://www.CraneSoftwrights.com/links/info-acc.htm]
This content is protected by copyright and, as there are no means to protect this accessible version from plagiarism, please do not make any commercial edition available to others.

+//ISBN 978-1-894049::CSL::Courses::PFUX//DOCUMENT Practical Formatting Using XSL-FO 2008-01-27 17:30UTC//EN
Practical Formatting Using XSL-FO
Seventh Edition - 2008-01-27
ISBN 978-1-894049-19-1
Copyright © Crane Softwrights Ltd.