| Syntax 
   attribute attribute-name
      element-qualifier* ((item | @ ) numeric-expression)
 Purpose
 
 Unlike programmer-defined data types, attribute references always have the attributeherald. This is because attributes are defined in the SGML document and not in the OmniMark program. Attribute references are always treated as string expressions, even if the attribute was declared in the SGML document to be of type NUMBER. However, string expressions which contain a valid representation of a decimal number can be used anywhere where a numeric expression is permitted, so this interpretation places no restriction on the use of attributes. 
 Attributes can always be further identified by following the attribute name with an element qualifier.
 Within the external-data-entityrule, unqualified attributes are data attributes; in other contexts, they are attributes of the current element. item(or "@") can be used if the attribute was declared as a list-valued attribute. However, unlike shelves, for which the lastmost value is selected unless indicated otherwise, attributes do not have a "default" selected value: if no index is specified, the whole attribute value is either tested or is output as a single unit.
 Attribute references provide the attribute value unmodified, except for:
 transformations specified by ISO 8879, the SGML standard, such as uppercasing of NAME values, and normalization of non-CDATA values, and
specifying the use of a different delimiter string by a delimiterdeclaration (which is, by default, a single space) to separate the tokens of a list-value attribute.
 In particular, translaterule processing is not performed on the value of an attribute when it is referenced using theattributeherald. This contrasts with references to an attribute value using the "%v" modifier. Attempting to access an attributewill cause an error: if the element qualifiers specify an element that does not exist.
if the start tag for the specified element or the entity declaration for the external entity does not provide an explicit value for the attribute and the attribute is declared as #implied,#requiredor#current(and no previous occurrence of an element named in the same declaration gave the attribute a value).
 When using element-qualifiers the programmer should be aware that: 
 the of elementqualifier is usually not needed, since, in most contexts, unqualified attributes are assumed to be attributes of the current element. In theexternal-data-entityrules, however, attributes by default are assumed to be data attributes. In that context, theof elementqualifier is significant.the of ancestor,of preparentandof open elementqualifiers refer to the specified ancestor that was most recently opened (the one the fewest "generations" removed from the current element).the of ancestor,of preparentandof open elementqualifiers can list several element names.
 In the header and body of an external-data-entityrule, all unqualified references to attributes actually refer to data attributes of the external entity being processed. In all other rules, they refer to element attributes (attributes of element start tags). Unqualified references to attributes inside functions always refer to element attributes. In order to refer to the data attributes of an external entity being processed, the qualiifer of entitymust be specified. Element qualifiers can themselves be qualified. 
 This sample shows how the of ancestorqualifier can list several element names. Note thatof preparentandof open elementcan also be used to perform this function.
   attribute indent of ancestor (numlist | bullist | deflist)
 Specifically, this line of code refers to the indentattribute of a containingnumlist,bullist, ordeflist, whichever comes first, searching outwards from the current element. Note that an error would result if the first element encountered did not have a value specified for theindentattribute. The following example illustrates how element qualifiers can be used with attribute references. By using the element qualifier of ancestor, this line of code refers to the "date" attribute of an enclosing element whose name is "change".
   attribute date of ancestor change
 |