[Accessibility conventions are described at the bottom of the page]
6. Tables
[> 7.][< 5.4.4][^^^]
6.0 Tabular presentation of information
[> 6.1][> 7.][< 6.][^^][^^^]
A tabular presentation arranges information in a rigid partitioning of groups
[[1] - tuples of aligned block-level layout areas
[[2] - see [Figure 5.1] for an example of bilingual text formatting
[2] - a collection (rows) of collections (columns) of information
[2] - columns and rows are not being used as indices of a Cartesian plane
[[3] - the grid is only a layout strategy
][2] - e.g. columns of aligned formatted paragraphs of polyglot (multiple language) text
[[3] - each piece of information is a stand-alone paragraph where each language's paragraph has a different length thus requiring
the first line of all translations of the next paragraph to be aligned
]][1] - block-level layout areas in a two-dimensional relationship between members of collections
[[2] - traditional Cartesian arrangement of information at the intersection of indexed row and column axes
[2] - e.g. the corresponding percentages of male and female population at the intersection of age groups in the columns and countries
in the rows
[[3] - each piece of information could be a two-line presentation of the percentages for each gender
[3] - the reader correlates the age group column with the country row to find the information in the corresponding cell
]]]
Supports numerous block-level areas arranged in the inline-progression direction
[[1] - table contains rows (in block-progression direction) of cells (in inline-progression direction) where each cell contains block-level
areas (in block-progression direction)
[[2] - block-level areas would otherwise be arranged in the block-progression direction
][1] - column widths can differ but are fixed for the length of the table
[[2] - widths can be specified values in the supplied objects and properties
[2] - widths can be based on an automatic weighing of the contents of all of the cells of the table
[[3] - e.g. HTML browser web agents balance column widths based on content
]]]
Two layout objectives using the same layout constructs:
[[1] - a collection of tuples of information
[[2] - each member of a tuple in a column
[2] - each tuple in a row
][1] - a coordinate-based layout of cells of information
[[2] - one ordinate along the columns
[2] - the other ordinate along the rows
[2] - the corresponding cells in the main area
]]
[Figure 6.1: Differing uses of the tabular layout construct
Two pages are shown, each with room for twenty-four cells arranged in six rows of four cells each row.
The emphasis on the left page shows all twenty-four cells of equal weight arranged in fixed order as a grid.
The emphasis on the right page shows a typical table, with the topmost-leftmost cell absent, the cells across the top indicating
column values, the cells along the left edge indicating the row values, a border between these cells and the "main" portion
of the table, and the main portion filled with cells.
]
Of note:
[[1] - the column widths are fixed to the same values for all rows in the entire table
[[2] - as in HTML the widths may be based on a balancing of the content of the columns in all of the rows (default)
]]
An example of a Cartesian grid presentation of hockey standings:
[Figure 6.2: Cartesian grid tabular presentation
A group of three tables is shown containing hockey team division standings (Ottawa leads the conference standings). Each table
is a Cartesian grid of team name and standing statistics.
]
Note:
[[1] - rows are spanned for the "Columns" and "Points" headings
[1] - columns are spanned for the "Games" heading
]
Independent of the organization of source information
[[1] - the original data needn't be modeled by a table construct
[[2] - historical use of structured information tools often forced information designers to model explicit table constructs
[2] - such models insufficiently capture the semantics of the information being related
][1] - information from any model can be presented in a tabular fashion
[[2] - transformation can rearrange the source information into the tabular relationship
]]
An XSL-FO table has a compound structure with many well-defined behaviors
[[1] - a block-level construct that breaks the flow in the block-progression direction
[1] - the header rows and footer rows are constructs repeated on all pages where the table's body rows are rendered
[[2] - the caption is only shown on the first page containing part of the table
][1] - column properties can be specified once for all cells of rows that are in a given column
[[2] - the linear serialization of a two-dimensional construct necessarily favors one dimension over the other
[2] - cells are contained within rows, not columns, so a column-oriented construct is necessary to address the second dimension
of property assignment
][1] - column-spanning and row-spanning features provide flexible table cell definition
]
The XSL-FO objects covered in this chapter are:
[[1] - <[table-and-caption]> ([6.7.2])
[[2] - the parent object of a captioned collection of tabular content
][1] - <[table-caption]> ([6.7.5])
[[2] - the caption of a captioned collection of tabular content
][1] - <[table]> ([6.7.3])
[[2] - the parent object of an uncaptioned collection of tabular content
][1] - <[table-column]> ([6.7.4])
[[2] - the specification of common columnar properties
][1] - <[table-header]> ([6.7.6])
[[2] - the rows of tabular content repeated at the before-edge of every break in body content
][1] - <[table-footer]> ([6.7.7])
[[2] - the rows of tabular content repeated at the after-edge of every break in body content
][1] - <[table-body]> ([6.7.8])
[[2] - the rows of tabular content flowed as the body content
][1] - <[table-row]> ([6.7.9])
[[2] - a row of tabular content
][1] - <[table-cell]> ([6.7.10])
[[2] - a column of a row of tabular content
]]
6.1 Tabular structure
[> 6.2][< 6.0][^^][^^^]
6.1.1 Aligned tuples of block-level constructs
[> 6.1.2][> 6.2][> 7.][< 6.0][^^][^^^]
Standalone blocks cannot be adjacent to each other in the inline-progression direction
[[1] - a block-level construct typically breaks the block-progression direction
]
Tuples of adjacent blocks are useful to associate a set of pieces of content
[[1] - sets of one-dimensional information
[[2] - each row of the table is a set of information items
[2] - as many rows exist as there are sets of information
][1] - two-dimensional information
[[2] - the columns represent an axis of the information
[2] - the rows represent an axis of the information
[2] - the cells represent the relationship between the members of each axis
][1] - arbitrary layout positioning using a borderless grid
[[2] - spanning columns and spanning rows provides for fine-grained control
[2] - nesting tables can provide a lot of flexibility
]]
The name of the construct shouldn't prejudice how the construct is used
[[1] - don't consider that only tables in your XML information can use this construct for layout
[1] - regard the construct as a layout facility for multiple block-level constructs in the inline-progression direction of the parent
block
[1] - for two-column tables, a list construct may suffice or offer other layout features you need
]
The content of the columns may determine the edges of the columns
[[1] - an auto-layout table adapts column widths to the widths of the cell contents
[[2] - the start and end edges of each block in a set are relative to the contents of respective members of all sets
][1] - the fixed-width table layout ignores the widths of the cell contents
[1] - once determined, the widths of the columns are fixed for the entire table
]
6.1.2 Table-related formatting objects
[> 6.2][> 7.][< 6.1.1][^][^^][^^^]
A table is a block-level construct
[[1] - two ways to begin a table-related hierarchy
[[2] - <[table-and-caption]>
[[3] - associates a caption that is rendered on the first page on which part of the table is presented
][2] - <[table]>
[[3] - the collections of header, footer and body contents of the table
]][1] - table widths are specified as with other block-level constructs
[[2] - possible fixed width
[2] - possible width and height relative to containing block
[2] - possible sum of all column widths
][1] - no limitations on the location of <[table]> or <[table-and-caption]> objects in an instance
[[2] - tables can be nested within table cells
[2] - tables can be positioned inline through use of the <[inline-container]> object
][1] - same kinds of attributes as other block-level constructs
]
A caption can be rendered outside of the boundaries of the table
[[1] - <[table-caption]> (optional)
[[2] - positioned according to the [caption-side]= property
[2] - this is optional so that the <[table-and-caption]> properties can be used to align the nested <[table]>
]]
The indeterminate room on a page for rows necessitates special handling for page breaks
[[1] - the transformation creating the XSL-FO cannot know how much of the table will fit on each page
[[2] - the formatter is in charge of determining where the page-breaks belong
][1] - body content dictates how many pages are used by the rows that are generated
[[2] - <[table-body]> (mandatory and possibly repeated)
[[3] - the rows of the table that are not repeated and make up the body of the table content
]]]
Column widths may be calculated from content
[[1] - requires that the table has the [table-layout]= property of "auto"
[1] - this is the initial value for the property and must be changed to get fixed layout behavior
[1] - implemented-defined algorithm will not ensure the same presentation between different processors
]
Table column properties specified using <[table-column]/>
[[1] - an empty formatting object that does not generate any areas
[1] - the column number need not be specified if only one greater than the previous sibling specification's column number
[[2] - first column specification is assumed to be for column one if the column number is not specified
][1] - formatting properties in this object can be utilized by table cells and their descendants by explicitly using the [from-table-column]() function
]
Specified [column-width]= column widths can be relative or explicit
[[1] - may need to be specified either way for all columns
[[2] - when [inline-progression-dimension]= is an explicit length and the [table-layout]= property is "fixed"
][1] - possible relative value using a "unit" specification
[[2] - each relatively sized column is specified as a quantity of abstract units
[2] - the sum of units of all columns with units is the basis of a single unit's value
[2] - proportional-column-width(number-of-units)
[[3] - the length value returned is the length of the number of units requested
][2] - the [table-layout]= must be "fixed" and the [inline-progression-dimension]= cannot be "auto" (but may be "100%" to be as wide as possible)
][1] - possible fixed value using a length specification
[1] - can mix columns with relative and explicit specifications
[[2] - the relative values are calculated from the remainder of the table after subtracting all of the explicit values
]]
Constructs of a global nature are rendered on each page that gets table content
[[1] - <[table-header]> (optional)
[[2] - rendered before the before edge of the rows of the table body used on each page with table body content
[2] - if the header need not be repeated, define all rows of the header once in the body before the first of the body content
][1] - <[table-footer]> (optional)
[[2] - rendered after the after edge of the rows of the table body used on each page with table body content
[2] - if the footer need not be repeated, define all rows of the footer once in the body after the last of the body content
]]
The strategy for building rows in a header, footer, or body row group must either all be containerized or all be triggered
by cell properties
[[1] - containerized use of <[table-row]> objects
[[2] - each containing <[table-cell]> objects
[2] - supports transformation of source information row-related container constructs
[2] - opportunity for row-wide inheritance of properties
][1] - triggered use of only <[table-cell]> objects
[[2] - using [starts-row]= and [ends-row]= properties
[2] - supports algorithmic breaking of cells into rows when source is not containerized
[2] - properties represent conditions to be met and not actions to be performed
[[3] - a cell with [starts-row]= following a cell with [ends-row]= does not produce an empty row
]][1] - multiple <[table-body]> objects allowed in a single table
[[2] - each <[table-body]> object allows a portion of the table to use a different row strategy than previous body portion
[2] - each row group may be defined differently than other row groups, but a single row group is only either containerized or triggered
]]
Summary of table structures and row grouping strategies:
[Figure 6.3: Possible table formatting object hierarchies
An illustration of the nesting structure of table constructs is shown by nested boxes, each labeled with the formatting object
that creates the construct.
The outermost box is the <[table-and-caption]> construct. It contains an optional <[table-caption]> and a mandatory <[table]> construct.
The <[table]> has a optional and repeatable <[table-column]> construct, followed by optional <[table-header]> and <[table-footer]> constructs, followed by a mandatory and repeatable <[table-body]> construct. Each of these last three contain an abstraction titled "row-grouping-strategy."
Two structures of the row-grouping-strategy are shown on the right. The first of these strategies being a mandatory and repeatable <[table-row]> construct containing a mandatory and repeatable <[table-cell]> construct. The second of these strategies is a mandatory and repeatable <[table-cell]> construct.
]
[[1] - thick lines indicate only those objects that can be the apex of a table structure
[1] - the choice of row strategy is within each sibling row group (header, footer, or body)
[[2] - one choice for a given row group does not dictate any required choice for the sibling row groups
]]
6.2 Tabular appearance
[> 7.][< 6.1.2][^^][^^^]
6.2.1 Table and cell borders
[> 6.2.2][> 7.][< 6.1.2][^^][^^^]
Table and cell borders can be visible or invisible
[[1] - border sides named by writing directions
[1] - visible borders can be a specified thickness, pattern or color
[[2] - specified for the table, table row and table cell perimeters
[[3] - applicable to table rows only when borders are collapsed, not when separated
][2] - the formatter can have any default value for thickness if not specified by the property
][1] - some border-related properties are not inherited unless explicitly specified as "inherit"
]
Co-incident cell and table borders can be arbitrated or separated
[[1] - use [border-collapse]= property to specify behavior
[1] - "collapse" (initial value) specifies arbitration of properties based on relative values
[[2] - arbitrates [border-width]=, [border-style]= and [border-color]=
[[3] - summarized later on in [Borders - Section 10.5.1]
]][1] - "collapse-with-precedence" limits arbitration to only a numeric precedence value (implied or specified)
[1] - "separate" will distinguish borders of adjacent cells and cells adjacent to table borders
[[2] - visibly separated by amount of the [border-separation]= property
][1] - border properties are allowed on <[table-row]> only with collapsed borders
]
Precedence guides the arbitration between two conflicting border specifications
[[1] - each table construct has a different initial value for border precedence
[[2] - 5 - <[table]>
[2] - 4 - <[table-cell]>
[2] - 3 - <[table-row]>
[2] - 2 - <[table-body]>
[2] - 1 - <[table-header]>
[2] - 0 - <[table-footer]>
][1] - a numeric value can be explicitly specified using border-*-precedence=
[1] - "force" value overrides all numeric values
]
Empty cells can be treated specially
[[1] - by default an empty cell will have its border properties respected
[1] - using [empty-cells]= on <[table-cell]> can hide the border of a cell that has no content, as is displayed in browsers for HTML
[[2] - initial value is "show" to render separated borders for empty cells
][1] - if all cells of a row are hidden, the row disappears entirely
]
6.2.2 Spanning cells
[> 6.2.3][> 7.][< 6.2.1][^][^^][^^^]
Cells can occupy more than one column or row
[[1] - useful in headers and stubs for "span heads" across multiple columns or rows
[1] - useful in body content to reflect a single value for multiple rows or columns
[1] - specified using an integer count greater-than or equal to 1
[[2] - floating values are rounded
[2] - numbers less than 1 are interpreted as 1
[2] - a value calculated as 1 does not trigger any spanning
]]
Cell spanning progresses towards the end and after edges, starting with current cell
[[1] - in the column-progression-direction for column spanning
[[2] - [number-columns-spanned]=
][1] - in the row-progression-direction for row spanning
[[2] - [number-rows-spanned]=
]]
Spanning rows takes away from subsequent rows' unnumbered columns
[[1] - the cell does not exist that would be in a row except for the cell above whose spanning value affects the row
[1] - an unnumbered cell will "skip" over spanned cells from preceding rows
[1] - a [column-number]= numbered cell will override a spanning cell from a preceding row
]
6.2.3 Table and cell alignment
[> 6.2.4][> 7.][< 6.2.2][^][^^][^^^]
Two ways to position a table in the inline-progression-direction within its parent area
[[1] - [start-indent]= on given <[table]>
[1] - [text-align]= on parent <[table-and-caption]>
[[2] - the <[table-caption]> is optional thus not obliging an aligned table to have a caption
]]
Inheritable property values will be inherited by the table cells, usually producing undesirable results
[[1] - could specify resetting values for properties on <[table-body]>, <[table-header]>, or other suitable ancestral location to be inheritable by descendant cells
]
The content of cells can be aligned through inherited properties
[[1] - cell before/center/after alignment through the use of [display-align]= property
[[2] - default is "auto"
][1] - cell start/center/end alignment through use of individual blocks' [text-align]= property
[[2] - only significant use of a string argument for [text-align]=
[[3] - e.g. using the decimal separator character as the string to align a column of cells with financial information vertically
[3] - a string argument used in the property any other context is interpreted as the value "start"
][2] - need not be specified in the cell object (though could be specified to be inherited by blocks)
][1] - cell row before/baseline alignment through the use of [relative-align]= property
[[2] - default is "before"
[2] - may want to use "baseline" for the use of fonts of different sizes
[2] - only applies if [display-align]= is "auto"
]]
6.2.4 <table-and-caption> Object
[> 6.2.5][> 7.][< 6.2.3][^][^^][^^^]
Purpose:
[[1] - the parent object of a captioned collection of tabular content
]
Content:
[[1] - ([6.7.2]) ([table-caption]?,[table])
[1] - Child objects (alphabetical):
[[2] - <[table]>([6.7.3];[Section 6.2.6 <table> Object])
[2] - <[table-caption]>([6.7.5];[Section 6.2.5 <table-caption> Object])
]]
[[1] - may begin with any number of <[marker]> children
]
Property sets:
[[1] - [Common Accessibility Properties]([7.5];[Section D.1.2 Common Accessibility Properties])
[1] - [Common Aural Properties]([7.7];[Section D.1.3 Common Aural Properties])
[1] - [Common Border, Padding, and Background Properties]([7.8];[Section D.1.4 Common Border, Padding, and Background Properties])
[1] - [Common Margin Properties-Block]([7.11];[Section D.1.7 Common Margin Properties-Block])
[1] - [Common Relative Position Properties]([7.13];[Section D.1.9 Common Relative Position Properties])
]
Other optional properties:
[break-after=]([7.20.1];[Section D.3.3 Property summary])
[break-before=]([7.20.2];[Section D.3.3 Property summary])
[caption-side=]([7.28.7];[Section D.3.3 Property summary])
[clear=]([7.19.1];[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])
[intrusion-displace=]([7.19.3];[Section D.3.3 Property summary])
[keep-together=]([7.20.3];[Section D.3.3 Property summary])
[keep-with-next=]([7.20.4];[Section D.3.3 Property summary])
[keep-with-previous=]([7.20.5];[Section D.3.3 Property summary])
[text-align=]([7.16.9];[Section D.3.3 Property summary])
Shorthands influencing the above properties:
[page-break-after=]([7.31.16];[Section D.3.3 Property summary])
[page-break-before=]([7.31.17];[Section D.3.3 Property summary])
[page-break-inside=]([7.31.18];[Section D.3.3 Property summary])
Property of interest:
[[1] - [text-align]= used to align the table
[[2] - this is the only non-mathematical way of aligning a table within its parent area
]]
The samp/table.fo example:
[Figure 6.4: Example for table constructs
A complex arrangement of table cells is contained in a table reflecting the formatting of the given example.
]
Of note:
[[1] - the table has adjacent body segments whose boundaries cannot be distinguished
[1] - all the cells in the column with the "c" heading are bold
[1] - the caption follows after the table
]
[Example 6-1:
Table constructs in example
An excerpt from the samp/table.fo sample:
01 <table-and-caption caption-side="after">
02 <table-caption>
03 <block text-align="center">This is a test of a table</block>
04 </table-caption>
05 <table border="solid" border-collapse="collapse">
06 ...
07 <table-header>
08 ...
09 </table-header>
10 <table-body>
11 ...
12 </table-body>
13 <table-body text-align="center">
14 ...
15 </table-body>
16 </table>
17 </table-and-caption>
]
6.2.5 <table-caption> Object
[> 6.2.6][> 7.][< 6.2.4][^][^^][^^^]
Purpose:
[[1] - the caption of a captioned collection of tabular content
]
Content:
[[1] - ([6.7.5]) ([%block;])+
[1] - Child object:
[[2] - [%block;]([6.2];[Section 3.4.2 Block-level objects])
][1] - Referring object:
[[2] - <[table-and-caption]>([6.7.2];[Section 6.2.4 <table-and-caption> Object])
]]
[[1] - may begin with any number of <[marker]> children
]
Property sets:
[[1] - [Common Accessibility Properties]([7.5];[Section D.1.2 Common Accessibility Properties])
[1] - [Common Aural Properties]([7.7];[Section D.1.3 Common Aural Properties])
[1] - [Common Border, Padding, and Background Properties]([7.8];[Section D.1.4 Common Border, Padding, and Background Properties])
[1] - [Common Relative Position Properties]([7.13];[Section D.1.9 Common Relative Position Properties])
]
Other optional properties:
[block-progression-dimension=]([7.15.3];[Section D.3.3 Property summary])
[height=]([7.15.6];[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])
[inline-progression-dimension=]([7.15.7];[Section D.3.3 Property summary])
[intrusion-displace=]([7.19.3];[Section D.3.3 Property summary])
[keep-together=]([7.20.3];[Section D.3.3 Property summary])
[width=]([7.15.14];[Section D.3.3 Property summary])
Shorthand influencing the above properties:
[page-break-inside=]([7.31.18];[Section D.3.3 Property summary])
Properties of interest:
[[1] - [caption-side]= indicates where the caption is relative to the table
]
Properties of descendent blocks within the caption block
[[1] - [text-align]= used to align the caption content
[1] - the typical CSS use of [vertical-align]= does not apply
]
[Example 6-2:
Table constructs in example
An excerpt from the samp/table.fo sample ([Figure 6.4]):
01 <table-and-caption caption-side="after">
02 <table-caption>
03 <block text-align="center">This is a test of a table</block>
04 </table-caption>
05 <table border="solid" border-collapse="collapse">
06 ...
07 <table-header>
08 ...
09 </table-header>
10 <table-body>
11 ...
12 </table-body>
13 <table-body text-align="center">
14 ...
15 </table-body>
16 </table>
17 </table-and-caption>
]
6.2.6 <table> Object
[> 6.2.7][> 7.][< 6.2.5][^][^^][^^^]
Purpose:
[[1] - the parent object of an uncaptioned collection of tabular content
]
Content:
[[1] - ([6.7.3]) ([table-column]*,[table-header]?,[table-footer]?,[table-body]+)
[1] - Child objects (alphabetical):
[[2] - <[table-body]>([6.7.8];[Section 6.2.10 <table-body> Object])
[2] - <[table-column]>([6.7.4];[Section 6.2.7 <table-column> Object])
[2] - <[table-footer]>([6.7.7];[Section 6.2.9 <table-footer> Object])
[2] - <[table-header]>([6.7.6];[Section 6.2.8 <table-header> Object])
][1] - Referring object:
[[2] - <[table-and-caption]>([6.7.2];[Section 6.2.4 <table-and-caption> Object])
]]
[[1] - may begin with any number of <[marker]> children
]
Property sets:
[[1] - [Common Accessibility Properties]([7.5];[Section D.1.2 Common Accessibility Properties])
[1] - [Common Aural Properties]([7.7];[Section D.1.3 Common Aural Properties])
[1] - [Common Border, Padding, and Background Properties]([7.8];[Section D.1.4 Common Border, Padding, and Background Properties])
[1] - [Common Margin Properties-Block]([7.11];[Section D.1.7 Common Margin Properties-Block])
[1] - [Common Relative Position Properties]([7.13];[Section D.1.9 Common Relative Position Properties])
]
Other optional properties:
[block-progression-dimension=]([7.15.3];[Section D.3.3 Property summary])
[border-after-precedence=]([7.28.1];[Section D.3.3 Property summary])
[border-before-precedence=]([7.28.2];[Section D.3.3 Property summary])
[border-collapse=]([7.28.3];[Section D.3.3 Property summary])
[border-end-precedence=]([7.28.4];[Section D.3.3 Property summary])
[border-separation=]([7.28.5];[Section D.3.3 Property summary])
[border-start-precedence=]([7.28.6];[Section D.3.3 Property summary])
[break-after=]([7.20.1];[Section D.3.3 Property summary])
[break-before=]([7.20.2];[Section D.3.3 Property summary])
[clear=]([7.19.1];[Section D.3.3 Property summary])
[height=]([7.15.6];[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])
[inline-progression-dimension=]([7.15.7];[Section D.3.3 Property summary])
[intrusion-displace=]([7.19.3];[Section D.3.3 Property summary])
[keep-together=]([7.20.3];[Section D.3.3 Property summary])
[keep-with-next=]([7.20.4];[Section D.3.3 Property summary])
[keep-with-previous=]([7.20.5];[Section D.3.3 Property summary])
[table-layout=]([7.28.16];[Section D.3.3 Property summary])
[table-omit-footer-at-break=]([7.28.17];[Section D.3.3 Property summary])
[table-omit-header-at-break=]([7.28.18];[Section D.3.3 Property summary])
[width=]([7.15.14];[Section D.3.3 Property summary])
[writing-mode=]([7.29.7];[Section D.3.3 Property summary])
Shorthands influencing the above properties:
[border-spacing=]([7.31.9];[Section D.3.3 Property summary])
[page-break-after=]([7.31.16];[Section D.3.3 Property summary])
[page-break-before=]([7.31.17];[Section D.3.3 Property summary])
[page-break-inside=]([7.31.18];[Section D.3.3 Property summary])
[Example 6-3:
Table constructs in example
An excerpt from the samp/table.fo sample ([Figure 6.4]):
01 <table-and-caption caption-side="after">
02 <table-caption>
03 <block text-align="center">This is a test of a table</block>
04 </table-caption>
05 <table border="solid" border-collapse="collapse">
06 ...
07 <table-header>
08 ...
09 </table-header>
10 <table-body>
11 ...
12 </table-body>
13 <table-body text-align="center">
14 ...
15 </table-body>
16 </table>
17 </table-and-caption>
]
6.2.7 <table-column> Object
[> 6.2.8][> 7.][< 6.2.6][^][^^][^^^]
Purpose:
[[1] - the specification of common columnar properties
]
Content:
[[1] - ([6.7.4]) EMPTY
[1] - Referring object:
[[2] - <[table]>([6.7.3];[Section 6.2.6 <table> Object])
]]
Property sets:
[[1] - [Common Border, Padding, and Background Properties]([7.8];[Section D.1.4 Common Border, Padding, and Background Properties])
]
Other optional properties:
[border-after-precedence=]([7.28.1];[Section D.3.3 Property summary])
[border-before-precedence=]([7.28.2];[Section D.3.3 Property summary])
[border-end-precedence=]([7.28.4];[Section D.3.3 Property summary])
[border-start-precedence=]([7.28.6];[Section D.3.3 Property summary])
[column-number=]([7.28.8];[Section D.3.3 Property summary])
[column-width=]([7.28.9];[Section D.3.3 Property summary])
[number-columns-repeated=]([7.28.12];[Section D.3.3 Property summary])
[number-columns-spanned=]([7.28.13];[Section D.3.3 Property summary])
[visibility=]([7.30.17];[Section D.3.3 Property summary])
Property of interest:
[[1] - column-width="[proportional-column-width](number-of-units)"
[[2] - calculated as a unit proportion of calculating the table width less all specified column widths
][1] - inheritable properties specified here are not automatically inherited by cells of the column
[[2] - the cells are not descendants in the formatting object tree during refinement
[2] - cells must use the [from-table-column]() function to find the table column properties
]]
[Example 6-4:
Table constructs in example
An excerpt from the samp/table.fo sample ([Figure 6.4]):
01 <table-and-caption caption-side="after">
02 <table-caption>
03 <block text-align="center">This is a test of a table</block>
04 </table-caption>
05 <table border="solid" border-collapse="collapse">
06 <table-column column-width="proportional-column-width(2)"/>
07 <table-column column-width="proportional-column-width(1)"/>
08 <table-column column-width="proportional-column-width(1)"/>
09 <table-column column-width="proportional-column-width(1)"
10 font-weight="bold"/>
11 <table-column column-width="proportional-column-width(1)"/>
12 <table-header>
13 ...
14 </table-header>
15 <table-body>
16 ...
17 </table-body>
18 <table-body text-align="center">
19 ...
20 <table-cell font-weight="from-table-column(font-weight)">
21 <block>cell-06</block></table-cell>
22 <table-cell font-weight="from-table-column(font-weight)">
23 <block>cell-07</block></table-cell>
24 <table-cell font-weight="from-table-column(font-weight)"
25 ends-row="true">
26 <block>cell-08</block></table-cell>
27 ...
28 </table-body>
29 </table>
30 </table-and-caption>
]
6.2.8 <table-header> Object
[> 6.2.9][> 7.][< 6.2.7][^][^^][^^^]
Purpose:
[[1] - the rows of tabular content repeated at the before edge of every break in body content
[1] - must choose one row grouping strategy for the entire header
]
Content:
[[1] - ([6.7.6]) ([table-row]+|[table-cell]+)
[1] - Child objects (alphabetical):
[[2] - <[table-cell]>([6.7.10];[Section 6.2.12 <table-cell> Object])
[2] - <[table-row]>([6.7.9];[Section 6.2.11 <table-row> Object])
][1] - Referring object:
[[2] - <[table]>([6.7.3];[Section 6.2.6 <table> Object])
]]
[[1] - may begin with any number of <[marker]> children
]
Property sets:
[[1] - [Common Accessibility Properties]([7.5];[Section D.1.2 Common Accessibility Properties])
[1] - [Common Aural Properties]([7.7];[Section D.1.3 Common Aural Properties])
[1] - [Common Border, Padding, and Background Properties]([7.8];[Section D.1.4 Common Border, Padding, and Background Properties])
[1] - [Common Relative Position Properties]([7.13];[Section D.1.9 Common Relative Position Properties])
]
Other optional properties:
[border-after-precedence=]([7.28.1];[Section D.3.3 Property summary])
[border-before-precedence=]([7.28.2];[Section D.3.3 Property summary])
[border-end-precedence=]([7.28.4];[Section D.3.3 Property summary])
[border-start-precedence=]([7.28.6];[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])
[visibility=]([7.30.17];[Section D.3.3 Property summary])
[Example 6-5:
Table constructs in example
An excerpt from the samp/table.fo sample ([Figure 6.4]):
01 <table-and-caption caption-side="after">
02 <table-caption>
03 <block text-align="center">This is a test of a table</block>
04 </table-caption>
05 <table border="solid" border-collapse="collapse">
06 ...
07 <table-header>
08 <table-row>
09 ...
10 </table-row>
11 <table-row>
12 ...
13 </table-row>
14 </table-header>
15 <table-body>
16 <table-row text-align="center">
17 ...
18 <table-row text-align="center">
19 ...
20 </table-body>
21 <table-body text-align="center">
22 <table-cell font-weight="from-table-column(font-weight)">
23 <block>cell-01</block></table-cell>
24 ...
25 <table-cell font-weight="from-table-column(font-weight)">
26 <block>cell-14</block></table-cell>
27 </table-body>
28 </table>
29 </table-and-caption>
]
6.2.9 <table-footer> Object
[> 6.2.10][> 7.][< 6.2.8][^][^^][^^^]
Purpose:
[[1] - the rows of tabular content repeated at the after-edge of every break in body content
[1] - must choose one row grouping strategy for the entire footer
]
Content:
[[1] - ([6.7.7]) ([table-row]+|[table-cell]+)
[1] - Child objects (alphabetical):
[[2] - <[table-cell]>([6.7.10];[Section 6.2.12 <table-cell> Object])
[2] - <[table-row]>([6.7.9];[Section 6.2.11 <table-row> Object])
][1] - Referring object:
[[2] - <[table]>([6.7.3];[Section 6.2.6 <table> Object])
]]
[[1] - may begin with any number of <[marker]> children
]
Property sets:
[[1] - [Common Accessibility Properties]([7.5];[Section D.1.2 Common Accessibility Properties])
[1] - [Common Aural Properties]([7.7];[Section D.1.3 Common Aural Properties])
[1] - [Common Border, Padding, and Background Properties]([7.8];[Section D.1.4 Common Border, Padding, and Background Properties])
[1] - [Common Relative Position Properties]([7.13];[Section D.1.9 Common Relative Position Properties])
]
Other optional properties:
[border-after-precedence=]([7.28.1];[Section D.3.3 Property summary])
[border-before-precedence=]([7.28.2];[Section D.3.3 Property summary])
[border-end-precedence=]([7.28.4];[Section D.3.3 Property summary])
[border-start-precedence=]([7.28.6];[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])
[visibility=]([7.30.17];[Section D.3.3 Property summary])
6.2.10 <table-body> Object
[> 6.2.11][> 7.][< 6.2.9][^][^^][^^^]
Purpose:
[[1] - the rows of tabular content flowed as the body content
[1] - must choose one row grouping strategy for each set of body rows
[[2] - each set of body rows may use a different strategy
[2] - the boundaries between sets of body rows are seamless
]]
Content:
[[1] - ([6.7.8]) ([table-row]+|[table-cell]+)
[1] - Child objects (alphabetical):
[[2] - <[table-cell]>([6.7.10];[Section 6.2.12 <table-cell> Object])
[2] - <[table-row]>([6.7.9];[Section 6.2.11 <table-row> Object])
][1] - Referring object:
[[2] - <[table]>([6.7.3];[Section 6.2.6 <table> Object])
]]
[[1] - may begin with any number of <[marker]> children
]
Property sets:
[[1] - [Common Accessibility Properties]([7.5];[Section D.1.2 Common Accessibility Properties])
[1] - [Common Aural Properties]([7.7];[Section D.1.3 Common Aural Properties])
[1] - [Common Border, Padding, and Background Properties]([7.8];[Section D.1.4 Common Border, Padding, and Background Properties])
[1] - [Common Relative Position Properties]([7.13];[Section D.1.9 Common Relative Position Properties])
]
Other optional properties:
[border-after-precedence=]([7.28.1];[Section D.3.3 Property summary])
[border-before-precedence=]([7.28.2];[Section D.3.3 Property summary])
[border-end-precedence=]([7.28.4];[Section D.3.3 Property summary])
[border-start-precedence=]([7.28.6];[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])
[visibility=]([7.30.17];[Section D.3.3 Property summary])
[Example 6-6:
Table constructs in example
An excerpt from the samp/table.fo sample ([Figure 6.4]):
01 <table border="solid" border-collapse="collapse">
02 ...
03 <table-header>
04 ...
05 </table-header>
06 <table-body>
07 <table-row text-align="center">
08 ...
09 </table-row>
10 <table-row text-align="center">
11 <table-cell font-weight="from-table-column(font-weight)">
12 <block>2-a</block></table-cell>
13 </table-row>
14 <table-row text-align="center">
15 <table-cell font-weight="from-table-column(font-weight)">
16 <block>3-a</block></table-cell>
17 </table-row>
18 </table-body>
19 <table-body text-align="center">
20 <table-cell font-weight="from-table-column(font-weight)">
21 <block>cell-01</block></table-cell>
22 ...
23 <table-cell font-weight="from-table-column(font-weight)"
24 starts-row="true">
25 <block>cell-04</block></table-cell>
26 ...
27 <table-cell font-weight="from-table-column(font-weight)"
28 ends-row="true">
29 <block>cell-08</block></table-cell>
30 ...
31 <table-cell font-weight="from-table-column(font-weight)"
32 starts-row="true">
33 <block>cell-11</block></table-cell>
34 <table-cell font-weight="from-table-column(font-weight)">
35 <block>cell-12</block></table-cell>
36 </table-body>
37 </table>
]
Of note:
[[1] - first set of body rows is using the row-based row-grouping-strategy
[1] - second set of body rows is using the cell-based row-grouping-strategy
]
6.2.11 <table-row> Object
[> 6.2.12][> 7.][< 6.2.10][^][^^][^^^]
Purpose:
[[1] - a row of tabular content
]
Content:
[[1] - ([6.7.9]) ([table-cell]+)
[1] - Child object:
[[2] - <[table-cell]>([6.7.10];[Section 6.2.12 <table-cell> Object])
][1] - Referring objects:
[[2] - <[table-header]>([6.7.6];[Section 6.2.8 <table-header> Object])
[2] - <[table-footer]>([6.7.7];[Section 6.2.9 <table-footer> Object])
[2] - <[table-body]>([6.7.8];[Section 6.2.10 <table-body> Object])
]]
Property sets:
[[1] - [Common Accessibility Properties]([7.5];[Section D.1.2 Common Accessibility Properties])
[1] - [Common Aural Properties]([7.7];[Section D.1.3 Common Aural Properties])
[1] - [Common Border, Padding, and Background Properties]([7.8];[Section D.1.4 Common Border, Padding, and Background Properties])
[1] - [Common Relative Position Properties]([7.13];[Section D.1.9 Common Relative Position Properties])
]
Other optional properties:
[block-progression-dimension=]([7.15.3];[Section D.3.3 Property summary])
[border-after-precedence=]([7.28.1];[Section D.3.3 Property summary])
[border-before-precedence=]([7.28.2];[Section D.3.3 Property summary])
[border-end-precedence=]([7.28.4];[Section D.3.3 Property summary])
[border-start-precedence=]([7.28.6];[Section D.3.3 Property summary])
[break-after=]([7.20.1];[Section D.3.3 Property summary])
[break-before=]([7.20.2];[Section D.3.3 Property summary])
[height=]([7.15.6];[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])
[keep-together=]([7.20.3];[Section D.3.3 Property summary])
[keep-with-next=]([7.20.4];[Section D.3.3 Property summary])
[keep-with-previous=]([7.20.5];[Section D.3.3 Property summary])
[visibility=]([7.30.17];[Section D.3.3 Property summary])
Shorthands influencing the above properties:
[page-break-after=]([7.31.16];[Section D.3.3 Property summary])
[page-break-before=]([7.31.17];[Section D.3.3 Property summary])
[page-break-inside=]([7.31.18];[Section D.3.3 Property summary])
[Example 6-7:
Table constructs in example
An excerpt from the samp/table.fo sample ([Figure 6.4]):
01 <table-and-caption caption-side="after">
02 <table-caption>
03 <block text-align="center">This is a test of a table</block>
04 </table-caption>
05 <table border="solid" border-collapse="collapse">
06 ...
07 <table-header>
08 <table-row>
09 <table-cell number-rows-spanned="2">
10 ...
11 </table-row>
12 <table-row>
13 <table-cell border-before-style="dotted"
14 border-after-style="solid">
15 ...
16 </table-row>
17 </table-header>
18 <table-body>
19 <table-row text-align="center">
20 ...
21 </table-row>
22 <table-row text-align="center">
23 <table-cell font-weight="from-table-column(font-weight)">
24 <block>2-a</block></table-cell>
25 </table-row>
26 <table-row text-align="center">
27 <table-cell font-weight="from-table-column(font-weight)">
28 <block>3-a</block></table-cell>
29 </table-row>
30 </table-body>
31 <table-body text-align="center">
32 <table-cell font-weight="from-table-column(font-weight)">
33 <block>cell-01</block></table-cell>
34 ...
35 <table-cell font-weight="from-table-column(font-weight)">
36 <block>cell-14</block></table-cell>
37 </table-body>
38 </table>
39 </table-and-caption>
]
6.2.12 <table-cell> Object
[> 7.][< 6.2.11][^][^^][^^^]
Purpose:
[[1] - a column of a row of tabular content
]
Content:
[[1] - ([6.7.10]) ([%block;])+
[1] - Child object:
[[2] - [%block;]([6.2];[Section 3.4.2 Block-level objects])
][1] - Referring objects:
[[2] - <[table-header]>([6.7.6];[Section 6.2.8 <table-header> Object])
[2] - <[table-footer]>([6.7.7];[Section 6.2.9 <table-footer> Object])
[2] - <[table-body]>([6.7.8];[Section 6.2.10 <table-body> Object])
[2] - <[table-row]>([6.7.9];[Section 6.2.11 <table-row> Object])
]]
[[1] - may begin with any number of <[marker]> children
]
Property sets:
[[1] - [Common Accessibility Properties]([7.5];[Section D.1.2 Common Accessibility Properties])
[1] - [Common Aural Properties]([7.7];[Section D.1.3 Common Aural Properties])
[1] - [Common Border, Padding, and Background Properties]([7.8];[Section D.1.4 Common Border, Padding, and Background Properties])
[1] - [Common Relative Position Properties]([7.13];[Section D.1.9 Common Relative Position Properties])
]
Other optional properties:
[block-progression-dimension=]([7.15.3];[Section D.3.3 Property summary])
[border-after-precedence=]([7.28.1];[Section D.3.3 Property summary])
[border-before-precedence=]([7.28.2];[Section D.3.3 Property summary])
[border-end-precedence=]([7.28.4];[Section D.3.3 Property summary])
[border-start-precedence=]([7.28.6];[Section D.3.3 Property summary])
[column-number=]([7.28.8];[Section D.3.3 Property summary])
[display-align=]([7.14.4];[Section D.3.3 Property summary])
[empty-cells=]([7.28.10];[Section D.3.3 Property summary])
[ends-row=]([7.28.11];[Section D.3.3 Property summary])
[height=]([7.15.6];[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])
[inline-progression-dimension=]([7.15.7];[Section D.3.3 Property summary])
[number-columns-spanned=]([7.28.13];[Section D.3.3 Property summary])
[number-rows-spanned=]([7.28.14];[Section D.3.3 Property summary])
[relative-align=]([7.14.6];[Section D.3.3 Property summary])
[starts-row=]([7.28.15];[Section D.3.3 Property summary])
[width=]([7.15.14];[Section D.3.3 Property summary])
Properties of interest:
[[1] - [display-align]= is used to align the content in the block-progression-direction
]
[Example 6-8:
Table constructs in example
An excerpt from the samp/table.fo sample ([Figure 6.4]) showing the row-based row-grouping-strategy:
01 <table-and-caption caption-side="after">
02 ...
03 <table-header>
04 <table-row>
05 <table-cell font-weight="from-table-column(font-weight)"
06 number-rows-spanned="2">
07 <block/>
08 </table-cell>
09 <table-cell font-weight="from-table-column(font-weight)"
10 number-rows-spanned="2" border="solid"
11 display-align="center">
12 <block text-align="center">a</block>
13 </table-cell>
14 <table-cell font-weight="from-table-column(font-weight)"
15 number-columns-spanned="3">
16 <block text-align="center">b/c/d</block>
17 </table-cell>
18 </table-row>
19 ...
20 </table-header>
21 <table-body>
22 <table-row text-align="center">
23 <table-cell font-weight="from-table-column(font-weight)"
24 number-rows-spanned="3" border="dashed"
25 display-align="center">
26 <block>Row values here</block>
27 </table-cell>
28 <table-cell font-weight="from-table-column(font-weight)">
29 <block>1-a</block></table-cell>
30 <table-cell font-weight="from-table-column(font-weight)">
31 <block>1-b</block></table-cell>
32 </table-row>
33 <table-row text-align="center">
34 <table-cell font-weight="from-table-column(font-weight)">
35 <block>2-a</block></table-cell>
36 </table-row>
37 <table-row text-align="center">
38 <table-cell font-weight="from-table-column(font-weight)">
39 <block>3-a</block></table-cell>
40 </table-row>
41 </table-body>
]
[Example 6-9:
Table constructs in example
Another excerpt from the samp/table.fo sample ([Figure 6.4]) showing the cell-based row-grouping-strategy:
01 <table-and-caption caption-side="after">
02 ...
03 <table-body text-align="center">
04 <table-cell font-weight="from-table-column(font-weight)">
05 <block>cell-01</block></table-cell>
06 <table-cell font-weight="from-table-column(font-weight)">
07 <block>cell-02</block></table-cell>
08 <table-cell font-weight="from-table-column(font-weight)">
09 <block>cell-03</block></table-cell>
10 <table-cell font-weight="from-table-column(font-weight)"
11 starts-row="true">
12 <block>cell-04</block></table-cell>
13 <table-cell font-weight="from-table-column(font-weight)">
14 <block>cell-05</block></table-cell>
15 <table-cell font-weight="from-table-column(font-weight)">
16 <block>cell-06</block></table-cell>
17 <table-cell font-weight="from-table-column(font-weight)">
18 <block>cell-07</block></table-cell>
19 <table-cell font-weight="from-table-column(font-weight)"
20 ends-row="true">
21 <block>cell-08</block></table-cell>
22 <table-cell font-weight="from-table-column(font-weight)">
23 <block>cell-09</block></table-cell>
24 <table-cell font-weight="from-table-column(font-weight)">
25 <block>cell-10</block></table-cell>
26 <table-cell font-weight="from-table-column(font-weight)"
27 starts-row="true">
28 <block>cell-11</block></table-cell>
29 <table-cell font-weight="from-table-column(font-weight)">
30 <block>cell-12</block></table-cell>
31 <table-cell font-weight="from-table-column(font-weight)">
32 <block>cell-13</block></table-cell>
33 <table-cell font-weight="from-table-column(font-weight)">
34 <block>cell-14</block></table-cell>
35 </table-body>
36 </table>
37 </table-and-caption>
]
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.