CF Plugin (IOOS Compliance Checker)
The IOOS Compliance Checker ships with a native CF (Climate & Forecast) metadata plugin. Many of those CF checks are directly relevant to WCRP projects (CMIP, CORDEX, …). To avoid redundancy, we did not duplicate these validations inside ESGF-QC.
Where to find detailed CF checks
-
Official IOOS Compliance Checker documentation (complete list and descriptions):
IOOS Compliance Checker -
Our internal summary table :
| check_name | check_description | CF 1.6 | CF 1.7 | CF 1.8 | CF 1.9 |
|---|---|---|---|---|---|
| check_filename | Verifies that the dataset’s filename ends with “.nc” | ✓ | ✓ | ✓ | ✓ |
| check_data_types | Ensures every variable uses one of the allowed data types (char, byte, short, int, float/real, double) | ✓ | ✓ | ✓ | ✓ |
| check_child_attr_data_types | For attributes like valid_min, valid_max, valid_range, _FillValue, actual_range, ensures each attribute’s type matches its parent variable’s type | ✓ | ✓ | ✓ | ✓ |
| check_add_offset_scale_factor_type | If a variable has both add_offset and scale_factor, checks they share the same type, or that integer variables use float/double attributes | ✓ | ✓ | ✓ | ✓ |
| check_naming_conventions | Validates that variable, dimension, and attribute names begin with a letter and consist only of letters, digits, and underscores | ✓ | ✓ | ✓ | ✓ |
| check_names_unique | Ensures names are unique regardless of case (i.e. no two names differ only by letter case), | ✓ | ✓ | ✓ | ✓ |
| check_dimension_names | Verifies that each variable’s dimensions all have distinct names (no duplicates) | ✓ | ✓ | ✓ | ✓ |
| check_dimension_order | Checks that spatio-temporal dimensions, if present, appear in the recommended T, Z, Y, X order, with any other dimensions to their left | ✓ | ✓ | ✓ | ✓ |
| check_fill_value_equal_missing_value | If both _FillValue and missing_value are defined on a variable, ensures they have the same numeric value | ✓ | ✓ | ✓ | ✓ |
| check_valid_range_and_valid_min_max_present | Checks that valid_range is not used in conjunction with valid_min or valid_max | ✓ | ✓ | ✓ | ✓ |
| check_fill_value_outside_valid_range | Ensures any _FillValue lies outside the declared valid_range (or outside valid_min/valid_max | ✓ | ✓ | ✓ | ✓ |
| check_convention_globals | Verifies that the global title and history attributes, if present, are non-empty strings | ✓ | ✓ | ✓ | ✓ |
| check_coordinate_variables_strict_monotonicity | Checks that each 1D coordinate variable is strictly monotonic (either increasing or decreasing) | ✓ | ✓ | ✓ | ✓ |
| check_convention_possibly_var_attrs | For optional attributes (institution, source, references, comment), verifies any instance where they appear (globally or on variables) they are non-empty strings | ✓ | ✓ | ✓ | ✓ |
| check_units | For any variable requiring units (i.e. dimensional quantities excluding bounds and climatology), ensures: A units attribute exists (unless dimensionless), it’s a string, it’s recognized by UDUnits, it’s convertible to the CF “canonical” units for its standard name. | ✓ | ✓ | ✓ | ✓ |
| check_standard_name | Confirms that variables needing a standard_name (coordinate, auxiliary, flag, geophysical, etc.) have one; that it’s a valid string; and that it matches an entry in the CF Standard Name Table | ✓ | ✓ | ✓ | ✓ |
| check_ancillary_variables | Verifies that any variable listed in another’s ancillary_variables attribute actually exists in the file | ✓ | ✓ | ✓ | ✓ |
| check_flags | Ensures flag variables define flag_values and/or flag_masks, that they’re consistent in length with flag_meanings, share types with each other and with the variable, and combine correctly if both are presen | ✓ | ✓ | ✓ | ✓ |
| check_coordinate_types | Classifies and validates coordinate variables (time, latitude, longitude, vertical) against CF rules, ensuring they have the correct axis indicators or standard names | ✓ | ✓ | ✓ | ✓ |
| check_latitude | Checks that latitude coordinate variables have standard_name="latitude", units="degrees_north", monotonic bounds, and axis="Y | ✓ | ✓ | ✓ | ✓ |
| check_longitude | Checks that longitude coordinate variables have standard_name="longitude", units="degrees_east", monotonic bounds, and axis="X" | ✓ | ✓ | ✓ | ✓ |
| check_dimensional_vertical_coordinate | Validates vertical coordinates (e.g. pressure, height) have appropriate units, positive, axis="Z" or a recognized standard name | ✓ | ✓ | ✓ | ✓ |
| check_dimensionless_vertical_coordinates | Ensures dimensionless vertical coordinates follow Appendix D rules: correct standard_name, optional formula_terms, and no units | ✓ | ✓ | ✓ | ✓ |
| check_time_coordinate | Verifies time coordinates have standard_name="time", CF-compliant units, monotonic values, and correct reference-second (< 60) when a calendar is specified | ✓ | ✓ | ✓ | ✓ |
| check_calendar | Ensures any time variable with a calendar attribute uses a valid CF calendar string (e.g. “gregorian”, “noleap”) | ✓ | ✓ | ✓ | ✓ |
| check_standard_calendar_no_cross | Confirms no mixing of calendars across variables (e.g. all time coords use the same calendar), per CF recommendations. | ✓ | ✓ | ✓ | ✓ |
| check_aux_coordinates | Validates that any auxiliary coordinate listed in a variable’s coordinates attribute exists as a variable and has correct dimensionality | ✓ | ✓ | ✓ | ✓ |
| check_duplicate_axis | Ensures no variable is assigned more than one axis role (e.g. X and Y simultaneously) | ✓ | ✓ | ✓ | ✓ |
| check_multi_dimensional_coords | Checks that 2D coordinate variables (e.g. latitude on a curvilinear grid) have appropriate shapes and monotonicity | ✓ | ✓ | ✓ | ✓ |
| check_grid_coordinates | Validates that data variables either use standard lat/lon or specify a grid_mapping describing their projection | ✓ | ✓ | ✓ | ✓ |
| check_reduced_horizontal_grid | erifies reduced/grid-compression coordinates and their bounds follow CF rules | ✓ | ✓ | ✓ | ✓ |
| check_geographic_region | (Optional) Checks that any declared geographic extents or regions match actual coordinate ranges. | ✓ | ✓ | ✓ | ✓ |
| check_cell_boundaries | Ensures that any “bounds” variables referenced by bounds attributes exist, have one extra dimension, numeric type, and matching leading dimensions with CF-1.7 extensions (checking formula_terms on bounds) | ✓ | ✓ | ✓ | ✓ |
| check_cell_measures | Checks cell_measures attributes reference valid variables (e.g. area) and that those variables exist | ✓ | ✓ | ✓ | ✓ |
| check_cell_methods | Validates that any cell_methods string follows CF syntax (e.g. area: time: mean) | ✓ | ✓ | ✓ | ✓ |
| check_climatological_statistics | If a variable has climatology, ensures the referenced climatology variable exists and matches expected dimensions | ✓ | ✓ | ✓ | ✓ |
| check_packed_data | Verifies that packed data variables with scale_factor/add_offset conform to CF packing guidelines, including type matching | ✓ | ✓ | ✓ | ✓ |
| check_compression_gathering | Ensures optional packing by “compression by gathering” (using scale/offset) is used correctly | ✓ | ✓ | ✓ | ✓ |
| check_feature_type | Checks any featureType attribute matches CF’s allowed feature types (e.g. timeSeries, trajectory) | ✓ | ✓ | ✓ | ✓ |
| check_cf_role | Validates that any variable with cf_role uses one of the CF-defined roles | ✓ | ✓ | ✓ | ✓ |
| check_variable_features | Ensures that variables representing features have the appropriate coordinate and metadata variables attached | ✓ | ✓ | ✓ | ✓ |
| check_hints | Processes any compliance hints (warnings) embedded in attributes, ensuring they don’t violate CF rules. | ✓ | ✓ | ✓ | ✓ |
| check_external_variables | For CF 1.7+, checks global external_variables lists variables that must not be present in the file but are referenced elsewhere | nan | ✓ | ✓ | ✓ |
| check_actual_range | In CF 1.7+, if actual_range is provided, verifies it has two elements matching the true data min/max, matches unpacked data type, and lies within any valid_range/valid_min/valid_max | nan | ✓ | ✓ | ✓ |
| check_cell_boundaries_interval | In CF 1.7+, ensures the size of the boundary dimension matches the number of vertices for intervalL bounds | nan | ✓ | ✓ | ✓ |
| check_grid_mapping_attr_condition | Validates that each grid mapping variable defines the required attributes (grid_mapping_name, projection parameters) and that any grid_mapping attribute on data variables references an existing mapping | nan | ✓ | ✓ | ✓ |
| check_gmattr_existence_condition_geoid_name_geoptl_datum_name | In CF 1.7+, ensures that a grid mapping variable includes at most one of geoid_name or geopotential_datum_name, and that any provided value is valid in the PROJ vertical datum database | nan | ✓ | ✓ | ✓ |
| check_gmattr_existence_condition_ell_pmerid_hdatum | Also in CF 1.7+, checks ellipsoid_name, horizontal_datum_name, and prime_meridian_name attributes against approved lists or OGC WKT names. | nan | ✓ | ✓ | ✓ |
| check_standard_name_deprecated_modifiers | Warns if any variables use deprecated standard-name modifiers | nan | ✓ | ✓ | ✓ |
| check_dimensionless_vertical_coordinate_1_7 | CF 1.7 extension: additional validation of dimensionless vertical coords (formula_terms and computed_standard_name) against Appendix D 1.7 definitions. | nan | ✓ | ✓ | ✓ |
| check_groups | In CF 1.8+, ensures that attributes Conventions and external_variables appear only in the root group, while title and history may optionally appear in non-root groups | nan | nan | ✓ | ✓ |
| check_geometry | CF 1.8+: for any variable with a geometry attribute, checks associated node_coordinates, node_count, part_node_count, and interior_ring exist and form well-formed point/line/polygon definitions | nan | nan | ✓ | ✓ |
| check_taxa | CF 1.8+ verifies that biological_taxon_name and optional biological_taxon_lsid auxiliary coordinates are present and correctly formatted, and that LSID names match their resolved taxa | nan | nan | ✓ | ✓ |
| check_time_coordinate_variable_has_calendar | CF 1.9 addition: ensures that every time coordinate variable has a calendar attribute of type string | nan | nan | nan | ✓ |
| check_domain_variables | CF 1.9 addition: for any “domain” variable (one with a coordinates attribute), verifies it has a dimensions attribute listing existing dimensions, that these are scalar dimensions, and that its coordinates reference valid coordinate variables; includes ragged-array support | nan | nan | nan | ✓ |
✨ PS : You can also visit the CF Convention website :
