[
Lists Home |
Date Index |
Thread Index
]
I would say there are at least six alternatives:
1) Make alternative schemas in each locale, using <redefine> or
just copying and pasting. So you have many "standard" schemas for the
same namespace floating around the world.
2) Make a general schema and then use Schematron (perhaps
embedded in <appinfo> elements) for different additional
constraints. You could use Schematron's phase mechanism
to model the particular constraints applicable in each locale.
You could use the document() function to retrieve a list maintained
seperately from the schema giving parameters for the local
profile, perhaps from a well-known site.
3) Use a different schema language (i.e. RELAX NG) that
can change its content models depending on an attribute value.
(However, I note that if you have constraints where the
attribute is high up in the document and the variation is low
down, I think you will need to duplicate all the intermediate
declarations.)
4) Augment the schema language, such as with Francis'
<stage> element, then generate particular schemas through
a preprocessor. <ifdef>
5) Use different namespace for any elements that may
be unused in different locales. Then your basic schema
always holds. This does not model if some optional
elements are required elsewhere.
But why do you need to make a centralized decision?
If each locale localizes the schema as it sees fit, why
not delegate the decision on which technology fits to
them, or even allow them to use alternatives within
the same locale, depending on quality of the tools
and their levels of expertise for example?
Perhaps best practise is 6) to not force standardization
where none is needed. For example, you might
provide an open XSD schema with all alternatives
available, which can validate any locale's documents
to a certain extent, then give an example Schematron schema
for a sample profile, to demonstrate nice layering and
co-occurrence constraint checking. But then tell members that
they are free to just take your XSD schema and
hack that to taste, either using just an editor
or <redefine>.
Cheers
Rick Jelliffe
|