dtsdldtd(other)
๐ dtsdldtd โ Semantic Delivery Language (SDL) format and semantics
ok so bestie, this is the dtsdldtd(other) page and it's literally the blueprint for SDL ๐ like the whole format-and-semantics tea, no cap. Buckle up, it's giving reference manual but make it iconic โจ
๐ธ NAME
dtsdldtd โ Semantic Delivery Language (SDL) format and semantics ๐
โจ DESCRIPTION
so Semantic Delivery Language (SDL) is defined by a Standard Generalized Markup Language (SGML) document type description (DTD). periodt. ๐
the language uses generalized presentation-oriented markup, and it excludes typical SGML features that may prevent performance-oriented, on-line delivery systems from using the language ๐ โ like, it's deliberately lean so the on-line delivery girlies can actually go fast. highkey a vibe.
๐ฆ Dependencies
None. literally none. not a single one. we love a low-maintenance icon ๐ซถ
๐ Issues
None. zero notes, she's flawless ๐ โจ
๐ TOP LEVEL ELEMENTS
SDLDOC
๐ฏ Purpose
The top of the document hierarchy. like, the main character of the whole document tree ๐ณ๐
๐ SYNOPSIS
&<!ELEMENT sdldoc - - (vstruct, head*, snb?, virpage+) >
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
&<!ATTLIST sdldoc
pub-id CDATA #REQUIRED
doc-id CDATA #REQUIRED
timestmp CDATA #REQUIRED
first-page IDREF #IMPLIED
product CDATA #IMPLIED
prodpn CDATA #IMPLIED
prodver CDATA #IMPLIED
license CDATA #IMPLIED
language CDATA #IMPLIED
charset CDATA #IMPLIED
author CDATA #IMPLIED
version CDATA #IMPLIED
sdldtd CDATA #REQUIRED
srcdtd CDATA #IMPLIED >
tgroup dispwid="5.39in"
๐ฌ DESCRIPTION
the document element, sdldoc, is the top of the document hierarchy โ the root, the queen bee ๐โจ There are several attributes used in identifying the applicability of this document. Version and language attributes list options available for qualifying selected sections of the document. iykyk ๐ฅ
The attributes of sdldoc are:
pub-idCDATARequired โ The public identifier is used to represent a document. It is analogous to a part number. ๐ท๏ธdoc-idCDATARequired โ The document identifier is specific to this version (instance) of a document. It is analogous to a manufacturing part number. ๐timestmpCDATARequired โ The time stamp distinguishes documents that have not changed enough to warrant a newdoc-id, but might need some bookmark/annotation cleanup or repair. ๐ฐ๏ธfirst-pageIDREFOptional โ If specified, thefirst-pageattribute identifies the virtual page to display upon first entering the document. ๐ชproductCDATAOptional โ A description of the product this document describes. ๐ฆprodpnCDATAOptional โ The part number of the product this document describes. ๐ขprodverCDATAOptional โ The version level of the product this document describes. โฌ๏ธlicenseCDATAOptional โ Product license information. By default, no license restrictions are applied. ๐languageCDATAOptional โ The default language of the document. This attribute may be overridden in later elements. Thelanguageattribute and thecharsetattribute of elements are used to select the proper font for display. ๐charsetCDATAOptional โ The default character set of the document. This attribute may be overridden in later elements. Thecharsetattribute and thelanguageattribute are used to select the proper font for display. ๐คauthorCDATAOptional โ The source author or publisher of the document. โ๏ธversionCDATAOptional โ The default version of this document. This attribute may be overridden in later elements. ๐ท๏ธsdldtdCDATARequired โ The version level of the SDL DTD to which this document conforms. This attribute is specified as&<major>.&<minor>version. For example,1.0. ๐จ A change in the minor version number implies a change that is backward compatible, albeit with potentially reduced functionality in an older viewer. A change in the major version implies an incompatible change to the DTD. ๐srcdtdCDATAOptional โ The name of the DTD to which the source document conformed. ๐
VSTRUCT
๐ฏ Purpose
The container for all generated elements. like a little basket for everything the conversion process made ๐งบโจ
๐ SYNOPSIS
&<!ELEMENT vstruct - - (loids, toss?, lophrases?,
index?, rel-docs?, rel-file?,
notes?) >
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
tgroup dispwid="6.09in"
&<!ATTLIST vstruct version CDATA #IMPLIED
doc-id CDATA #REQUIRED>
๐ฌ DESCRIPTION
The vstruct element is a container for all generated elements. Generated elements are items such as a list of identifiers in the document, a table of semantics and styles, and an index. ๐
The contents of this element are the normalized navigation information elements generated by the conversion process. No actual document content should be encoded within these elements. ๐ซ like fr fr, navigation only, don't sneak content in there bestie ๐ค
The attributes of vstruct are:
versionCDATAOptional โ The version of this element. By default, the version of thevstructis the same as the version of the document (sdldoc). ๐ท๏ธdoc-idCDATARequired โ The document identifier of the document to which this element belongs. ๐
ngl there's also a stray tgroup dispwid="5.75in" floating in this one's layout ๐ซ iconic formatting moment
VIRPAGE
๐ฏ Purpose
The smallest directly addressable unit in a document. tiny but mighty, the literal building block ๐
๐ SYNOPSIS
&<!ELEMENT virpage - - (head*, snb?, (block | form)*) >
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
&<!ATTLIST virpage id ID #REQUIRED
level NUMBER #REQUIRED
version CDATA #IMPLIED
language CDATA #IMPLIED
charset CDATA #IMPLIED
doc-id CDATA #REQUIRED
ssi CDATA #IMPLIED >
tgroup dispwid="5.39in"
โจ DESCRIPTION โจ
okay so the virtual page (virpage) element is literally the smallest, directly addressable unit in a document, bestie. it's givingโฆ a topic. ๐
ideally, documents presented on-line (and maybe even on paper, who knows) should be organized into small topics that are complete unto themselves. this lets readers find and access the info they want without scrolling forever, fr fr.
a virtual page contains all the info necessary to establish a formatting context. like, virtual pages can be displayed and understood even when you remove them from the context of the document, as long as the table of semantics and styles (toss) element is available for formatting info. no cap.
a virtual page can have zero or more head elements that provide title info and can also be used in display decoration, like a title bar. the first head of a virtual page is intended to be displayed in a table of contents for the document. periodt.
following the head elements is an optional system notation block (snb). the system notation block gives access to objects external to the document, and it's covered later in this document. iykyk.
finally, a virtual page may contain any combination of block or form elements, including none. so like, it can be empty. no biggie.
the attributes of virpage are:
idโID, Required. The identifier of the virtual page. Theidattribute must be a valid SGML identifier and must be unique within the document. To display a virtual page, hyperlink to thisid.levelโNUMBER, Required. The hierarchical level of the info contained in the element. Thelevelattribute makes explicit info that is implicit in typical SGML conforming documents. An SDL conforming document may be considered to have been flattened to allow direct access of inferior topics. For example, if the source DTD specified divisions such aschapter,d1,d2, these would all appear in the SDL version of the document as virtual pages but with levels of1,2and3, respectively.versionโCDATA, Optional. The version of this element. By default, the version of thevirpageis the same as the version of the document (sdldoc).languageโCDATA, Optional. The language in which this element is written. This attribute may be overridden individually within theformandblockelements contained in the virtual page.charsetโCDATA, Optional. The default character set of the document. This attribute may be overridden individually within theformandblockelements contained in the virtual page.doc-idโCDATA, Required. The document identifier of the document to which this element belongs.ssiโCDATA, Optional. A source semantic identifier. This identifier is chosen by the author of a higher level DTD or other source to SDL translator. It may either reflect the meaning of the markup in the original document or may reflect the actual generic identifier in the original document. The source semantic identifier may be used to assist in semantic searches of the SDL conforming document by preserving the original intent of the markup. When the original markup was conforming to a domain specific DTD, thessimay be used to enable structured searches of the SDL conforming document by preserving the original generic identifiers.
also there's this: tgroup dispwid="6.19in" ๐
the level and ssi attributes of the virtual page are used to look up formatting and semantic info in the table of semantics and styles (toss) element, which is covered later in this document. slay.
โจ SNB โจ
๐ Purpose ๐
the container for all references to objects external to the document. literally just a container. ๐
๐ธ SYNOPSIS ๐ธ
&<!ELEMENT snb - - (head?, (graphic | text | audio |
video |animate | crossdoc | man-page |
textfile | sys-cmd | callback | script |
switch)+) >
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
tgroup dispwid="6.39in"
&<!ATTLIST snb version CDATA #IMPLIED >
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
tgroup dispwid="5.39in"
โจ DESCRIPTION โจ
the system notation block (snb) provides a container for elements that access data that are not in SGML notation. the one exception to this rule is the text element. the text element is in the system notation block because it's intended for use as a rich text alternative to other elements in the snb when elements are tried in turn during the instantiation of a system notation reference (snref) looking for an alternative that can be formatted on the current system. bestie, that's a mouthful but you got this. ๐
data in the system notation block are not intended to be presented to the reader in the order that they appear in the document. the structural position of each snb element is established by a system notation reference. so don't just read it top to bottom, okay?
collecting all elements that require system resources at the top of the virtual page allows an application to marshal these resources before they're referenced. this gives the application the ability to alter the presentation of both the element and its reference based on the availability and performance of the required system resources. highkey useful.
the optional head element may be used by an application when presenting a list of required resources for a document. cute.
the attribute of snb is:
versionโCDATA, Optional. The version of this element. By default, the version of thesnbis the same as the version of the document (sdldoc).
tgroup dispwid="6.27in"
โจ BLOCK โจ
๐ Purpose ๐
the basic unit of display style. that's it. that's the purpose. ๐ฆ
๐ธ SYNOPSIS ๐ธ
&<!ELEMENT block - - (head*, (p | cp)*) >
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
&<!ATTLIST block id ID #IMPLIED
level NUMBER #IMPLIED
version CDATA #IMPLIED
class (table |
cell |
list |
item |
text |
udeffrmt ) #IMPLIED
language CDATA #IMPLIED
charset CDATA #IMPLIED
length NUMBER #IMPLIED
app (all |
help |
tutorial |
ref |
sys ) #IMPLIED
timing (sync |
async ) #IMPLIED
ssi CDATA #IMPLIED >
ok so quick recap before we get into it: blocks. they're the whole vibe. ๐ now let's talk about what's inside them.
๐ DESCRIPTION ๐
Blocks are the basic unit of display style. literally the atomic level of "how does this look." Every single piece of data inside a block gets rendered in the style of the block that contains it. that's the rule, no exceptions, we don't argue with the container. ๐ซถ
A block may contain zero or more head elements followed by zero or more paragraphs (p) or character paragraphs (cp).
Structurally, blocks hold a set of logically related paragraphs. important distinction bestie: a block identifies a display chunk, not a document hierarchy element. and here's the key thing โ blocks have an inherently flat structure. blocks do not nest. ๐ญ i know. if you want the presentational effect of nested blocks, you use the level attribute instead. work smarter, not harder.
๐ธ the three views situation ๐ธ
A document's structure includes blocks that are part of the principal view and, optionally, blocks that form an alternate view.
The principle view assumes that primary blocks are presented in order as the sequential content of the document. so like โ when you take the primary blocks in order, that is the principle view of the document. for the purpose of this language, the principle view is the same as the traditional, printed view. periodt. ๐
An alternate block is asynchronous to the primary document order. alternate blocks can represent traditional, asynchronous elements like a footnote or a spread, or some additional documentation (a teacher's section of a combined teacher/student manual, for example โ love that for them). Alternate content blocks should only be included in the primary content by reference. don't just shove them in there, that's not the move.
๐ฆ the toss lookup ๐ฆ
The level, class and ssi attributes of a block can be used to look up formatting and semantic information in the table of semantics and styles (toss) element โ which is covered later in this document, so hold that thought. ๐ฅ
โจ the attributes of block โจ
idโ typeID, Optional. The identifier of the block. Theidattribute must be a valid SGML identifier and must be unique within the document. no duplicates, we're not doing that here. ๐levelโ typeNUMBER, Optional. The hierarchical level of the information contained in the element. Thelevelattribute makes explicit information that is implicit in typical SGML-conforming documents. An SDL-conforming document may be considered to have been flattened with implicit block nesting information stored in thelevelattribute. iykyk. ๐งversionโ typeCDATA, Optional. The version of this element. By default, the version of the block is the same as the version of the document (sdldoc) โ unless that version has been overridden by aversionattribute in the virtual page (virpage) or form (covered later in this document) containing the block. chain of command, basically. ๐classโ type one oftable,cell,list,item,text,udeffrmt, Optional. The class of a block describes the general purpose the block is filling. Theclassattribute is used in conjunction with thelevelandssiattributes to perform a lookup in the table of semantics and styles (toss) element. The result of that lookup is formatting and semantic information pertaining to the block. so it's like, the block's whole personality gets looked up. ๐languageโ typeCDATA, Optional. The language in which this block was written. ๐charsetโ typeCDATA, Optional. The character set of this block. Thelanguageandcharsetattributes plus information retrieved from the table of semantics and styles (toss) element are used to select the font for the block. font selection is a whole collaborative process apparently. ๐lengthโ typeNUMBER, Optional. By default, the length of a block is determined dynamically as a function of its content and rendering style. If alengthvalue is present, it describes the length of the block in terms of current style lines. dynamic by default, but you can pin it. ur choice. ๐appโ type one ofall,help,tutorial,ref,sys, Optional. Theappattribute is used for selective presentation of a block. This attribute defaults toall. ๐timingโ type one ofsync,async, Optional. Thetimingattribute defaults tosync. A block with atimingattribute ofasyncis only displayed when referenced via anIDREF(orIDREFS). For example, an async block may be referenced by thecellsattribute offrowvecto repeat the block without reentering its data content. reuse queen behavior, honestly. โป๏ธssiโ typeCDATA, Optional. A source semantic identifier. This identifier is chosen by the author of a higher level DTD to SDL translator. It may either reflect the meaning of the markup in the original document or it may reflect the actual generic identifier in the original document. The source semantic identifier may be used to assist in semantic searches of the SDL-conforming document by preserving the original intent of the markup. When the original markup conforms to a domain-specific DTD, thessimay be used to enable structured searches of the SDL-conforming document by preserving the original generic identifiers. it's giving โจreceiptsโจ for the original markup. keep the paper trail, bestie. ๐
small formatting footnote from the original: this table was laid out with tgroup dispwid="6.49in". not content, just so you know nothing's missing. ๐
๐ฆ FORM ๐ฆ
๐ Purpose ๐
A two dimensional array of block and/or form elements. yes. two dimensional. it's a grid, it's a whole little ecosystem, and it can contain forms inside it because forms are brave like that. ๐ซถ
๐ SYNOPSIS ๐
&<!ELEMENT form - - (head*, (fstyle, fdata) |
(fdata, fstyle)) >
this next bit was laid out with tgroup dispwid="5.28in" in the original โ again, just table geometry, nothing lost. ๐
&<!ATTLIST form id ID #IMPLIED
level NUMBER #IMPLIED
version CDATA #IMPLIED
class (table |
cell |
list |
item |
text |
udeffrmt ) #IMPLIED
language CDATA #IMPLIED
charset CDATA #IMPLIED
length NUMBER #IMPLIED
app (all |
help |
tutorial |
ref |
sys ) #IMPLIED
ssi CDATA #IMPLIED >
so form takes the exact same attribute squad as block โ id, level, version, class, language, charset, length, app, ssi, all #IMPLIED โ and the content model is head* followed by either (fstyle, fdata) or (fdata, fstyle). fstyle first or fdata first, either order, both valid. ๐ค and that's the form tea for now โ more coming, don't go anywhere. ๐
okay so the form element is basically the glow-up of a data element โ a generalized representation of a data element that's partially preformatted, bestie. it's literally designed to be rendered in real time and automatically derived from your typical SGML table markup. uses include tables, lists and labeled lists. and honestly? generally, a form may be used to represent any information that is layout sensitive or contains data to be presented in a two dimensional matrix. iconic behavior honestly ๐ซถ
a form is made up of zero or more head elements followed either by a form style (fstyle) and the form data (fdata) or the form data followed by the form style. order is flexible, she's versatile like that โจ
the attributes of form are, and listen, i'm listing every single one because we don't skip:
idโ typeID, optional. the identifier of the form. theidattribute must be a valid SGML identifier and must be unique within the document. no duplicates, bestie, that's the whole vibe ๐levelโ typeNUMBER, optional. the hierarchical level of the information contained in the element. thelevelattribute makes explicit information that is implicit in typical SGML-conforming documents. an SDL-conforming document may be considered to have been flattened with implicit form nesting information stored in thelevelattribute. iykyk ๐versionโ typeCDATA, optional. the version of this element. by default, the version of the form is the same as the version of the document (sdldoc) unless that version has been overridden by aversionattribute in the virtual page (virpage) containing the form.classโ typetable, optional โ and the class of a form describes the general purpose the form is filling. the allowed values aretable,cell,list,item,textandudeffrmt. theclassattribute is used in conjunction with thelevelandssiattributes to perform a lookup in the table of semantics and styles (toss) element. the result of that lookup is formatting and semantic information pertaining to the form ๐languageโ typeCDATA, optional. the language in which this form was written.charsetโ typeCDATA, optional. the character set of this form. thelanguageandcharsetattributes plus information retrieved from the table of semantics and styles (toss) element are used to select the font for the form. font selection is giving curated ๐lengthโ typeNUMBER, optional. by default, the length of a form is determined dynamically as a function of its content and rendering style. if alengthvalue is present, it describes the length of the form in terms of current style lines.appโ typeall, optional โ theappattribute is used for selective presentation of a form. allowed values:all,help,tutorial,ref,sys. this attribute defaults toall.ssiโ typeCDATA, optional. a source semantic identifier. this identifier is chosen by the author of a higher level DTD to SDL translator. it may either reflect the meaning of the markup in the original document or it may reflect the actual generic identifier in the original document. author's choice, no cap ๐ฅ
and then there's this lil artifact that just lives at the end of the block:
tgroup dispwid="6.21in"
don't ask, she's just there ๐
โจ FSTYLE โจ
๐ฆ Purpose ๐ฆ
specify the style of a form. that's the whole job. ๐ธ
SYNOPSIS
&<!ELEMENT fstyle - - (frowvec+) >
DESCRIPTION
the form style (fstyle) element specifies the style of the form. it's composed of one or more row reference vectors (frowvec). the list of cell id references in the reference row vectors establishes the relationship between the position and data block for a cell. like, it's the map from "where are we" to "what goes here" ๐บ๏ธ
the fstyle element and the formstyle element in the table of semantics and styles (toss) element (covered later in this document, so hold that thought ๐ซถ) contain information regarding the presentational style of the form. cell-specific style and style attributes beyond those provided in the reference vectors must be specified in the data blocks that contain the cell data. no sneaking extra styling in through the back door, bestie ๐
the attribute of fstyle is:
ncolsโ typeNUMBER, optional. the number of columns in the form. this attribute should be a number greater than zero. unless overridden by a column width (colw) specification in thetoss, the available space is divided evenly among the columns. unless overridden by a column justification (colj) specification in thetoss, theblockand/orformelements in the form are left justified in their cells. fair and square, evenly distributed, slay โญ
๐ FROWVEC ๐
๐ Purpose ๐
describes the style of a row and contains ID references to the contents of the row. row vibes + row receipts, all in one ๐
SYNOPSIS
&<!ELEMENT frowvec - O EMPTY >
&<!ATTLIST frowvec hdr (YES|NO) #IMPLIED
cells IDREFS #REQUIRED >
tgroup dispwid="5.39in"
and yes, that tgroup dispwid="5.39in" line is just chilling there too. leave her be ๐
...so yeah, the reference row vector (frowvec) is literally the vibe-sheet for one row in a form โ it describes the style of that row and holds pointers (id references) to what's actually in the row. Important: there must be a row vector per row in the form. No skipping, bestie, one per row. ๐
The hdr attribute is the one that flags the entire row as a head row. Why do heads matter? Because a display program might need to handle showing heads differently than it does the data matrix โ and that's especially true if the form has to scroll, covers multiple screens, or gets displayed as a graph. Heads are main character energy, basically. ๐
The attributes of frowvec are:
hdrโ valuesyes/noโ Optional โ indicates whether or not the associated row is a head row.cellsโIDREFSโ Required โ a list of id references to theblockorformelements in thefdataelement that make up the cell contents of this form.
tgroup dispwid="6.00in"
Within a form element, spanning rows or columns is done by repeating the appropriate id reference in the cells attribute of the frowvec. And listen โ if the data needs to be repeated in multiple unspanned cells, the block has to be repeated too and given unique identifiers. No copy-paste shortcuts, the DTD said what it said. ๐
The length of a row is the length of the cells in that row; the width is the cumulative width of each cell in that row. Row length may be determined at or before runtime. Typically, the length of a row is the length of the longest block or form in the row. But โ plot twist โ there are two exceptions to this rule:
- the blocks or forms in the row can have an assigned length, or
- the id reference could be to an element that is not in the data container.
These exceptional cells are called virtual cells, and virtual cells do not affect the length of the row. Periodt. โญ
Virtual cells may contain more data than can be displayed in the area assigned โ think blocks with the length set that contain long paragraphs, forms, or figures. The actual display area of a virtual cell can be thought of as a viewport onto the data of a cell. Alternatively, virtual cells can use an information-hiding technique such as an icon leading to a separate window. Icon as a little doorway? We love a hidden-gem moment. ๐ฆ
Also, the id references in a reference row may specify elements that are not in the data container of its form โ even if the elements are not physically close. To protect the performance of the form element, references to data outside the current form may also be handled as virtual cells. And the display program may take the liberty to replace any information referenced in a row vector that does not belong to the current form's data element with a link or icon. Rude? Maybe. Allowed? Yep. ๐
๐ FDATA ๐
Purpose
A container for information belonging solely to a form element.
SYNOPSIS
&<!ELEMENT fdata - - ((block | form)*) >
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
DESCRIPTION
The form data element (fdata) is a container for information that belongs to a form. By default โ meaning no spanning and no external references โ form data is typically maintained in row-major matrix form. But heads up: assumptions about the order of the block or form elements in the data area must not be used for anything except performance, because the blocks are allowed to be represented in any order. So don't build your whole personality on element order, okay? ๐ญ
The fdata element has no attributes. That's it. Nothing. Clean. Minimalist icon. โจ
๐ง CONTAINER ELEMENTS ๐ง
P
Purpose
A paragraph.
SYNOPSIS
&<!ELEMENT p - - (head*, (key | sphrase | rev | if |
spc | snref | anchor | link | #PCDATA)+)
>
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
tgroup dispwid="6.50in"
&<!ATTLIST p id ID #IMPLIED
version CDATA #IMPLIED
type (literal |
lined |
dynamic ) #IMPLIED
ssi CDATA #IMPLIED >
DESCRIPTION
Paragraphs identify a formatting unit. Basically, paragraphs collect information that needs to be rendered contiguously within a region. They inherit style from their containing block, although adjustments can be made by using the class and level attributes of the enclosing block plus the ssi attribute of the p to effect a lookup in the table of semantics and styles (toss) element (covered later in this document โ stay tuned ๐).
Paragraphs may contain text, references, and key phrases. The key element (discussed later in this document) may modify the style of a portion of a paragraph, but that modification is always restricted to the current paragraph. No leaking your style choices into the next paragraph, bestie. ๐
The attributes of p are:
idโIDโ Optional โ the identifier of thep. Theidattribute must be a valid SGML identifier and must be unique within the document.versionโCDATAโ Optional โ the version of this element. By default, the version of thepis the same as the version of the document (sdldoc) unless that version has been overridden by aversionattribute in the virtual page (virpage),form, orblockcontaining thep.typeโliteral/lined/dynamicโ Optional โ paragraph text may be either unformatted or preformatted. By default, paragraph text is assumeddynamic(unformatted) and all white space (space, tab, newline, etc.) may be replaced with a single space. Thetypeattribute is used when the author needs to represent information that is at least partially layout-sensitive. Newline characters are significant in lined paragraphs and all whitespace is significant in literal paragraphs. Translation:literalis the "do not touch my spacing" queen,linedcares about your newlines,dynamicis chill and lets the whitespace get squished. ๐ssiโCDATAโ Optional โ a source semantic identifier. This identifier is chosen by the author of a higher level DTD to SDL translator. It may either reflect the meaning of the markup in the original document or it may reflect the actual generic identifier in the original document. The source semantic identifier may be used to assist in semantic searches of the SDL-conforming document by preserving the original intent of the markup. When the original markup was conforming to a domain-specific DTD, thessimay be used to enable structured searches of the SDL-conforming document by preserving the original generic identifiers. iykyk โ it's your paper trail back to the original markup. ๐ฅ
tgroup dispwid="5.92in"
CP
Purpose
A character paragraph.
SYNOPSIS
&<!ELEMENT cp - - (CDATA) >
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
&<!ATTLIST cp id ID #IMPLIED
version CDATA #IMPLIED
type (literal |
lined |
dynamic ) #IMPLIED
ssi CDATA #IMPLIED >
๐ DESCRIPTION ๐
okay so character paragraphs are basically paragraphs' quirky little sibling โจ They're super similar to paragraphs โ the only difference is that any markup sitting inside the text of a character paragraph gets ignored. Like, completely. Not read. Not parsed. Nothing. ๐
The one and only markup that does not get ignored is the &</ character pair โ that's the special little guy ๐ And heads up bestie: if you actually want that pair to show up in your text, you gotta put an ampersand in front of it, like &&.
๐ฆ The attributes of cp ๐ฆ
idโIDโ Optional โ the identifier of thep. Ngl this one has rules: theidattribute must be a valid SGML identifier and must be unique within the document. No duplicates, periodt. ๐versionโCDATAโ Optional โ the version of this element. Lowkey by default, the version of thepis the same as the version of the document (sdldoc) โ unless that version got overridden by aversionattribute in the virtual page (virpage), form, or block containing thep. iykyk ๐typeโliteral|lined|dynamicโ Optional โ so paragraph text can be either unformatted or preformatted. By default, paragraph text is assumed to bedynamic(unformatted), and all white space (space, tab, newline, etc.) may be replaced with a single space. Thetypeattribute is what you reach for when the author needs to represent information that's at least partially layout-sensitive ๐ญ Newline characters are significant inlinedparagraphs, and all whitespace is significant inliteralparagraphs. fr fr, that distinction matters. โญssiโCDATAโ Optional โ a source semantic identifier. This identifier is chosen by the author of a higher level DTD to SDL translator ๐ง It may either reflect the meaning of the markup in the original document, or it may reflect the actual generic identifier in the original document. The source semantic identifier may be used to assist in semantic searches of the SDL-conforming document by preserving the original intent of the markup. And when the original markup was conforming to a domain-specific DTD, thessimay be used to enable structured searches of the SDL-conforming document by preserving the original generic identifiers. slay, searching. ๐
and then right after all that the doc just drops this little layout artifact:
tgroup dispwid="6.17in"
๐ธ HEAD ๐ธ
โจ Purpose โจ
Heading, label or caption. That's it, that's the whole vibe check. ๐
๐ SYNOPSIS ๐
&<!ELEMENT head - - ((key | sphrase | rev | if | spc |
snref | anchor | link | #PCDATA)*,
subhead*) >
&<!ATTLIST head id ID #IMPLIED
version CDATA #IMPLIED
class (label |
head |
caption |
annotation |
phead |
udefhead ) #IMPLIED
language CDATA #IMPLIED
charset CDATA #IMPLIED
type (literal |
lined |
dynamic ) #IMPLIED
abbrev CDATA #IMPLIED
ssi CDATA #IMPLIED >
like, look at all those #IMPLIED โ every single one of these is optional, bestie ๐ซถ and class has a whole little menu to pick from: label, head, caption, annotation, phead, udefhead. iconic. ๐
๐ DESCRIPTION ๐
Okay bestie, so a head is basically a phrase-like element thatโs associated with the entire section that contains it. Heads may contain zero or more subhead elements followed by zero or more paragraphs.
The head element may also be used as the caption of a graphic (covered later in this document).
The user-defined head (udefhead) value is for use by the developer of a higher level DTD to SDL translator when an unexpected use for a head is found.
The attributes of head are literally these, no cap:
idโID, Optional. The identifier of the head. Theidattribute must be a valid SGML identifier and must be unique within the document.versionโCDATA, Optional. The version of this element. By default, the version of the head is the same as the version of the document (sdldoc) unless that version has been overridden by aversionattribute in the virtual page (virpage), form or block containing the head.classโlabel, Optional. The class of a head describes the general purpose the head is filling. The values arehead,caption,annotation,phead, andudefhead. Theclassattribute is used in conjunction with the level of the object containing the head andssiattributes to perform a lookup in the table of semantics and styles (toss) element. The result of that lookup is formatting and semantic information pertaining to the head.languageโCDATA, Optional. The language in which this head was written.charsetโCDATA, Optional. The character set of this head. Thelanguageandcharsetattributes plus information retrieved from the table of semantics and styles (toss) element are used to select the font for the head.typeโliteral, Optional. Head text may be either unformatted or preformatted. The values arelinedanddynamic. By default, paragraph text is assumed to be dynamic (unformatted) and all white space (space, tab, newline, etc.) may be replaced with a single space. Thetypeattribute is used when the author needs to represent information that is at least partially layout-sensitive. Newline characters are significant in lined heads and all whitespace is significant in literal heads.abbrevโCDATA, Optional. An abbreviation allows simple and/or short text to be associated with aheadelement. This text may be used in situations where rich text is inappropriate or where the head is too long to use.ssiโCDATA, Optional. A source semantic identifier. This identifier is chosen by the author of a higher level DTD to SDL translator. It may either reflect the meaning of the markup in the original document or it may reflect the actual generic identifier in the original document. The source semantic identifier may be used to assist in semantic searches of the SDL-conforming document by preserving the original intent of the markup. When the original markup conforms to a domain specific DTD, thessimay be used to enable structured searches of the SDL-conforming document by preserving the original generic identifiers.
And yeah, the little layout gremlin line is literally tgroup dispwid="6.27in".
๐ฆ SUBHEAD ๐ฆ
โจ Purpose โจ
Alternate or additional headings, labels or captions. Thatโs the whole vibe.
๐ซ SYNOPSIS ๐ซ
&<!ELEMENT subhead - - ((key | sphrase | rev | if | spc
| snref | anchor | link | #PCDATA)*)
>
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
tgroup dispwid="6.49in"
&<!ATTLIST subhead id ID #IMPLIED
version CDATA #IMPLIED
class (label |
head |
caption |
annotation |
phead |
udefhead ) #IMPLIED
language CDATA #IMPLIED
charset CDATA #IMPLIED
type (literal |
lined |
dynamic ) #IMPLIED
abbrev CDATA #IMPLIED
ssi CDATA #IMPLIED >
tgroup dispwid="5.81in"
And the last little layout line is tgroup dispwid="5.81in" โ periodt ๐
the subhead deets, in table form ๐
okay so real quick โ these are the attributes of subhead, and yes there's a whole little table of them. buckle up bestie:
idโ typeID, Optional. it's the identifier of the subhead. and listen: theidattribute must be a valid SGML identifier and must be unique within the document. no duplicates, periodt. ๐ซversionโ typeCDATA, Optional. the version of this element. by default, the version of the subhead is the same as the version of the document (sdldoc) โ unless that version has been overridden by aversionattribute in the virtual page (virpage), form, block or head containing the subhead. so like, it inherits, but the vibes can be overridden upstream. ๐classโ typelabel, Optional. the class of a subhead describes the general purpose the subhead is filling. theclassattribute is used in conjunction with the level of the object containing the head to which the subhead belongs and thessiattributes to perform a lookup in the table of semantics and styles (toss) element. the result of that lookup is formatting and semantic information pertaining to the subhead. iykyk. the values it can take, for the record:label,head,caption,annotation,ssi,phead,udefhead. that's the whole roster, no additions. ๐languageโ typeCDATA, Optional. the language in which this subhead was written. ๐charsetโ typeCDATA, Optional. the character set of this subhead. thelanguageandcharsetattributes plus information retrieved from the table of semantics and styles (toss) element are used to select the subhead font. so like, font selection is a collab. ๐typeโ typeliteral, Optional. subhead text may be either unformatted or preformatted, okay? by default, subhead text is assumed to bedynamic(unformatted) and all white space (space, tab, newline, etc.) may be replaced with a single space. thetypeattribute is used when the author needs to represent information that is at least partially layout-sensitive. newline characters are significant inlinedsubheads and all whitespace is significant inliteralsubheads. so if your spacing matters, say so loudly. ๐ค the values:literal,lined,dynamic.abbrevโ typeCDATA, Optional. an abbreviation allows simple and/or short text to be associated with asubheadelement. this text may be used in situations where rich text is inappropriate or where the subhead is too long to use. it's the โจshort versionโจ.ssiโ typeCDATA, Optional. a source semantic identifier. this identifier is chosen by the author of a higher level DTD to SDL translator. it may either reflect the meaning of the markup in the original document or it may reflect the actual generic identifier in the original document. the source semantic identifier may be used to assist in semantic searches of the SDL-conforming document by preserving the original intent of the markup. when the original markup conforms to a domain specific DTD, thessimay be used to enable structured searches of the SDL-conforming document by preserving the original generic identifiers. (yes that's a lot of words, but it's literally all load-bearing, i promise ๐ซถ)
tgroup dispwid="6.10in"
๐ฆ ATOMIC LINK ELEMENTS ๐ฆ
โ ANCHOR โ
๐ฏ Purpose
to give an ID to a point in the document. that's it. that's the whole job. iconic little guy. ๐ซ
โจ SYNOPSIS โจ
&<!ELEMENT anchor - O EMPTY >
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
&<!ATTLIST anchor id ID #REQUIRED >
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
๐ DESCRIPTION ๐
the anchor element provides a mechanism for assigning an ID to an arbitrary spot in the document. an anchor may occur anywhere that running text is allowed โ and yes that includes as content of paragraphs (p) and heads (head and subhead). so it's flexible like that. ๐ธ
the attribute of anchor is:
idโ typeID, Required. the identifier of the anchor. theidattribute must be a valid SGML identifier and must be unique within the document. no reruns, no dupes, one of a kind. ๐
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
tgroup dispwid="6.10in"
๐ LINK ๐
๐ฏ Purpose
a hyperlink within or outside the current document. yes bestie, links. in this economy. ๐ฅ
โจ SYNOPSIS โจ
&<!ELEMENT link - - ((key | sphrase | rev | if | spc |
snref | anchor | link | #PCDATA)+) >
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
tgroup dispwid="6.39in"
&<!ATTLIST link rid IDREF #REQUIRED
button IDREF #IMPLIED
linkinfo CDATA #IMPLIED
descript CDATA #IMPLIED
window (current |
new |
popup ) #IMPLIED
traversal (return |
noreturn ) #IMPLIED
tgroup dispwid="5.90in"
and that's where we're at โ more coming, don't go anywhere ๐
๐ DESCRIPTION ๐
okay so a link element is literally the start point of a hyperlink to another spot in the document or, via the system notation block (snb), to another document or active hyperlink. The active hyperlinks are sys-cmd and callback. These hyperlinks (covered later in this document) are used to execute an operating system command or to initiate a callback to the application respectively. no cap.
A link may surround any text in the document, including text found in paragraphs or heads, with the only exception being that link elements may not contain other link elements. that part is important, bestie ๐
The attributes of link are:
ridโIDREFโ Required โ the ID of the target of the hyperlink. The ID specified must exist in the current document but may be to elements in the system notation block (snb) of the current virtual page (virpage) to allow reference to external objects or actions. ๐buttonโIDREFโ Optional โ a graphic that may be displayed as a trigger for the hyperlink in lieu of or in addition to highlighting the hyperlink text itself. The ID referenced by thebuttonattribute must be the identifier of a graphic (covered later in this document) in the system notation block (snb) of the current virtual page (virpage). The graphic referenced must have aclassattribute ofbutton. โจlinkinfoโCDATAโ Optional โ information about the target of the link. This information may be displayed as part of a dialog with the reader before traversing the link if such traversal is in some way expensive in time. ๐ซถdescriptโCDATAโ Optional โ a general description of the action that takes place when the hyperlink is activated. ๐windowโcurrentโ Optional โ by default, hyperlinking to another location in this document or (via indirection) externally, is done by changing the view in the current window or display area. Specifyingnewfor thewindowattribute causes a new window or display area to be created for displaying hyperlink target. Specifyingpopupfor this attribute causes the new window or display area to be lighter weight, if possible. Often,popupwindows are modal and temporary. ๐ฆtraversalโreturnโ Optional โ by default, the current document and location in the document are stored on a push down stack to allow backtracking of hyperlinks. If this attribute is specified asnoreturn, the current location is forgotten on execution of the link. ๐ญ
tgroup dispwid="6.16in"
๐ฆ SNREF ๐ฆ
๐ Purpose ๐
Reference to an element or alternates in the system notation block (snb). ๐
โจ SYNOPSIS โจ
&<!ELEMENT snref - - (refitem+, alttext?) >
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
&<!ATTLIST snref id ID #IMPLIED >
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
๐ธ DESCRIPTION ๐ธ
A system notation reference (snref) is a reference to an external object. The result of resolving that object is that it is interpolated into the document at the point of the snref. The snref element references graphic and script elements, both of which are covered later in this document. ๐
An snref element consists of one or more refitem elements followed by optional alternate text. Each refitem is tried in turn in the order specified until one can be successfully formatted and displayed. If none of the system notations can be successfully formatted and displayed, the alternate text, alttext, which is very simple character data, is displayed instead. ๐ง
The attribute of snref is:
idโIDโ Optional โ the identifier of thesnref. Theidattribute must be a valid SGML identifier and must be unique within the document. โญ
tgroup dispwid="6.07in"
๐ REFITEM ๐
๐ Purpose ๐
A reference to an element in a system notation block. ๐
๐ SYNOPSIS ๐
&<!ELEMENT refitem - - (head*) >
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
&<!ATTLIST refitem rid IDREF #REQUIRED
class (figure |
in-line |
button |
icon |
udefgraph |
table |
cell |
list |
item |
text |
udeffrmt ) #REQUIRED
button IDREF #IMPLIED
ssi CDATA #IMPLIED >
tgroup dispwid="6.23in"
A refitem is literally just one single reference to an element sitting in the system notation block (the snb, iykyk) of the current virtual page (the virpage). One item, one pointer, no drama.
Here's the cute part: an snref is made of one or more refitem elements, which is how it offers alternate choices for the thing being displayed. The refitems get tried in turn, in the order they're listed, until one of them actually formats and displays successfully โ like auditioning backups until somebody slays ๐ญ. A refitem can also point at a text element in the snb, so you can drop in a plain-text alternative for the referenced item. Versatile icon behavior.
A refitem can have zero or more head elements too, which might serve (for example) as the caption of a graphic. No head? Also fine. Zero is a number bestie ๐ซถ.
The attributes of refitem are:
ridโIDREF, Required. The identifier of the item being referenced in the system notation block of the current virtual page. This is the whole point of the element, no cap.classโ Required. The class of arefitemdescribes the general purpose therefitemis filling. Theclassattribute is used in conjunction with the level of the enclosingblock,formorvirpage, plus thessiattribute, to perform a lookup in the table of semantics and styles (toss) element. The result of that lookup is formatting and semantic information pertaining to therefitem. Basically a vibe check that returns styling. The allowed values are:figurein-linebuttoniconudefgraphtablecelllistitemtextudeffrmt
buttonโIDREF, Optional. An optional reference to a graphic of classbuttonin thesnbof the currentvirpage. This button may be used to requestrefitemdisplay on systems where display of the item is slow or expensive in some other way. That is โ the button gets displayed, and therefitemis only displayed when the button is activated. Lazy-loading, but make it 1990s โจ.ssiโCDATA, Optional. A source semantic identifier. This identifier is chosen by the author of a higher level DTD to SDL translator. It may either reflect the meaning of the markup in the original document, or it may reflect the actual generic identifier in the original document. The source semantic identifier may be used to assist in semantic searches of the SDL-conforming document by preserving the original intent of the markup. When the original markup conforms to a domain specific DTD, thessimay be used to enable structured searches of the SDL-conforming document by preserving the original generic identifiers. It's giving "receipts for your markup" ๐งพ๐ .
tgroup dispwid="6.28in"
๐ธ ALTTEXT ๐ธ
Purpose
Simple text alternative for snref. That's it, that's the purpose ๐.
SYNOPSIS
&<!ELEMENT alttext - - CDATA >
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
DESCRIPTION
The alttext element is a place to put simple text for use if all alternatives โ including text replacements โ from the list of refitem elements in an snref fail to format. It's the last-resort bestie, the "if nobody else can go, I will" of the group chat ๐ญ๐.
The alttext element has no attributes. Zero. None. Clean.
๐ ATOMIC TEXT ELEMENTS ๐
๐ฆ REV ๐ฆ
Purpose
Add change bars to displayed text.
SYNOPSIS
&<!ELEMENT rev - - ((key | sphrase | if | spc | snref |
anchor | link | #PCDATA)*) >
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
tgroup dispwid="6.37in"
DESCRIPTION
Surrounding data with a rev element signals to the formatter that the surrounded data should be marked somehow as having undergone change. Typically, this mark is change bars on the side of the data โ very "track changes but make it typography" ๐
. An empty rev element implies some text has been deleted. Yes, empty means deleted. Iconic behavior honestly.
The rev element has no attributes.
๐ฅ KEY ๐ฅ
Purpose
Effect a change in font. Literally that's the whole job ๐.
SYNOPSIS
&<!ELEMENT key - - ((key | sphrase | rev | if | spc | anchor | snref | #PCDATA)+) >
&<!ATTLIST key charset CDATA #IMPLIED
class (acro |
book |
emph |
jargon |
l10n |
name |
quote |
product |
termdef |
term |
mach-in |
mach-out |
mach-cont |
pub-lit |
udefkey ) #REQUIRED
ssi CDATA #IMPLIED >
tgroup dispwid="5.92in"
So real quick on those ATTLIST bits, because they matter ๐ซถ:
charsetโCDATA,#IMPLIED(so it's optional, bestie).classโ#REQUIRED, and it has to be one of exactly these:acro,book,emph,jargon,l10n,name,quote,product,termdef,term,mach-in,mach-out,mach-cont,pub-lit,udefkey. No inventing your own, that's the rule ๐.ssiโCDATA,#IMPLIED.
๐ DESCRIPTION (key, cont'd) ๐
Okay so key phrases are data that are key to understanding the paragraph they live in โ like, they have special significance, that's the whole point. The key element is literally there to make readers go "๐ oh, that phrase matters". And plot twist: key only exists inside the context of a paragraph ( p ) โ it's document sub-structure, bestie. Not a main character on its own.
The semantics of key are doing double duty โ they matter for both rendering and navigation:
- Rendering: the phrase gets highlighted, typically with a different font style or attribute. It's giving โจvisual emphasisโจ.
- Navigation: key data can be used as fields in semantic searches, or as variables in a relevance-ranking algorithm. Very demure, very searchable.
There are, like, an infinite variety of key phrases possible in source documents, so to make sure the delivery system can fully use the semantics of key data, this delivery format forces the semantic to be normalized. Every single phrase is required to have a class attribute, plus an optional source semantic identifier (ssi). No skipping the class, fr fr.
The intended uses for the possible key classes are:
acroโ an acronym.bookโ the proper title of a document.emphโ an emphasized phrase.jargonโ a phrase with application unique significance; its definition is commonly understood by convention by the practitioner of the application field.l10nโ a phrase that must be specially treated during localization.nameโ a proper name.quoteโ a direct quote.productโ a proper product name.pub-litโ a literal phrase added by the publisher.termdefโ a phrase defined within the current paragraph.termโ a phrase defined elsewhere.mach-inโ a machine input phrase.mach-outโ a machine output phrase.mach-contโ a machine control or keyboard key name.udefkeyโ a user-defined key; this may be used by the author of a higher level DTD to SDL translator for unforeseen key phrases. (Basically the "miscellaneous" bin, iykyk.)
The attributes of key are:
charsetโCDATA, Optional. The character set of this key. The language of the enclosing paragraph (p) andcharsetattributes plus information retrieved from the table of semantics and styles (toss) element are used to select the font for thekey.classโ one ofacro,book,emph,jargon,l10n,name,quote,product,pub-lit,termdef,term,mach-in,mach-out,mach-cont,udefkey, Required. See above ๐.ssiโCDATA, Optional. A source semantic identifier. This identifier is chosen by the author of a higher level DTD to SDL translator. It may either reflect the meaning of the markup in the original document, or it may reflect the actual generic identifier in the original document. The source semantic identifier may be used to assist in semantic searches of the SDL-conforming document by preserving the original intent of the markup. When the original markup conforms to a domain-specific DTD, thessimay be used to enable structured searches of the SDL-conforming document by preserving the original generic identifiers.
tgroup dispwid="6.03in"
๐ซถ SPHRASE ๐ซถ
Purpose
A super or sub-scripted phrase. Tiny text, big energy. ๐ง
SYNOPSIS
&<!ELEMENT sphrase - - CDATA >
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
&<!ATTLIST sphrase class (super |
sub ) #REQUIRED
ssi CDATA #IMPLIED >
DESCRIPTION
The stylized phrase (sphrase) contains stylized text. These phrases are only presentationally significant โ it's all about the look, no cap. Two types are supported: sub and super.
The attributes of sphrase are:
styleโsuperorsub, Required. Indicates whether thesphraseshould be set in superscript or subscript.ssiโCDATA, Optional. A source semantic identifier. This identifier is chosen by the author of a higher level DTD to SDL translator. It may either reflect the meaning of the markup in the original document, or it may reflect the actual generic identifier in the original document. The source semantic identifier assists in semantic searches of the SDL-conforming document by preserving the original intent of the markup. When the original markup conforms to a domain-specific DTD, thessimay be used to enable structured searches of the SDL-conforming document by preserving the original generic identifiers.
tgroup dispwid="6.23in"
๐ SPC ๐
Purpose
A special character. Like, a literal glyph that's not in your font. Iconic. ๐ธ
SYNOPSIS
&<!ELEMENT spc - O EMPTY >
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
&<!ATTLIST spc name CDATA #REQUIRED >
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
DESCRIPTION
The spc element lets special characters โ meaning the ones not in the current font โ be included in text. Usually DTDs pull this off with character entities, but SDL avoids runtime evaluation of entities, and here's why bestie: entities are global to a document, and for performance reasons, SDL applications often don't wanna process all global information just to display a single topic. Efficiency queen. ๐
The attribute of spc is:
nameโCDATA, Required. Thenameattribute must be one of the special character names โ for example,`[bull ]`(bullet) โ defined in the public character entities such asISOpub,`ISO 8879:1986//ENTITIES Publishing//EN.`These entities are defined in sections D.4.2.1 through D.4.5.6 of The SGML Handbook (Goldfarb).
tgroup dispwid="6.14in"
โจ CONDITIONAL TEXT ELEMENTS โจ
๐ IF ๐
Purpose
Conditional inclusion of text or data. It's giving "choose your own adventure" but for markup. ๐ฆ
SYNOPSIS
&<!ELEMENT if - - (cond, then, else?) >
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
DESCRIPTION
The if element allows conditional inclusion of other text and data elements.
The if element consists of a condition (cond) followed by a then clause and an optional else clause. Based on the result of the condition, either the then clause or the else clause is included in the document. If the condition is false and no else clause exists, the if element is considered to be empty. (RIP, nothing gets out. ๐)
The if element has no attributes. Clean, minimal, main character energy.
โญ COND โญ
Purpose
Boolean condition for the if element. The vibe check, essentially. ๐ซถ
SYNOPSIS
&<!ELEMENT cond - - CDATA >
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
&<!ATTLIST cond interp NOTATION
(tcl |
sh |
ksh |
csh ) #IMPLIED >
tgroup dispwid="5.84in"
โจ DESCRIPTION โจ
Okay so the cond element is literally carrying a whole lil script around ๐ซถ โ like, it holds a script that gets run by whatever interpreter you point at it with the interp attribute. The CDATA content of cond gets yeeted straight into interp. And the return value from that interpreter? It should be numeric, bestie. That's the whole vibe check. ๐
The attribute of cond is:
interpโ NOTATION, Optional. The interpreter to which to pass the CDATA content of thecondelement. It is expected that the interpreter returns a numeric string value. One of the listed interpreters โtcl,sh,ksh,cshโ is often embedded in the application and does not require another process to execute. If the specified interpreter does not exist, or returns a non-numeric value, the default return value is zero. ๐ซ
tgroup dispwid="6.11in"
๐ธ THEN ๐ธ
๐ซ Purpose
Included text when the condition (cond) of the if element is a non-zero string. Like, the "yes babe, we're going in" branch of the whole operation. ๐
โจ SYNOPSIS โจ
&<!ELEMENT then - - (key | sphrase | rev | if |
spc | snref | anchor | link | #PCDATA)*) >
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
tgroup dispwid="6.39in"
๐ DESCRIPTION ๐
So the then element contains the text and data that get included if the return value of the interpreter over in the cond element is a non-zero string. She's the payoff, the main character moment. ๐
And the fun bit โ then can absolutely contain a nested if element, plus any other text or data that's acceptable in a paragraph (p). Nested conditions, we love to see it. ๐
The then element has no attributes. Zero. None. Clean girl aesthetic. ๐
๐ฆ ELSE ๐ฆ
๐ซ Purpose
Included text when the condition (cond) of the if element is a string evaluating to zero. The "okay never mind then" branch ๐ญ๐
โจ SYNOPSIS โจ
&<!ELEMENT else - - (key | sphrase | rev | if | spc | snref | anchor | link | #PCDATA)*) >
๐ DESCRIPTION ๐
The else element contains the text and data that get included if the return value of the interpreter in the cond element is a string evaluating to zero. It's giving fallback energy, and honestly it's thriving. โจ
Just like her sister then, else may contain a nested if element as well as any other text or data acceptable in a paragraph (p). Recursion goes both ways, periodt. ๐
The else element has no attributes either. Matching set ๐
๐ NOTATION ELEMENTS ๐
๐ผ๏ธ GRAPHIC ๐ผ๏ธ
๐ซ Purpose
Attachment to a graphic image external to the current document. Very "link in bio" of it. ๐
โจ SYNOPSIS โจ
&<!ELEMENT graphic - O EMPTY >
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
&<!ATTLIST graphic id ID #REQUIRED
format CDATA #IMPLIED
method IDREF #IMPLIED
xid CDATA #REQUIRED >
๐ DESCRIPTION ๐
The graphic element is literally how you let graphic images get incorporated into an SDL-conforming document. And here's the tea: only one graphic type element is declared. Which one it is? That's what the class attribute is for โ it distinguishes between figure, in-line or button. ๐ฅ
A graphic image gets incorporated by putting an snref element in the document right at the point of inclusion. The rid attribute of the snref should refer to the graphic element describing the storage location and format of the image. So snref is the doorway, graphic is the room, iykyk. ๐ชโจ
The attributes of graphic are:
idโ ID, Required. The identifier of thegraphic. Theidattribute must be a valid SGML identifier and must be unique within the document. No duplicates, you're not like other girls. ๐formatโ CDATA, Required. The format in which the graphic is stored. Example values for theformatattribute are:tiff,xpm,xbmandxwd. ๐ผ๏ธmethodโ IDREF, Optional. A reference to ascriptelement (discussed later) in the system notation block of the current virtual page. The script in thescriptelement provides a mechanism for performing any setup necessary to display the graphic image. Setup on setup on setup ๐xidโ CDATA, Required. An external identifier for the graphic image.
tgroup dispwid="6.04in"
๐ TEXT ๐
๐ซ Purpose
Alternate rich text for snref.
โจ SYNOPSIS โจ
&<!ELEMENT text - - ((p | cp)*) >
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
&<!ATTLIST text id ID #REQUIRED
language CDATA #REQUIRED
charset CDATA #IMPLIED >
๐ DESCRIPTION ๐
The text element is the rich-text glow-up ๐ โ it allows for rich text alternatives to other elements in the system notation block being referenced by refitem elements in snref. A text element contains zero or more paragraphs (p) or character paragraphs (cp). Zero! Or more! Flexible queen. ๐
The attributes of text are:
idโ ID, Required. The identifier of thetext. Theidattribute must be a valid SGML identifier and must be unique within the document. Same rules as always, no cap. ๐languageโ CDATA, Optional. The language in which thistextwas written. ๐charsetโ CDATA, Optional. The character set of thistext. Thelanguageandcharsetattributes plus information retrieved from the table of semantics and styles (toss) element are used to select the text font. Font selection by committee, but make it โจfashionโจ
tgroup dispwid="6.13in"
๐ AUDIO ๐
๐ซ Purpose
Attachment to an audio snippet external to the current document. Sound on, bestie ๐ง
โจ SYNOPSIS โจ
&<!ELEMENT audio - O EMPTY >
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
&<!ATTLIST audio id ID #REQUIRED
format CDATA #IMPLIED
method IDREF #IMPLIED
xid CDATA #REQUIRED >
๐ DESCRIPTION ๐
The audio element lets an audio snippet get incorporated into an SDL-conforming document. An audio snippet is incorporated by putting an snref element in the document at the point of inclusion. The rid attribute of the snref should refer to the audio element describing the storage location and format of the audio snippet. Same system as graphic, different senses. ๐ซถ
The attributes of audio are:
idโ ID, Required. The identifier of theaudio. Theidattribute must be a valid SGML identifier and must be unique within the document. ๐formatโ CDATA, Required. The format in which the audio snippet is stored. ๐ตmethodโ IDREF, Optional. A reference to ascriptelement (covered later in this document) in the system notation block of the current virtual page. The script in thescriptelement provides a mechanism for performing any setup necessary to present the audio snippet. ๐xidโ CDATA, Required. An external identifier for the audio snippet.
tgroup dispwid="6.14in"
๐ฌ VIDEO ๐ฌ
๐ซ Purpose
Attachment to a video clip external to the current document. Cinema. ๐ฟ
โจ SYNOPSIS โจ
&<!ELEMENT video - O EMPTY >
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
&<!ATTLIST video id ID #REQUIRED
format CDATA #IMPLIED
method IDREF #IMPLIED
xid CDATA #REQUIRED >
okay so this is where it gets spicy โ the video element is how you yeet a whole video clip into an SDL-conforming document. How? You drop an snref element in at the exact spot where you want it to appear. that's the whole trick. The rid attribute on your snref points at the video element that describes where the clip lives and what format it's in.
The attributes of video are:
idโ typeID, Required โ the identifier of the video. Ngl, theidattribute must be a valid SGML identifier and must be unique within the document. No duplicates, bestie, iykyk ๐formatโ typeCDATA, Required โ the format in which the video clip is stored.methodโ typeIDREF, Optional โ a reference to ascriptelement (yes, that one โ it's covered later in this document) in the system notation block of the current virtual page. The script in thescriptelement is the whole mechanism for doing any setup that's necessary to present the video clip. ๐ฌxidโ typeCDATA, Required โ an external identifier for the video clip.
tgroup dispwid="6.21in"
๐ฆ ANIMATE ๐ฆ
๐ Purpose
Attachment to an animation sequence external to the current document. main character energy โจ
๐ SYNOPSIS ๐
&<!ELEMENT animate - O EMPTY >
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
&<!ATTLIST animate id ID #REQUIRED
format CDATA #IMPLIED
method IDREF #IMPLIED
xid CDATA #REQUIRED >
๐ธ DESCRIPTION ๐ธ
So the animate element lets you pull an animation sequence into an SDL-conforming document. Same deal as before, bestie: you put an snref element in the document at the point of inclusion, and the rid attribute of that snref should refer to the animate element describing the storage location and format of the animation sequence. it's giving consistency ๐ฆ
The attributes of animate are:
idโ typeID, Required โ the identifier of theanimate. Theidattribute must be a valid SGML identifier and must be unique within the document.formatโ typeCDATA, Required โ the format in which the animation sequence is stored.methodโ typeIDREF, Optional โ a reference to ascriptelement (covered later in this document, promise ๐ซถ) in the system notation block of the current virtual page. The script in thescriptelement provides a mechanism for performing any setup necessary to present the animation sequence.xidโ typeCDATA, Required โ an external identifier for the animation sequence.
tgroup dispwid="6.14in"
๐ SCRIPT ๐
๐ Purpose
Data collection and/or generation of dynamic text. literally the multitasker of the group โจ
๐ SYNOPSIS ๐
&<!ELEMENT script - - CDATA >
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
&<!ATTLIST script id ID #REQUIRED
interp NOTATION
(tcl |
sh |
ksh |
csh ) #IMPLIED >
tgroup dispwid="5.98in"
๐ธ DESCRIPTION ๐ธ
The script element is the mechanism inside SDL for collecting usage data or generating dynamic (on-the-fly) text. Here's the vibe: when it gets referenced via an snref, the CDATA content of the script element is passed to the designated interpreter. If the return value from the interpreter is non-NULL, that value gets interpolated into the document right at the point of the snref. iconic behaviour, honestly ๐
And if the designated interpreter is embedded in the application, global variables may be used to collect usage data โ otherwise, some mechanism like temporary files may be used. ngl, slightly chaotic but it works ๐
The attributes of script are:
idโ typeID, Required โ the identifier of thescript. Theidattribute must be a valid SGML identifier and must be unique within the document.interpโ typeNOTATIONโ one oftcl,sh,ksh,csh, Optional โ the interpreter to which to pass the CDATA content of thescriptelement. One of the listed interpreters is often embedded in the application and does not require another process to execute. If the specified interpreter doesn't exist, the default return value isNULL. ๐
tgroup dispwid="6.69in"
๐ง CROSSDOC ๐ง
๐ Purpose
Indirect element for following a hyperlink outside the current document. the little portal to somewhere else ๐
๐ SYNOPSIS ๐
&<!ELEMENT crossdoc - O EMPTY >
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
&<!ATTLIST crossdoc id ID #REQUIRED
xid CDATA #REQUIRED >
๐ธ DESCRIPTION ๐ธ
The crossdoc element is how SDL does a hyperlink to an external document. To create an external, cross-document hyperlink you place a link to the crossdoc in the text, and the crossdoc element carries all the info needed to find the desired document and the id within that document. efficient queen โจ
The attributes of crossdoc are:
idโ typeID, Required โ the identifier of thecrossdoc. Theidattribute must be a valid SGML identifier and must be unique within the document.xidโ typeCDATA, Required โ an external identifier for the external document andid.
tgroup dispwid="6.05in"
๐ MAN PAGE ๐
๐ Purpose
Indirect element for following a hyperlink to a reference manual page. yes bestie, we're linking man pages now ๐ญ๐
๐ SYNOPSIS ๐
&<!ELEMENT man-page - O EMPTY >
&<!ELEMENT crossdoc - O EMPTY >
&<!ATTLIST man-page id ID #REQUIRED
xid CDATA #REQUIRED >
note: yes, thecrossdocELEMENTline is literally in there too โ that's what the original gives us, so it stays. No cap. ๐
๐ธ DESCRIPTION ๐ธ
The man-page element is the SDL mechanism for effecting a hyperlink to (display of) a reference manual page such as a Unix man page. To create a man page hyperlink, a link to the man-page is placed in the text, and the man-page element holds the necessary info to find and display the desired manual page. we stay documented ๐
The attributes of man-page are:
idโ typeID, Required โ theman-pageidentifier. Theidattribute must be a valid SGML identifier and must be unique within the document.xidโ typeCDATA, Required โ an external identifier for the reference manual page.
tgroup dispwid="6.20in"
๐ TEXTFILE ๐
๐ Purpose
Indirect element for following a hyperlink to a text file. humble, useful, lowkey underrated ๐ซถ
๐ SYNOPSIS ๐
&<!ELEMENT textfile - O EMPTY >
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
&<!ATTLIST textfile id ID #REQUIRED
xid CDATA #REQUIRED >
๐ธ DESCRIPTION ๐ธ
The textfile element is the SDL mechanism for effecting a hyperlink to (display of) a text file. To create a text file hyperlink you put a link to the textfile in the text, and the textfile element contains the necessary information to find the desired file. simple, clean, slays โจ
The attributes of textfile are:
idโ typeID, Required โ the identifier of thetextfile. Theidattribute must be a valid SGML identifier and must be unique within the document.xidโ typeCDATA, Required โ an external identifier for the text file.
tgroup dispwid="6.14in"
๐ SYS-CMD ๐
๐ Purpose
Indirect element for following a hyperlink to a system command. okay this one is very much my brand ๐ฅ
๐ SYNOPSIS ๐
&<!ELEMENT sys-cmd - O EMPTY >
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
&<!ATTLIST sys-cmd id ID #REQUIRED
xid CDATA #REQUIRED >
and bestie that's exactly where we're picking up next โ the sys-cmd description is literally right there waiting for us ๐
The attributes of sys-cmd are literally just two, and they're both required, so no skipping ๐
idโ ID, Required โ the identifier of thesys-cmd. Bestie, theidattribute must be a valid SGML identifier and must be unique within the document. No duplicates, periodt.xidโ CDATA, Required โ an external identifier for the system command. That's it, that's the whole vibe.
tgroup dispwid="6.03in" โ yeah that's the table width, the original said so, so I'm saying so ๐
๐ซ CALLBACK ๐ซ
Purpose ๐ฆ
An indirect element for following a hyperlink into the application. Lowkey the whole point is "hey app, do the thing" โจ
SYNOPSIS ๐
&<!ELEMENT callback - O EMPTY >
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
&<!ATTLIST callback id ID #REQUIRED
xid CDATA #REQUIRED >
DESCRIPTION ๐ธ
So the callback element is the mechanism within SDL for effecting a hyperlink into the enclosing application. To create an application callback hyperlink, a link to the callback is placed in the text โ same energy as the other link elements, just aimed inward. The callback element contains the necessary information to inform the application of the desired action. It's literally the "yo, app, do this" element ๐
The attributes of callback are:
idโ ID, Required โ the identifier of thecallback. Theidattribute must be a valid SGML identifier and must be unique within the document. Say it with me: valid SGML, unique in doc ๐xidโ CDATA, Required โ an external identifier and user data for the application callback. Note that it carries user data too, not just the id โ that detail matters, don't drop it ๐
tgroup dispwid="6.05in"
๐ SWITCH ๐
Purpose ๐
Conditional hyperlink. It's giving "choose your own adventure" but make it markup.
SYNOPSIS ๐
&<!ELEMENT switch - - CDATA >
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
&<!ATTLIST switch id ID #REQUIRED
interp NOTATION
(tcl |
sh |
ksh |
csh ) #IMPLIED
branches IDREFS #REQUIRED >
DESCRIPTION ๐ง
The switch element is part of the system notation block, snb, and is always instantiated via a reference by a link element โ like, always, no solo runs, it's not a main character that way. When activated by the hyperlink, the interpreter (interp) is called, passing it the CDATA content of the switch, and the interpreter returns a non-negative number. The return value of the interpreter is used to index into the list of branches, and the hyperlink is continued to that ID. iykyk โจ
Okay here's the fallback tea, and it's important ๐ซ: a return value that is non-numeric, less than zero, or greater than the number minus one of the ids in the branches attribute, will cause the hyperlink to continue to the first branch in the list. So it never just... dies? It goes to branch #1. Love that for us.
The attributes of switch are:
idโ ID, Required โ the identifier of theswitch. Theidattribute must be a valid SGML identifier and must be unique within the document. Same rule as always, no cap ๐interpโ NOTATION, Optional โ the interpreter to which to pass the CDATA content of theswitchelement. The options aretcl,sh,ksh, orcsh. It is expected that the interpreter returns a numeric string value equal to or greater than zero. One of the listed interpreters is often embedded in the application and does not require another process to execute โ convenient, iconic, chef's kiss ๐ If the specified interpreter does not exist, or returns either a non-numeric or out-of-bounds value, the default return value is zero.branchesโ IDREFS, Required โ a list of IDs in the current document. The return value of theinterpattribute is used to index into this list of IDs, and the hyperlink is continued at the resulting ID. Index in, jump out, slay ๐ฆ
tgroup dispwid="6.31in"
๐ GENERATED ELEMENTS ๐
๐ REL-DOCS ๐
Purpose
Documents related to this document. Cute, right?
SYNOPSIS
To be determined.
DESCRIPTION
To be determined.
๐ REL-FILE ๐
Purpose
Files related to this document.
SYNOPSIS
To be determined.
DESCRIPTION
To be determined.
๐ NOTES ๐
Purpose
Notes related to this document.
SYNOPSIS
To be determined.
DESCRIPTION
To be determined.
ngl bestie, those three are literally just placeholders in the source โ "To be determined" is all it says, so that's all I'm giving you. No inventing, that's the rule ๐ โโ๏ธ
โญ LOIDS AND ID โญ
Purpose
List of identifiers in the document. It's the roll call, the attendance sheet, the group chat member list ๐
SYNOPSIS ๐
&<!ELEMENT loids
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
&<!ATTLIST loids count NUMBER #IMPLIED >
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
&<!ELEMENT id - O EMPTY >
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
&<!ATTLIST id type (virpage |
block |
form |
p |
cp |
head |
subhead |
anchor |
switch |
snref |
graphic |
text |
audio |
video |
animate |
crossdoc |
man-page |
textfile |
sys-cmd |
script |
callback ) #REQUIRED
rid IDREF #REQUIRED
rssi CDATA #IMPLIED
rlevel NUMBER #IMPLIED
offset NUMBER #REQUIRED >
Look at that type list โ twenty-two options, every single one accounted for, virpage through callback, in exactly that order ๐ฅ And yeah: type is #REQUIRED, rid is #REQUIRED, offset is #REQUIRED, while rssi and rlevel are #IMPLIED. The loids element itself just has count (NUMBER, #IMPLIED). Not me memorizing the whole enum, but also... yeah I did ๐
๐
DESCRIPTION (the loids saga continues)
Okay so the loids element is literally just a container for a list of identifiers in the document. Like, that's its whole job. And the list appears in the order the identifiers appear โ no reshuffling, no sorting, just vibes in the exact order they showed up. ๐
And bestie, here's where it gets iconic: you can use the loids element to generate a table of contents for the document โ by selecting only those elements whose type is virpage and listing the heads of those virpage elements. Slay. The rlevel attribute is there to infer the nesting level of the virpage, so you can avoid reading the head of virtual pages whose nesting level is deeper than what's currently being displayed. Highkey a whole glow-up for keeping the screen uncluttered. โจ
The attribute of loids is:
countโNUMBER, Optional โ The number ofidelements contained in theloids. If this attribute is present, the processor can use it to pre-allocate space for theidelements. ๐ซถ
The attributes of id are:
typeโ Required โ The name of the element to which thisidbelongs. And the options are, in order:virpage,block,form,p,cp,head,subhead,anchor,switch,snref,graphic,text,audio,video,animate,crossdoc,man-page,textfile,sys-cmd,script,callback.ridโIDREF, Required โ The referenced identifier.rssiโCDATA, Optional โ The source semantic identifier (ssi) of the element referenced by theridattribute.rlevelโNUMBER, Optional โ The level of the element referenced by theridattribute. Defaults to1, if you were wondering ๐ญoffsetโNUMBER, Required โ The byte offset in the document to the start of the virtual page containing the element referenced by theridattribute.
๐ฆ INDEX AND ENTRY
Purpose
Contains the index for the document. That's it, that's the whole purpose. Periodt. ๐
SYNOPSIS
&<!ELEMENT index - - (entry*) >
&<!ATTLIST index head CDATA #IMPLIED
count NUMBER #IMPLIED >
&<!ELEMENT entry - - ((key | sphrase | rev | if | spc |
snref | #PCDATA)*, entry*) >
&<!ATTLIST entry id ID #IMPLIED
main IDREFS #IMPLIED
locs IDREFS #IMPLIED
syns IDREFS #IMPLIED
sort CDATA #IMPLIED >
DESCRIPTION
The index element contains all the information necessary to create and display an index for the document. Ngl, it gets created during translation of a higher level DTD-conforming document to conform to SDL โ which means, and this is the key part, an index is not generated at the time of request. It's pre-made, bestie. ๐
The index can also be used to enable keyword searches within a document. Handy fr fr.
An index consists of zero or more entries.
The attributes of index are:
headโCDATA, Optional โ Alternate text for the heading of the index.countโNUMBER, Optional โ The number ofentryelements contained in theindex. The processor can use this attribute (if it's present) to pre-allocate space for theentryelements. ๐ซถ
The attributes of entry are:
idโID, Optional โ The identifier of the index entry.mainโIDREFS, Optional โ A list of identifiers specifying where the indexed entry may be found. The main list of ids may be highlighted in some way to indicate a greater importance than the ids found in thelocslist. Main character energy, literally. โจlocsโIDREFS, Optional โ A list of identifiers specifying where the indexed entry may be found. At least one of eithermainorlocsmust be specified โ so you don't get to skip both, that's not a vibe. ๐synsโIDREFS, Optional โ A list of identifiers that refer to otherentryelements and correspond to a "See also" or synonym-type of reference.sortโCDATA, Optional โ A sort key to use if the indexed entry is to be sorted other than by its content.
๐ธ LOPHRASES
Purpose
A list of semantic phrases used in this document. Cute, concise, done. ๐
SYNOPSIS
&<!ELEMENT lophrases - - (phrase+) >
&<!ATTLIST lophrases count NUMBER #IMPLIED >
DESCRIPTION
The list of phrases (lophrases) element is generated by the higher level DTD to SDL translator. It's a list of phrases used from the toss element (covered later in this document) that are contained in this document. The whole point of these phrases is to map the user's knowledge domain into the constructs used in SDL. That info can then be passed โ the phrases available for structured or semantic searches โ to a browser or viewer, so that browser or viewer can offer that info to the user. ๐ฆ
Now, the lophrases element is different from the phrases in the toss, and the difference is lowkey everything: the toss contains all the phrases possible in a higher level DTD to SDL translation, while the lophrases element contains only those used in the translation of this particular document. So toss is the whole menu, lophrases is just what you actually ordered. ๐ฅ
The attribute of lophrases is:
countโNUMBER, Optional โ The number ofphraseelements contained in thelophrases. The processor can use this attribute (if it's present) to pre-allocate space for thephraseelements.
๐ PHRASE
Purpose
A single phrase in the lophrases element. One phrase. Solo. Main character. ๐
SYNOPSIS
&<!ELEMENT phrase - O EMPTY >
&<!ATTLIST phrase text CDATA #REQUIRED >
DESCRIPTION
The phrase element is a single phrase from the list of phrases element (lophrases).
The attribute of phrase is:
textโCDATA, Required โ The semantic phrase. ๐ฌ
๐ TOSS
Purpose
The table of semantics and styles. Big things are happening.
SYNOPSIS
&<!ELEMENT toss - - (keystyle*, headstyle*, frmtstyle*,
grphstyle*)>
So yeah โ picture toss as, like, the big closet where all the semantics and styles live. Every sub-element inside toss is its own little formatting group, right? And those sub-elements also carry class and ssi (source semantic identifier) attributes so you can do general or super-specific semantic / structured searches. โจ Bonus: a lot of the toss sub-elements have a phrase attribute, which is basically the vibes-translator โ it hands you a natural-language phrase describing what that element's semantics actually are as used in the higher-level DTD-to-SDL translation. ๐ซถ
Now, how do lookups work? Vibe check time: you match the class and ssi attributes of the element in the document proper against the class and ssi attributes of the sub-element of the toss. That's the match. ๐
And the lookup can often be refined even further by matching the level attribute (if it's there) on the document element against the rlevel attribute (if it's there) on the toss sub-element.
Structured searches, though? Those are the main character move. You build them off the structure of a domain-specific higher-level DTD by making the ssi attribute of the sub-element line up directly with the generic identifier from the original DTD. iykyk. ๐ฆ
The attribute of toss is:
countโNUMBER, Optional. The number of styles contained in thetoss. The processor can use this attribute (if this attribute is present) to pre-allocate space for the styles.
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
tgroup dispwid="6.13in"
๐ KEYSTYLE
๐ Purpose
Provides font and semantic information for key phrases. Periodt. ๐
โจ SYNOPSIS โจ
&<!ELEMENT keystyle - O EMPTY >
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
&<!ATTLIST keystyle class (acro |
book |
emph |
jargon |
l10n |
name |
quote |
product |
termdef |
term |
mach-in |
mach-out |
mach-cont |
pub-lit |
udefkey ) #REQUIRED
ssi CDATA #IMPLIED
rlevel NUMBER #IMPLIED
phrase CDATA #IMPLIED
srch-wt NUMBER #IMPLIED
pointsz NUMBER #IMPLIED
set-width NUMBER #IMPLIED
color CDATA #IMPLIED
xlfd CDATA #IMPLIED
xldfi CDATA #IMPLIED
xlfdb CDATA #IMPLIED
xlfdib CDATA #IMPLIED
typenam CDATA #IMPLIED
typenami CDATA #IMPLIED
typenamb CDATA #IMPLIED
typenamib CDATA #IMPLIED
style (serif |
sans-serif |
symbol ) #IMPLIED
spacing (monospace |
propspace ) #IMPLIED
weight (medium |
bold ) #IMPLIED
slant (roman |
italic |
rev-italic | #IMPLIED
special (underline |
strikeout |
none ) #IMPLIED >
tgroup dispwid="6.13in"
๐ซถ ngl bestie, look at thatclasslist โ#REQUIRED, no skipping it. And yes, you read theslantline right, it's literally written like that in the source:slant (roman | italic | rev-italic |then#IMPLIED. Not me fixing it. Copying it exactly is the whole assignment. ๐
Also: &<!ELEMENT keystyle - O EMPTY > โ that - O means it's got a required start tag and an omitted end tag, and EMPTY means it holds nothing. No children, no content. Just attributes and vibes. ๐ง
The keystyle element is literally the glow-up pass for key phrases in the document โ it hands over the semantic and font info for them. ๐
So here's the vibe: when a key element shows up in the document, the whole toss list of keystyle elements gets searched (yes, the original says "ssearched" and we love her for it ๐ซถ) and the system tries to match the class and ssi attributes of the key element โ if it has any โ against the class and ssi attributes of the keystyle. If the keystyle specifies an rlevel attribute, the search gets even more refined by matching the level of the block containing the paragraph ( p) to the rlevel of the keystyle. And if the key element has no ssi attribute, the search in the toss goes looking for a keystyle element with no ssi specified. A keystyle element with no ssi specified matches any ssi in a key element, although an explicit class/ssi pair is chosen in preference. โจ
The way that when a match is found, the font information contained in the keystyle is used in formatting the key element? Iconic. That's the whole point. ๐
๐ The attributes of keystyle (all of them, no skips, periodt)
classโacroโ Required โ The general type of thekeyelement in the document. The values are:acrobookemphjargonl10nnamequoteproductpub-littermdeftermmach-inmach-outmach-contudefkey
ssiโCDATAโ Optional โ A source semantic identifier. This identifier is chosen by the author of a higher level DTD to SDL translator. It may either reflect the meaning of the markup in the original document, or it may reflect the actual generic identifier in the original document. The source semantic identifier may be used to assist in semantic searches of the SDL-conforming document by preserving the original intent of the markup. And when the original markup conforms to a domain-specific DTD, thessimay be used to enable structured searches of the SDL-conforming document by preserving the original generic identifiers. Obsessed with the preservation of intent, honestly. ๐ฆrlevelโNUMBERโ Optional โ Used to further refine matches of theclassandssiattributes. If present, therlevelof thekeystyleis matched against the level of the block containing the paragraph (p) containing thekeyelement. Match-ception, lowkey. ๐ซphraseโCDATAโ Optional โ A natural language phrase describing the semantics (meaning) of the element in the original SGML document that was translated into thiskey. This phrase can be used to present an interface to the reader for searching or otherwise examining the document. It's giving "human-readable, bestie". ๐ซถsrch-wtโNUMBERโ Optional โ A number indicating the likelihood that this element contains an actual hit when doing a full-text search. It may be used as a relevance indicator. Relevance queen. ๐pointszโNUMBERโ Optional โ The height of the font in points. By default, the main body of the document is 10 point. (Ten. Point. Default. Don't forget it. ๐ )set-widthโNUMBERโ Optional โ The width of the font in points; the default is the point size. The set width is similar to point size but refers to relative width rather than height. For example, an 8 point font based on a square would be 8 pt., 8 set. Square font supremacy ๐ชcolorโCDATAโ Optional โ One of the 42 common desktop environment (CDE) colors orRGB:rrrr/gggg/bbbb.xlfd,xlfdi,xlfdb,xlfdibโCDATAโ Optional โ These attributes should always be specified as a group (fr fr, do not split them up ๐). They are X logical font descriptions (XLFD) typeface names for use on the X Window System. Specified, for example, as-adobe-helvetica-bold-i-narrow-*-. The four specifications are for normal, italic, bold and bold-italic. These attributes should only be specified if the author is sure of exactly what font is desired. In the usual case, only the logical typeface specifcations (style,spacing,weight,slant) are given.typenam,typenami,typenamb,typenamibโCDATAโ Optional โ These attributes should always be specified as a group too โ they're a package deal ๐. They are the MS-Windows typeface name with a maximum of 32 characters. There is one specification each for normal, italic, bold and bold-italic. These attributes should only be specified if the author is sure of the desired font and, in the usual case, only provides the following logical type specifications.styleโserif,sans-serif,symbolโ Optional โ The font style.spacingโmonospace,propspaceโ Optional โ Specifies fixed versus proportional spacing.weightโmedium,boldโ Optional โ Specifies normal versus bold font.slantโroman,italic,rev-italicโ Optional โ Specifies Roman, italic or reverse italic font.specialโunderline,strikeout,noneโ Optional โ Special attribute of the font. Theunderlinevalue is interpreted as appropriate for the font. Some non-European fonts use overlining for the purpose filled by underlining in European fonts. Cultural font differences, we respect them ๐tgroup dispwid="6.08in"
๐ HEADSTYLE ๐
๐ Purpose
Provides formatting, font and semantic information for headings ( head and subhead). Basically the keystyle treatment but for your headings โ main character energy for your titles. โจ๐
โจ SYNOPSIS โจ
okay bestie, here's the whole headstyle declaration in all its glory โ read it slow, it's a lot ๐
&<!ELEMENT headstyle - O EMPTY >
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
&<!ATTLIST headstyle class (label |
head |
caption |
undefhead ) #REQUIRED
ssi CDATA #IMPLIED
rlevel NUMBER #IMPLIED
phrase CDATA #IMPLIED
srch-wt CDATA #IMPLIED
orient (left-orient |
center-orient |
right-orient |
left-corner-orient |
right-corner-orient ) #IMPLIED
vorient (top-vorient |
bottom-vorient |
center-vorient ) #IMPLIED
placement (object |
parent ) #IMPLIED
headw CDATA #IMPLIED
stack (horiz |
vert ) #IMPLIED
flow (wrap |
nowrap ) #IMPLIED
phrase CDATA #IMPLIED
srch-wt NUMBER #IMPLIED
pointsz NUMBER #IMPLIED
set-width NUMBER #IMPLIED
color CDATA #IMPLIED
xlfd CDATA #IMPLIED
xldfi CDATA #IMPLIED
xlfdb CDATA #IMPLIED
xlfdib CDATA #IMPLIED
typenam CDATA #IMPLIED
typenami CDATA #IMPLIED
typenamb CDATA #IMPLIED
typenamib CDATA #IMPLIED
style (serif |
sans-serif |
symbol ) #IMPLIED
spacing (monospace |
propspace ) #IMPLIED
weight (medium |
bold ) #IMPLIED
slant (roman |
italic |
rev-italic ) #IMPLIED
special (underline |
strikeout |
none ) #IMPLIED
f-margin CDATA #IMPLIED
l-margin CDATA #IMPLIED
r-margin CDATA #IMPLIED
t-margin CDATA #IMPLIED
b-margin CDATA #IMPLIED
border (no-border |
full-border |
horizontal-border |
vertical-border |
top-border |
bottom-border |
left-border |
right-border ) #IMPLIED
justify (left-justify |
right-justify |
center-justify |
numeric-justify ) #IMPLIED
vjust (top-vjust |
bottom-vjust |
center-vjust ) #IMPLIED >
tgroup dispwid="6.58in"
likeโฆ look at her go ๐ซถ she is thriving on quantity. every attribute is listed, nothing skipped, and yes class is the one that's #REQUIRED โ the rest are all #IMPLIED, no pressure ๐
๐ DESCRIPTION ๐
so what does headstyle actually do? she's the element that carries the semantic, font and formatting info for headings โ specifically head and subhead โ in the document. main character of the heading world, honestly ๐
Here's the vibe check on how matching works, bestie, because this part is lowkey the whole point:
- When a heading pops up in the document and that heading has an
ssiattribute, thetosslist ofheadstyleelements gets searched โจ and an attempt is made to match theclassandssiattributes of the heading to theclassandssiattributes of theheadstyle. - If the
headstylespecifies anrlevelattribute, the search gets further refined ๐ by matching the level of the element containing the heading to therlevelof theheadstyle. - And if the element containing the heading doesn't have a
levelattribute? then the level of its containing element is used, and so on. it just keeps going up the chain, she's persistent like that ๐ง - A
headstyleelement with nossispecified matches anyssiin aheadelement โ though an explicitclass/ssipair is chosen in preference. so the specific one wins, periodt ๐
And then โ the slay โ when a match is found, the font and style information contained in the headstyle is used in formatting the heading. that's it, that's the payoff ๐ธ
okay so, the attributes of headstyle are:
class(label, Required) โ the general type of the heading in the document. The label values arehead,annotation,phead, andudefhead.ssi(CDATA, Optional) โ a source semantic identifier. This identifier is chosen by the author of a higher level DTD to SDL translator. It may either reflect the meaning of the markup in the original document or it may reflect the actual generic identifier in the original document. The source semantic identifier may be used to assist in semantic searches of the SDL-conforming document by preserving the original intent of the markup. When the original markup was conforming to a domain-specific DTD, thessimay be used to enable structured searches of the SDL-conforming document by preserving the original generic identifiers.rlevel(NUMBER, Optional) โ used to further refine matches of theclassandssiattributes. If present, therlevelof theheadstyleis matched against the level of the element containing the heading or, if none, the level of the first containing element with alevelattribute.phrase(CDATA, Optional) โ a natural language phrase describing the semantics (meaning) of the element in the original SGML document that was translated into this heading. This phrase can be used to present an interface to the reader for searching or otherwise examining the document.srch-wt(NUMBER, Optional) โ a number indicating the likelihood that this element contains an actual hit when doing a full-text search.srch-wt(NUMBER, Optional) โ a number indicating the likelihood that this element contains an actual hit when doing a full-text search. yes bestie, the source lists this one twice, so here it is twice ๐orient(left-orient,center-orient,right-orient,left-margin-orient,right-margin-orient,left-corner-orient,right-corner-orient, Optional) โ the horizontal orientation of the head with respect to its associated element or of the subhead with respect to its head. The default iscenter-orient. This value is used in conjunction with thevorientattributeto orient the heading. The corner orientations are to place the heading in one of the four corners above or below (top-vorientorbottom-vorient) and to the right or left (right-corner-orientorleft-corner-orient) of the associated element. The margin orientations left or right justified this heading with respect to the text of the heading parent. For example, aheadstylewithorient=left-margin-orientandvorient=top-vorientplaces the heading above the parent element aligning the left margins of the parent and the heading.vorient(top-vorient,bottom-vorient,center-vorient, Optional) โ the vertical orientation of the head with respect to its associated element or of the subhead with respect to its head. The default istop-vorient.placement(object,parent, Optional) โ this attribute applies only toheadelements. This attribute indicates whether theorientandvorientattributes apply to theheadproper or to the entireheadobject, including all itssubheadelements. This attribute should default toparent.headw(CDATA, Optional) โ the percentage of the available space for the current element that should be given to itsheador the percentage of theheadthat should be given to itssubhead. It is expressed as a fixed point number 1 to 10000 with an implied decimal point two places to the left of the right side.stack(horiz,vert, Optional) โ where to put this head or subhead if it collides with one already placed. Horizontal stacking means place this one to the right of the other. Vertical stacking means place this one under the other. This attribute should default tovert.flow(wrap,nowrap,join, Optional) โ specifies whether the text of the containing element should flow around the heading or not. The default isno-wrap. A flow ofjoinimplies starting the content of the surrounding element immediately after this head. That is, on the same line as the bottom of this head.pointsz(NUMBER, Optional) โ the height of the font in points. By default, the main body of the document is 10 point.set-width(NUMBER, Optional) โ the width of the font in points; the default is the point size.
The set width is similar to point size but refers to relative width rather than height. For example, an 8 point font based on a square would be 8 pt., 8 set.
colorโCDATA, Optional. One of the42CDE colors orRGB:rrrr/gggg/bbbb.xlfd,xlfdi,xlfdb,xlfdibโCDATA, Optional. These attributes should always be specified as a group. Theyโre X logical font description (XLFD) typeface names for use on the X Window System, specified, for example, as-adobe-helvetica-bold-i-narrow-*-. The four specifications are for normal, italic, bold and bold-italic. This attribute should only be specified if the author is sure of the desired font. In the usual case, only the logical typeface specifications (style,spacing,weight,slant) is given.typenam,typenami,typenamb,typenamibโCDATA, Optional. These attributes should always be specified as a group. Theyโre the MS-Windows typeface name with a maximum of32characters. There is one specification each for normal, italic, bold and bold-italic. These attributes should only be specified if the author is sure of the desired font and, in the usual case, only provide the following logical type specifications.styleโserif,sans-serif,symbol; Optional. The font style.spacingโmonospace,propspace; Optional. Specifies fixed versus proportional spacing.weightโmedium,bold; Optional. Specifies normal versus bold font.slantโroman,italic,rev-italic; Optional. Specifies Roman, italic or reverse italic font.specialโunderline,strikeout,none; Optional. Special attribute of the font. Theunderlinevalue is interpreted as appropriate for the font. Some non-European fonts use overlining for the purpose filled by underlining in European fonts.f-marginโCDATA, Optional. The first line margin (it may be negative). A number used to indicate the extension or indentation at the start of a paragraph. The default value is zero.l-marginโNUMBER, Optional. The left margin. This value is additive, that is, if an element has a left margin and is (logically) contained in another element having a left margin, the contained element will have a left margin equal to the sum of the two values. This value is measured in current character widths. The default value is zero.r-marginโNUMBER, Optional. The right margin. This value is additive, that is, if an element has a right margin and is (logically) contained in another element having a right margin, the contained element will have a right margin equal to the sum of the two values. This value is measured in current character widths. The default value is zero.t-marginโNUMBER, Optional. The top margin. This value takes the maximum, that is, if an element has a top margin and is (logically) contained in another element having a top margin, the two elements together have a top margin equal to the greater of the two. This value is measured in current line height. The default value is zero.b-marginโNUMBER, Optional. The bottom margin. This value takes the maximum, that is, if an element has a bottom margin and is (logically) contained in another element having a bottom margin, the two elements together have a bottom margin equal to the greater of the two. This value is measured in current line height. The default value is zero.borderโno-border,full-border,horizontal-border,vertical-border,top-border,bottom-border,left-border,right-border; Optional. Specifies the decoration type. The default isno-border.justifyโleft-justify,right-justify,center-justify,numeric-justify; Optional. Horizontal justification of the text or data. The default isleft-justify. Thenumeric-justifyvalue implies alignment of decimal points.vjustโtop-vjust,bottom-vjust,center-vjust; Optional. The alignment of the head or subhead in the space carved out by the largest head or subhead in the same plane. That is, should this head or subhead be aligned with the top of the largest related head or subhead, the bottom, or the center. In general, thevjustattribute may be seen as justifying text vertically. If a head or subhead is being placed alongside another head or subhead and the other one
โฆso when the thing you're placing is longer than the thing already sitting there? The one being placed gets an implicit length equal to the already-placed one's length, and then the vjust attribute justifies the text inside that length. Slay, that's the whole rule ๐
tgroup dispwid="7.52in"
๐ FORMSTYLE ๐
๐ Purpose ๐
okay so โ this one hands out the formatting, the font and the semantic tea for form elements. All three. Iconic multitasking, we love to see it โจ
โจ SYNOPSIS โจ
like, literally the whole declaration, no edits, here it is bestie:
&<!ELEMENT formstyle - O EMPTY >
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
&<!ATTLIST formstyle (class table |
list |
text |
udeffrmt ) #REQUIRED
ssi CDATA #IMPLIED
rlevel NUMBER #IMPLIED
phrase CDATA #IMPLIED
srch-w CDATA #IMPLIED
phrase CDATA #IMPLIED
srch-wt NUMBER #IMPLIED
pointsz NUMBER #IMPLIED
set-width NUMBER #IMPLIED
color CDATA #IMPLIED
xlfd CDATA #IMPLIED
xldfi CDATA #IMPLIED
xlfdb CDATA #IMPLIED
xlfdib CDATA #IMPLIED
typenam CDATA #IMPLIED
typenami CDATA #IMPLIED
typenamb CDATA #IMPLIED
typenamib CDATA #IMPLIED
style (serif |
sans-serif |
symbol ) #IMPLIED
spacing (monospace |
propspace ) #IMPLIED
weight (medium |
bold ) #IMPLIED
slant (roman |
italic |
rev-italic ) #IMPLIED
special (underline |
strikeout |
none ) #IMPLIED
f-margin CDATA #IMPLIED
l-margin CDATA #IMPLIED
r-margin CDATA #IMPLIED
t-margin CDATA #IMPLIED
b-margin CDATA #IMPLIED
border (no-border |
full-border |
horizontal-border |
vertical-border |
top-border |
bottom-border |
left-border |
right-border ) #IMPLIED
vjust (top-vjust |
bottom-vjust |
center-vjust ) #IMPLIED >
tgroup dispwid="6.47in"
๐ซถ quick heads up: yes, phrase shows up twice in that ATTLIST. That's how the page has it โ bestie, we do not clean up the original. Copy it exactly, both times, no cap ๐
๐ธ DESCRIPTION ๐ธ
So the formstyle element is your little info packet of semantic, font and formatting deets for form elements. That's the vibe. ๐
Here's the whole matching ritual, and honestly it's giving detective main character energy ๐: when a form element shows up in the document and that element has an ssi attribute, the toss list of formstyle elements gets searched โ and the search tries to match the element's class and ssi attributes against the formstyle's class and ssi attributes. Matchy matchy, cute.
And if the formstyle specifies an rlevel attribute? The search gets further refined by matching the nesting level of the form to the rlevel of the formstyle. Extra precision, extra slay โจ
โจ And here's the little plot twist โ a formstyle element with no ssi specified matches any ssi in a form, although an explicit class/ssi pair is chosen in preference. So the generic one is the fallback bestie, not the first pick ๐
When a match is found, the font and style information contained in the formstyle is used in formatting the element. Done. That's the whole glow-up ๐ญ๐
okay so the attributes of formstyle are:
classโ the values it takes aretable,cell,list item,text,udeffrmt. Required. It's the general function of the form in the document. periodt. ๐ssiโCDATA, Optional. It's a source semantic identifier, and bestie, this identifier is chosen by the author of a higher level DTD to SDL translator. It may either reflect the meaning of the markup in the original document, or it may reflect the actual generic identifier in the original document. Why do we even care? Because the source semantic identifier may assist in semantic searches of the SDL-conforming document by preserving the original intent of the markup. And when the original markup conforms to a domain specific DTD, thessimay be used to enable structured searches of the SDL-conforming document by preserving the original generic identifiers. iconic behavior honestly ๐โจrlevelโNUMBER, Optional. Used to further refine matches of theclassandssiattributes. If it's present, therlevelof the formstyle is matched against the nesting level of the form being formatted. cute little filter ๐phraseโCDATA, Optional. A natural language phrase describing the semantics (meaning) of the element in the original SGML document that was translated into this form. This phrase can be used to present an interface to the reader for searching or otherwise examining the document. it's giving "human-readable label" energy ๐ซถsrch-wtโNUMBER, Optional. A number indicating the likelihood that this element contains an actual hit when doing a full-text search. lowkey a vibe check for search results ๐colwโCDATA, Optional. Column widths โ one specification for each column in the form. The amounts given for each column are summed, and each column is then given a fraction of the available formatting space equal to its specification divided by the total. ๐งฎ
Specifications take the form D[,T[,G]] where D is the desired (optimal) column width, T is the amount the column is willing to grow (take) and, if G is unspecified, willing to give (that is, plus or minus). G is the amount the column is willing to shrink (give). Column specifications are delimited by a space.
For example, a specification of:
COLW=``10 90''
implies two columns with the first taking 10% of the available space and the second taking 90%. If either column has a graphic or unsplittable word that pushes it over the size specified, a horizontal scrollbar is added and the available space is grown until the requirement can be met.
A specification of:
COLW=``20,5 80,5''
implies two columns with the first optimally taking 20% and the second optimally taking 80%. Each column, however, is willing to shrink or grow such that the ranges of sizes run from 15/85 to 25/75. If the sizes cannot be adjusted to contain a graphic or unsplittable word, a horizontal scrollbar is added and the available space is grown until the requirement is met.
Finally, a specification of:
COLW=``20,10,5 80,5,10''
implies two columns with the first optimally taking 20% of the available space but willing to take as much as 30% or as little as 15%. The second column desires 80% but is willing to take as much as 85% or as little as 70% of the available space. A scrollbar may be added to the viewed space if the constraints cannot be met. ๐ค
The specifications need not all be uniformly singles, doubles or triples. That is, a legal specification could take the form:
COLW=``20,5 80,0,5''
that translates to two columns; the first desiring 20% of the available space but willing to take as much as 25% or as little as 15/80 (18.75%). The second column desires 80% of the available space, but is willing to take as little as 75%.
The totals in the above examples usually add up to 100. This value is mere convention for ease of use โ in practice, the sum of desired points may be any number. ๐
If the number of columns specified is greater than the ncols attribute of the fstyle of the related form, the extra specifications are ignored. If the number of columns specified is less than the ncols attribute, the final specification is replicated to cover the actual number of columns. no cap, that's the whole rule ๐ซ
coljโCDATA, Optional. The column justification is the default justification applied to each cell in the column. This attribute is a list ofncols
...letters chosen from l, r, c and d. These letters specify left, right, centered and decimal justification, respectively. This attribute defaults to l.
pointszโ NUMBER, optional. The height of the font in points. By default, the main body of the document is 10 point. โจset-widthโ NUMBER, optional. The width of the font in points; the default is the point size. Set width is lowkey similar to point size but it refers to relative width rather than height. For example, an 8 point font based on a square would be 8 pt., 8 set.colorโ CDATA, optional. One of the 42 common desktop environment (CDE) colors, orRGB:rrrr/gggg/bbbb.xlfd,xlfdi,xlfdb,xlfdibโ CDATA, optional. Okay so these attributes should always be specified as a group, no cap. They are X logical font descriptions (XLFD) typeface names for use on the X Window System. Specified, for example, as-adobe-helvetica-bold-i-narrow-*-. The four specifications are for normal, italic, bold and bold-italic. These attributes should only be specified if the author is sure of exactly what font is desired. In the usual case, only the logical typeface specifications (style,spacing,weight,slant) is given. ๐typenam,typenami,typenamibโ CDATA, optional. These attributes should always be specified as a group with a maximum of 32 characters. There is one specification each for normal, italic, bold and bold-italic. These attributes should only be specified if the author is sure of the desired font and, in the usual case, only provides the following logical type specifications.styleโ values:serif(the default),sans-serif,symbol. The font style. ๐spacingโ values:monospace,propspace. Specifies fixed versus proportional spacing.weightโ values:medium(the default),bold. Specifies normal versus bold font.slantโ values:roman(the default),italic,rev-italic. Specifies Roman, italic or reverse italic font.specialโ values:underline(the default),italic,rev-italic,strikeout,none. Special attribute of the font. Theunderlinevalue is interpreted as appropriate for the font. Some non-European fonts use overlining for the purpose filled by underlining in European fonts. ๐ฆl-marginโ NUMBER, optional. The left margin. This value is additive, that is, if an element has a left margin and is (logically) contained in another element having a left margin, the contained element will have a left margin equal to the sum of the two values. This value is measured in current character widths and defaults to zero.r-marginโ NUMBER, optional. The right margin. This value is additive, that is, if an element has a right margin and is (logically) contained in another element having a right margin, the contained element will have a right margin equal to the sum of the two values. This value is measured in current character widths and defaults to zero.t-marginโ NUMBER, optional. The top margin. This value takes the maximum, that is, if an element has a top margin and is (logically) contained in another element having a top margin, the two elements will together have a top margin equal to the greater of the two. This value is measured in current line height and defaults to zero.b-marginโ NUMBER, optional. The bottom margin. This value takes the maximum, that is, if an element has a bottom margin and is (logically) contained in another element having a bottom margin, the two elements together have a bottom margin equal to the greater of the two. This value is measured in current line height and defaults to zero. ๐borderโ values:no-border(the default),full-border,horizontal-border,vertical-border,top-border,bottom-border,left-border,right-border. Specifies the decoration type. The default isno-border.vjustโ values:top-vjust(the default),bottom-vjust,center-vjust. Vertical justification of the text of this element. The default istop-vjust.
tgroup dispwid="6.79in"
๐ FRMTSTYLE ๐
๐ Purpose ๐
Provides formatting, font and semantic information for virpage, block and p elements. Literally the glow-up department for your text, periodt. โจ
&<!ELEMENT frmtstyle - O EMPTY >
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
&<!ATTLIST frmtstyle (class table |
list |
text |
udeffrmt ) #REQUIRED
ssi CDATA #IMPLIED
rlevel NUMBER #IMPLIED
phrase CDATA #IMPLIED
srch-wt CDATA #IMPLIED
phrase CDATA #IMPLIED
srch-wt NUMBER #IMPLIED
pointsz NUMBER #IMPLIED
set-width NUMBER #IMPLIED
color CDATA #IMPLIED
xlfd CDATA #IMPLIED
xldfi CDATA #IMPLIED
xlfdb CDATA #IMPLIED
xlfdib CDATA #IMPLIED
typenam CDATA #IMPLIED
typenami CDATA #IMPLIED
typenamb CDATA #IMPLIED
typenamib CDATA #IMPLIED
style (serif |
sans-serif |
symbol ) #IMPLIED
spacing (monospace |
propspace ) #IMPLIED
weight (medium |
bold ) #IMPLIED
slant (roman |
italic |
rev-italic | #IMPLIED
special (underline |
strikeout |
none ) #IMPLIED
f-margin CDATA #IMPLIED
l-margin CDATA #IMPLIED
r-margin CDATA #IMPLIED
t-margin CDATA #IMPLIED
b-margin CDATA #IMPLIED
border (no-border |
full-border |
horizontal-border |
vertical-border |
top-border |
bottom-border |
left-border |
right-border ) #IMPLIED
vjust (top-vjust |
bottom-vjust |
center-vjust ) #IMPLIED
justify (left-justify |
right-justify |
center-justify |
numeric-justify ) #IMPLIED >
tgroup dispwid="6.60in"
๐ซถ DESCRIPTION ๐ซถ
Okay so the frmtstyle element is literally the glow-up station ๐
โ it carries the semantic, font and formatting info for virpage, block and p elements. She's the one holding the whole aesthetic together, no cap.
Here's how the matching actually goes down, bestie, pay attention ๐:
When one of the elements listed in the FRMSTYLE Synopsis shows up in the document and that element has an ssi attribute, the toss list of frmtstyle elements gets searched, and a match is attempted between the class and ssi attributes of the element and the class and ssi attributes of the frmtstyle. Like, are you the same person or not, bestie? ๐
If the frmtstyle specifies an rlevel attribute, the search gets further refined โ fancy, I know โ by matching the level of the element containing the element to the rlevel of the frmtstyle. And if that element doesn't have a level attribute? Then the level of its containing element is used, and so on, and so on, all the way up ๐ฅ. It's giving ancestral lineage investigation, honestly.
One exception to clock: a frmtstyle element with no ssi specified matches any ssi in a formattable element โ but an explicit class/ssi pair always gets chosen in preference. So the specific queen wins, periodt ๐.
And when a match is found? The font and style info chillin' inside that frmtstyle gets used to format the element. Slay, that's the whole point โจ.
classโ Required. This is the general function of the form in the document, and the values it can take aretable,cell,list,item,text, andudeffrmt. Bestie, this one is literally not optional, so pick one ๐ssiโ Optional, typeCDATA. The general function of the form โ a source semantic identifier. This identifier is chosen by the author of a higher level DTD to SDL translator. It may either reflect the meaning of the markup in the original document or it may reflect the actual generic identifier in the original document. The source semantic identifier may be used to assist in semantic searches of the SDL-conforming document by preserving the original intent of the markup. And when the original markup conforms to a domain-specific DTD, thessimay be used to enable structured searches of the SDL-conforming document by preserving the original generic identifiers. Ik it's a lot of words but it's giving โจpreserve the vibe of the original markupโจrlevelโ Optional, typeNUMBER. Used to further refine matches of theclassandssiattributes. If present, therlevelof thefrmtstyleis matched against the level of the element being formatted or, if none, the level of the first containing element with alevelattribute. Lowkey the detective of the attribute squad ๐phraseโ Optional, typeCDATA. A natural language phrase describing the semantics (meaning) of the element in the original SGML document that was translated into this element. This phrase can be used to present an interface to the reader for searching or otherwise examining the document. Fr fr it's the human-readable receipt of what this thing means ๐งพsrch-wtโ Optional, typeNUMBER. A number indicating the likelihood that this element contains an actual hit when doing a full-text search. It's giving search-engine main character energy ๐pointszโ Optional, typeNUMBER. The height of the font in points. By default, the main body of the document is10point. No cap, ten points is the default glow-up โจset-widthโ Optional, typeNUMBER. The width of the font in points; the default is the point size. The set width is similar to point size but refers to relative width rather than height. For example, an8point font based on a square would be8pt.,8set. Width not height, bestie โ it's a whole different axis ๐colorโ Optional, typeCDATA. One of the42CDE colors orRGB:rrrr/gggg/bbbb. Forty-two whole colors, that's so many fits to choose from ๐xlfd,xlfdi,xlfdb,xlfdibโ Optional, and heads up: these attributes should always be specified as a group ๐ซถ They are X logical font description (XLFD) typeface names for use on the X Window System. Specified, for example, as-adobe-helvetica-bold-i-narrow-*-. The four specifications are for normal, italic, bold and bold-italic. These attributes should only be specified if the author is sure of exactly what font is desired. In the usual case, only the logical typeface specifications (style,spacing,weight,slant) are given. Ngl, don't go naming fonts unless you're sure sure ๐typenam,typenami,typenamb,typenamibโ Optional, and again: these attributes should always be specified as a group. They are the MS-Windows typeface names with a maximum of32characters. There is one specification each for normal, italic, bold and bold-italic. These attributes should only be specified if the author is sure of the desired font. In the usual case, only the logical typeface specifications (style,spacing,weight,slant) are given. Same rule as above, just Windows-flavored ๐ชstyleโ Optional. The font style, and your options areserif,sans-serif, andsymbol. Pick your fighter ๐ฅspacingโ Optional. Specifies fixed versus proportional spacing, viamonospaceandpropspace. Aesthetic AND functional, we love to see it ๐weightโ Optional. Specifies normal versus bold font, i.e.mediumorbold. Bold is a personality, honestly ๐ฅslantโ Optional. Specifies Roman, italic or reverse italic font โ soroman,italic,rev-italic. Reverse italic is such an underrated icon ๐specialโ Optional. Special attribute of the font. The values areunderline,strikeout, andnone. Theunderlinevalue is interpreted as appropriate for the font. Some non-European fonts use overlining for the purpose filled by underlining in European fonts. Little cultural font moment, we respect it ๐ธf-marginโ Optional, typeCDATA. The first line margin (it may be negative). A number used to indicate the extension or indentation at the start of a paragraph. The default value iszero. Yes bestie, negative is allowed, live your truth ๐ญl-marginโ Optional, typeNUMBER. The left margin. This value is additive, that is, if an element has a left margin and is (logically) contained in another element having a left margin, the contained element will have a left margin equal to the sum of the two values. This value is measured in current character widths. The default value iszero. Additive margins, so they stack like group-chat notifications ๐r-marginโ Optional, typeNUMBER. The right margin. This value is additive, that is, if an element has a right margin and is (logically) contained in another element having a right margin, the contained element will have a right margin equal to the sum of the two values. This value is measured in current character widths. The default value iszero. Same stacking situation, just on the right side โจ
Okay so we're still deep in the attribute table and these next ones are giving layout realness ๐
t-marginโ typeNUMBER, optional. The top margin. This value takes the maximum, meaning if an element has a top margin and is (logically) contained in another element that also has a top margin, the two elements together have a top margin equal to the greater of the two. Measured in current line height. Default value iszero.b-marginโ typeNUMBER, optional. The bottom margin. This value takes the maximum, meaning if an element has a bottom margin and is (logically) contained in another element that also has a bottom margin, the two elements together have a bottom margin equal to the greater of the two. Measured in current line height. Default value iszero.borderโ optional. Specifies the decoration type. Values areno-border,full-border,horizontal-border,vertical-border,top-border,bottom-border,left-border,right-border. The default isno-border.vjustโ optional. Vertical justification of the text of this element. Values aretop-vjust,bottom-vjust,center-vjust. The default istop-vjust.justifyโ optional. Horizontal justification of the text or data. Values areleft-justify,right-justify,center-justify,numeric-justify. The default isleft-justify. Thenumeric-justifyvalue implies alignment of decimal points.
And the table wrapper literally says:
tgroup dispwid="6.90in"
๐ GRPHSTYLE
๐ฏ Purpose
It provides formatting and semantic information for refitem elements with a class attribute value taken from the graphic class. Periodt. โจ
๐ธ SYNOPSIS
&<!ELEMENT grphstyle - O EMPTY >
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
&<!ATTLIST grphstyle (class figure |
in-line |
button |
icon |
udefgrph ) #REQUIRED
ssi CDATA #IMPLIED
rlevel NUMBER #IMPLIED
phrase CDATA #IMPLIED
l-margin CDATA #IMPLIED
r-margin CDATA #IMPLIED
t-margin CDATA #IMPLIED
b-margin CDATA #IMPLIED
border (no-border |
full-border |
horizontal-border |
vertical-border |
top-border |
bottom-border |
left-border |
right-border ) #IMPLIED
vjust (top-vjust |
bottom-vjust |
center-vjust ) #IMPLIED
justify (left-justify |
right-justify |
center-justify ) #IMPLIED >
tgroup dispwid="6.49in"
โจ DESCRIPTION (the grphstyle era) โจ
Okay bestie, so the grphstyle element is literally the glow-up crew for refitem elements that have a class attribute pulled straight from the graphic class. It hands over the semantic, font and formatting deets. Iconic behavior, truly.
So here's the vibe check on how matching works ๐
When one of the above elements shows up in the document and it's got an ssi attribute, the toss list of grphstyle elements gets searched, and we try to match the class and ssi attributes of the element against the class and ssi attributes of the grphstyle. If the grphstyle also specifies an rlevel attribute, the search gets even more refined by matching the level of the element containing the element to the rlevel of the grphstyle.
And like, where does a refitem's level even come from? It's taken from the level of its enclosing block, bestie. If that enclosing block doesn't have a level attribute, the level of its enclosing virpage gets used instead. Also super important: a grphstyle element with no ssi specified matches any ssi in a refitem element โ but a real explicit class/ssi pair gets chosen in preference. Periodt. ๐
When a match is found, the style info in the grphstyle is used in formatting the graphic. Slay.
๐ The attributes of grphstyle ๐
classโ Required. The general function of the graphic in the document. Your options are literally:figurein-linebuttoniconudefgrph
ssiโ CDATA, Optional. A source semantic identifier. This identifier is chosen by the author of a higher level DTD to SDL translator. It may either reflect the meaning of the markup in the original document, or it may reflect the actual generic identifier in the original document. The source semantic identifier may be used to assist in semantic searches of the SDL-conforming document by preserving the original intent of the markup. And when the original markup was conforming to a domain-specific DTD, thessimay be used to enable structured searches of the SDL-conforming document by preserving the original generic identifiers. (Basically it's the receipts for what the markup used to be, iykyk.)rlevelโ NUMBER, Optional. Used to further refine matches of theclassandssiattributes. If present, therlevelof thegrphstyleis matched against the level of the first containing element with alevelattribute.phraseโ CDATA, Optional. A natural language phrase describing the semantics (meaning) of the element in the original SGML document that was translated into this element. This phrase can be used to present an interface to the reader for searching or otherwise examining the document. Very "here's a lil human-readable summary of the whole thing" of it.l-marginโ NUMBER, Optional. The left margin. This value is additive โ that is, if an element has a left margin and is (logically) contained in another element having a left margin, the contained element will have a left margin equal to the sum of the two values. Measured in current character widths. Default is zero.r-marginโ NUMBER, Optional. The right margin. Also additive โ if an element has a right margin and is (logically) contained in another element having a right margin, the contained element will have a right margin equal to the sum of the two values. Measured in current character widths. Default is zero.t-marginโ NUMBER, Optional. The top margin. This one takes the maximum instead โ if an element has a top margin and is (logically) contained in another element having a top margin, the two elements together have a top margin equal to the greater of the two. Measured in current line height. Default is zero.b-marginโ NUMBER, Optional. The bottom margin. Takes the maximum too โ if an element has a bottom margin and is (logically) contained in another element having a bottom margin, the two elements together have a bottom margin equal to the greater of the two. Measured in current line height. Default is zero.borderโ Optional. Specifies the decoration type. The default isno-border. The choices are:no-borderfull-borderhorizontal-bordervertical-bordertop-borderbottom-borderleft-borderright-border
vjustโ Optional. Vertical justification of the graphic. The default istop-vjust. Options:top-vjustbottom-vjustcenter-vjust
justifyโ Optional. Horizontal justification of the graphic. The default isleft-justify. Options:left-justifyright-justifytcenter-justify
๐ซถ Quick heads-up: yeah,right-justifytreally does have that extraton the end. That's not me typing with my elbow, that's literally what's on the page. Copy it exactly how it is or the parser will be like "???" โ no cap.
And then there's this little stray artifact just chilling on the page, a leftover from the table that ate too much at brunch:
tgroup dispwid="6.58in"
She's not really an attribute, she's just there. Leave her be. ๐
๐ SEE ALSO ๐
Both absolute icons, go read them, they're giving main character energy. ๐
And that's a wrap on part 27, bestie โ the whole page is literally source/version dtsdldtd(other), and there's not a single date on the footer to be found, so we're just gonna vibe with that. Thanks for reading all 27 parts, you're a real one ๐ซถโจ๐๐ฆ๐
๐ฆ where this page comes from
- nixos 26.05: cde 2.5.3
- ๐ girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms