One thing I learned when working on COWDB and COODBMS is that it is very difficult to implement things in layers--you really need to know what you are doing.
One thing I learned when working on COWDB2 is that it is very difficult to explain a monolithic implementation. People need to learn things layer by layer.
An important goal in this project is to build a team that can work on, support, and expand on what I have learned these last few years. So a layered approach is the only real option. I have learned a great deal these last few months while working on COWDB2. Hopefully I have learned enough to be able to use the layered approach.
Layer 0 -- This will be the element model. There will be no persistence object (that is moving into the streaming aspect) and this layer will have no knowledge of the aspects, excepting only the Application objects which are what are passed instead of the element.
Layer 1 -- This will be a business object model. Business objects map into XML documents. Multiple business objects will be supported, with links between them. We will implement attributes, containers and links. (The approach taken will be to implement the minimum necessary for each layer. The implementation of a rich set of capability objects can be delayed until and as they are needed.) In this layer, the framework will support the creation/deletion/retrieval of business objects. But there will be no persistence.
Layer 2 -- Here we add well known business, parent/child relationships, operations and roles. Again, a light weight minimal implementation with no persistence. The framework will provide access to well known business objects.
The objective here is to develop the basics and provide the necessary documentation. These three layers will then comprise the core for a more serious effort.