In order to translate from a questionnaire instance to CIM instances we need to have at least captured the information that is required to be a valid CIM instance. Of course there will be lots of additional optional CIM information that will be useful too but capturing this information (or not) in the questionnaire is a scientific decision. All the questions that the questionnaire asks can be represented in the CIM (otherwise why are people filling them in). This ticket is looking at the technical issues of translating from questionnaire instances to CIM instances.
The current version of the Questionnaire (that is being worked on) is 1.1. The current version of the CIM that is being targeted is 1.5. The plan is for the release version of 1.5 to be able to capture all the concepts in the questionnaire.
| Questionnaire | CIM1.5 | notes
|
| grid | gridSpec/esmModelGrid |
|
| grid/shortName | gridSpec/esmModelGrid/shortName |
|
| grid/longName | gridSpec/esmModelGrid/longName |
|
| grid/description | gridSpec/esmModelGrid/description |
|
| grid/attributes | ???? | Users can add their own name value pairs here. Proposal : remove this option.
|
|
|
| grid/horizontalGrid | n/a | Should this be horizontal properties of the grid, rather than a horizontal grid? Proposal : change the default name.
|
| grid/horizontalGrid/shortName | ???? | The CIM has a gridTile shortName so this information could go there but this questionnaire input is a name associated with the horizontal properties of the grid. Proposal : remove this as an editable option.
|
| grid/horizontalGrid/longName | ???? | The CIM has a gridTile shortName so this information could go there but this questionnaire input is a name associated with the horizontal properties of the grid. Proposal : remove this option.
|
| [if discretization==other,N/A or compositeDiscretization==other]grid/horizontalGrid/description | We would hope that people would describe why they have put other and perhaps N/A in this description, so it has a use in this case. So perhaps this is an argument for keeping this in the CIM and adding the information to the grid/description - see below
|
| grid/horizontalGrid/description | ???? | The CIM has a gridTile description so this information could go there but there is no option to describe the horizontal properties of the grid separately from the vertical properties of the grid. Proposal : add this information to the CIM grid/description.
|
| grid/horizontalGrid/attributes | ???? | Users can add their own name value pairs here. Proposal : remove this option.
|
| grid/horizontalGrid/coordinateSystem | n/a |
|
| grid/horizontalGrid/coordinateSystem/mnemonic | ???? | Is this mnemonic meant to describe the grid? If so, why is it different to the grid shortName? If not, what is it associated with? Proposal : remove this option.
|
| grid/horizontalGrid/coordinateSystem/discretization [if discretization != composite,N/A] | gridSpec/esmModelGrid/gridTile@discretization | CIM/gridSpec terminology uses horizontal properties to define the grid. Should we change this? Proposal : change to gridTile@horizontalDiscretization
|
| grid/horizontalGrid/coordinateSystem/discretization [if discretization == N/A] | n/a | Do not provide the gridSpec/esmModelGrid/gridTile@discretization property in this case.
|
| [if discretization==composite] grid/horizontalGrid/coordinateSystem/compositeDiscretization | gridSpec/esmModelGrid/gridTile@discretization | compositeDiscretization is multi-valued so create a separate gridTile for each discretization entry
|
| grid/horizontalGrid/coordinateSystem/resolution | gridSpec/esmModelGrid/gridTile/horizontalResolution |
|
| grid/horizontalGrid/coordinateSystem/refinementScheme | ???? | Presumably this is a property of a gridTile rather than a grid? Proposal : add a property gridSpec/esmModelGrid/gridTile/refinementScheme.
|
| grid/horizontalGrid/coordinateSystem/type | gridSpec/esmModelGrid@gridType | Valid CV values depend on choice of horizontal discretization. Again we are using horizontal properties to define the grid. Proposal : change to esmModelGrid@horizontalGridType
|
| [if discretization==composite] grid/horizontalGrid/coordinateSystem/compositeGrid | ???? | Is this a grid name? Why is it not the same as the mnemonic and (more importantly) the grid shortName? Proposal : remove this option.
|
| [if grid/horizontalGrid/coordinateSystem/type is *] | ???? | Depending on the grid type the grid resolution needs different attributes to be defined. Proposal : make a horizontalResolution container which can contain 1 to n name value pairs which conform to this CV. So gridSpec/esmModelGrid/gridTile/horizontalResolution/property @name="xx"/"yy". We could then make the existing horizontalResolution value an attribute. This structure presumably makes the nx and ny attributes of a gridTile redundant. Note, I will place the different values in the different tiles for a composite.'
|
| grid/horizontalGrid/coordinateSystem/attributes | ???? | Users can add their own name value pairs here. Proposal : remove this option.
|
| grid/horizontalGrid/extent | n/a | This applies for the whole grid ignoring the number of tiles so should be associated with the grid rather than gridTile? If not, how does this work if compositegrid is selected? Proposal : add extent to esmModelGrid but I expect to be shot down :-)
|
| grid/horizontalGrid/extent/LatMin | ???? | see above
|
| grid/horizontalGrid/extent/LatMax | ???? | see above
|
| grid/horizontalGrid/extent/LonMin | ???? | see above
|
| grid/horizontalGrid/extent/LonMax | ???? | see above
|
| grid/horizontalGrid/extent/attributes | ???? | Users can add their own name value pairs here. Proposal : remove this option.
|
|
|
| grid/verticalGrid | n/a | Should this be vertical properties of the grid, rather than a vertical grid? Proposal : change the default name.
|
| grid/verticalGrid/shortName | ???? | The CIM has a gridTile shortName so this information could go there but this questionnaire input is a name associated with the vertical properties of the grid. Proposal : remove this as an editable option.
|
| grid/verticalGrid/longName | ???? | The CIM has a gridTile shortName so this information could go there but this questionnaire input is a name associated with the vertical properties of the grid. Proposal : remove this option.
|
| grid/verticalGrid/description | ???? | The CIM has a gridTile description so this information could go there but there is no option to describe the vertical properties of the grid separately from the horizontal properties of the grid. This description information may be used to explain why "other" has been chosen for a particular option. Proposal : add this information to grid/description.
|
| grid/verticalGrid/attributes | ???? | Users can add their own name value pairs here. Proposal : remove this option.
|
| grid/verticalGrid/coordinatesystem | n/a |
|
| grid/verticalGrid/coordinateSystem/type | ???? | Is type actually equivalent to discretisation (in horizontal grid terms)? If that is the case I think this should be added in the same place. Proposal : add the following gridSpec/esmModelGrid/gridTile@verticalDiscretization and change the existing gridType attribute to horizontalDiscretization. Also I suggest that we change the mindmap names to be consistent.
|
| grid/verticalGrid/coordinateSystem/coordinate | ???? | Is coordinate actually equivalent to type (in horizontal grid terms)? If so I think this property helps define the grid. Proposal : add an additional attributes like gridSpec/esmModelGrid@verticalGridType and change the existing gridType attribute to horizontalGridType. Also I suggest that we change the mindmap names to be consistent.
|
| grid/verticalGrid/coordinateSystem/surfaceReference, partialSteps or hybridization | ???? | Proposal : make a verticalResolution container which can contain 1 to n name value pairs which conform to this CV. So gridSpec/esmModelGrid/gridTile/horizontalResolution/property @name="xx"/"yy". We could then make the existing verticalResolution value an attribute. Note, I would replicate the same vertical values in the different tiles for a composite.'
|
| grid/verticalGrid/AtmosphericLevels or OceanicLevels | ???? | Why are we associating levels with components here? I would (naively) say that a grid should not be associated with a component; rather a component is associated with a grid. If this is really the way these things are distinguished then we could add an associated id or a type. My first reaction is that I would prefer to just add levels and have a load of associated properties. Proposal : add this information by modifying the verticalResolution element in the same way as the horizontalResolution element would be modified. The fact properties are associated with an ocean grid or atmos grid can be inferred by the component referencing the grid.
|
| grid/verticalGrid/AtmosphericLevels or OceanicLevels/attributes | ???? | Users can add their own name value pairs here. Proposal : remove this option
|
The top level grid component is ignored by the Q2CIM translator as it is going to be removed
| Questionnaire | Cardinality | CIM1.5 | notes
|
| ensemble characteristics | 1 | ensemble | a new ensemble document is created and added to the CIMRecordSet
|
| ensemble/ shortName | we use the associated simulation shortName
|
| ensemble/ longName | we use the associated simulation longName
|
| type | 1 | ensemble/ ensembleType/ @value |
|
| notes | 0..1 | ensemble/ description |
|
| ensemble/ supports/ reference (see reference table) | reference to an experiment. This is already set up in the questionnaire
|
| members | 2..n | ensemble/ ensembleMember |
|
|
|
| 1 | ensemble/ ensembleMember/ simulation/ reference | reference to the associated simulation. In the questionnaire this is the same simulation for all ensemble members but that does not have to be the case in the CIM.
|
| member model mod | 0..1 | ensemble/ ensembleMember/ simulation/ reference/ change |
|
| member input mod | 0..1 | ????
|
| member drs name | 1 | ensemble/ ensembleMember/ externalID/ name |
|
| 1 | ensemble/ ensembleMember/ externalID/ standard/ @value="DRS" | Specify that this is a name from the DRS vocabulary
|
|
|
| ensemble/ documentID | Generated by the questionnaire
|
| ensemble/ documentVersion | Generated by the questionnaire
|
| ensemble/ documentAuthor | The Metafor questionnaire is set as the author
|
| ensemble/ documentCreationDate | Generated by the questionnaire
|
| Questionnaire | Cardinality | CIM1.5 | notes | tds tag or attribute
|
| file | dataObject |
|
| dataObject@dataStatus='complete' | I just set this to complete at the moment. I'm not sure what it means. |
|
| file/abbrev | 1 | dataObject/acronym | Currently optional in the questionnaire |
|
| file/description | 0...1 | dataObject/description |
|
| dataObject/storage |
|
| dataObject/storage/ipStorage |
|
| dataObject/storage/ipStorage@dataLocation=''''' | This is currently required. Just set this to empty string | file_id
|
| file/name | 1 | dataObject/storage/ipStorage/fileName |
|
| dataObject/storage/ipStorage/dataSize='0' | Required in the CIM but not supplied in the Q |
|
| dataObject/storage/ipStorage/protocol | Required in the CIM but not supplied in the Q |
|
| dataObject/storage/ipStorage/host | Required in the CIM but not supplied in the Q |
|
| file/link | 0...1 | dataObject/storage/ipStorage/path |
|
| file/format | 1 | dataObject/storage/ipStorage/dataFormat@value |
|
| dataObject/distribution | Required in the CIM |
|
| dataObject/distribution@distributionAccess='OnlineFileHTTP' | Required in the CIM but not supplied in the Q |
|
| file/format | dataObject/distribution/distributionFormat@value | Using the same value here as for storage |
|
| dataObject/distribution/responsibleParty | Required in the CIM but not supplied in the Q |
|
| file/reference | 0...1 | dataObject/citation | See references translation table |
|
| file/variable | dataObject/content | One content element per file/variable |
|
| dataObject/content/topic |
|
| file/variable/name | 1 | dataObject/content/topic/name | variables/name
|
| file/variable/unit | 1 | dataObject/content/topic/unit | variables/units
|
| file/variable/cfname | 0...1 | dataObject/content/topic/standardName[@standard='CF'] | variables/vocabulary_name
|
| file/variable/description | 0...1 | dataObject/content/topic/description | variables
|
| dataObject/content/aggregation | Required in the CIM but not supplied in the Q |
|
| dataObject/content/frequency | Required in the CIM but not supplied in the Q |
|
| file/variable/reference | 0...1 | dataObject/content/citation | See references translation table |
|
| Questionnaire | Cardinality | CIM1.5 | Notes | tds tag or attribute
|
| Responsible Parties | responsibleParty |
|
| type(Contact,Lead Author,Funder,...) | responsibleParty/gmd:CI_ResponsibleParty/gmd:role/gmd:CI_RoleCode@codeList | could be used: http://wis.wmo.int/2006/catalogues/gmxCodelists.xml#CI_RoleCode | is used: http://wis.wmo.int/2006/catalogues/gmxCodelists.xml#CI_RoleCode
|
| type(Contact,Lead Author,Funder,...) | responsibleParty/gmd:CI_ResponsibleParty/gmd:role/gmd:CI_RoleCode@codeListValue | value examples: distributor, originator, pointOfContact,principalInvestigator,... from: http://wis.wmo.int/2006/catalogues/gmxCodelists.xml#CI_RoleCode |
|
| uri | responsibleParty/Comment | Output questionnaire uri as a comment in case it is of benefit in the future. |
|
| Name [if isOrganisation==false] | 1 | responsibleParty/gmd:CI_ResponsibleParty/!gmd:individualName/!gco:CharacterString | Use individual name if isOrganisation is false | institute or institute_id
|
| Name [if isOrganisation==true] | 1 | responsibleParty/gmd:CI_ResponsibleParty/gmd:organisationName/gco:CharacterString | Use organisation name if isOrganisation is true | institution
|
| Abbreviation | 1 | responsibleParty/abbreviation | [ME - this is a mandatory field in the Q form - I think the system should derive the abbreviation to keep it simple] |
|
| WebPage | 0...1 | responsibleParty/gmd:CI_ResponsibleParty/gmd:contactInfo |
|
| Email | 0...1 | responsibleParty/gmd:CI_ResponsibleParty/gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:electronicMailAddress/gco:CharacterString |
|
| Address | 0...1 | responsibleParty/gmd:CI_ResponsibleParty/gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:deliveryPoint/gco:CharacterString |
|
| Questionnaire | Cardinality | CIM1.5 | Notes
|
| simulation | simulation |
|
| shortName | 1 | simulation/shortName | if ensemble members >1 we append "BaseSimulation" to the shortName and the shortName is used as the ensemble short name
|
| longName | 1 | simulation/longName | if ensemble members >1 we prepend "Base Simulation of Ensemble " to the longName and the longName is used as the ensemble short name
|
| Model | 1 | simulation/model/reference (see reference table) | reference to a model component
|
| model mod | simulation/model/reference/change | a changeset is added here for each model mod that is associated with this simulation. This is irrespective of whether the model mod is used for a conformance or not. Therefore all model mods associated with a conformance will also appear here as well as the ones that do not. This means that model mod information is replicated.
|
| Platform | 1 | simulation/deployment/reference (see reference table) | reference to a deployment
|
| Ensemble Members ==1 | 1 | There is no ensemble
|
| Ensemble Members > 1 | 1 | An ensemble document will be created in which each of its members (equal to the number of members specified here) will reference this simulation. See ensemble table. Also note associated changes to the shortName and longName in this case.
|
| Description | 0...1 | simulation/description |
|
| Author | 1 | simulation/comment | Not sure how to handle this [ME - Q allows three parties to be defined - contact is the key one; I'm not even sure what an author is in the context of a simulation]
|
| simulation/supports/reference (see reference table) | reference to an experiment. This is already set up in the questionnaire
|
| Conformance | 0...n | conformance (see conformance table) | a conformance to a numerical requirement
|
| Duration | ???? | Do we plave this information with Duration or with start and end
|
| Duration/start | ???? |
|
| Duration/end | ???? | Either end or length can be chosen
|
| Duration/length | ???? |
|
| Related Simulation [value = extends,fixedVersionOf,hasControlSimulation,other,usesSpinup] | 0..1 | simulation/ documentGenealogy/ relationship/ simulationRelationship/ @type="value" | Need to discuss with Allyn which of these are relevant here.
|
| Related Simulation/ details | simulation/ documentGenealogy/ relationship/ simulationRelationship/ description |
|
| Related Simulation/ simulation | simulation/ documentGenealogy/ relationship/ simulationRelationship/ reference (see reference table) |
|
| Questionnaire | Cardinality | CIM1.5 | notes
|
| component/componentProperties/componentProperty | Add a new component property to the appropriate input component
|
| componentInput/ShortName | 1 | component/componentProperties/componentProperty/shortName |
|
| componentInput/ShortName | component/componentProperties/componentProperty/longName |
|
| componentInput/type | 1 | composition/coupling@purpose |
|
| componentInput/description | 0...1 | component/componentProperties/componentProperty/description |
|
| componentInput/units | 0...1 | component/componentProperties/componentProperty/units@value |
|
| componentInput/cfname | 0...1 | component/componentProperties/componentProperty/cfName |
|
|
|
| binding/couplingType | 1 | composition/coupling@type |
|
| binding/couplingFrequency | 1 | composition/coupling/timeProfile/rate |
|
| binding/couplingFrequencyUnits | 1 | composition/coupling/timeProfile@units |
|
|
|
| composition/coupling/couplingTarget/reference |
|
|
|
| binding/file | 1 | composition/coupling/couplingSource/reference |
|
| binding/variable | 1...n | composition/coupling/couplingSource/reference |
|
| binding/component | 1 | composition/coupling/couplingSource/reference |
|
|
|
| binding/spatialRegridding==Conservative | 1 | composition/coupling/spatialRegridding@conservativeSpatialRegridding=true |
|
| binding/spatialRegridding==Non-Conservative | 1 | composition/coupling/spatialRegridding@conservativeSpatialRegridding=false |
|
| binding/spatialRegridding==None | 1 |
|
| binding/temporalTransformation==TimeAccumulation | 1 | composition/coupling/timeTransformation@timeAccumulation=true |
|
| binding/temporalTransformation==TimeAverage | 1 | composition/coupling/timeTransformation@timeAverage=true |
|
| binding/temporalTransformation==Exact or LastAvailable? or Other or TimeInterpolation | 1 | composition/coupling/comment |
|
| binding/description | 0...1 | composition/coupling/description |
|
| Questionnaire | Cardinality | CIM1.5 | Notes
|
| simulation/conformance | simulationRun/conformance |
|
| HowConformed?=="Not Conformant" | 1 | simulationRun/conformance@conformant=false | HowConformed? is one of : Not Conformant, Standard Configuration, Via Input Mods, Via Model Mods, Via Combination
|
| HowConformed?!="Not Conformant" | 1 | simulationRun/conformance@conformant=true |
|
| howConformed | simulationRun/comment |
|
| simulationRun/conformance/requirement/reference | This questionnaire is set up so that a conformance is associated with a numerical requirement of an experiment so we can work out what it is referencing.
|
| Notes | 0...1 | simulationRun/conformance/description |
|
| Model Modification | 0...n | simulationRun/conformance/source/reference | reference the component associated with this modification
|
| Model Modification/type | simulationRun/conformance/source/reference/change/detail@type | Does not currently conform to the CIM enumerations.
|
| Model Modification/mnemonic | simulationRun/conformance/source/reference/change/detail/comment |
|
| Model Modification/description | simulationRun/conformance/source/reference/change/detail/description |
|
| Input Bindings | 0...n | simulationRun/conformance/source/reference | reference the component property associated with this input binding. Input bindings have no model modification details
|
Questionnaire
| Questionnaire datatype | Questionnaire Cardinality | CIM1.5 | CIM Cardinality | notes + questions
|
| "Special" Component | modelComponent/ componentProperties componentProperty | To allow for a hierarchy of properties, the questionnaire allows certain tagged properties to be treated as restricted components. These components can only have a short and long name.
|
| "Special" Component/ ShortName | modelComponent/ componentProperties componentProperty/ shortName |
|
| "Special" Component/ LongName | modelComponent/ componentProperties componentProperty/ longName |
|
|
|
| Component | n/a | 0..n | modelComponent | 0..n | All questionnaire components are assumed to be model components i.e. none are processor components.
|
| Component/ ShortName | string | 1 | modelComponent/ shortName | 1 |
|
| Component/ LongName | string | 1 | modelComponent/ longName | 1 |
|
| Component/ Type | CV or User Defined string | 1 | modelComponent/ type/ @value for existing components and modelComponent/ type/ [@value='Other'] for user defined components | 1..2 | All existing components have a metafor type. New components have their own type. Realm components, in addition, have a DRS type, hence the cardinality of 2, as we output these as well in the CIM.
|
| modelComponent/ type/ vocabularyServer/ vocabularyName | Add in a vocabulary name of metafor for metafor CV, DRS for realm names and user_defined for user defined names
|
| modelComponent/ type/ vocabularyServer/ @href | Reference a Metafor SVN file?
|
| Component/ Implemented | boolean | 1 | n/a | n/a | Indicates whether the component exists in the coupled model (or not). If not then all it's descendents also do not exist.
|
| Component/ Responsible parties | 0..3 | see responsible parties table |
|
| n/a | n/a | CIMRecord/ modelComponent/ childComponent | 0..n | Generated from questionnaire component hierarchy.
|
| Component/ Attribute Container (paramgroup) name != "General Attributes" | n/a | CIMRecord/ modelComponent/ componentProperties/ componentProperty @name=paramgroup | Treat attribute containers as CIM properties if they are not the default container. Any parameters within these containers will be contained within the associated CIM property, leading to complex properties
|
| Component/ Attribute Container (paramgroup) name=="General Attributes" | n/a | n/a | Ignore the default attribute container i.e. if the name is "General Attributes", as this is a convenience for the questionnaire.
|
| Component/ Attribute Container/ Constraint | n/a | 0..1 | n/a | conformance to these constraints will be checked in the validation stage
|
| Component/ Attribute Container/ Attribute | n/a | 0..n | CIMRecord/ modelComponent/ componentProperties componentProperty/ | All attributes are assumed to be componentProperties. I do not make use of scientificProperties or numericProperties.
|
| Component/ Attribute Container/ Attribute/ Name | CV or User Defined string | 1 | CIMRecord/ modelComponent/ componentProperties componentProperty/ shortName & longName | Mapping name to both shortName and longName.
|
| Component/ Attribute Container/ Attribute/ Value | CV or User Defined string | 1..n | CIMRecord/ modelComponent/ componentProperties componentProperty/ value | A questionnaire value may contain more than one value in a "|" separated list. If there is more than one value then it has separate value elements in the CIM.
|
| Component/ Attribute Container/ Attribute/ Value== N/A | n/a | n/a | Do not output a property if its value is N/A
|
| Component/ Genealogy | n/a | 0..1 | n/a |
|
| Component/ Genealogy/ YearReleased | string | 0..1 | modelComponent/releaseDate | Use validator to make sure it is a datetime, restrict to a datetime in questionnaire, or relax the CIM rules?
|
| Component/ Genealogy/ PreviousVersion | string | 0..1 | modelComponent/ documentGenealogy/ relationship/ documentRelationship[@type=''previousVersion"]/ target/ reference/ name | The name previousVersion is not a supported type in the CIM
|
| Component/ Genealogy/ Improvements | string | 0..1 | modelComponent/ documentGenealogy/ relationship/ documentRelationship/ description |
|
| Component/ AdditionalInformation | string | 0..1 | CIMRecord/ modelComponent/ description |
|
| Component/ References | 0..n | see references table | 0..n |
|
| n/a | CIMRecord/ modelComponent@ documentVersion | Generated by the Questionnaire
|
| n/a | CIMRecord/ modelComponent/ documentCreationDate | Generated by the Questionnaire when the CIM document is created
|
| n/a | CIMRecord/ modelComponent/ documentID | Generated by the questionnaire (using uuid for the model object)
|
| n/a | CIMRecord/ modelComponent @CIMVersion | Add current CIM version
|
| Component/ InputRequirements | 0..n | see composition table |
|
| grid | 0..1 | see grid table | component will reference the associated grid.
|