Overview of generalization
Specialized content can be generalized to any ancestor type. The generalization process can preserve information about the former level of specialization to allow round-tripping between specialized and unspecialized forms of the same content.
All DITA documents contain a mix of markup from at least one structural type and zero or more domains. When generalizing the document, any individual structural type or domain can be left as-is, or it can be generalized to any of its ancestors. If the document will be edited or processed in generalized form, it might be necessary to have a document-type shell that includes all non-generalized modules from the original document-type shell.
Generalization serves several purposes:
- It can be used to migrate content. For example, if a specialization is unsuccessful or is no longer needed, the content can be generalized back to a less specialized form.
- It can be used for temporary round-tripping. For example, if content is shared with a process that is not specialization aware, it can be temporarily generalized for that process and then returned to specialized form.
- It can allow reuse of specialized content in an enviroment that does not support the specialization. Similar to round-tripping, content can be generalized for sharing, without the need to re-specialize.
When generalizing for migration, the @class
attribute and
@domains
attribute should be absent from the generalized instance document, so
that the default values in the document-type shell are used. When generalizing for
round-tripping, the @class
attribute and @domains
attribute SHOULD retain the original specialized values in
the generalized instance document.
Note that when using constraints, a document instance can always be converted from a constrained
document type to an unconstrained document type merely by switching the binding of the document
instance to the less restricted document type shell (which would also have a different
@domains
attribute declaration). No renaming of elements is needed to remove
constraints.