Data Model View
The SWIM database is designed under the constraints of a NoSQL database managed with MongoDB. This section describes the collection schemas implemented in MongoDB for this project.
Note: Section pending updates according to latest data model upgrades.
Database Catalog
The current data model is composed of the following collections:
- model-base: Holds base JSON structure of registered models.
- model-meta: Holds metadata of a registered model.
- output: Holds a collection of model output metadata. (Description coming soon)
- parameter2: Holds a collection of model paramater metadata and default values. (Description coming soon)
- provschema: Holds the basic provenance structure of a model run.
- userscenario: Holds user defined model executions.
MODEL-META
Stores metadata information of a specific scientific model implementation executable by a modeling software agent. It also provides information regarding model creators, host server and interfacing information.
Primary Representation

Field Details
| Field | Type | Description |
|---|---|---|
| _id | xsd:string | MongoDB auto-generated unique identifier. |
| modelName | xsd:string | Name of the exposed model. |
| modelDescription | xsd:string | A short description of what the model does. |
| dateCreated | xsd:datetime | Date of the first model release. |
| dateModified | xsd:datetime | Date and time of last modification to the model. |
| softwareAgent | xsd:string | Software application capable of executing and implementing the model. |
| license | xsd:string | The license information for the exposed model. |
| version | xsd:string | Provides the version of the base model. |
| sponsor | xsd:string | Organization, person or institution that provides funding. |
| creators | Object array | Model authors/creators. |
| creators.name | xsd:string | Creator full name |
| creators.department | xsd:string | A division of a organization such as a government, university, business, or shop, dealing with a specific subject. |
| creators.organization | xsd:string | Creator organization name |
| creators.email | xsd:string | Electronic mail address for communication. |
| creators.city | xsd:string | Named geographical locality |
| creators.state | xsd:string | Region associated with the address of an object. |
| creators.country | xsd:string | The country name associated with the address of an object. |
| hostServer | Object container | Server machine where the base model and corresponding software agent is deployed. |
| hostServer.serverName | xsd:string | DNS name of the server. |
| hostServer.serverIP | xsd:string | External IP Address of the server. |
| hostServer.serverAdmin | xsd:string | Person is charge of administating the server. |
| hostServer.adminEmail | xsd:string | Administrator email. |
| hostServer.serverOwner | xsd:string | Organization or person that owns the physical server. |
| serviceInfo | Object container | Information regarding the exposed webservice of the model. |
| serviceInfo.serviceURL | xsd:string | Request URI |
| serviceInfo.serviceMethod | xsd:string | http method to invoke a request (EG: POST, GET) |
| serviceInfo.consumes | xsd:string | A list of MIME types the service can consume. (E.G: application/json) |
| serviceInfo.produces | xsd:string | MIME types produced as a response by the service. |
| service.isPublic | xsd:string | If the service is available on the web for public use. (true or false). |
| serviceInfo.externalDocs | Object array | Additional external documentation. |
JSON Skeleton Representation
{
"_id" : "",
"modelName" : "",
"modelDescription" : "",
"dateCreated" : "",
"dateModified" : "",
"softwareAgent" : "",
"license" : "",
"version" : "",
"sponsor" : "",
"creators" : [
{
"name" : "",
"department" : "",
"email" : "",
"organization" : "",
"city" : "",
"state" : "",
"country" : ""
}
],
"hostServer" : {
"serverName" : "",
"serverIP" : "",
"serverAdmin" : "",
"adminEmail" : "",
"serverOwner" : ""
},
"serviceInfo" : {
"serviceURL" : "",
"serviceMethod" : "",
"consumes" : "",
"produces" : "",
"isPublic" : "",
"externalDocs" : [""]
}
}
MODEL-BASE
Stores a set of default parameter values for a base modeling scenario. Each document provides extended metadata about the scenario such as: name, description, date created and last date modified; a set of model settings: model id, algorithm, method, and finally a set of predefined model inputs: target model id, parameter name, label, unit, default value, default data source, among others. Model-base documents are used to dynamically load default parameter values on the graphical user interface.
Primary Representation

