The data model which is sketched in the previous section
is realized by the SOS system. One part of the system, the SOS schema
compiler, is concerned with the compilation of SOS schemas.
During the compilation process the type information is made persistent.
This is done by creating an SOS object for each schema and
each type definition within a schema.
The objects which are created later on by an application program
are associated with an object representing the type.
Those ``type objects'' are stored in the so-called meta database,
their types are defined in the so-called meta schema.
This allows to interpret an object dynamically
by inspecting the associated type object.
Components are accessed by using specific
get- and set-operations of the host programming language which are
generated automatically by the interface generator of the compiler.
For the components, SOS determines
a fixed and language independent storage layout.
The implementation of the methods specified within a class type definition
is done in some programming language
(which may be a compiled or an interpreted language).
Depending on the degree to which the language performs
type-checking, the interface generator of the schema compiler
generates appropriate interfaces and/or code for this language.
SOS comes with several predefined types like e.g. sos_Object,
List or Set.
Section
contains a description of these types.
One of the predefined types, the type sos_Container,
should be noticed carefully, because it serves as an interface
to the persistent storage manager.
Each object of SOS belongs to exactly one container, which is
determined when an object is created.
The containers provide a simple mechanism for synchronization,
recovery and clustering of objects.
A detailed definition of all predefined types can be found in the
manual pages in Appendix .
For each programming language for which an embedding of SOS is
provided, the specific concepts of SOS are mapped onto the concepts
of the host language.
For the current release of SOS, this is done for C++.
The C++ interface is described in Section .