Chapter 12. Creating More Building Blocks Using Object-Oriented Features
We have already seen many features that have been borrowed from object-oriented languages. In this chapter, we will see substitution groups (similar to subclasses), abstract elements and datatypes (similar to abstract classes), and final datatypes (similar to final classes).
Substitution Groups
In
many cases, a
vocabulary needs the ability to accept a variety of different content
models. We have two options: we can try to do it using a single
generic element name, or we can define a schema smart enough to deal
with the possible content model. Since we cannot define multiple
different content models for the same element (because of the
Consistent Declaration Rule), we can either use
xsi:type
attributes in the instance documents, or
we can define a content model wide enough to accommodate all the
possibilities. Such a model would likely be wide enough to also
accept combinations that we do not want.
The easiest solution for accommodating different types with W3C XML
Schema is to use a different element name for each case. We already
saw that the
xs:choice(outside a group)
compositor allows us to build such constructs where a node in an instance document can accept an element chosen in a list. However, this list is fixed in the complex type definition. We have also seen that this list cannot be extended, since the rules for complex type derivations by extension do not allow it. Substitution groups offer a flexible ...
Get XML Schema now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.