ODMG-93 is a standard established by a working group composed of 5 representatives of many (most?) of the OODBMS vendors. The standard is documented in "The Object Database Standard: ODMG-93" ed. R G G Cattell, ISBN 1-55860-302-6.
Remember that one of the goals of OOFILE is to allow mapping onto existing record-oriented and RDBMS databases, as well as acting like a traditional ODBMS. This has required some additional operators, and I've made a substantial effort to simplify the syntax used by the programmer, so ex-4GL users will feel at home.
ODMG-93 includes definitions of terms, manipulation and query languages and both C++ and SmallTalk bindings. The following explains why and where OOFILE diverges from their C++ binding and some of their concepts.
dbTables vs Persistent classes, Refs & Sets:
The ODMG class represents a single instance, with Set and Ref classes used via templates to point to records in the database and collections of records.
OOFILE's dbTable acts as the single class instance, a "factory" for subcollections, a current Set and a Ref all in one. This is accomplished by natural use of the C++ operators, so the operation defines the role.
The main reasons for this were my goals of:
- Avoid templates as many people complain of compiler problems.
- Be able to use C++ without an external preprocessor. To do this and still use subcollections directly in data retrieval, update and search statements, I had to have subcollections as instances of the dbTable. Furthermore, to be able to search by and access related fields, relations have to be mapped by normal c++ pointer syntax.
Database Creation:
The ODMG-93 binding lacks the ability to create a database, whereas this is an essential part of OOFILE.
Additional GUI mapping:
OOFILE includes a number of GUI integration classes for creating "native" browser and edit field classes. It also provides some "superstructure" classes for managing issues such as a primitive report-writer, multiple-page editing dialogs etc.
Relationship specification:
There are a number of ways of specifying relationships and the "OID" fields on a table-by-table basis. Default OIDs will match the situation of a traditional ODBMS but mapping to legacy systems requires we acknowledge the foreign keys over which they currently perform their relations.
Query specification:
The ODMG-93 C++ binding performs queries by passing on a string containing a query language statement. The "future binding" options include an English-like syntax very close to OOFILE. (Great minds think alike - my copy of the ODMG-93 book arrived a week after finalising the syntax in beta 3!).