OpenDMA takes a unique approach to define it's ecosystem:
Instead of defining a concrete API or service specification, it defines an abstract object oriented architecture. On top of this abstract architecture, it defines a set of rules how this architecture is represented in different programming languages and different environments.
On the one hand, this definition needs to be loose enough to be applicable to all sorts of programming languages, environments and existing ECM Repositories. But on the other hand, it needs to be as specific as possible to enable application programmers to write real repository agnostic applications. OpenDMA solves this problem by using a strong object oriented class hierarchy. So we have some general base classes that are extended by specialized classes.