float z(time) ;//........................................ Depending on the precision used for the variable, the data type could be int or double instead of float. Also the variable "z" could be substituted with a more descriptive name like "depth", "altitude", "pressure", etc.
                z:long_name = "" ; //........................................ RECOMMENDED - Provide a descriptive, long name for this variable.
                z:standard_name = "" ; //.................................... REQUIRED    - Usually "depth" or "altitude" is used.
                z:units = "" ; //............................................ REQUIRED    - Use UDUNITS.
                z:axis = "Z" ; //............................................ REQUIRED    - Do not change.
                z:positive = "" ; //......................................... REQUIRED    - Use "up" or "down".
                z:valid_min = 0.0f ; //...................................... RECOMMENDED - Replace with correct value.
                z:valid_max = 0.0f ; //...................................... RECOMMENDED - Replace with correct value.
                z:_FillValue = 0.0f;//....................................... REQUIRED  if there could be missing values in the data.
                z:ancillary_variables = "" ; //.............................. RECOMMENDED - List other variables providing information about this variable.
                z:comment = "" ; //.......................................... RECOMMENDED - Add useful, additional information here.

def check_height(self, dataset):
        '''
        float z(time) ;//........................................ Depending on the precision used for the variable, the data type could be int or double instead of float. Also the variable "z" could be substituted with a more descriptive name like "depth", "altitude", "pressure", etc.
                z:long_name = "" ; //........................................ RECOMMENDED - Provide a descriptive, long name for this variable.
                z:standard_name = "" ; //.................................... REQUIRED    - Usually "depth" or "altitude" is used.
                z:units = "" ; //............................................ REQUIRED    - Use UDUNITS.
                z:axis = "Z" ; //............................................ REQUIRED    - Do not change.
                z:positive = "" ; //......................................... REQUIRED    - Use "up" or "down".
                z:valid_min = 0.0f ; //...................................... RECOMMENDED - Replace with correct value.
                z:valid_max = 0.0f ; //...................................... RECOMMENDED - Replace with correct value.
                z:_FillValue = 0.0f;//....................................... REQUIRED  if there could be missing values in the data.
                z:ancillary_variables = "" ; //.............................. RECOMMENDED - List other variables providing information about this variable.
                z:comment = "" ; //.......................................... RECOMMENDED - Add useful, additional information here.
                '''
        results = []

        exists_ctx = TestCtx(BaseCheck.HIGH, 'Variable for height must exist')
        var = util.get_z_variable(dataset)
        exists_ctx.assert_true(var is not None, "A variable for height must exist")
        if var is None:
            return exists_ctx.to_result()

        # Check Height Name
        required_ctx = TestCtx(BaseCheck.HIGH, 'Required attributes for variable {}'.format(var))

        # Check Standard Name
        standard_name = getattr(dataset.variables[var], 'standard_name', '')
        required_ctx.assert_true(
            standard_name in ('depth', 'height', 'altitude'),
            '{} is not a valid standard_name for height'.format(standard_name)
        )

        axis = getattr(dataset.variables[var], 'axis', '')
        required_ctx.assert_true(
            axis == 'Z',
            '{} must have an axis of Z'.format(var)
        )

        # Check Units
        valid_units = False
        units = getattr(dataset.variables[var], 'units', '1')
        try:
            # If cf_units fails to read the units, then it's not a valid unit
            Unit(units)
            valid_units = True
        except:
            pass
        required_ctx.assert_true(valid_units, '{} are not valid units for height'.format(units))

        positive = getattr(dataset.variables[var], 'positive', '')
        required_ctx.assert_true(positive in ('up', 'down'), 'height must have a positive attribute that is equal to "up" or "down"')
        results.append(required_ctx.to_result())

        # Check has these attributes
        # We ommit checking ancillary_variables because that only applies if this variable HAS ancillary variables
        recommended_ctx = TestCtx(BaseCheck.MEDIUM, 'Recommended attributes for coordinate variable {}'.format(var))
        self._check_min_max_range(dataset.variables[var], recommended_ctx)

        if hasattr(dataset.variables[var], 'comment'):
            recommended_ctx.assert_true(getattr(dataset.variables[var], 'comment', '') != '', 'comment attribute should not be empty if specified')

        results.append(recommended_ctx.to_result())
        return results