Adobe Systems Incorporated 2008 – All rights reserved
Attribute Revision Numbers
When a conforming product modifies a structure element or its contents, the change may affect the validity of
attribute information attached to that structure element by other conforming products. A system of revision
numbers shall allow conforming products to detect such changes and update their own attribute information
accordingly, as described in this sub-clause.
A structure element shall have a revision number, that shall be stored in the R entry in the structure element
dictionary (see Table 323) or default to 0 if no R entry is present. Initially, the revision number shall be 0. When
a conforming product modifies the structure element or any of its content items, it may signal the change by
incrementing the revision number.
The revision number is unrelated to the generation number associated with an indirect object (see 7.3.10,
If their is no R entry and the revision number is to be incremented from the default value of 0 to 1, an R entry
must be created in the structure element dictionary in order to record the 1.
Each attribute object attached to a structure element shall have an associated revision number. The revision
number shall be stored in the array that associates the attribute object with the structure element or if not stored
in the array that associates the attribute object with the structure element shall default to 0.
Each attribute object in a structure element’s A array shall be represented by a single or a pair of array
elements, the first or only element shall contain the attribute object itself and the second (when present)
shall contain the integer revision number associated with it in this structure element.
The structure element’s C array shall contain a single or a pair of elements for each attribute class, the first
or only shall contain the class name and the second (when present) shall contain the associated revision
The revision numbers are optional in both the A and C arrays. An attribute object or class name that is not
followed by an integer array element shall have a revision number of 0 and is represented by a single entry in
The revision number is not stored directly in the attribute object because a single attribute object may be
associated with more than one structure element (whose revision numbers may differ). Since an attribute
object reference is distinct from an integer, that distinction is used to determine whether the attribute object is
represented in the array by a single or a pair of entries.
When an attribute object is created or modified, its revision number is set to the current value of the structure
element’s R entry. By comparing the attribute object’s revision number with that of the structure element, an
application can determine whether the contents of the attribute object are still current or whether they have
been outdated by more recent changes in the underlying structure element.
Changes in an attribute object shall not change the revision number of the associated structure element, which
shall change only when the structure element itself or any of its content items is modified.
Occasionally, a conforming product may make extensive changes to a structure element that are likely to
invalidate all previous attribute information associated with it. In this case, instead of incrementing the structure
element’s revision number, the conforming product may choose to delete all unknown attribute objects from its
A and C arrays. These two actions shall be mutually exclusive: the conforming product should either increment
the structure element’s revision number or remove its attribute objects, but not both.
Any conforming product creating attribute objects needs to be prepared for the possibility that they can be
deleted at any time by another conforming product.
Most structure attributes (see 14.8.5, “Standard Structure Attributes”) specify information that is reflected in the
element’s appearance; for example, BackgroundColor or BorderStyle.