<preformat> Preformatted Text

Text in which spaces, tabs, and line feeds must be preserved. Content is typically displayed in monofont to preserve character alignment.


The <preformat> element is typically used for machine-related communication such as ASCII art and error message reports, in which whitespace such as tabs, line feeds, and spaces should be preserved.
The @position attribute may be used to indicate whether this element must be anchored at its exact location within the text, or whether it may float, for example, to the top of the next page, next column, to the end of a logical file, or within a separate window. For the typical <preformat> element, the “float or anchor” decision will be governed by the size of the object. For example, short preformat fragments are typically anchored whereas longer preformatted material is typically placed elsewhere such as in a separate window or at the end of the document.
The MathML elements to describe equations are not permitted within <preformat>. If equations are encountered within computer code, they can be tagged using the element <named-content> to preserve the fact that they were equations or the element <styled-content> to preserve the fact that they were set in a math font.

When Content is a Form

Two attributes are available to describe the preformatted object when it contains a form:
  • @is-form can indicate that the preformat contains a form. What constitutes a “form” is not defined by NISO STS.
  • @form-type can identify the type of the form. If the form is not one of the listed types, @custom-type may provide the type (see below).

Custom Form Type (@custom-type)

@form-type has as its values a fixed list of form types. If your form is not one of the listed types, you can use @custom-type to describe the form type. Set the value of @form-type to “custom” and also use @custom-type to hold any form type you require. For example:
<preformat is-form="form" form-type="custom" 
Related Elements
Best Practice: Although it is possible to use <preformat> to tag any format-preserving object, some of these objects have semantic elements that should be used in preference, for example:
  • Programming code, scripts, pseudo-code, DTDs and Schemas, and XML tagging examples should be tagged with either the the <code> element (for block code) or the <inline-code> element (for tiny inline fragments), using the code-specific attributes to identify the type of code, language, version, and more.
  • Poetry and verse (uncommon in standards documents) should usually be tagged with the <verse-group> element, which may not preserve the exact indentation, but is more likely to be displayed in a proportional font.
  • Equations and math are typically tagged with <disp-formula> or <inline-formula>.

Base Attributes

Miscellaneous non-STS-specific Attributes

xml:space (fixed value = preserve)
Models and Context
May be contained in
Content Model
<!ELEMENT  preformat    %preformat-model;                            >
Expanded Content Model

(#PCDATA | alt-text | long-desc | email | ext-link | uri | citation-alternatives | element-citation | mixed-citation | std | attrib | permissions | bold | fixed-case | italic | monospace | num | overline | roman | sans-serif | sc | strike | underline | ruby | inline-graphic | private-char | inline-code | inline-media | abbrev | index-term | index-term-range-end | milestone-end | milestone-start | named-content | styled-content | fn | target | tbx:entailedTerm | xref | sub | sup)*

Tagged Sample

ASCII representation of a diagram

<fig id="fig1">
  <title>Security Gateway to Security Gateway Tunnel</title>
             +-+-+-+-+-+            +-+-+-+-+-+
             |         | IPsec      |         |
Protected    |Tunnel   | tunnel     |Tunnel   |     Protected
Subnet   <-->|Endpoint |<---------->|Endpoint |<--> Subnet
             |         |            |         |
             +-+-+-+-+-+            +-+-+-+-+-+