Field Details
| Field | Type | Description |
|---|---|---|
| _id | xsd:string | MongoDB auto-generated unique identifier. |
| scenarioName | xsd:string | Given name of a scenario. |
| scenarioDescription | xsd:string | A short description of what the scenario is. |
| dateCreated | xsd:string | Date of first scenario specification. |
| dateModified | xsd:datetime | Date of last modification to scenario fields. |
| modelSettings | Object array | Default general settings of models used for the current scenario. |
| modelSettings.modelID | xsd:string | Reference to model-meta document. |
| modelSettings. ... | xsd:string | Modeling software specific settings can be added as attributes |
| modelInputs | Object array | Array of model inputs. |
| modelInputs.modelID | xsd:string | Reference to model-meta document. |
| modelInputs.paramName | xsd:string | Parameter name as defined on the modeling code or software agent. |
| modelInputs.paramCategory | xsd:string | A class or division to which the parameter is a part of. |
| modelInputs.paramLabel | xsd:string | Human readable name for the parameter. |
| modelInputs.paramUnit | xsd:string | Particular physical quantity, defined and adopted by convention. |
| modelInputs.paramDefaultValue | Object array | A predefined value of a particular parameter. |
| modelInputs.paramDefaultSource | xsd:string | A related resource from which the described resource is derived. |
| modelInputs.maxValue | xsd:string | The greatest numerical value that the parameter can take. |
| modelInputs.minValue | xsd:string | The lowest numerical value that the parameter can take. |
| modelInputs.structType | xsd:string | Data structure used on the parameter value field: Scalar: single value Table: 1 to n dimension tables. |
| modelInputs.structDimension | xsd:string | Dimension size of the table structure. This field is not required for scalar values. |
| modelInputs.dataType | xsd:string | Data type of the defined value. Eg. Integer, double |
| modelInputs.definitionType | xsd:string | How the value of the parameter is stablished: Static: hardcoded into the model. Scenario: defined by a specific scenario selection. User: Can be customized by a user. |
JSON Skeleton Representation
{
"_id" : "",
"scenarioName" : "",
"scenarioDescription" : "",
"dateCreated" : "",
"dateModified" : "",
"modelSettings" : [
{
"modelID" : "",
}
],
"modelInputs" : [
{
"modelID" : "",
"paramName" : "",
"paramLabel" : "",
"paramCategory : "",
"paramUnit" : "",
"paramDefaultValue" : "",
"paramDefaultSource" : "",
"maxValue" : "",
"minValue" : "",
"dataType" : "",
"structType" : "",
"structDimension" : "",
"dataType" : "",
"definitionType" : ""
}
]
}
USER SCENARIO
Stores a set of user defined scenario metadata, model inputs and requested outputs.
Primary Representation

Field Details
| Field | Type | Description |
|---|---|---|
| _id | xsd:string | MongoDB auto-generated unique identifier. |
| className | xsd:string | Morphia mapping java class on webservice. |
| name | xsd:string | User defined name of a given projection input. |
| description | xsd:string | Short description to describe projection scenario and inputs. |
| userid | xsd:string | Reference to user id of the water project website. |
| baseScenario | xsd:string | Given name of the scenario taken as base for the current projection. |
| baseClimateScenario | xsd:string | Given name of a climate scenario taken as a base for the current projection. |
| startedAtTime | xsd:datetime | Date and time when projection was submitted. |
| endedAtTime | xsd:datetime | Date and time when model execution finished. |
| status | xsd:string | Execution state of submitted projection (queued, running, complete, error). |
| isPublic | xsd:string | Flag to determine if the projection is available for public view. (true or false) |
| modelSettings | Object array | General settings of models used for the current scenario. |
| modelSettings.modelID | xsd:string | Reference to model-meta document. |
| modelInputs | Object array | Array of model inputs. |
| modelInputs.modelID | xsd:string | Reference to model-meta document. |
| modelInputs.paramName | xsd:string | Parameter name as defined on the modeling code or software agent. |
| modelInputs.paramLabel | xsd:string | Human readable name for the parameter. |
| modelInputs.paramUnit | xsd:string | Particular physical quantity, defined and adopted by convention. |
| modelInputs.paramDefaultValue | Object array | A predefined value of a particular parameter. |
| modelInputs.paramValue | Object array | User defined value of a particular parameter. |
| modelInputs.paramDefaultSource | xsd:string | A related resource from which the described resource is derived. |
| modelInputs.maxValue | xsd:string | The greatest numerical value that the parameter can take. |
| modelInputs.minValue | xsd:string | The lowest numerical value that the parameter can take. |
| modelInputs.structType | xsd:string | Data structure used on the parameter value field: Scalar: single value Table: 1 to n dimension tables. |
| modelInputs.structDimension | xsd:string | Dimension size of the table structure. This field is not required for scalar values. |
| modelInputs.dataType | xsd:string | Data type of the defined value. Eg. Integer, double |
| modelInputs.definitionMethod | xsd:string | How the value of the parameter is stablished: Static: hardcoded into the model. Scenario: defined by a specific scenario selection. User: Can be customized by a user. |
| modelOutputs | Object array | |
| modelOutputs.varName | xsd:string | Model or software agent name of an output variable. |
| modelOutputs.varLabel | xsd:string | Human name of an output variable. |
| modelOutputs.varDescription | xsd:string | Detailed information about the variable. |
| modelOutputs.varCategory | xsd:string | Class or division to which the variable is part of. |
| modelOutputs.varValue | xsd:string | Output value of a particular variable. |
| modelOutputs.varUnit | xsd:string | Particular physical quantity, defined and adopted by convention. |
JSON Skeleton Representation
{
"_id" : "",
"className" : "",
"name" : "",
"description" : "",
"userid" : "",
"baseScenario" : "",
"baseClimateScenario" : "",
"startedAtTime" : "",
"endedAtTime" : "",
"status" : "",
"isPublic" : "",
"modelSettings" : [
{
"modelID" : "",
}
],
"modelInputs" : [
{
"modelID" : "",
"paramName" : "",
"paramLabel" : "",
"paramCategory" : "",
"paramUnit" : "",
"paramDefaultValue" : "",
"paramDefaultSource" : "",
"paramValue" : [""],
"structType" : "",
"structDimension" : "",
"dataType" : "",
"definitionType" : ""
}
],
"modelOutputs" : [
{
"varName" : "",
"varLabel" : "",
"varDescription" :"",
"varCategory" : "",
"varValue" : [""],
"varUnit" : "",
}
]
}