ODMG 3.0 was developed by the Object Data Management Group (ODMG). The ODMG is a consortium of vendors and interested parties that work on specifications for object database and object-relational mapping products.
ODMG 3.0 is a portability specification. It is designed to allow for portable applications that could run on more than one product. ODMG 3.0 uses the Java, C++, and Smalltalk languages as much as possible, to allow for the transparent integration of object programming languages.
The major components of ODMG 3.0 specification are:
- Object Model. The common data model supported by ODMG implementations is based on the OMG Object Model. The OMG core model was designed to be a common denominator for object request brokers, object database systems, object programming languages, and other applications. In keeping with the OMG Architecture, a profile has been designed for their model, adding components (e.g., relationships) to the OMG core object model to support the ODMG needs.
- Object Specification Languages. The two specification languages are the Object Definition Language (ODL) and Object Interchange Format (OIF) languages. ODL is a specification language used to define the object types that conform to the ODMG Object Model and is based on the OMG IDL. OIF is a specification language used to dump and load from a file or set of files.
- Object Query Language. This is a declarative (nonprocedural) language for querying and updating objects. SQL-92 was used as the basis for OQL.
- C++ Language Binding. This is the binding of ODMG implementations to C++. This is called the C++ OML, or object manipulation language. The C++ binding also includes a version of the ODL that uses C++ syntax, a mechanism to invoke OQL, and procedures for operations and transactions.
- Smalltalk Language Binding. This is the binding of ODMG implementations to Smalltalk. It defines the binding in terms of the mapping between ODL and Smalltalk, which is based on the OMG Smalltalk binding for IDL. The Smalltalk binding also includes a mechanism to invoke OQL and procedures for operations on databases and transactions.
- Java Language Binding. This is the binding between the ODMG Object Model (ODL and OML) and the Java programming language as defined by the Java 2 Platform. The Java language binding also includes a mechanism to invoke OQL and procedures for operations and transactions.
It is possible to read and write the same database from C++, Smalltalk, and Java, as long as the programmer stays within the common subset of supported data types. Note that, unlike SQL in relational systems, the ODMG data manipulation languages are tailored to specific application programming languages, in order to provide a single, integrated environment for programming and data manipulation. This is called transparent persistence.
Such transparent persistence is illustrated by the following diagram and contrasts with the database sublanguage of SQL and its variants. In this diagram, you only see the host programming language and no database sublanguage or call-level interface as in JDBC.
An example of a host statement in Java that creates a new Person instance would be:
person = new Person();
person.ssan = "999999999";
person.name = "Doug Barry";
This code fragment would be all the code necessary to create a new person. There is no database sublanguage or call interface. If you wanted to manipulate this object in Java, you could use the object directly. Also see transparent persistence vs. JDBC call-level interface.
For more information on transparent persistence, see:
- Transparent persistence for object databases
- Transparent persistence for relational databases using object-relational mapping products
More on the general topic: DBMS Standards
- Java Data Objects (JDO)
- Detailed Comparison of ODMG 3.0 and JDO
- Summary Comparison of DBMS Standards