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>