Glen Mazza wrote:
Provided the extension namespace isn't already
hardcoded into FOP (like the fox: one).


There shouldn't be extensions hardcoded into the FOP core, at least in the long term.

Errr, elements can't "validate themselves", because
the validity of an element is defined only by the
parent.

The extension writer decides the content model, and if an extension element is supposed to be child of a fo:block only, the corresponding Java object has to get its parent and verify its actually a fo:block.

 The recommendation declares, via the content
models, which children are valid for each parent, not
vice-versa.

True for elements from the FO namespace *only*.

 This logic is naturally (and much more
cleanly) stored with the parent in the OO world,
allowing Finn's block.java to have different child
nodes from FOP's block.java.

There is no "Finn's block.java" in the proper model of doing extensions. An extension writer should only write the extension. The FOP core must 1. Provide a discovery mechanism for the extension. The service file used for this purpose in the maintenance branch can be easily extended just by dropping the extension jar into the classpath. 2. A configuration mechanism for the extension both for default and user supplied values. We don't have this currently. 3. A hook for the extension element factory. Works nicely. 4. A hook for validating the extended content model. 5. Hooks for doing layout and rendering. Especially the API for the last will take some iterations, but this doesn't mean

Furthermore, such a child-level validation would
require the kid to be instantiated first.  vCN() stops
instantiation of the kid from ever occurring if it
would be invalid to begin with.

From the viewpoint of a FO element, any elements (and attributes) from other namespaces are valid and will be instantiated. Then the foreign children get a chance to validate themselves. Granted, visible foreign content should be exclusively used through instream-foreign-object, but this breaks down for extensions like Karen's extension elements shown before or after page breaks.

J.Pietschmann

Reply via email to