Attributes can be simple or consist of a tuple of simple attributes.
A simple attribute can have a single value, a set of values, or a list of values, and can be primitive , if it is associated with a system-provided data type, or abstract , if it takes values from object classes. For example, citations on genes can be modeled by associating class Gene with abstract attribute citations taking values from class Citations . The attributes of an object class can be partitioned into non-versioned and versioned attributes. OPM supports the specification of derived attributes using derivation rules involving arithmetic expressions, aggregate functions, and attribute composition. OPM allows specifying subclass-superclass relationships in a class hierarchy, and supports multiple inheritance in such hierarchies.