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.