Section 15.6. Conditional Sections

As we mentioned earlier in this chapter, XML lets you include or ignore whole sections of your DTD, so you can tailor the language for alternative uses. The HTML DTD, for instance, defines transitional, strict, and frame-based versions of the language. DTD authors can select the portions of the DTD they plan to include or ignore by using XML conditional directives:

<![INCLUDE [

   ...any XML content...

]]>

or:

<![IGNORE [

   ...any XML content...

]]>

The XML processor either includes or ignores the contents, respectively. Conditional sections may be nested, with the caveat that all sections contained within an ignored section are ignored, even if they are set to be included.

You rarely see a DTD with the INCLUDE and IGNORE keywords spelled out. Instead, you see parameter entities that document why the section is being included or ignored. Suppose you are creating a DTD to exchange construction plans among builders. Since you have an international customer base, you build a DTD that can handle both U.S. and metric units. You might define two parameter entities, thusly:

<!ENTITY % English "INCLUDE">

<!ENTITY % Metric "IGNORE">

You would then place all the English-specific declarations in a conditional section and isolate the metric declarations similarly:

<![%English [

   ...English stuff here...

]]>

<![%Metric [

   ...Metric stuff here...

]]>

To use the DTD for English construction jobs, define %English as INCLUDE and %Metric as IGNORE, which causes your DTD to use the English declarations. For metric construction, reverse the two settings, ignoring the English section and including the metric section.