W3C

Implementation Report -- Implementations of XSL Formatting Objects Specification

XSL Working Group

2001 August 28

Introduction

The XSL Specification went into the Candidate Recommendation period at the end of November 2000. The original planned date for exiting CR was 28 February 2000; however, the work as described below continued to date.

Work During the CR Period

During the CR period, the Working Group continued to be active. Among the topics we handled during this period were:

  1. Coordination with the US government Agency NIST on the collection and development of test cases.
  2. Clarification and improvement of the exposition of the specification.
  3. Disposing of Comments that were communicated to the WG during the CR period. See Disposition of Comments.

Exit Criteria

The WG established the following exit criteria in the Request for CR (members only)

  1. Sufficient reports of implementation experience have been gathered to demonstrate that XSL processors based on the specification are implementable and have compatible behavior.
  2. An implementation report shows that there is at least one implementation for each basic formatting object and property.
  3. Formal responses to all comments received by the WG.

All exit criteria were met during the period from December 2000 until July 2001. Test cases were gathered from the XSL WG (two Integration tests), several of the implementors, (IBM, Antenna House, RenderX, and FOP), and the US National Institute of Standards and Technology who converted 615 CSS tests to XSL and wrote an additional several hundreds, hereafter called "unit tests" (see Coverage Report in Appendix A).

Test results

Test results were provided in PDF by the implementors: Antenna House, Arbortext, FOP, IBM, PassiveTeX, and RenderX. A manual visual inspection was performed reviewing both the unit tests and the integration tests. In addition, most implementors submitted a Report on their results and interpretation of the test results. A summary of their results is as follows (reproduced as of 2001 July 17 from the Test Result Files table of the full results report):

Profile File Test Results
Full Future Differ Test Spec Total
Test Results From Anonymous Implementation #1 1/testresults.xml [HTML] 199 194 0 19 0 412
Test Results for XEP (version 2.21) 2/testresults.xml [HTML] 547 1 67 2 0 617
Test Results from Arbortext 3/testresults.xml [HTML] 2 0 0 0 0 2
Test Results for XSL Formatter v1.2 alpha (Antenna House) 4/testresults.xml [HTML] 755 4 30 105 0 894
Test Results From PassiveTeX 5/testresults.xml [HTML] 0 0 2 0 0 2
Test Results from FOP (v0.19) 6/testresults.xml [HTML] 269 1 349 0 0 619
Total 1772 200 448 126 0 2546

In the above table, the meanings of the columns are as follows: "full" means complete agreement with the test and expected results; "future" means support is expected in an upcoming release; "differ" means the current support does not produce the correct results at this time, but there was no disagreement with what the correct result should have been; "test" means the implementor felt there was some problem with the test case itself or disagreed with the suggested correct result (in all these cases, the correct result was determined by examining the spec and the tests were corrected); "spec" means there was an ambiguity in the spec that allowed for incorrect or multiple interpretations for this test case. See also XSL CR Test Suite -- Test Coverage Page for the complete set of CR test results.

Of all the tests performed, only 2 items were identified as requiring clarification or modification of the text of the specification, and these two changes were made. The Integration Tests are detailed in Appendix B: Integration test analysis and include the PDF of the results from all implementations.

Minority Opinions

All comments were accepted by commentators; there were no minority opinions generated.

Things that have not been implemented

Appendix C shows a table summarising implementation status of each Formatting Object. As far as we are aware, all FOs belonging to the 'basic' conformance level have been implemented, as well as most 'extended' FOs, except:

  1. color-profile
  2. bidi-override
  3. multi-toggle, multi-properties, multi-property-sets

Other mechanisms not reflected in particular FOs and not implemented to our knowledge are

  1. baseline alignment properties
  2. scrolling mechanisms
  3. aural properties

Conclusion

The XSL WG believes, based on implementation experience and test results, that XSL is ready to be forwarded to PR. The results were basically as expected; fallback specified on all FOs and properties was demonstrated to be very successful in that the results made it clear when a particular FO or property was not implemented in one or more of the implementations. The integration tests demonstrated clearly how fallback worked. The reports indicate that many of the implementors expect to continue implementing much of the functionality that was not able to be implemented in the CR time-frame. The WG expects these tests to form the basis for conformance testing once the specification becomes a Recommendation.

Appendix A: Coverage Report

