Whole document tree
    

Whole document tree

Sample Customization

Sample Customization

Example 1-4 shows the main customization layer for a sample variant of DocBook V2.3.

Example 1-4. Main Customization Layer for Sample DocBook Variant

<!-- ...................................................................... -->
<!-- Sample customization of DocBook ...................................... -->
<!-- ...................................................................... -->
<!-- Entity customizations ................................................ -->
<!-- Module activations ................................................... -->

<!ENTITY % dbpool.redecl.module "INCLUDE">

<!-- Module replacements .................................................. -->

<!ENTITY % book.module "IGNORE">
<!ENTITY % bookbiblio.module "IGNORE">
<!ENTITY % appendix.module "IGNORE">
<!ENTITY % chapter.module "IGNORE">
<!ENTITY % part.module "IGNORE">
<!ENTITY % preface.module "IGNORE">
<!ENTITY % sect1.module "IGNORE">
<!ENTITY % sect2.module "IGNORE">
<!ENTITY % sect3.module "IGNORE">
<!ENTITY % sect4.module "IGNORE">
<!ENTITY % sect5.module "IGNORE">
<!ENTITY % abstract.module "IGNORE">
<!ENTITY % figure.module "IGNORE">
<!ENTITY % informalequation.module "IGNORE">
<!ENTITY % inlineequation.module "IGNORE">
<!ENTITY % table.module "IGNORE">
<!ENTITY % informaltable.module "IGNORE">
<!ENTITY % xref.module "IGNORE">

<!-- Module removals ...................................................... -->

<!-- elm Many more could be removed, if desired.  Unless the presence
     of a removed element caused problems (as in the case of Equation,
     which contained InformalEquation, another removed element),
     only replaced modules were ignored. Some style sheets might have to 
     be stripped of some specifications for removed elements in order to 
     avoid warnings and errors. -->

<!ENTITY % equation.module "IGNORE">

<!-- Class customizations ................................................. -->

<!-- Remove FootnoteRef; add XRefnotitle -->
<!ENTITY % xref.char.class "XRef | XRefnotitle">

<!-- Remove Citation, Citetitle, CiteRefEntry, FirstTerm, Footnote, 
     Markup, SGMLTag -->
<!ENTITY % word.char.class "Abbrev | Acronym | Emphasis | ForeignPhrase
		| GlossTerm | Quote | Trademark | WordAsWord">

<!-- Remove Action, Classname, KeyCode, Optional, Property, StructField,
     StructName, Symbol, Token, Type; add CompoundKey, MenuTree,
     MouseAction -->
<!ENTITY % cptr.char.class "Application | Command | CompoundKey 
		| ComputerOutput | Filename | Function | Interface
		| KeyCap | KeySym | Literal |MenuTree | MouseAction
		| Parameter | Replaceable | SystemItem | UserInput">

<!-- Remove FormalPara, SimPara (which is more restrictive and should not
     be allowed everywhere) -->
<!ENTITY % para.class "Para">

<!-- Remove ScreenShot -->
<!ENTITY % linespecific.class "LiteralLayout | ProgramListing | Screen">

<!-- Remove BridgeHead, Comment, Highlights (the latter should not 
     generally be found throughout the document) -->
<!ENTITY % genobj.class "Anchor">

<!-- Remove Abstract and AuthorBlurb (which should not generally be
     found throughout the document) and Epigraph; see mixture 
     redeclaration module. -->

<!-- Remove synopses; see mixture redeclaration module. -->

<!-- Remove MsgSet, Sidebar -->
<!ENTITY % compound.class "Procedure">

<!-- Rename Table to FormalTable; remove Equation -->
<!ENTITY % formal.class "Example | Figure | FormalTable">

<!-- Rename InformalEquation to EquationDisplayed -->
<!ENTITY % informal.class "BlockQuote | EquationDisplayed | InformalExample
		| InformalTable | Graphic">

<!-- Rename InlineEquation to Equation Inline; add EquationSimpleInline -->
<!-- elm Still want synop.class in here? -->
<!ENTITY % inlineobj.char.class "InlineGraphic | EquationInline
		|EquationSimpleInline">

<!-- Add special terms -->
<!ENTITY % specialinteractiveterms.class "SpecialModule | SpecialTool">
<!ENTITY % specialbatchterms.class "SpecialKeyword | SpecialParameter 
		| SpecialParamValue">
<!ENTITY % local.inline.char.class "| %specialinteractiveterms.class; 
		| %specialbatchterms.class;">

<!-- Attribute customizations ............................................. -->

<!-- Remove all but ID -->
<!ENTITY % common.attrib
		"id		ID		#IMPLIED">

