9.3.3 Data Type Definition
Every data type is defined by a datadef element.  The attributes have the following meaning:

•  rcsnm gives the RCS name of the data type.


There is no application name for a data type, because when the property set is used in a programming or scripting language, each abstract data type has to be explicitly bound to one of the data types provided by the language.

•  fullnm gives the full name of the data type.

•  nodal specifies whether the data type is nodal; the allowed values are nodal or nonnodal; the default is nonnodal.

•  listof allows formal specification of the semantics of a data type in the case where the data type is an ordered list or array of some other data type; that other data type is specified as the value of the attribute.

•  super allows for the formal specification of a subtyping hierarchy among defined data types; the value of the attribute is a list of the names of the super types.
The primitive data type of a data type is the data type itself if the data type has no super type, and otherwise is the primitive data type of the super type.
Some data types are defined in the following intrinsic module:  
<psmodule rcsnm=intrdt fullnm="intrinsic data types" required>
<datadef rcsnm=node nodal>
A single node.

<datadef rcsnm=nodelist listof=node nodal>
An ordered list of zero or more nodes.

<datadef rcsnm=nmndlist fullnm="named node list" super=nodelist nodal>
This is a node list in which each node is uniquely identified within
the node-list by a name, which is the value of one of its properties.
A named node list identifies, for each class of node that occurs in
it, a property of that class, which has data type string, whose value
serves as the name of nodes of that class within that named node list.
In addition, a named node-list also identifies, for each class of node
that occurs in it, a normalization rule to be applied to a
string before it is compared against the name of a node of that class
in the process of name space addressing.

<datadef rcsnm=enum fullnm=enumeration>
This is used for a data type that represents one of an enumerated set
of values, called enumerators.  The possible enumerators are
defined in each context in which the enum data type is used.

<datadef rcsnm=char fullnm=character>

<datadef rcsnm=string listof=char>

<datadef rcsnm=integer>

<datadef rcsnm=intlist fullnm="integer list" listof=integer>

<datadef rcsnm=strlist fullnm="string list" listof=string>

<datadef rcsnm=compname fullnm="component name">
A component name, that is, a name with three variants, an RCS name,
an application name, and a full name.

<datadef rcsnm=cnmlist fullnm="component name list" listof=compname>