9.3.5 Property Definition
A property is defined by a propdef element.  In addition to the component name attributes and specification document attributes, the following attributes are allowed:

•  cn specifies the class to which this property belongs.  When a propdef element occurs within a classdef element, the property belongs to that class.  Otherwise, the cn attribute shall be specified, specifying the class name.  A value of #all means that it belongs to all classes of node; a value of #grove means that it belongs to the node at the root of the grove.

•  datatype specifies the RCS name of the data type, as defined by a datadef element.

•  ac specifies the classes allowed in the value of the property; this applies only if the data type is nodal. The default is that any class is allowed in the value.

•  acnmprop applies when the data type is nmndlist and specifies for each of the classes allowed in the property value the name of the property that serves as the name of a node of that class in the named node list.  There shall be one property name for each class in ac.

•  strnorm specifies a string normalization rule applicable to the value.  It applies when the data type is a string, is a list of strings, or has a super type that is a string.  The default is for no normalization to be applied.  Each string normalization rule shall be defined by a normdef element.

NOTE 24

The upper-case substitution that SGML performs on general names when the reference concrete syntax is used is an example of a string normalization rule.

•  noderel specifies whether the property is a subnode, irefnode, or urefnode property; this applies only if the data type is nodal. The attribute name is usually omitted for this attribute.

•  vrfytype categorizes the property as either derived, optional, or other for purposes of defining the verification mapping in the transformation language.  See section 11.4.1, Verification Mapping. The default is other. A property set shall not allow a node in a complete grove to exhibit an empty value for a property that has a declared data type of nodelist or nmmdlist and a vrfytype of optional.

NOTE 25

This does not prohibit a node from exhibiting a null value for such a property.

•  strlex gives a lexical type.  The value is a lexical type defined by a lexdef element.  The lexical type of a property is not used in this International Standard.  The semantics of lexical types are defined in ISO/IEC 10744.
A propdef can have subelements of the following types in addition to desc and note elements:

•  when specifies a condition that shall be satisfied for a node to exhibit a value with the declared data type.  If this condition is not satisfied, the node shall exhibit a null value for this property.

•  enumdef defines the possible enumerators when the data type is enum.  It has only the component name attributes.