Below is a summary of the coverage level of tests supplied by the vendors. This does not include the NIST test suite. For complete details see also XSL CR Test Suite -- Test Coverage Page for the complete list of tests and results.

FOP coverage info
=====================
Formatting object and number of tests:
-------------------------------------
external-graphic		2
static-content		31
table-footer		2
page-sequence-master		16
repeatable-page-master-reference		5
page-sequence		43
conditional-page-master-reference		11
list-item-label		6
page-number		22
table-cell		12
list-block		6
repeatable-page-master-alternatives		11
block-container		1
region-body		43
basic-link		5
page-number-citation		2
inline		18
instream-foreign-object		2
layout-master-set		43
flow		43
simple-page-master		43
leader		6
list-item-body		6
list-item		6
table-row		12
block		43
table-body		12
region-after		39
single-page-master-reference		4
character		1
root		43
table-header		2
table-column		12
table		12
region-before		38

Property and number of tests:
----------------------------
keep-together.within-page		1
language		2
width		3
border-after-width		1
font-size		41
hyphenation-remain-character-count		1
line-height		40
margin-left		43
widows		1
hyphenation-push-character-count		1
src		2
ref-id		2
border-bottom-color		2
space-after.optimum		40
space-before.optimum		34
padding-after		1
border-right-width		4
margin-right		43
break-after		4
keep-with-next		3
padding-top		20
top		1
margin-bottom		43
border-before-width		1
border-left-width		3
padding-start.length		1
padding-end		1
extent		39
external-destination		5
text-align		41
white-space-collapse		2
odd-or-even		3
rule-thickness		6
flow-name		43
maximum-repeats		5
country		1
background-color		25
font-style		13
page-height		40
margin-top		43
column-gap		6
border-style		7
leader-length		5
font-variant		1
keep-with-next.within-page		1
color		25
keep-together		1
border-after-color		1
character		1
end-indent		8
number-columns-spanned		1
span		6
height		3
position		1
border-right-color		1
vertical-align		2
border-width		13
border-left-color		1
border-before-color		1
border-top-width		2
text-align-last		1
table-omit-footer-at-break		1
left		1
orphans		1
leader-alignment		1
hyphenate		2
column-width		12
master-name		43
padding-right		2
padding-left		2
space-before		2
space-before.minimum		2
initial-page-number		8
column-count		7
text-decoration		2
space-before.maximum		2
start-indent		12
keep-with-previous		1
space-after		2
wrap-option		2
id		3
provisional-label-separation		2
border-bottom-width		2
border-end-width		1
border-start-width		1
page-width		40
break-before		12
table-omit-header-at-break		1
padding-end.length		1
internal-destination		2
padding-bottom		1
padding		1
border-color		12
border-top-color		2
padding-before		1
font-weight		11
leader-pattern		6
leader-pattern-width		1
page-position		10
rule-style		1
provisional-distance-between-starts		5
number-rows-spanned		1
font-family		35 

RenderX coverage info
=====================
A. Pagination:

A.1. Basic test for named regions.
     Objects:
       - fo:simple-page-master and its descendants;
       - fo:static-content and fo:flow
     Properties:
       - region-name, flow-name

A.2. Page sequence masters and named regions.
     Objects:
       - fo:simple-page-master and its descendants;
       - fo:page-sequence-master and its descendants;
       - fo:static-content and fo:flow
     Properties:
       - region-name, flow-name;
       - page-position, odd-or-even;
       - reference-orientation on side regions;
       - display-align on side regions

A.3. Maximum-repeats property
     Objects:
       - fo:repeatable-page-master-reference;
       - fo:repeatable-page-master-alternatives
     Properties:
       - maximum-repeats

A.4.  Force-page-count property and page number formatting
     Objects:
       - fo:page-sequence;
       - fo:conditional-page-master-reference;
       - fo:page-number;
     Properties:
       - force-page-count;
       - blank-or-not-blank;
       - initial-page-number;
       - format

B. Page layout:

B.1. Multi-column layout.
     Objects:
       - fo:region-body;
       - fo:static-content (for footnote separators)
       - fo:footnote/fo:footnote-body
     Properties:
       - column-count;
       - column-gap;
       - flow-name (value of "xsl-footnote-separator")
       - reference-orientation

