Overview of constraints
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 @type attribute to "note" and "tip". It also can omit the @othertype attribute, since it is needed only when the value of the @type attribute 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>.
- 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.