Example: Constrain attributes for the section element

Darwin Information Typing Architecture (DITA) Version 1.3 Part 1: Base Edition

OASIS DITA Technical Committee

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 
                  base      CDATA #IMPLIED
                  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
               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.