<!-- Restrict to just two token values; set default explicitly. -->
<!ENTITY % mark.attrib
		"Mark		(Bullet|Dash)	Bullet">

<!ENTITY % onlinedisplay.attrib
		"OnlineDisplay	(hide|reveal)	reveal">

<!-- Add ArborText formatting attributes.
     Add online and print filenames.
     Remove Notation and Entityref attributes. -->
<!ENTITY % graphic.attrib
	"Fileref-print	CDATA		#REQUIRED
	Fileref-online	CDATA		#REQUIRED
	%onlinedisplay.attrib;
	SrcCredit	CDATA		#IMPLIED
	processor	CDATA		#REQUIRED
	magnification	NUMBER		#IMPLIED
	horzoffsetamt	CDATA		#IMPLIED
	horzoffsetpct	CDATA		#IMPLIED
	vertoffsetamt	CDATA		#IMPLIED
	vertoffsetpct	CDATA		#IMPLIED
	cropheight	CDATA		#IMPLIED
	cropwidth	CDATA		#IMPLIED
	cropllxcoord	CDATA		#IMPLIED
	cropllycoord	CDATA		#IMPLIED
	scalefit	NUMBER		#IMPLIED
	scalefitheight	CDATA		#IMPLIED
	scalefitwidth	CDATA		#IMPLIED"
>

<!-- Content model customizations ......................................... -->

<!-- Remove DocInfo -->
<!ENTITY % bookcomponent.title.content "Title, TitleAbbrev?">

<!-- Customizations with tricky positioning ............................... -->

<!-- See the file rdbpool.mod. -->

<!-- ...................................................................... -->
<!-- Original DTD ......................................................... -->

<!ENTITY % orig-docbook PUBLIC "-//Davenport//DTD DocBook V2.3//EN">
%orig-docbook;

<!-- ...................................................................... -->
<!-- New/replaced markup .................................................. -->

<!-- Book ................................................................. -->
<!--   Remove Title. Depend on the Title in BookBiblio.
       Make BookInfo, ToC mandatory.
       Remove LoT.
       Require exactly one Preface.
       Remove Reference. (Put this back if we ever want man pages.)
       Remove Article. -->

<!ELEMENT Book - - (BookInfo, ToC, Preface, Part+, (%appendix.class;)*, 
		Glossary?, Bibliography?, (%index.class;)*) +(%ubiq.mix;)>
<!ATTLIST Book
	%common.attrib;
	FPI		CDATA		#IMPLIED
	%label.attrib;
>

<!-- BookBiblio ........................................................... -->
<!--   Make Title and TitleAbbrev required.
       Make AuthorGroup optional. -->

<!ELEMENT BookBiblio - - (Title, TitleAbbrev, Subtitle?, Edition?,
		AuthorGroup?, ((ISBN, VolumeNum?) | (ISSN, VolumeNum?,
		IssueNum?, PageNums?))?, InvPartNumber?, ProductNumber?,
		ProductName?, PubsNumber?, ReleaseInfo?, PubDate*, Publisher*,
		Copyright?, SeriesInfo?, Abstract*, ConfGroup*, (ContractNum |
		ContractSponsor)*, PrintHistory?, RevHistory?) -(%ubiq.mix;)>
<!ATTLIST BookBiblio %common.attrib;>

<!-- Appendix ............................................................. -->
<!--   Remove DocInfo, TitleAbbrev; add Abstract, Highlights -->

<!ELEMENT Appendix - - (Title, Abstract, Highlights?, (%sect1.content;)) 
		+(%ubiq.mix;)>
<!ATTLIST Appendix
	%common.attrib;
	%label.attrib;
>

<!-- Chapter .............................................................. -->
<!--   Remove DocInfo, Index, Glossary, Bibliography.
       Replace sect1.content with more specific markup, i.e.
       Abstract, Highlights?, Sect1+. -->

<!ELEMENT Chapter - - ((%bookcomponent.title.content;), Abstract?, 
		Highlights?, Sect1+) +(%ubiq.mix;)>

<!-- Part ................................................................. -->
<!--   Remove DocInfo, make PartIntro mandatory.
       Use chapter.class instead of partcontent.mix as content model.
       Add SpecialKeySection as alternative to chapter. -->

<!ELEMENT Part - - ((%bookcomponent.title.content;), PartIntro, 
		((%chapter.class)+ | SpecialKeySection+)) +(%ubiq.mix;)>
<!ATTLIST Part
	%common.attrib;
	%label.attrib;
>

<!-- Preface .............................................................. -->
<!--   Remove DocInfo, TitleAbbrev -->