B.2. Regions.
     Objects:
       - fo:simple-page-master;
       - fo:region-*;
     Properties:
       - reference-orientation;
       - display-align;
       - precedence;
       - background-related properties

B.3. Span.
     Objects:
       - fo:block;
     Properties:
       - span;

B.4. Footnotes.
     Objects:
       - fo:footnote/fo:footnote-body
     Properties: none

B.5. Top floats.
     Objects:
       - fo:float
     Properties:
        - float

C. Block-level formatting:

C.1. Text alignment
    Objects:
       - fo:block
    Properties:
       - text-align;
       - text-align-last

C.2. Text indents
    Objects:
       - fo:block
    Properties:
       - text-align;
       - text-align-last;
       - text-indent;
       - last-line-end-indent;
       - start-indent;
       - end-indent

C.3. Borders and Background
    Objects:
       - fo:block
    Properties:
       - background-color;
       - border-{side}-{trait} family;
       - border-style;
       - border-width;
       - border-color

C.4. Padding
    Objects:
       - fo:block
    Properties:
       - padding-{side};
       - padding;

C.5. Background image
    Objects:
       - fo:block
    Properties:
       - background-color;
       - background-image;
       - background-position-horizontal;
       - background-position-vertical;
       - background-position;
       - background-repeat

C.6. Background image - shorthand notation
    Objects:
       - fo:block
    Properties:
       - background

C.7. First-line formatting
    Objects:
       - fo:initial-property-set
    Properties: none

C.8. Line height
    Objects:
       - fo:block
    Properties:
       - line-height

C.9. Line stacking strategy
    Objects:
       - fo:block
    Properties:
       - line-stacking-strategy;
       - line-height;
       - line-height-shift-adjustment

C.10. Keeps - block-level.
     Objects:
       - fo:block
     Properties:
        - keep-together.within-page

D. Inline-level formatting - font and character properties

D.1. Font family
    Objects:
       - fo:wrapper
    Properties:
       - font-family

D.2. Font weight
    Objects:
       - fo:wrapper
    Properties:
       - font-weight

D.3. Font slant
    Objects:
       - fo:wrapper
    Properties:
       - font-style

D.4. Font stretch
    Objects:
       - fo:wrapper
    Properties:
       - font-stretch

D.5. Smallcaps
    Objects:
       - fo:wrapper
    Properties:
       - font-variant

D.6. Capitalization
    Objects:
       - fo:wrapper
    Properties:
       - text-transform

D.7. Text decoration
    Objects:
       - fo:inline
    Properties:
       - text-decoration

D.8. Shadowed text
    Objects:
       - fo:wrapper
    Properties:
       - text-shadow

D.9. Font size
    Objects:
       - fo:wrapper
    Properties:
       - font-size

D.10. Font aspect ratio adjustment
    Objects:
       - fo:wrapper
    Properties:
       - font-size-adjust

D.11. Font shorthand
    Objects:
       - fo:wrapper
    Properties:
       - font

D.12. Letter and word spacing
    Objects:
       - fo:wrapper
    Properties:
       - letter-spacing
       - word-spacing

E. Inline-level formatting - inline areas

E.1. Borders around inlines
    Objects:
       - fo:inline
    Properties:
       - Border, Padding, and Background properties

E.2. Baseline shift
    Objects:
       - fo:inline
    Properties:
       - Border, Padding, and Background properties
       - baseline-shift

E.3. Vertical alignment properties for inlines
    Objects:
       - fo:inline
    Properties:
       - alignment-baseline
       - alignment-adjust
       - baseline-shift

E.4. Keeps - inline-level.
     Objects:
       - fo:inline
     Properties:
        - keep-together.within-line

F. Tables

F.1. Basic table
    Objects:
       - fo:table;
       - fo:table-column;
       - fo:table-body;
       - fo:table-row;
       - fo:table-cell;

    Properties:
       - starts-row;
       - ends-row;

F.2. Column specifiers
    Objects:
       - fo:table-column;

    Properties:
       - number-columns-repeated;
       - number-columns-spanned;
       - column-number;

F.3. Table headers and footers
    Objects:
       - fo:table-body;
       - fo:table-header;
       - fo:table-footer;

    Properties: none

F.4. Spanned cells
    Objects:
       - fo:table-cell;

    Properties:
       - number-columns-repeated;
       - number-columns-spanned;
       - number-rows-spanned;
       - column-number;

