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.
|