Each space construct may have

- An ordered list of one or more
**dimension constructs**(or "dimensions" for short). - A
**data array**with dimensions in the order listed and with the appropriate sizes. If there are no dimensions, the data array is a scalar. The elements of the data array must all be of the same data type, which may be numeric, character or string. - An unordered collection of
**auxiliary coordinate constructs**. - An unordered collection of
**cell measure constructs**. - A
**cell methods property**, which refers to the dimensions (but not their sizes). - An unordered collection of
**grid mappings**, which describe functions and supply parameters to define relationships among the coordinates of the space or to calculate new coordinates from them. - Other
**properties**, which are metadata that do not refer to the dimensions, and serve to describe the data the space contains. Properties may be of any data type (numeric, character or string) and can be scalars or arrays. They are attributes in the netCDF file, but we use the term "property" instead because not all CF attributes are properties in this sense.

- A
**size**(an integer greater than zero), which can be equal to one. In CF, there is a formal distinction between scalar coordinate variables and size-one coordinate variables, but they are logically the same; CF supports scalar coordinate variables for simplicity and convenience in the netCDF file. An example of a size-one dimension is a vertical dimension for 1.5 m height.

- A one-dimensional numerical
**coordinate array**of the size specified for the dimension. Dimension constructs cannot have string-valued coordinates. If the size of the dimension is greater than one, the elements of the coordinate array must all be of the same numeric data type, they must all have different non-missing values, and they must be monotonically increasing or decreasing. In this data model, a CF string-valued coordinate variable or string-valued scalar coordinate variable corresponds to an auxiliary coordinate construct (not a dimension construct), with a dimension whose own construct has no coordinate array. - A two-dimensional
**boundary coordinate array**, whose slow-varying (second in Fortran) dimension equals the size specified by the dimension construct, and whose fast-varying dimension is two, indicating the extent of the cell. For climatological time dimensions, the bounds are interpreted in a special way indicated by the cell methods. - Properties (in the same sense as for the space construct) serving to describe the coordinates.

Dimension constructs can be regarded as the "axes" of the data
space. In CF-netCDF files, a dimension
construct corresponds to a netCDF dimension and its associated
coordinate variable
(in the Unidata sense, with the name of the variable and the name of its
dimension being equal), and
in CF 1.5 only coordinate variables can have an `axis` attribute.
However, we avoid the word "axis" here because there is an ongoing
discussion about also
allowing CF-netCDF auxiliary coordinate variables to have
the CF `axis` attribute,
although they are not axes of the data space
(the reason being that they may be regarded as axes of the physical space).

In this CF data model we permit a dimension not to have a coordinate array if there is no appropriate numeric monotonic coordinate. That is the case for a dimension that runs over ocean basins or area types, for example, or for a dimension that indexes timeseries at scattered points. Such dimensions do not correspond to a continuous physical quantity.

In a netCDF file, data variables can share coordinate variables. In the data model, the dimension constructs of one space construct are logically independent of those of all other space constructs; if the coordinates of one space construct are modified, it does not affect any other space construct.

- A list of some (at least one) of the dimensions of the space construct in any order.

- A coordinate array with dimension sizes corresponding
to the list of dimensions of the auxiliary coordinate construct.
If there is a dimension with size greater than one,
the elements of the coordinate array must all be of the same data type
(numeric, character or string),
but they do not have to be distinct or monotonic.
*Maybe they can have missing values; that is not clear at present.* - A boundary coordinate array with all the dimensions, in the same order,
as the coordinate array, and a fastest-varying dimension (first dimension
in Fortran) equal to the number of vertices of each cell.
*CF doesn't exclude character or string coordinates having boundaries, but is there a need for it?* - Properties serving to describe the coordinates.

- Auxiliary
coordinate variables named by the
`coordinates`attribute of a data variable. CF recommends there to be auxiliary coordinate constructs of latitude and longitude if there is two-dimensional horizontal variation but the horizontal coordinates are not latitude and longitude. - Variables which depend on one or more dimensions and are
named by a
`formula_terms`attribute of a vertical coordinate variable.

- A list of some of the dimensions of the space construct in any order.
- Properties to describe itself.

- A
**measure property**, which indicates which metric of the grid it supplies e.g. cell areas. - A
**units property**consistent with the measure property e.g. m2. - A numeric array of metric values having the dimensions listed, or a scalar metric value if no dimensions are given. If there is a dimension with size greater than one, the elements of the array must all be of the same data type. It is assumed that the metric does not depend on any of the dimensions of the space which are not specified, and the values are implicitly propagated along these dimensions.

- A
**mapping property**which indicates the nature of the transformation and implies the formulae to be used. A CF-netCDF file does not explicitly record the formulae; it depends on the application software knowing what to do. The mapping property is the`standard_name`of a vertical coordinate variable with`formula_terms`, and the`grid_mapping_name`of a`grid_mapping`variable. - An unordered collection of scalar parameters, pointers to
dimension or auxiliary coordinate constructs,
and pointers to other space constructs.
The scalar parameters are scalar data variables (which should
have
`units`if dimensional) named by`formula_terms`, and attributes of`grid_mapping`variables (in specified units). Each member of the collection has a particular role in the formulae, as identified by its keyword in a`formula_terms`attribute, or its attribute name in a`grid_mapping`variable.

The attributes
`valid_max`,
`valid_min` and
`valid_range`
of data variables and coordinate variables are checks on the validity of
the values, which could be verified on input and written on output.
In this CF data model we assume they do not constrain any manipulations
which might be done on the data in memory.

The attributes
`_FillValue` and
`missing_value`
of data variables specify how missing data is indicated in the data array.
The CF data model supports the idea of missing data, but does not depend on
any particular method of indicating it.

The attributes
`add_offset`,
`compress`,
`flag_masks`,
`flag_meanings`,
`flag_values` and
`scale_factor`
are all used in methods of compressing the data to save space,
with or without loss of information.
They are not part of this data model because these operations do not
logically alter the data.
The "feature type" attribute and associated new conventions,
currently under discussion, will provide a way of packing multiple data
spaces of the same kind of discrete sampling geometry
(timeseries, trajectories, etc.) into a single CF-netCDF data variable,
in order to save space, since a multidimensional representation with
common coordinate variables is typically very wasteful in such cases.
This is a kind of compression. The data model would regard each instance
of the feature type as an independent space construct.
However, the "feature type" attribute itself is also a metadata property
that would be a property of the space construct and part of the data model.

The attributes
`bounds`,
`cell_measures`,
`cell_methods`,
`climatology`,
`Conventions`,
`coordinates`,
`formula_terms` and
`grid_mapping`
have various special or structural functions in the CF-netCDF file format.
Their functions and
the relationships they indicate are reflected in this data model.

10th January 2011