Overview of constraints
Constraint modules enable information architects to restrict the content models or attributes of DITA elements. A constraint is a simplification of an XML grammar such that any instance that conforms to the constrained grammar also will conform to the original grammar.
A constraint module can perform the following functions:
- Restrict the content model for an element
- Constraint modules can modify content models by removing optional elements, making optional
     elements required, or requiring unordered elements to occur in a specific sequence. Constraint
     modules cannot make required elements optional or change the order of element occurrence for
     ordered elements.For example, a constraint for <topic>can require<shortdesc>, can remove<abstract>, and can require that the first child of<body>be<p>. A constraint cannot allow<shortdesc>to follow<prolog>, because the content model for<topic>requires that<shortdesc>precedes<prolog>.
- Restrict the attributes that are available on an element
- 
     Constraint modules can restrict the attributes that are available on an element. They also can limit the set of permissible values for an attribute. For example, a constraint for <note>can limit the set of allowed values for the@typeattribute to "note" and "tip". It also can omit the@othertypeattribute, since it is needed only when the value of the@typeattribute is "other".
- Restrict the elements that are available in a domain
- 
     Constraint modules can restrict the set of extension elements that are provided in a domain. They also can restrict the content models for the extension elements. For example, a constraint on the programming domain can reduce the list of included extension elements to <codeph>and<codeblock>.Note (non-normative):For DITA implementations that use RNG-based grammar files, restricting the set of extension elements that are provided in a domain can be handled simply by document-type configuration.
- Replace base elements with domain extensions
- Constraint modules can replace base element types with the domain-provided extension
      elements.For example, a constraint module can replace the <ph>element with the domain-provided elements, making<ph>unavailable.