Inheritance is about "getting stuff for free" (e.g. code, declarations,
fields). Subtyping is about *fulfilling a particular role* (perhaps through a
manual construction of an appropriate "interface" (in this case a content
model)). Architectural forms allow you to specify an interface that must be
fulfilled and declare conformance to that interface. It does not allow you to
"get code for free" (i.e. markup declarations).
When I inherit from my father, I get his money without doing any work. I get
to live in the same house he lived in without redoing everything he did to get
it (not that I've had this experience...yet ). But When I subclass from the
class "husband" I agree to do things like be faithful and caring and so forth.
They are very different things. I have to put forth effort to fulfill that
role.
--Paul Prescod on the XML-DEV mailing list