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.
<section> element needs to import the base module
topicMod.rng. Within that import, it will constrain the
section.content
pattern:<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.
<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>
<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.@domains attribute for structural
constraint module@domains attribute as (topic task
strictTaskbody-c):<moduleDesc>
<!-- ... -->
<moduleMetadata>
<!-- ... -->
<domainsContribution>(topic task strictTaskbody-c)</domainsContribution>
</moduleMetadata>
</moduleDesc>@domains attribute for domain constraint
module<moduleDesc>
<!-- ... -->
<moduleMetadata>
<!-- ... -->
<domainsContribution>(topic task taskreq-d requiredReqcondsTaskreq-c)</domainsContribution>
</moduleMetadata>
</moduleDesc>