Element generalization

Elements are generalized by examining the @class attribute. When a generalization process detects that an element belongs to one of the modules that is being generalized, the element is renamed to a more general form.

For example, the <step> element has a @class attribute value of "- topic/li task/step ". If the task module is being generalized, the <step> element is renamed to its more general form from the topic module: <li>.

For specific concerns when generalizing structural types with dependencies on non-ancestor modules, see Generalization with cross-specialization dependencies.

While the tag name of a given element is normally the same as the type name of the last token in the @class value, this is not required. For example, if a generalization process has already run on the element, the @class attribute could contain tokens from two or more modules based on the original specialization. In that case, the element name could already match the first token or an intermediate token in the @class attribute. A second generalization process could end up renaming the element again or could leave it alone, depending on the target module or document type.

Generalization and conref

To determine compatibility between a document instance and a target document type when resolving a conref reference, a generalization processor can use the @domains and @class attributes for the document instance and the @domains attribute for the target document type to determine how to rename elements in the resolved instance. For each element type, a generalization processor:

  • Iterates over the @class attribute from specific to general, inspecting the vocabulary modules.
  • Identifies the first vocabulary module that is both present in each document type, with a compatible set of constraints for that vocabulary module. If such a module is not found, the instance can only be generalized to a less constrained document type.

Was this helpful?