Place fo:marker children into FO content models

Editors:

The content-model syntax used to define for each FO the valid child 
elements and their ordering/frequency is proving to be a very efficient 
shorthand for documenting and coding validity checking.  It would be 
helpful for all FO's that can have their content defined exclusively 
with this syntax be done in this manner.

Section 6.2 of the 1.1 specification[1], appears to support this view, 
that prose will be used [only] where additional constraints are "not 
expressible in XML content models."

A good example of a FO needing prose is for fo:block-container (below), 
where certain conditions must be met for an fo:marker child element to 
be valid:

<Q>
fo:block-container: (%block;)+

In addition an fo:block-container that does not generate an absolutely 
positioned area may have a sequence of zero or more fo:markers as its 
initial children.
</Q>

However, many of the other FO content models appear to have fo:marker 
unnecessarily pulled out of the content model and placed into prose 
instead.  Although it is true that fo:markers are processed differently 
than most other formatting objects, for the purpose of the content 
models, which are just to define the valid child elements for each FO, 
the need to have them factored out is unclear.  Furthermore, the idea 
(*if* this was the idea) that certain formatting objects, due to their 
uniqueness in processing, should be pulled out of the content models 
might not prove scalable over time.

If necessary, the XML recommendation[2] does allow for using parentheses 
for grouping elements but it appears in most cases the fo:markers can be 
placed into the content models without needing to resort to them.

I'd like to make the following recommendations, for the listed 
formatting objects, to place fo:markers within the content-model syntax 
and remove the prose previously used to define their location.

Thanks,

Glen Mazza
EDS / XML Apache FOP Project


[1] http://www.w3.org/TR/2003/WD-xsl11-20031217/#d0e6425
[2] http://www.w3.org/TR/2004/REC-xml-20040204/#sec-notation

1.) fo:table: ===================================================

Change from:
(table-column*,table-header?,table-footer?,table-body+)
In addition this formatting object may have a sequence of zero
or more fo:markers as its initial children.

To:
(marker*,table-column*,table-header?,table-footer?,table-body+)

2.) fo:block: ===================================================

Change from:
(#PCDATA|%inline;|%block;)*

In addition this formatting object may have a sequence of zero
or more fo:markers as its initial children,
optionally followed by an fo:initial-property-set.

To:
(marker*, initial-property-set?, (#PCDATA|%inline;|%block;)*)

3.) fo:list-item: ===============================================

Change from:
(list-item-label,list-item-body)
In addition this formatting object may have a sequence of zero
or more fo:markers as its initial children.

Change to:
(marker*,list-item-label,list-item-body)

4.) fo:list-block ===============================================

Change from:
(list-item+)
In addition this formatting object may have a sequence of zero
or more fo:markers as its initial children.

Change to:
(marker*, list-item+)


5.)  fo:table-and-caption =======================================

Change from:
(table-caption?,table)
In addition this formatting object may have a sequence of zero
or more fo:markers as its initial children.

Change to:
(marker*,table-caption?,table)

6.) fo:table-header, fo:table-footer, fo:table-body =============

Change from:
(table-row+|table-cell+)
In addition this formatting object may have a sequence of zero
or more fo:markers as its initial children.

To:
(marker*, (table-row+|table-cell+))

7.)  fo:flow, fo:inline-container, fo:table-cell,
fo:list-item-body, fo:list-item-label, fo:table-caption: ========

Change from:
(%block;)+
In addition this formatting object may have a sequence of zero
or more fo:markers as its initial children.

To:
(marker*, (%block;)+) or (marker*, %block;+)

8.) fo:bidi-override, fo:basic-link, fo:inline: =================

Change from:
(#PCDATA|%inline;|%block;)*
In addition this formatting object may have a sequence of zero
or more fo:markers as its initial children.

To:
(marker*, (#PCDATA|%inline;|%block;)*)

Received on Monday, 28 June 2004 06:49:58 UTC