Section 2.2.2.1 Generalization


Generalization (and specialization) associations are reflected through the type inheritance or IS-A hierarchy of the SAIF data model is shown in Figure 2.2. Three base types are defined: AbstractObject, Enumeration and Primitive. These three types are considered as three independent roots; i.e., there is no all encompassing type to which all values belong. All generalization and specialization of types is based on an understanding of these three roots.

A value of Primitive may be of type Boolean, String, OctetString, BitString, or some kind of Numeric. Under Boolean are the values true and false. String includes all possible character strings. The characters may be from the ASCII, Unicode, or an international character set (with an ISO designation). OctetString is the domain for sequences of octets, where an octet is defined as an eight bit value. An octet may be considered as a machine independent notion of a typical byte. BitString is the domain for sequences of bits; it is of interest principally where none of the other primitive types are considered appropriate. A bit string may be applicable where the individual bits are meaningful, where the data is composed of bit sequences other than octets, or where a volume of data may be considered as opaque, that is, as simply an arbitrary number of bits. Integer and Real exist under Numeric. Although not shown on Figure 2-2, there are a number of different types of Integer and Real, as described in the definition of Primitive in the previous section. Although the idea of an enumeration is closely tied to that of primitives, SAIF defines Enumeration as an independent type. The SAIF data model includes Enumeration as a base type from which actual enumerations may be derived, but does not include any particular enumerations. Note that all enumerations must be defined directly from Enumeration; that is, an enumeration cannot be a subtype of another enumeration. The third basic type in the data model is the AbstractObject, the root class for all other classes. Tuple conveys the notion of a single object, whereas Multiset relates to a collection of objects. The SAIF data model does not include any particular subclasses of Tuple, but does include the concept of subclassing from Tuple, or from previously defined subclasses of Tuple. Multiset and its subtypes handle collections of objects. Typically a collection is instantiated directly as a list or a set. both of which are considered as types of multisets. A list may simply be a list, or if certain conditions are met, it may be an isoList. A similar situation exists with sets, isoSets, and relations. No other types of collections exist and no subclassing from them is permitted. A multiset (or list or set) may contain a single value or more typically many values. If the multiset is empty, then the attribute using the multiset as its value is considered to be nil. In Figure 2.2 nil is not shown. Nevertheless, the concept of nil or null is an inherent part of the data model. For a given object, a value of nil for an attribute simply indicates unspecified. Conceptually then, nil may be considered to be a valid value for any attribute which does not have to be specified, regardless of whether the attribute's domain is a type of Primitive, Enumeration or AbstractObject.

The data model serves as the foundation for developing additional classes and enumerations. All classes supplied through the SAIF standard schema or user defined schemas are subclasses of tuple either directly or through their lineage (e.g., a subclass of a subclass of Tuple). Included in such schemas may be a number of enumerations, each of which is derived from Enumeration. Thus, the inclusion of types from one or more schemas can be represented as extensions to the IS-A hierarchy under Tuple and Enumeration. The SAIF data model follows a multiple inheritance scheme: every type has one or more parent type, with the exception of the three base types (AbstractObject, Enumeration, and Primitive) which have no parent type. Most of the SAIF standard schema is based on single inheritance. Multiple inheritance with two superclasses is used with some subclasses involving time. User defined schemas may contain subclasses with multiple inheritance.


Links to the SAIF 3.1 Specification document and the complete SAIF class list