Proposal for an Outlining Markup Scheme for HTML 3.0

Keith Rettig (KRettig@ctt.bellcore.com)
Tue, 11 Jul 1995 17:21:19 -0400

Per instructions from Bellcore's W3 Representative, Satish Thatte, we are
hereby submitting an outline markup scheme to the IETF for review and
consideration for implementation into the HTML 3.0 specifications.

The following proposal has been reviewed by several members of Bellcore's
staff, all of whom have interests and experience in WWW development. The
response was positive and encouraging.

Proposal for an Outlining Markup Scheme for HTML 3.0
Proposed by
Simon Blackwell and Keith M. Rettig
Bell Communications Research

Objective:

An outline-display mechanism similar to that provided by most word
processors would be useful for HTML browsers. It would allow the display
of large information spaces in an easy to navigate, compact form. It would
also provide the user with control over which information is displayed and
when. A typical use would be to display a table of contents for online
documentation. It is intended to provide a self-contained outline for
navigating a "book" or information space. Although an entire book could be
represented as an outline and transmitted at once using the notation we
describe, this is not the notation's primary intent.

From a performance perspective, the entire text of the outline
should be transmitted to the browser upon the first client request.
Subsequent expansion and contraction of the outline would then be handled
by the browser without any additional network traffic or the delays
associated therewith. There will be two performance benefits by sending a
whole outline at once instead of several levels of outline (such as can be
found in the Yahoo database). First, the redundant information (headers,
titles, instructions, addresses, etc.) necessary to represent an outline in
various levels of expansion through the use of multiple pages need only be
represented once in the proposed outline format. This reduces total
bandwidth used. Second, by sending the outline of an information space in
one page, the number of connections can be reduced.

The user functionality required is the ability to click on outline
nodes to either expand or contract them. The user must also be able to
jump to documents or sections of documents specified in the outline. This
feature would be very useful for managing sites with diverse topics within
their information space.

Codes:

<OUTLINE></OUTLINE>
Marks the beginning and ending of the outline.

<OH></OH>
Marks the beginning and ending of an outline header. Outline headers can
be expanded or compressed by clicking on expansion toggles as described
below. Hyperlinks (HREFs) can be included, as can all other formatting
codes such as bold, italics, font control, etc.

<OT></OT>
Marks the beginning and ending of outline text. Outline text is displayed
when its parent outline header is expanded. Hyperlinks (HREFs) can be
included, as can all other formatting codes such as bold, italics, font
control, etc.

Outlines Could Have the Following Attributes:

LABELS=3DA.1.a.i.1
Specifies by example the style of automatic numbering that the browser uses
when displaying the outline. In this example, the styles should be:
Alpha.numeric.small_alpha.roman.numeric

Implicit in the use of the LABELS attribute is that starting values other
than 1 or A can be specified. For example, if LABELS=3DC.2.a.i.5 then the
outline would start at C, the first instance of the second level would
start at 2, the first instance of the third level would start at a, the
first instance of the fourth level would start at i, and the first instance
of the fifth level would start at 5.

ALIGN=3DLeft | Justify
If ALIGN=3DLeft, the text of a heading will start one character to the right
of the sequence number generated for it. If ALIGN=3DJUSTIFY, the text of al=
l
headings will start in the same horizontal location (whether collapsed or
not). This location would be determined by the length of the sequence
label for the deepest node displayed. Examples of each follow.

ALIGN=3DLeft
1. Section One
1.1 Section One.one
1.1.1 Section One.one.one
1.1.1.1 Section One.one.one.one

ALIGN=3DJustify
1. Section One
1.1 Section One.one
1.1.1 Section One.one.one
1.1.1.1 Section One.one.one.one

INDENT=3Dnumber
The INDENT value is used to specify how many character spaces (or tabs if
more appropriate) each level of the hierarchy should be indented further
than its parent. The default should be 0, which would provided a left
justified outline. Note that the use of an INDENT value other than 0 if
ALIGN=3DJUSTIFY could result in a rather wide display.

LEVEL=3Dnumber | all
The LEVEL value specifies the level to which the outline should be expanded
when first displayed. The default value is 1, which provides for an
outline with just the top level nodes displayed. A value of all (or 0)
should be used as a setting for fully expanding the outline without
requiring the developer to keep track of the number of outline levels.