<!ELEMENT Preface - - (Title, (%sect1.content;)) +(%ubiq.mix;)>
<!ATTLIST Preface %common.attrib;>

<!-- Sect1 through Sect5 .................................................. -->
<!--   Remove nav.class.
       Remove all RefEntries (put back if we ever need man pages).
       Add HelpTopic with and without "see also" references. -->
<!-- elm Did you mean to override RefEntries in the real sect1.class
     too (which gets used in Preface)? -->

<!ENTITY % helptopic.content 
		"HelpTopicWithRefs | 
			( (HelpTopicNoRefs, (%divcomponent.mix;)+) 
			| ((%bookcomponent.title.content;), 
				(Abstract | (%divcomponent.mix;)+)))">

<!ELEMENT Sect1 - - ((%helptopic.content;), Sect2*) +(%ubiq.mix;)>
<!ATTLIST Sect1
	%common.attrib;
	%label.attrib;
	Renderas	(Sect2
			|Sect3
			|Sect4
			|Sect5)		#IMPLIED
>

<!ELEMENT Sect2 - - ((%helptopic.content;), Sect3*) +(%ubiq.mix;)>
<!ATTLIST Sect2
	%common.attrib;
	%label.attrib;
	Renderas	(Sect1
			|Sect3
			|Sect4
			|Sect5)		#IMPLIED
>

<!ELEMENT Sect3 - - ((%helptopic.content;), Sect4*) +(%ubiq.mix;)>
<!ATTLIST Sect3
	%common.attrib;
	%label.attrib;
	Renderas	(Sect1
			|Sect2
			|Sect4
			|Sect5)		#IMPLIED
>

<!ELEMENT Sect4 - - ((%helptopic.content;), Sect5*) +(%ubiq.mix;)>
<!ATTLIST Sect4
	%common.attrib;
	%label.attrib;
	Renderas	(Sect1
			|Sect2
			|Sect3
			|Sect5)		#IMPLIED
>

<!ELEMENT Sect5 - - ((%helptopic.content;))>
<!ATTLIST Sect5
	%common.attrib;
	%label.attrib;
	Renderas	(Sect1
			|Sect2
			|Sect3
			|Sect4)		#IMPLIED
>

<!-- HelpTopics ........................................................... -->

<!ELEMENT HelpTopicWithRefs - - ((%bookcomponent.title.content;), HelpText,
		SeeAlsoSections)>
<!ATTLIST HelptopicWithRefs %idreq.attrib;>

<!ELEMENT HelpTopicNoRefs - - ((%bookcomponent.title.content;), HelpText)>
<!ATTLIST HelptopicNoRefs %idreq.attrib;>

<!ELEMENT HelpText - - ((%divcomponent.mix;)+)>
<!ATTLIST HelpText %common.attrib;>

<!ELEMENT SeeAlsoSections - - (ItemizedList)+>
<!ATTLIST SeeAlsoSections %common.attrib;>

<!-- Abstract ............................................................. -->
<!--   Remove Title. -->

<!ELEMENT Abstract - - (%para.class;)+>
<!ATTLIST Abstract %common.attrib;>

<!-- Figure ............................................................... -->
<!--   Remove TitleAbbrev.
       Only allow for a single graphical object within a Figure. -->

<!ELEMENT Figure - - (Title, (%figure.mix; | %link.char.class;))>
<!ATTLIST Figure
	%common.attrib;
	Float		%yesorno.attvals;	%no.attval;
	%label.attrib;
>

<!-- Equations ............................................................ -->
<!--   Remove the concept of formal and informal equations.
       Rename InformalEquation to EquationDisplayed.
       Rename InlineEquation to EquationInline.
       Use ArborText equation elements.
       Add EquationSimpleInline. -->

<!ELEMENT EquationDisplayed - - (fd)>
<!ATTLIST EquationDisplayed %common.attrib;>

<!ELEMENT EquationInline - - (f)>
<!ATTLIST EquationInline %common.attrib;>

