A structural constraint module defines the constraints for a map or topic element type. A domain constraint module defines the constraints for an element or attribute domain.
All vocabulary and constraint modules must document their domains attribute contribution. The value of the contribution is constructed according to the rules found in domains attribute rules and syntax. The OASIS grammar files use a domainsContribution element to document the contribution; this element is used to help enable generation of DTD and XSD grammar files. An XML comment or a:documentation element can also be used.
Constraint modules are implemented by importing the constraint module into a document type shell in place of the module that the constraint modifies. The constraint module itself imports the base module to be constrained; within the import, the module redefines patterns as needed to implement the constraint.
<include href="topicMod.rng"> <define name="section.content"> <!-- Define constrained model here --> </define> </include>
For a more complete example, see strictTaskbodyConstraintMod.rng, delivered with the DITA 1.3 grammar files.
- The constraints can be combined into a single module. For
example, when combining separate constraints for section and
shortdesc, a single module can
be defined as
follows:
<include href="topicMod.rng"> <define name="section.content"> <!-- Constrained model for section --> </define> <define name="shortdesc.content"> <!-- Constrained model for shortdesc --> </define> </include>
- Constraints can be chained so that each constraint imports another, until the final constraint imports the base vocabulary module. For example, when combining separate constraints for section, shortdesc, and li from the base vocabulary, the section constraint can import the shortdesc constraint, which in turn imports the li constraint, which finally imports topicMod.rng.
Example: contribution to the domains attribute for structural constraint module
<moduleDesc> <!-- ... --> <moduleMetadata> <!-- ... --> <domainsContribution>(topic task strictTaskbody-c)</domainsContribution> </moduleMetadata> </moduleDesc>
Example: contribution to the domains attribute for domain constraint module
<moduleDesc> <!-- ... --> <moduleMetadata> <!-- ... --> <domainsContribution>(topic task taskreq-d requiredReqcondsTaskreq-c)</domainsContribution> </moduleMetadata> </moduleDesc>