DITA addresses this lack of manageability by providing features that make vocabularies manageable while avoiding the inherent problems of monolithic interchange document types.
DITA essentially turns the problem on its head. Rather than having invariant monolithic document types, it provides invariant vocabulary "modules" that can be combined together to form an infinite variety of specific document types and that can themselves be extended, in a controlled fashion, to create new vocabulary modules.
Likewise, vocabulary modules can be locally configured through "constraint" modules, which enable the customization of content models and attribute lists but only in ways that guarantee interchangeability and processability.
DITA defines a markup-based declaration mechanism that makes the nature of any configuration or extension machine-understandable. That is, a processor, looking at any conforming DITA document, can know exactly what vocabulary modules it uses and, if constraints have been applied, what those constraints are. For any given DITA element, a processor can know what standard-defined DITA elements it is based on, and thus how to apply at least some minimal DITA-defined processing to those elements.
These declaration mechanisms are the @class
and @domains
attributes. These attributes are the "magic" of DITA that make everything work. These attributes, along with some essential rules for vocabulary composition, make it possible for any general-purpose DITA processor to reliably process any DITA document no matter how it has been configured or extended. Likewise, a human observer of the document can know how its markup relates to other DITA markup and can look at any given DITA vocabulary module and know how it relates to other modules.
Thus you can think of DITA as an unbounded set of vocabulary modules and a set of tools for combining those modules into specific document types suited to specific requirements.