<!ELEMENT EquationSimpleInline - - (Base, (Superscript | Subscript)?)>
<!ATTLIST EquationSimpleInline %common.attrib;>
<!ELEMENT Base - - (#PCDATA)>
<!ATTLIST Base %common.attrib;>

<!ENTITY % atimath PUBLIC "-//ArborText//ELEMENTS Math Equation Structures//EN">
%atimath;

<!-- Tables ............................................................... -->
<!--   Rename Table to FormalTable.
       Use ArborText tables instead of CALS tables.
       Restrict Entry content. -->

<!ENTITY % tblcon "%para.class;">

<!ELEMENT FormalTable - - ((%formalobject.title.content;), Table)
		-(FormalTable|InformalTable)>
<!ATTLIST FormalTable
	%common.attrib;
	%onlinedisplay.attrib;
>

<!ELEMENT InformalTable - - (Table) -(FormalTable|InformalTable)>
<!ATTLIST InformalTable
	%common.attrib;
	%onlinedisplay.attrib;
>

<!ENTITY % atitable PUBLIC "-//ArborText//ELEMENTS Table Structures//EN">
%atitable;

<!-- XRefs ................................................................ -->
<!--   Added Title attribute so that title can be display automatically
       in some cases. -->
<!-- elm Why XRefnotitle? Does Title attrib make sense on it? -->

<!ELEMENT XRef - O EMPTY>
<!ATTLIST XRef
	%common.attrib;
	Endterm		IDREF			#IMPLIED
	Linkend		IDREF			#REQUIRED
	Title		(Display|NoDisplay)	NoDisplay
>

<!ELEMENT XRefnotitle - O EMPTY>
<!ATTLIST XRefnotitle
	%common.attrib;
	Endterm		IDREF			#IMPLIED
	Linkend		IDREF			#REQUIRED
	Title		(Display|NoDisplay)	NoDisplay
>

<!-- MouseAction, CompoundKey, MenuTree ................................... -->
<!--   Tagging examples:
       <CompoundKey> <KeySym>Meta</> <KeyCap>x</> </>
       <CompoundKey> <KeySym>Ctrl</> <MouseAction>Click</> </> or
       <MouseAction>Double-click</> 
       <MouseAction>Drag</> -->

<!ELEMENT MouseAction - - (#PCDATA)>
<!ATTLIST MouseAction %common.attrib;>

<!ELEMENT CompoundKey - - (KeySym, (MouseAction | KeyCap | KeySym))>
<!ATTLIST CompoundKey %common.attrib;>

<!--   Tagging example:
       <menutree><interface class=Menu>File</>
                 <interface class=MenuItem>Save</> </> -->

<!ELEMENT MenuTree - - (Interface, Interface+)>
<!ATTLIST MenuTree %common.attrib;>

<!-- Special elements ..................................................... -->

<!-- Note: This portion of the DTD could be greatly simplified if there
     were a way to count how many parameters there are. Certainly this could 
     be done as a postprocessing exercise, and the author could leave such 
     information blank (except for CustomText). -->

<!ELEMENT SpecialKeySection - - (KeySectionTitle, Para*, SeeUsageSections,
		SeeAlsoSections?, ParamsRequired?, ParamsCustom*,
		(ParamsOptional, ParamsCustom*)?, (DataDesc)*) +(%ubiq.mix;)>
<!ATTLIST SpecialKeySection
            %common.attrib;
	    fileref		CDATA	#REQUIRED
>

<!ELEMENT KeySectionTitle - - (SpecialKeyword, KeywordDef)>
<!ATTLIST KeySectionTitle
            %common.attrib;
>

<!ELEMENT KeywordDef - - ((%para.char.mix;)+)>
<!ATTLIST KeywordDef
            %common.attrib;
>

<!ELEMENT SeeUsageSections - - (ItemizedList)+>
<!ATTLIST SeeUsageSections
                %common.attrib;
>

<!-- Parameters
       ParamsRequired and ParamsOptional could have been combined into
       just Params, with an attribute like usage=required|optional.
       However, it is likely that most people would forget to set
       the attribute, or be confused by it, so it seemed reasonable
       to have two different wrapper elements. Furthermore, the order
       is important; required parameters should come first.
-->

<!-- ParamsRequired
       Attribute HowManyRequiredParams allows automatic generation
       of the text "The following parameter(s) is/are required",
       or allows the author to override with custom text if necessary. -->
<!ELEMENT ParamsRequired - - (SimPara?, ParamList)>
<!ATTLIST ParamsRequired
            %common.attrib;
            HowManyRequiredParams   (1|MoreThanOne|CustomText)  MoreThanOne
>

<!-- ParamsOptional
       Attribute HowManyOptionalParams allows automatic generation
       of the text "The following parameter(s) is/are optional",
       or allows the author to override with custom text if necessary.-->
<!ELEMENT ParamsOptional - - (SimPara?, ParamList)>
<!ATTLIST ParamsOptional
            %common.attrib;
            HowManyOptionalParams   (1|MoreThanOne|CustomText)  MoreThanOne
>

<!ELEMENT ParamsCustom - - (Title, SimPara?, ParamList)>
<!ATTLIST ParamsCustom %common.attrib;>

<!ELEMENT ParamList - - (ParamListEntry+) >
<!ATTLIST ParamList %common.attrib;>

<!ELEMENT ParamListEntry - - (SpecialParameter, ListItem) >
<!ATTLIST ParamListEntry %common.attrib;>

<!ELEMENT DataDesc - - (Title, DataLine+)>
<!ATTLIST DataDesc %common.attrib;>

<!ELEMENT DataLine - - (SimPara?, EntryList, (SimPara, EntryList)*,
                       RepeatInstruction?, Para*) >
<!ATTLIST DataLine %common.attrib;>

<!ELEMENT EntryList - - (Entry+)>
<!ATTLIST EntryList %common.attrib;>

<!ELEMENT Entry - - (Para+)>
<!ATTLIST Entry
           %common.attrib;
           Format           (Alpha|Float|Integer)    Float
>

<!ELEMENT RepeatInstruction - - (SimPara)>
<!ATTLIST RepeatInstruction %common.attrib;>

<!ELEMENT (%specialinteractiveterms.class;|%specialbatchterms.class;) - -
		(#PCDATA)>
<!ATTLIST (%specialinteractiveterms.class;|%specialbatchterms.class;)
	%common.attrib;>

<!-- End of sample customization of DocBook ............................... -->
<!-- ...................................................................... -->

Example 1-5 shows the redeclaration module for this sample variant.

Example 1-5. rdbpool.mod Redeclaration Module for Sample DocBook Variant

<!-- ...................................................................... -->
<!-- Sample customizations that reference existing entities ............... -->
<!-- ...................................................................... -->

<!-- Remove BeginPage -->
<!ENTITY % ubiq.mix "%ndxterm.class;">

<!-- ...................................................................... -->

<!-- Restrict to just computer terms -->
<!ENTITY % screen.content "LineAnnotation | %cptr.char.class;">

<!-- ...................................................................... -->

<!-- Remove all synopses and descriptive objects from all block-level 
     mixtures. -->

<!ENTITY % local.divcomponent.mix "">
<!ENTITY % divcomponent.mix
		"%list.class;		|%admon.class;
		|%linespecific.class;
		|%para.class;		|%informal.class;
		|%formal.class;		|%compound.class;
		|%genobj.class;
		%local.divcomponent.mix;">

<!ENTITY % local.refcomponent.mix "">
<!ENTITY % refcomponent.mix
		"%list.class;		|%admon.class;
		|%linespecific.class;
		|%para.class;		|%informal.class;
		|%formal.class;		|%compound.class;
		|%genobj.class;
		%local.refcomponent.mix;">

<!ENTITY % local.indexdivcomponent.mix "">
<!ENTITY % indexdivcomponent.mix
		"ItemizedList|OrderedList|VariableList
		|%linespecific.class;
		|%para.class;		|%informal.class;
		|Anchor
		|%link.char.class;
		%local.indexdivcomponent.mix;">


<!ENTITY % local.component.mix "">
<!ENTITY % component.mix
		"%list.class;		|%admon.class;
		|%linespecific.class;
		|%para.class;		|%informal.class;
		|%formal.class;		|%compound.class;
		|%genobj.class;
		%local.component.mix;">

<!ENTITY % local.sidebar.mix "">
<!ENTITY % sidebar.mix
		"%list.class;		|%admon.class;
		|%linespecific.class;
		|%para.class;		|%informal.class;
		|%formal.class;		|Procedure
		|%genobj.class;
		%local.sidebar.mix;">

<!ENTITY % local.footnote.mix "">
<!ENTITY % footnote.mix
		"%list.class;
		|%linespecific.class;
		|%para.class;		|%informal.class;
		%local.footnote.mix;">

<!ENTITY % local.example.mix "">
<!ENTITY % example.mix
		"%list.class;
		|%linespecific.class;
		|%para.class;		|%informal.class;
		%local.example.mix;">

<!ENTITY % local.admon.mix "">
<!ENTITY % admon.mix
		"%list.class;
		|%linespecific.class;
		|%para.class;		|%informal.class;
		|%formal.class;		|Procedure|Sidebar
		|Anchor|BridgeHead|Comment
		%local.admon.mix;">

<!ENTITY % local.figure.mix "">
<!ENTITY % figure.mix
		"%linespecific.class;
					|%informal.class;
		%local.figure.mix;">

<!ENTITY % local.glossdef.mix "">
<!ENTITY % glossdef.mix
		"%list.class;
		|%linespecific.class;
		|%para.class;		|%informal.class;
		|Comment
		%local.glossdef.mix;">

<!-- End of sample customizations that reference existing entities ........ -->
<!-- ...................................................................... -->