F.5. Long table:
    Objects:
       - fo:table-header;
       - fo:table-footer;

    Properties:
       - table-omit-header-at-break
       - table-omit-footer-at-break

F.6. Comprehensive table test, nested tables
     Objects:
       - all table-related objects
     Properties:
        - display-align on table cells.


G. Miscellaneous objects

G.1. Lists
    Objects:
      - fo:list-block
      - fo:list-item
      - fo:list-item-label
      - fo:list-item-body
    Properties:
      - provisional-label-separation;
      - provisional-distance-between-starts;
    Functions:
      - body-start();
      - label-end();

G.2. Leaders
    Objects:
      - fo:leader
    Properties:
      - leader-pattern;
      - leader-length;
      - rule-style;
      - rule-thickness;

G.3. Markers
    Objects:
      - fo:marker
      - fo:retrieve-marker
    Properties:
      - marker-class-name;
      - retrieve-class-name;
      - retrieve-position

G.4. Graphics
    Objects:
      - fo:external-graphic
    Properties:
      - src;
      - content-width;
      - content-height;
      - scaling

H. Unicode Support

H.1. Adobe standard charset
   Tests Unicode values of all characters from the Adobe Roman-Extended charset.

H.2. Symbol
   Tests Unicode values of all characters from the Adobe Symbol font (Greek
letters
   and mathematical operators).

H.3. ZapfDingbats
   Tests Unicode values of characters from ZapfDingbats font.

Total: 45 tests

See also http://www.renderx.com/testcases.html
for the web page of RenderX tests in a nice organization.

IBM
===

Formatting objects: 
------------------
single-page-master-reference, repeatable-page-master-reference, 
repeatable-page-master-alternatives, conditional-page-master-reference, 
simple-page-master, region-body, region-before, region-after, region-start, 
region-end, block, block-container, character, external-graphic, inline,  
inline-container, leader, page-number, multi-switch, multi-case, multi-toggle,
multi-properties, multi-property-set

Properties:
-----------
absolute-position, top, 
right, bottom, left, background-attachment, background-color, background-image,
background-repeat, , background-position-vertical, border-before-color, 
border-before-style, border-before-width, border-start-width, border-end-color, 
border-end-style, border-end-width, border-top-color, border-right-width, 
padding-before, padding-after, padding-start, padding-end, 
margin-right, space-before, space-after, line-height, line-stacking-strategy, 
linefeed-treatment, space-treatment, text-align, white-space-collapse, 
character, leader-pattern, leader-pattern-width, leader-length, rule-style, 
rule-thickness, extent, flow-name, master-name, maximum-repeats, precedence, 
region-name, writing-mode, auto-restore, starting-state, case-name, case-title,
switch-to, active-state

Antenna House
=============
- 2 on fo:root
- 15 on page layout/page master reference combinations
- 12 on page dimensions, margins, and regions, etc.
- 2 on fo:block with lots of properties
- 2 on fo:block-container including various writing directions
- 3 on fo:inline or fo:inline-container including various writing directions
- 1 on fo:bidi-override
- 4 on fo:leader
- 11 on tables
- 6 on lists

Appendix B: Integration test analysis

The following summary tabulates results received as of 2001 July 12. It should be noted that results were requested and received for test 1 in March, and many implementations have been improved since then. Where the XSL WG is aware of it, due to subsequent test results or email discussions, we have attempted to indicate "now fixed" next to problems that have been resolved in the vendor's most recent code. The accompanying PDFs may be from an older version and may not reflect these latest fixes.

Copies of the output of these integration tests are expected to be attached as hard copy. In the following summaries, the links from the company name for each test link to the PDF available on the test site.

Integration test 1 result summary

Integration test 1 consists of an approximately 8 page one-column document. The following basic formatting structures are included:

In general, the results show a high degree of interoperability in all areas. Exceptions are noted below.

Arbortext
vertical spacing around W3C logo graphic is off; known bug with implementation
page bottom margin is too large; known bug with implementation (now fixed)
Antenna House
graphic scaling appears off (now fixed)
RenderX
appears to have too much space around subtitle (now fixed)
image scaling of "scale-to-fit" is not yet supported
FOP
too much vertical space around subtitle; known bug with implementation
some problems with leaders; known bug with implementation
doesn't yet implement keeps; known limitation of implementation
PassiveTeX
incorrect handling of graphic scaling and/or width
problems with leaders (now fixed)
problems with indents on bulleted list
no hyphenation and justification (now fixed)

