| << Prev | - Up - | Next >> |
<!DOCTYPE BOOK SYSTEM "ozdoc.dtd" [
<!-- entity declarations -->
]>
<BOOK>
<FRONT>
<TITLE>...</TITLE>
<AUTHOR>...</AUTHOR>
<AUTHOR>...</AUTHOR>
<META name=comic content="foo.ps">
<ABSTRACT>...</ABSTRACT>
<BODY>
<CHAPTER><TITLE>...</TITLE>
...
<PART> <TITLE>...</TITLE>
<CHAPTER><TITLE>...</TITLE>
...
<CHAPTER><TITLE>...</TITLE>
...
<PART> <TITLE>...</TITLE>
<CHAPTER><TITLE>...</TITLE>
...
<CHAPTER><TITLE>...</TITLE>
...
<BACK>
<BIB.EXTERN ...>
...
</BOOK>
entities are a bit like macros. You can add entity declarations where it says <!-- entity declarations --> above. For example:
<!ENTITY quux "Guy L. Steele JR."> would allow you to type &quux; in your document, and that would automatically be replaced by ``Guy L. Steele JR''.
Another application of entities is to denote files to be included:
<!ENTITY section1 SYSTEM "section1-draft.sgml"> would allow you to type §ion1; in your document, and that would be replaced by the contents of file section1-draft.sgml.
Sometimes it is useful to introduce entities that do not expand to text, but should instead be interpreted by the processing system. This is what a processing instruction is for.
<!ENTITY nbsp PI "NON-BREAKING-SPACE"> an occurrence of in your document will result in an occurrence of the processing instruction object identified as NON-BREAKING-SPACE. What to do with it is up to the processing system. For example, the LaTeX converter might replace it by ~ and the HTML converter by the HTML entity (surprise, surprise!).
I recommend that processing instructions be given names that begin with the prefix PI:, e. g.:
<!ENTITY nbsp PI "PI:NBSP">It is possible to conditionally include a part of the document:
<![ %HTML; [...]]> would include ... iff %HTML; is a (parameter) entity defined as INCLUDE, i.e. if there is an entity declaration of the form:
<!ENTITY % HTML "INCLUDE">Normally, the ``entity declarations'' section of your document would contain:
<!ENTITY % LATEX "IGNORE">
<!ENTITY % HTML "IGNORE"> Thus causing marked sections marked with %LATEX; and %HTML; to be ignored by default. This is normally overriden on the command line, when invoking the SGML parser, nsgmls:
nsgmls -iHTML ...this causes the declaration
<!ENTITY % LATEX "INCLUDE"> to override the one in your document. Don't abuse marked sections. A typical use is, in the DOCTYPE header of your document, to select which entity declarations you want to use according to the target format for processing.
<!DOCTYPE BOOK SYSTEM "ozdoc.dtd" [
<!ENTITY % HTML "IGNORE">
<!ENTITY % LATEX "IGNORE">
<![ %HTML; [
<!ENTITY target.format "HTML">
]]>
<![ %LATEX; [
<!ENTITY target.format "\LaTeX{}">
]]>
]> This would allow you to type &target.format; in your document and have it expand to either HTML or \LaTeX{} according to the target format select on nsgmls's command-line.
| << Prev | - Up - | Next >> |