[[Image(http://www.eobjects.dk/resources/IconMetaModel.png, nolink, right)]] = !MetaModel = About | [MetaModelDevelopersGuide Developers guide] | [MetaModelProgrammingWebcast Webcast demo] | [MetaModelCompliancy Database compliancy] | [MetaModelLicense License] | [http://code.google.com/p/metamodel/downloads/list Download] A common domain model, query-engine and optimizer for different kinds of datastores. The eobjects.org !MetaModel is a project created for maximum reuse of a SQL 99 compliant domain model of the database domain. The MetaModel is a model that contains classes that represent the '''structure''' of a database (schemas, tables, column, relationships) and '''interaction''' with the database (queries). In short a model for modelling (hence the word "metamodel") data in databases and other datastores. !MetaModel is being used in a lot of projects, including the eobjects.org projects DataCleaner, DataTransformer and TableAgent. Additionally the QueryParser project is aimed at creating a String-based parser to populate the query-part of MetaModel by parsing incoming SQL queries. {{{ #!html
MetaModel 1.2 is out!
We're proud to present a new major release of MetaModel! Go download this innovative new datastore manager, optimizer and metadata component!

How does it work?
Watch the webcast!
}}} == Goals == The goal of MetaModel is to provide an API for: * Traversing and building the structure of datastores. * Executing datastore-neutral queries in a SQL-like manner. * Provide datastores that do not support queries with a [QueryPostProcessor query engine]. * Implement this system for JDBC databases, Comma-separated files, XML files, Excel spreadsheets, MS Access (.mdb), dBase (.dbf) and !OpenOffice (.odb) database-files. * Allow [CompositeDataContext querying across datastores] in a way that is similar to querying a single datastore. This involves transparent client-side joining, filtering, grouping etc. * [QuerySplitter Split single queries into multiple ones] that yield the same collective result, enabling powerful performance optimization and grid execution for heavy work loads. We are designing this API to be: * Comprehensive - !MetaModel should contain all the functionality that is required to model the datastore domain. * Easy to use - We focus on simple design and fluent interfaces to make the most commonly used functionality easy and fun to use. * Consistent - With MetaModel you will not experience all the ambiguities that exist in other frameworks like JDBC. Instead of diversity and hacks we focus on standardization and a common datastore infrastructure - all nescesary hacks have been hidden from you, the user. * Extensible - We provide extension-points to make it possible to use MetaModel for your own legacy systems, for example to query datastores that may not be supported. * Light-weight - Deliberate use of POJOs make it easy to understand what is going on inside !MetaModel. == Using with Maven == Add this dependency entry to your Maven POM to include MetaModel in your project: {{{ dk.eobjects.metamodel MetaModel-full 1.2 }}} == Contributing == There are several ways you can contribute to MetaModel... * Post your ideas to the [http://groups.google.com/group/metamodel mailing list]. * Add [/trac/newticket?component=MetaModel new tickets] for future development. * Check out the code and post patches, see BuildingMetaModel. * [DonateToEobjects Donating money to eobjects].