The DSSSL document architecture is defined by the following meta-DTD.
<!-- DSSSL Document Architecture -->
<!ENTITY % declarations
"features | baseset-encoding | literal-described-char | add-name-chars
| add-separator-chars | standard-chars | other-chars
| combine-char | map-sdata-entity | char-repertoire | sgml-grove-plan"
>
<!element dsssl-specification - O
((%declarations;)*,
(style-specification | transformation-specification
| external-specification)+)>
<!attlist dsssl-specification
dsssl NAME dsssl-specification
version CDATA #FIXED "ISO/IEC 10179:1996"
>
<!element transformation-specification - O
((%declarations;)*, transformation-specification-body*)>
<!attlist transformation-specification
dsssl NAME transformation-specification
id ID #IMPLIED
desc CDATA #IMPLIED
-- human readable description of specification --
partial (partial | complete) complete
-- is the specification complete is or is it just a fragment
to be used in other specifications? --
use
-- reftype(transformation-specification|external-specification) --
IDREFS #IMPLIED -- Default: none --
entities
-- entities available to be specified as DTD for validation
of result document --
ENTITIES #IMPLIED -- Default: none --
>
<!element style-specification - O
((%declarations;)*, style-specification-body*)>
<!attlist style-specification
dsssl NAME style-specification
id ID #IMPLIED
desc CDATA #IMPLIED
-- human readable description of specification --
partial (partial | complete) complete
-- is the specification complete is or is it just a fragment
to be used in other specifications? --
use -- reftype(style-specification|external-specification) --
IDREFS #IMPLIED -- Default: none --
>
<!-- Assign a local ID to a specification in another document. -->
<!element external-specification - O EMPTY>
<!attlist external-specification
dsssl NAME external-specification
id ID #REQUIRED
document -- document containing spec --
ENTITY #REQUIRED
specid -- id of spec in document --
NAME #IMPLIED -- Default: first spec in document --
>
<!-- Declares features used by specification. -->
<!element features - O (#PCDATA)
-- lextype(featurename*) -->
<!attlist features
dsssl NAME features
>
<!-- Map character numbers in a base character set to character names;
not needed when system knows a character set, and all characters
in character set have universal code. -->
<!element baseset-encoding - O (#PCDATA)
-- lextype((number, charname)*) -->
<!attlist baseset-encoding
dsssl NAME baseset-encoding
name CDATA #REQUIRED -- public identifier of baseset --
>
<!-- Map a character described in the SGML declaration with a minimum literal
to a character name. -->
<!element literal-described-char - O (#PCDATA)
-- lextype(charname) -->
<!attlist literal-described-char
dsssl NAME literal-described-char
desc CDATA #REQUIRED -- the literal description --
>
<!-- Declare additional characters allowed in name within DSSSL notation. -->
<!element add-name-chars - O (#PCDATA)
-- lextype(charname*) -->
<!attlist add-name-chars
dsssl NAME add-name-chars
>
<!-- Declare additional characters allowed as separators within
DSSSL notation. -->
<!element add-separator-chars - O (#PCDATA)
-- lextype(charname*) -->
<!attlist add-separator-chars
dsssl NAME add-separator-chars
>
<!-- Define characters associating names with universal codes. -->
<!element standard-chars - O (#PCDATA)
-- lextype((charname, number))*) -->
<!attlist standard-chars
dsssl NAME standard-chars
>
<!-- Define characters with no universal codes. -->
<!element other-chars - O (#PCDATA)
-- lextype(charname*) -->
<!attlist other-chars
dsssl NAME other-chars
>
<!-- Map an SDATA entity onto a character. -->
<!element map-sdata-entity - O (#PCDATA)
-- lextype(charname) -->
<!attlist map-sdata-entity
dsssl NAME map-sdata-entity
name CDATA #IMPLIED -- Default: mapping uses replacement text only --
text CDATA #IMPLIED -- Default: mapping uses name only --
>
<!-- Declare character combining. -->
<!element combine-char - O (#PCDATA)
-- lextype(charname, charname, charname+) -->
<!attlist combine-char
dsssl NAME combine-char
>
<!-- Declare a character repertoire. -->
<!element char-repertoire - O EMPTY>
<!attlist char-repertoire
dsssl NAME char-repertoire
name -- public identifier for repertoire --
CDATA #REQUIRED
>
<!-- Declare the grove plan for the SGML property set. -->
<!element sgml-grove-plan - O EMPTY>
<!attlist sgml-grove-plan
dsssl NAME sgml-grove-plan
modadd -- names of modules to be added to default grove plan --
NAMES #IMPLIED -- Default: none added --
>
<!element style-specification-body - - CDATA
-- content uses notation of DSSSL style language -->
<!attlist style-specification-body
dsssl NAME style-specification-body
content ENTITY #CONREF -- Default: syntactic content --
>
<!element transformation-specification-body - - CDATA
-- content uses notation of DSSSL transformation language -->
<!attlist transformation-specification-body
dsssl NAME transformation-specification-body
content ENTITY #CONREF -- Default: syntactic content --
>
The element type form dsssl-specification is a container for
one or more process specification element type forms. Declaration
elements in a dsssl-specification element apply to
all the process specification elements in the dsssl-specification
element.
There are two types of process specification element type forms. The
element type form transformation-specification specifies a
transformation process. The element type form
style-specification specifies a formatting process. Instances
of these element type forms are called process specification elements.
Each process specification element may be self-contained, or it may
make use of other process specification elements of the same type.
Process specification elements are identified by an SGML unique
identifier. A process specification element in one SGML document may
use a process specification element in another SGML document by using
the external-specification element type form to assign a local
unique identifier to the process specification element in the other
document. The combination of a process specification element with the
process specification elements that it uses is a process
specification.
A user specifies processing of an SGML document by identifying a
process specification element.
The manner in which these elements are identified is system-dependent.
| A system may identify a process specification element with
a system identifier for the document and an optional
unique identifier for the element within the document,
with the first process specification element in a document being
used if no unique identifier is specified. |
|
Each process specification element may contain elements, called body
elements, whose content specifies processing in a process-specific
notation. For a transformation-specification, this notation is
the DSSSL transformation language; for a style-specification,
this notation is the DSSSL style language. In addition, each process
specification element may contain declaration elements that contain
information needed to parse these notations.
The process specification described by a sequence of process
specification elements is considered as a sequence of parts, where
each part consists of declarations expressed using element type forms,
and a specification in the process-specific notation, called the body
of the part. The parts from a sequence of process specification
elements consist of the sequence of parts from the first process
specification element, followed by the sequence of parts from the next
process specification element, and so on. The sequence of parts from a
single process specification element consists of a part constructed
from the content of the process specification element followed by the
sequence of parts from the sequence of process specification elements
that it uses. The declarations in the first part comprise the
declarations contained in the process specification element together
with those contained in the dsssl-specification element that
contains the process specification element. The body of the first
part consists of the concatenation of the body elements contained in
the process specification element.
A process specification shall be processed by first processing the
declarations of all of the parts, and then processing the bodies of
all of the parts in order. Within a single part, there shall not be
conflicting declarations; when two declarations in different parts
conflict, the declaration in the earlier part shall take precedence.
Similarly, within the body of a single part, there shall not be
conflicting specifications, but when two specifications in the bodies
of different parts conflict, the specification in the earlier part
shall take precedence.
The declarations of a process specification shall specify how each bit
combination occurring in the bodies of the parts of the specification
and in all the SGML input documents are to be converted to characters.
Declarations may occur in any order.
In particular, character names may be used before they are declared.
Every character name used either in declarations or in body elements
shall be declared using either a standard-chars element type
form, an other-chars element type form, or a
char-repertoire element type form.
All declaration element type forms other than the
char-repertoire, features, and sgml-grove-plan element type forms require the charset
feature.