If there is a target anchor embedded within the outline and an attempt is
made to jump to that anchor (via an HREF), then the outline should expand
to the minimal level necessary to expose the text at that target.

The LEVEL attribute can also be placed into an <OH> specification. This
would be used if you wanted to expand only certain portions of the outline.
In these cases, the child LEVEL attribute shall override the parent LEVEL
attribute. When the LEVEL attribute is used within an <OH> the number of
levels expanded shall be calculated from the <OH> with the attribute.

TYPE=3DArrow | Plus | None
The TYPE specification is used to specify the control mechanism for
expanding and compressing the outline. Using NONE would cause the text (or
possibly the labels) of the outline headings to be toggle mechanism, rather
than putting a + / - (plus) or =D8 / =82 (arrow) at the start of a heading. =
The
use of NONE would be incompatible with using HREFs in the outline headings.
If TYPE=3DNone, the controls could be color coded (matching the user's
preferences) but not underlined, in order to distinguish them from normal
text and hyperlinks.

Coding Example:

An example using the HTML outline mark-up as proposed.

<OUTLINE LABELS=3D1.1.1.1.1 ALIGN=3DLeft INDENT=3D2 LEVEL=3D2 TYPE=3DPlus>
<OH>Section One
<OT>This is an introduction to Section One</OT>
<OH>Section One Dot One
<OH>Section One Dot One Dot One</OH>
<OH>Section One Dot One Dot Two</OH>
</OH>
<OH><A HREF=3D"somefile.html">Section One Dot Two</A>
<OT>This is Section One Dot Two's body.</OT>
</OH>
</OH>
<OH>Section Two
<OT>This is an introduction to Section Two</OT>
</OH>
</OUTLINE>

The above would be displayed initially as shown below. Note that the
initial expansion is out to 2 levels because of the LEVEL specification. +
/ - are used to denote the expansion toggles due to the TYPE specification.
Numbers are used for labeling the outline headers because of the LABEL
specification.

- 1. Section One
This is an introduction to Section One
+ 1.1 Section One Dot One
+ 1.2 Section One Dot Two
- 2. Section Two
This is an introduction to Section Two

Clicking on the + next to 1.1 would cause the browser to redisplay as follow=
s:

- 1. Section One
This is an introduction to Section One
- 1.1 Section One Dot One
1.1.1 Section One Dot One Dot One
1.1.2 Section One Dot One Dot Two
+ 1.2 Section One Dot Two
- 2. Section Two
This is an introduction to Section Two

Clicking on the - next to 2. would cause the browser to redisplay as follows=
:

- 1. Section One
This is an introduction to Section One
- 1.1 Section One Dot One
1.1.1 Section One Dot One Dot One
1.1.2 Section One Dot One Dot Two
+ 1.2 Section One Dot Two
+ 2. Section Two

Clicking on the - next to 1. would cause the browser to redisplay as follows=
:

+ 1. Section One
+ 2. Section Two

Additional Comments:

Specifying an OH without either nested OHs or a nested OT, could
be useful for generating sequential labels next to the text of the heading.
In this case, the browser should skip display of the expansion toggle
controls.

It is hoped that the browsers would display each outline heading
expansion by just inserting the text and not by redrawing the page. An
example of such can be found in the Macintosh OS when viewing a directory
(folder) in name view and the user clicks the expansion toggle arrow to
expand a subdirectory. The text is "frozen" at the level of the expansion
text and above while the folder is expanded below without redrawing the
"frozen" text. Redrawing the entire page would likely cause disorientation
in the user.

Since no browser currently supports outlines, we are considering
the development of a CGI script which could use files marked up using the
proposed syntax above as reference documents. This CGI script could
generate appropriately expanded outlines as forms in HTML files which could
be returned to the browser. Each displayed row of an outline would be a
form with its submit button used to either expand the row further or
contract it. Each form would have a hidden field storing state information
about the entire outline which would be used to generate the next version
of the outline upon an expansion or contraction request.

Contact Information:

Simon Blackwell
908-699-2413
Bellcore
444 Hoes Lane, RRC-1H222
Piscataway, NJ 08854-4182
simonb@ctt.bellcore.com

Keith M. Rettig
908-699-7624
Bellcore
444 Hoes Lane, RRC-1J214
Piscataway, NJ 08854-4182
KRettig@ctt.bellcore.com

*******************************************************

Email Keith if you wish to receive this proposal in the MS Word format.

Keith.