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 | 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 |
|
| longName | 1 | simulation/longName |
|
| Model | 1 | simulation/model/reference (see reference table) | reference to a model component
|
| Platform | 1 | simulation/deployment/reference (see reference table) | reference to a deployment
|
| Ensemble Members | 1 | simulation/comment | Not output yet. Allyn is looking into supporting this [ME - defaults to 1]
|
| Description | 0...1 | simulation/rationale |
|
| 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]
|
| ModelMods | 0...n | Only included via a conformance?
|
| 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 | simulation/duration |
|
| Duration/Calendar? | simulation/duration/[Calendar Value] | Calendar can be 'daily-360, realCalendar, perpetualPeriod'. The CIM element takes this name
|
| Duration/LengthUnits | simulation/duration/[Calendar Value]@units |
|
| simulation/duration/[Calendar Value]/range |
|
| simulation/duration/[Calendar Value]/range/closedDateRange | Don't know whether to use openDateRange or closedDateRange
|
| Duration/start | simulation/duration/[Calendar Value]/range/closedDateRange/startDate | Should be a date type
|
| Duration/end | simulation/duration/[Calendar Value]/range/closedDateRange/endDate | Should be a date type
|
| Duration/duration | What is this?
|
| Related Simulation |
|
| 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 | 1..2 | All components have a metafor type. Realm components, in addition, have a DRS type, hence the cardinality of 2.
|
| modelComponent/ type/ vocabularyServer/ vocabularyName | Add in a vocabulary name of metafor for metafor CV and DRS for realm 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!=ComponentAttribute | 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==ComponentAttribute | n/a | n/a | Ignore attribute containers if the name is ComponentName? + Attribute 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 | Bit of a cludge as it is not a document reference that we are storing here. Perhaps use "name" instead?
|
| 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.
|