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