Parameter entities are the major mechanism for customizing a tag set or creating a new tag set from the modules in the Suite. Individual Tag Sets will be constructed by 1) establishing element and attribute combinations and content models using parameter entities in one of the Tag-Set-specific customizing modules and 2) choosing appropriate modules from the Suite that declare the elements needed. For example, if the base Tag Set contained 6 kinds of lists and 2 table models, a more specific Tag Set, such as an authoring Tag Set, might use a Customize Classes Module to redefine the List Class to name only 3 lists and redefine the Display Class to allow only one table model.
The standard modules to create a customized tag set are: the DTD itself, a module to name its components, and as many override modules and new elements modules as necessary. Typical modules for a new Tag Set are:
Many of the elements in the Journal Archiving Tag Set have been grouped into loose element classes. There is no hard and fast rule for what constitutes a class; each one is a design decision, a matter of judgment. These classes are designed to ease customization to meet the particular needs of new Tag Sets. Base classes for the Suite are defined in a separate Default Element Classes Module (%default-classes.ent;).
Content models are built using sequences of elements, and OR groups that are classes (typically) or mixes. As an example, the content model for a Paragraph element is declared to be an OR group (that is, a choice) of text, numbers, or special characters and any of the elements named in the Paragraph Elements mix. The mix %p-elements; is declared to be a large OR group of many other element-defining classes: the Block Display Class Elements, the Mathematical Expressions Class Elements, the List Class Elements, the Citation Class Elements, et al.
These element classes can be viewed as building blocks that will be used to build larger parameter entities for element mixes. (Note: A mix describes a usage circumstance for a group of elements, such as all the paragraph-level elements, all the elements allowed inside a table cell, all the elements inside a paragraph, or all the inline elements). For example, to add another block display item to the Block Display Class Elements, you would edit the %block-display.class; parameter entity in the Tag-Set-specific Archive Class override Module to override the default parameter entity in the Suite’s Default Element Classes Module module and create a new module containing the Element Declaration of the new block display item.
PARAMETER ENTITY: SAME FUNCTION, SAME NAME — The Suite modules and initial Tag Sets have used a series of parameter entity naming conventions consistently. While parsing software cannot enforce these parameter entity naming or usage conventions, these conventions can make it much easier for a person to know how the content models work and what must be modified to make a change to this Tag Set.
CLASSES — Classes are functional groupings of elements used together in an OR group. Each class is named with a parameter entity, and all class parameter entity names end in the suffix “.class”:
<!ENTITY % list.class "def-list | list">
A class, by definition, should never be made empty; the class should be removed from all models where you do not want the class elements included.
MIXES — Mixes are functional OR groups of classes; mixes should never contain element names directly. All mixes must be declared after all classes, since mixes are composed of classes. Mix names have no set suffix; for example, they may end in “-mix” or “-elements”. Content models and content model overrides use mixes and classes for all OR groups. Only content model sequences are made up of element names directly.
MODEL OVERRIDES — parameter entity mixes for overriding a content model are of two styles: 1) inline mixes and 2) full content model replacements. These two groupings have been defined and named separately to preserve the mixed-content or element- content nature of the models in Tag Sets derived from the Suite.
The inline parameter entities to be intermingled with character data (#PCDATA) in a mixed content model are named with a suffix “-elements”. For example, “%access-date-elements;” would be used in the content model for the element <access-date>:
<!ENTITY % access-date-elements "| %date-parts.class; | %x.class;" > <!ELEMENT access-date (#PCDATA %access-date-elements;)* >
All inline mixes begin with an OR bar, so that the mix can be removed leaving just character data (#PCDATA):
<!ENTITY % rendition-plus "| %all-phrase;" >
The override of a complete content model will be named with a suffix “-model” and should include the entire content model, including the enclosing parentheses:
<!ENTITY % kwd-group-model "(title?, (%kwd.class; | %x.class;)+ )" > <!ELEMENT kwd-group %kwd-group-model; >
The basic idea for a new Tag Set is that all lower-level elements (paragraphs, lists, figures, etc.) will be defined in modules — either the modules of the base Suite or in new Tag-Set-specific modules rather than in the DTD itself. The new DTD will be fairly short and include only definitions of the topmost elements, at least the document element and maybe its children.
Modules are defined (declared) using external parameter entities in the Suite’s Module to Name the Modules or in the Tag-Set-specific Module of Modules. Modules are referenced in the DTD proper, in the order needed to define the parameter entities in sequence.
This Journal Archiving Tag Set was written as an example of the new best-practice customization technique. A new variant tag set, written as a DTD that follows this plan, will probably consist of the following modules:
To show the process, here is a series of instructions for making a new tag set as a DTD, illustrated by showing how the Journal Archiving Tag Set was created from the modules of the whole Suite.