Integration test 2 result summary

Integration test 2 consists of an approximately 12 page two-column document. This test case includes some extended XSL FO features that are not necessarily part of the basic level of conformance.

The following formatting structures are included:

In general, the results show a high degree of interoperability in most areas with exceptions as noted below.

Arbortext
vertical spacing around W3C logo graphic is off; known bug with implementation
page bottom margin is too large; known bug with implementation (now fixed)
graphic scaling not working properly; known bug with implementation (now fixed)
Antenna House
Formatter Limitation: fo:marker/retrieve-marker is not supported yet.
Formatter Limitation: span="all" is not supported yet.
RenderX
image scaling of "scale-to-fit" is not yet supported
span="all" is not supported
page-break="odd-page" is not supported
FOP
some problems with leaders; known bug with implementation
doesn't yet implement keeps; known limitation of implementation
no support for markers yet
problems with lists in multicolumn; known bug with implementation
wrong page number format in front matter (now fixed)
wrong indents on bulleted list in abstract
extra blank page at beginning of body (now fixed)
PassiveTeX
incorrectly has page number on title page
wrong indents on bulleted list in abstract
no page-number-citation support
some problems with leaders in toc
incorrect handling of graphic scaling and/or width (now fixed)
span not supported

Appendix C: summary of implemented FOs

Implementation status of each FO
Formatting Object Conformance Level Implemented Notes

6.4.2 fo:root

basic Yes
6.4.3 fo:declarations basic Yes
6.4.4 fo:color-profile extended No Fallback not implemented
6.4.5 fo:page-sequence basic Yes
6.4.6 fo:layout-master-set basic Yes
6.4.7 fo:page-sequence-master basic Yes
6.4.8 fo:single-page-master-reference basic Yes
6.4.9 fo:repeatable-page-master-reference basic Yes
6.4.10 fo:repeatable-page-master-alternatives extended Yes
6.4.11 fo:conditional-page-master-reference extended Yes
6.4.12 fo:simple-page-master basic Yes
6.4.13 fo:region-body basic Yes
6.4.14 fo:region-before extended Yes
6.4.15 fo:region-after extended Yes
6.4.16 fo:region-start extended Yes
6.4.17 fo:region-end extended Yes
6.4.18 fo:flow basic Yes
6.4.19 fo:static-content extended Yes
6.4.20 fo:title extended Yes
6.5.2 fo:block basic Yes
6.5.3 fo:block-container extended Yes
6.6.2 fo:bidi-override extended Yes
6.6.3 fo:character basic Yes
6.6.4 fo:initial-property-set extended Yes
6.6.5 fo:external-graphic basic Yes
6.6.6 fo:instream-foreign-object extended Yes
6.6.7 fo:inline basic Yes
6.6.8 fo:inline-container extended Yes
6.6.9 fo:leader basic Yes
6.6.10 fo:page-number basic Yes
6.6.11 fo:page-number-citation extended Yes
6.7.2 fo:table-and-caption basic Yes
6.7.3 fo:table basic Yes
6.7.4 fo:table-column basic Yes
6.7.5 fo:table-caption extended Yes
6.7.6 fo:table-header basic Yes
6.7.7 fo:table-footer extended Yes
6.7.8 fo:table-body basic Yes
6.7.9 fo:table-row basic Yes
6.7.10 fo:table-cell basic Yes
6.8.2 fo:list-block basic Yes
6.8.3 fo:list-item basic Yes
6.8.4 fo:list-item-body basic Yes
6.8.5 fo:list-item-label extended Yes
6.9.2 fo:basic-link extended Yes
6.9.3 fo:multi-switch extended Yes
6.9.4 fo:multi-case basic Yes
6.9.5 fo:multi-toggle extended Yes
6.9.6 fo:multi-properties extended Yes
6.9.7 fo:multi-property-set extended Yes
6.10.2 fo:float extended Yes
6.10.3 fo:footnote extended Yes
6.10.4 fo:footnote-body extended Yes
6.11.2 fo:wrapper basic Yes
6.11.3 fo:marker extended Yes
6.11.4 fo:retrieve-marker extended Yes