A complete reference of PageSeeder's markup language PSML



The <heading> element provide a heading level block of text which affects the table of content.

The heading level is determined by the @level attribute and ranges from 1 (higher) to 6 (lower).

Headings can be numbered automatically using the @numbered attribute or manually using the @prefix attribute.

In transcluded or embedded content, heading levels may be recomputed.

Usage context

Element categoryblock
PSML levelportable
Permitted contenttext and character-style elements
Permitted parent
HTML equivalent<h1> to <h6> 
OpenXML equivalent<w:p> with heading style
PSStandard equivalent<heading1> to <heading6>


This element includes the following attributes

levelheading-levelnoThe level of the heading.
numberedbooleannoIf this heading is numbered.
prefixxs:stringnoPrefix for heading (used for numbered headings).


In PSML processed level it can also have an @id attribute which is referenced by <tocref>.


The level of heading, the heading level ranges from 1 to 6.

In a processed PSML, the heading level may be greater than 6 once the level of headings in transcluded content has been computed. However, a portable PSML document should not include heading levels exceeding 6.


A boolean flag to indicate whether the heading level is automatically numbered.

The actual number of a numbered heading is computed when documents are processed. In the PageSeeder interface, numbered headings are prefixed with 'x.' to indicate that their numbering has not been computed. This is because the actual number may vary depending on transclusions and cross-references.


A fixed prefix for the heading.

This is an alternative to auto-numbered headings in cases when the heading requires a prefix that does not vary. Although there is no maximum length on the prefix, a values exceeding a 10 character is usually not recommended.


Example #1

A simple heading appearing as a heading level 1.

<heading level="1">Great title!</heading>

This would be converted in HTML as:

<h1>Great title</h1>

Example #2

Headings level 2 with auto numbering.

<heading level="2" numbered="true">First chapter</heading>
<heading level="2" numbered="true">Second chapter</heading>
<heading level="2" numbered="true">Third chapter</heading>

These would typically be converted in HTML as:

<h2 class="numbered">First chapter</h2>

<h2 class="numbered">Second chapter</h2>

<h2 class="numbered">Third chapter</h2>

Using CSS counters, they could be displayed with numbering; or directly as:

<h2><span class="autonumber">1.1</span> First chapter</h2>
<h2><span class="autonumber">1.2</span> Second chapter</h2>
<h2><span class="autonumber">1.3</span> Third chapter</h2>

Or even as:

<h2 data-prefix="1.1">First chapter</h2>
<h2 data-prefix="1.2">Second chapter</h2>
<h2 data-prefix="1.3">Third chapter</h2>

Example #3

Heading with a fixed prefix.

<heading level="4" prefix="(b)">Special clause </heading>

This would typically be converted as

<h4><span class="prefix">(b)</span> Special clause</h4>


<h4 data-prefix="(b)">Special clause</h4>


XML Schema

<xs:element name="heading">
   <xs:complexType mixed="true">
      <xs:group ref="character-style-group" minOccurs="0" maxOccurs="unbounded"/>
      <xs:attribute name="level">
            <xs:restriction base="xs:integer">
               <xs:pattern value="[1-6]"/>
      <xs:attribute name="prefix" type="xs:string"/>
      <xs:attribute name="numbered" type="xs:boolean" use="optional" default="false"/>

Relax Schema

element heading {
   attribute level { xs:integer },
   attribute prefix { text }?,
   attribute numbered { xs:boolean }?,


This element was introduced in the first draft of PSML and is well supported from PageSeeder 5.1.

See also

Created on , last edited on