Adding a structural (as opposed to information pool) element generally requires adding its name to a class and then providing the appropriate definitions. Example 5-13 extends DocBook by adding a Sect6 element.
Example 5-13. Adding a Sect6 Element
<!ENTITY % sect5.module "IGNORE"> <!ENTITY % DocBookDTD PUBLIC "-//OASIS//DTD DocBook V3.1//EN"> %DocBookDTD; <!-- Add Sect6 to content model of Sect5 --> <!ENTITY % sect5.role.attrib "%role.attrib;"> <!ELEMENT Sect5 - O (Sect5Info?, (%sect.title.content;), (%nav.class;)*, (((%divcomponent.mix;)+, ((%refentry.class;)* | Sect6* | SimpleSect*)) | (%refentry.class;)+ | Sect6+ | SimpleSect+), (%nav.class;)*)> <!ATTLIST Sect5 %label.attrib; %status.attrib; %common.attrib; %sect5.role.attrib; > <!ENTITY % sect6.role.attrib "%role.attrib;"> <!ELEMENT Sect6 - O (Sect6Info?, (%sect.title.content;), (%nav.class;)*, (((%divcomponent.mix;)+, ((%refentry.class;)* | SimpleSect*)) | (%refentry.class;)+ | SimpleSect+), (%nav.class;)*)> <!ATTLIST Sect6 %label.attrib; %status.attrib; %common.attrib; %sect6.role.attrib; > |
Here we've redefined Sect5 to include Sect6 and provided a declaration for Sect6. Note that we didn't bother to provide RenderAs attributes in our redefinitions. To properly support Sect6, you might want to redefine all of the sectioning elements so that Sect6 is a legal attribute value for RenderAs.