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.
- He creates a .mod file named
idRequiredSectionContraint.mod
, where "idRequired" is a string that characterizes the constraint. - 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. - He then integrates the constraint module into the applicable document-type shells
and
adds it to his
catalog.xml
file.