Last revised 1996年08月16日
Recent additions: keyword feature; lambda, #!key, let (letrec, let*, named let)
This draft describes an application profile of DSSSL designed for the formatting specification requirements of online SGML browsers and editors (including HTML browsers and editors). This subset, DSSSL Online (informally "dsssl-o"), supports the basic features needed to provide publisher-oriented formatting control of online displays and a minimum set of page-oriented features needed to provide utility printouts from browsers and editors.
Note that this draft is based on committee drafts of the full DSSSL Standard and may not accurately represent the final DSSSL Standard as published. Also, this document is not intended as an introduction to DSSSL, but rather as a description of conformance levels for users and implementors who have already read the standard. A PostScript copy of the DSSSL standard as published is available by anonymous FTP from ftp.ornl.gov in the directory /sgml/wg8/dsssl.
DSSSL (Document Style Semantics and Specification Language) is an International Standard, ISO/IEC 10179:1996, for specifying document transformation and formatting in a platform- and vendor-neutral manner. DSSSL can be used with any document format for which a property set can be defined according to the Property Set Definition Requirements of ISO/IEC 10744. In particular, it can be used to specify the presentation of documents marked up according to ISO 8879:1986, Standard Generalized Markup Language (SGML).
DSSSL consists of two main components: a transformation language and a style language. The transformation language is used to specify structural transformations on SGML source files. For example, a telephone directory structured as a series of entries ordered by last name could, by applying a transformation spec, be rendered as a series of entries sorted by first name instead. The transformation language can also be used to specify the merging of two or more documents, the generation of indexes and tables of contents, and other operations. While the transformation language is a powerful tool for gaining the maximum use from document databases, the focus in early DSSSL implementations will be on the style language component.
Within the style language, it is possible to identify a number of capabilities that for one reason or another should be considered optional for early implementations. Recognizing this, the designers of DSSSL designated certain features of the style language as optional and created a Core Query Language and a Core Expression Language specifically in order to make more limited implementations possible. However, they did not define any particular subset of the style language component within the standard itself, but rather left that task to industry organizations and standards bodies. This application profile is intended to be one such specification.
The current document grew out of discussions on the former DSSSL-Lite mailing list during the period from September through November 1995. These discussions culminated in a December 9, 1995 meeting of key SGML and DSSSL implementors in Boston hosted by Jon Bosak of Novell and chaired by the late Yuri Rubinsky of SoftQuad. The application profile resulting from that meeting was published on the Internet on December 12, 1995 as the document do951212.htm and announced at a workshop of the Fourth International World Wide Web Conference the same day.
In August 1996, the application profile was updated by Jon Bosak (now an employee of Sun Microsystems) to correct a number of discrepancies between the summary descriptions of flow object characteristics, which had been based on the September 1995 committee draft of the DSSSL specification, and the final DSSSL standard published in April 1996, and also to add certain optional features that are by consensus of the active DSSSL implementors now considered to be part of a minimal DSSSL implementation. These features include lambda, keywords, and let (including letrec, let*, and named let). This document is archived at sunsite.unc.edu in the directory /pub/sun-info/standards/dsssl/dssslo, from which it can be obtained by anonymous FTP.
This section summarizes the features and flow object classes that must be supported by a minimally conformant DSSSL Online application. Note that the appearance of a flow object class in this section does not imply that the minimal dsssl-o application supports all standard values of all characteristics associated with each flow object class; the extent of this support is detailed in the tables that appear later. The section numbers refer to sections in the DSSSL standard.
The following items are mandatory in the DSSSL standard and therefore in DSSSL Online.
Core query language, core expression language
Basic flow object classes
12.6.1 Sequence
12.6.2 Display group
12.6.6 Paragraph
12.6.7 Paragraph break
12.6.8 Line field
12.6.9 Sideline
12.6.11 Character
12.6.12 Leader
12.6.14 Rule
12.6.15 External graphic
12.6.17 Score
12.6.18 Box
12.6.22 Alignment point
12.6.23 Aligned column
The following flow object classes and features are optional in the full DSSSL Standard but are required in DSSSL Online.
Features: table, table-auto-width, online, simple-page, alignment, keyword
Syntactic keywords: lambda, #!key, letrec, let*, let (including named let)
Simple page flow object class
12.6.3 Simple page sequence
Table flow object classes
12.6.27.1 Table
12.6.27.2 Table part
12.6.27.3 Table column
12.6.27.5 Table row
12.6.27.6 Table cell
12.6.27.7 Table border
Online display flow object classes
12.6.28.1 Scroll
12.6.28.2 Multi-mode
12.6.28.3 Link
12.6.28.4 Marginalia
For reference purposes, this section lists those optional components of the full DSSSL Standard that need not be supported in applications claiming to minimally conform to the DSSSL Online application profile. The categorization of features and flow object classes used here does not appear in the standard itself but is provided as a possibly useful editorial device.
Features: page, multi-column, nested-column-set, combine-char, general-indirect, font-info, included-container, actual-characteristic
Complex typography flow object classes
12.6.4 Page sequence
12.6.5 Column set sequence
12.6.10 Anchor
12.6.16 Included container
12.6.19 Side-by-side
12.6.20 Side-by-side item
Features: bidi
Bidi flow object class
12.6.13 Embedded text
Features: vertical, inline-note, glyph-annotation, emphasizing-mark
Asian language flow object classes
12.6.21 Glyph annotation
12.6.24 Multi-line inline note
12.6.25 Emphasizing mark
Features: math
Mathematics flow object classes
12.6.26.1 Math sequence
12.6.26.2 Unmath
12.6.26.3 Subscript
12.6.26.4 Superscript
12.6.26.5 Script
12.6.26.6 Mark
12.6.26.7 Fence
12.6.26.8 Fraction
12.6.26.9 Radical
12.6.26.10 Math operator
12.6.26.11 Grid
12.6.26.12 Grid-cell
Full expression language
Full query language (SDQL)
Features: query, keyword
This section describes each flow object class in the DSSSL Online application profile and specifies minimum support for the characteristics of each flow object class.
In the tables below, the column headed Inh. indicates whether the characteristic is inherited (I) or non-inherited (N); the column headed Standard Values shows the values that are defined for each class in the full DSSSL standard; the column headed Standard Init/Default shows the initial or default value, if any, specified in the DSSSL standard; and the column headed Dsssl-o shows the minimum level of support to be expected in applications purporting to follow this application profile.
Dsssl-o support in the last column of each table is described as Standard, indicating that the characteristic is to be treated exactly as specified in the DSSSL Standard; Default, indicating that a minimal DSSSL Online application can, if necessary, substitute the default value specified in the Standard for any other legal value provided in a DSSSL style specification; Ignore, indicating that any value given for the characteristic can be ignored by a minimal DSSSL Online application; or Partial, indicating that some of the standard values must be supported, but not all of them. In the case of characteristics in the Partial category, the values for which support is not required are marked with asterisks (*). A minimal DSSSL Online application is allowed to substitute the standard initial or default value for any characteristic marked with an asterisk. However, every legal value must be propagated to inheriting flow objects when support for that value is required in the inheriting context.
A sequence flow object class is formatted to produce the concatenation of the areas produced by each of its children. It has a single principal port. Its children may be inlined or displayed.
NOTE: A sequence flow object is useful for specifying
inherited characteristics. For example, a sequence flow object with a
specification of a font-posture: characteristic may be
constructed for an emphasized phrase element in a paragraph.
A port of a flow object shall accept a sequence flow object if and only if it would accept each of the flow objects in that sequence.
A display-group flow object class is formatted to produce the concatenation of the areas produced by each of its children. It has a single principal port. Its children shall all be displayed and it is itself displayed.
NOTE: It will, therefore, cause a line break in a paragraph even if the display-group has no content.
Display group flow object class characteristics
A simple-page-sequence flow object class is formatted to produce a sequence of page areas. A simple-page-sequence flow object has a single principal port that accepts any displayed flow object.
NOTE: The simple-page-sequence flow object is intended for systems that wish to provide a very simple page layout facility. More complex page layouts can be obtained with the page-sequence and column-set-sequence flow object classes.
A simple-page-sequence flow object shall not be allowed within the content of any other flow object class.
A simple-page-sequence may have a single line header and footer containing text that is constant except for a page number.
NOTE: A document can contain multiple simple-page-sequences. For example, each chapter of a document could be a separate simple-page-sequence; this would allow the chapter title within a header or footer line.
The page shall be filled from top to bottom. The display size for
the contents of the simple-page-sequence shall be the value of the
page-width: less the value of the
left-margin: and right-margin:
characteristics.
Simple page sequence flow object class characteristics
Associated procedures:
(page-number-sosofo)
Returns an indirect-sosofo whose content is a sequence of character flow objects representing the page number of the page on which the first area resulting from the indirect flow object specified by the indirect-sosofo occurs.
(current-node-page-number-sosofo)
Returns an indirect-sosofo whose content is a sequence of character flow objects representing the page number of the primary flow object of the current node.
NOTE: This is intended to handle cross references in
conjunction with process-referent.
A paragraph flow object represents a paragraph. It has a single principal port. The contents of this port may be either inlined or displayed. Inline flow objects are formatted to produce line areas. Displayed flow objects implicitly specify a break, and their areas shall be added to the resulting sequence of areas. A paragraph flow object may only be displayed.
NOTE: Typically, a break implies that a new line is to be started.
Paragraph flow object class characteristics
In conjunction with the paragraph-break flow object class, a paragraph flow object can be used to represent a sequence of paragraphs. The paragraphs are separated by paragraph-break flow objects, which are atomic. Paragraph-break flow objects are allowed only in paragraph flow objects. All the characteristics that are applicable to a paragraph flow object are also applicable to a paragraph-break flow object. The characteristics of a paragraph-break flow object determine how the portion of the content of the paragraph flow object following that paragraph-break flow object up to the next paragraph-break flow object, if any, is formatted.
NOTE: The paragraph-break flow object inherits from its containing paragraph flow object in the usual way.
The first-line-start-indent: is applicable to the line
following a paragraph-break flow object, and the
last-line-end-indent: is applicable to the line preceding
a paragraph-break flow object.
NOTE: It is recommended that paragraph-break flow objects are used only if there is no other way of specifying the desired formatting.
Characteristics: See Paragraph flow object class.
The line-field flow object class is inlined and has inline content.
It produces a single inline area. The width of this area is equal to
the value of the field-width: characteristic. If the
content of line-field area cannot fit in this width, then the area
will grow to accommodate the content and, if the line-field occurs in
the paragraph, there shall be a break after the line-field.
It has a single principal port.
Line field flow object class characteristics
A sideline flow object is used to contain flow objects that have an attachment area consisting of a line parallel to the placement direction. A sideline flow object has a single principal port which can contain both inlined and displayed flow objects. For each display area produced by its content, the sideline flow object adds an attachment. For each inline area produced by its content, the sideline flow object annotates that area so as to cause the paragraph in which the flow object occurs to add an attachment area to the line in which that inline area occurs.
NOTE: Sidelines are often used to mark changes.
Sidelines on consecutive areas in a single area container which have no space between them should be drawn as a single line.
Sideline flow object class characteristics
A character flow object is atomic. Flow objects of this class can only be inlined.
A character flow object is formatted to produce a single inline
area. This may be merged with adjacent inline areas if the
ligature?: property is true. The position point of the
inline area is the position point property of the glyph specified in
the font resource for the specified writing-mode. The escapement
direction is the direction between the position point and escapement
points as specified in the font resource for the specified
writing-mode. The size of the area in the escapement direction is the
distance between the position and escapement points. The size of the
area before and after the placement path in the line-progression
direction is the smallest that will enclose the extent of the glyph in
those directions as specified in the font resource for the specified
writing-mode. If the nominal alignment mode of the font resource for
the character flow object's writing-mode is not the same as the
paragraph's alignment mode, then the glyph area is automatically
adjusted as specified by the alignment mode property in the font
resource for the specified writing-mode.
Character flow object class characteristics
A leader flow object can only be inlined. A leader flow object has a single principal port containing the inline flow objects to be repeated.
Leader flow object class characteristics
A rule is used to specify a straight line. Rules may be inlined or displayed.
Rule flow object class characteristics
The external-graphic flow object class is used for graphics contained in an external entity. Flow objects of this class may be inlined or displayed. This flow object is atomic.
External graphic flow object class characteristics
The score flow object has a single principal port. The content of this port is scored. The port can contain only inlined flow objects.
NOTE: Kendot scoring in Japanese is achieved using the emphasizing-mark flow object class of full DSSSL.
Score flow object class characteristics
The box flow object may be used to put a box around a sequence of
flow objects. The box flow object is either displayed or inlined
depending on the value of the display?: characteristic.
The box flow object has a single principal port. If the box is
displayed, then the port shall accept any displayed flow objects. If
the box is inlined, then the port shall accept any inline flow
objects.
The box flow object may result in more than one area. In this
case, the border of the box adjacent to the break may be omitted if
the box-open-end?: characteristic is true.
If the box is inlined, then this border shall be perpendicular to the writing-mode. If the box is displayed, then this border shall be parallel to the writing-mode.
When the box is displayed, the size of the box (that is, the distance between the positions of the borders) in the direction determined by the writing-mode shall be equal to the display size of the box less the start and end indents. The display size for the content of the box shall be equal to the size of the box.
NOTE: Thus, the start-indent: and
end-indent: characteristics for the content of the box
shall be set to give the desired separation between the border of the
box and its content. There is no automatic separation to take account
of the thickness of border.
Box flow object class characteristics