Model Merging ================================ An InterMine model describes the classes available to the InterMine system and their relationships. The model is used to generate the database tables, the Java class files and the web application. A model can be described using a model file. The model can be either read from one file or built up from several files using "model merging". An example of a single file model is used in the "testmine". Configuration -------------- An InterMine datamine is built from sources. Each source can contribute to the data model and also provides data. When a mine is built with the `./gradlew builddb` command, the model is created from small "additions" file contributed by each source. Specifically, the model is created by reading the `project.xml` file and merging the model fragment from each addition file for each source. Other additions files (ie. not from sources) can be explicitly merged by setting the `extra.model.paths.start` and `extra.model.paths.end` properties in the `project.properties` of your `dbmodel` directory. An example from FlyMine's `build.gradle` is: .. code-block:: properties mineDBModelConfig { modelName = "genomic" extraModelsStart = "so_additions.xml genomic_additions.xml" extraModelsEnd = "flybase-chado-db_additions.xml chado-db-stock_additions.xml" } Here `genomic_additions.xml` and `so_additions.xml` will be merged first and `flybase-chado-db_additions.xml' and 'chado-db-stock_additions.xml` will be merged after all other model fragments. Note that bio-model's `core.xml` model fragment is always used as a base for the merging - everything will be merge into the classes in `core.xml` Example ----------- From `core.xml`: .. code-block:: xml ... ... From the uniprot source (`uniprot_additions.xml`): .. code-block:: xml ... ... Final, merged, model definition: .. code-block:: xml ... ... The resulting class has all attributes of the `Protein` from `core.xml` and from `uniprot_additions.xml`. Note that in uniprot we don't need to declare a base class for `Protein` (like as `extends="BioEntity"`) as the base class from `core.xml` is merged into the final class. Global Additions file ------------------------- You can also specify an additions file, `extraAdditionsFile`, that will be merged into every source's additions file. .. code-block:: sh // [in bio/sources/build.gradle] // uncomment to specify an extra additions file for your bio-sources // this file will be merged with the additions file for each data source // and included in each source JAR. //bioSourceDBModelConfig { // extraAdditionsFile = "MY-MINE_additions.xml" //} .. index:: model merging, data model, extraAdditionsFile