Example: Constrain attributes for the section element
In this scenario, an information architect wants to redefine the attributes for the section element. He wants to make the id attribute required and omit the spectitle attribute.
1. He creates a .mod file named idRequiredSectionContraint.mod, where "idRequired" is a string that characterizes the constraint.
2. He adds the following content to idRequiredSectionContraint.mod:
<!-- ============================================================= -->
<!-- CONSTRAINED TOPIC ENTITIES -->
<!-- ============================================================= -->
<!ENTITY section-constraints
"(topic idRequired-section-c)"
>
<!-- Declares the entities referenced in the constrained content -->
<!-- model. -->
<!ENTITY % conref-atts
'conref CDATA #IMPLIED
conrefend CDATA #IMPLIED
conaction (mark|pushafter|pushbefore|pushreplace|-dita-use-conref-target) #IMPLIED
conkeyref CDATA #IMPLIED' >
<!ENTITY % filter-atts
'props CDATA #IMPLIED
platform CDATA #IMPLIED
product CDATA #IMPLIED
audience CDATA #IMPLIED
otherprops CDATA #IMPLIED
%props-attribute-extensions;' >
<!ENTITY % select-atts
'%filter-atts;
base CDATA #IMPLIED
%base-attribute-extensions;
importance (default|deprecated|high|low|normal|obsolete|optional|
recommended|required|urgent|-dita-use-conref-target) #IMPLIED
rev CDATA #IMPLIED
status (changed|deleted|unchanged|-dita-use-conref-target) #IMPLIED' >
<!ENTITY % localization-atts
'translate (no|yes|-dita-use-conref-target) #IMPLIED
xml:lang CDATA #IMPLIED
dir (lro|ltr|rlo|rtl|-dita-use-conref-target) #IMPLIED' >
<!-- Declares the constrained content model. Original definition -->
<!-- included %univ-atts;, spectitle, and outputclass; now includes-->
<!-- individual pieces of univ-atts, to make ID required. -->
<!ENTITY % section.attributes
"id CDATA #REQUIRED
%conref-atts;
%select-atts;
%localization-atts;
outputclass CDATA #IMPLIED">
Note: The information architect had to declare all the parameter entities that are referenced in the redefined attributes for section. If he did not do so, none of the attributes that are declared in the conref-atts, select-atts, or localization-atts parameter entities would be available on the section element. Furthermore, since the select-atts parameter entity references the filter-atts parameter entity, the filter-atts must be declared and it must precede the declaration for the select-atts parameter entity. The props-attribute-extensions and base-attribute-extensions parameter entities do not need to be declared in the constraint module, because they are declared in the document-type shells before the inclusion of the constraint module.
3. He then integrates the constraint module into the applicable document-type shells and adds it to his catalog.xml file.
Parent topic