VarML

This page contains the actual XSugar stylesheet for parsing CF-metadata "standard names", and for inter-converting between the plain-text CF-metadata format and the corresponding XML format. 

 

/* Robert Muetzelfeldt 16 Oct 2008 This is a direct re-casting of the rules given in http://cf-pcmdi.llnl.gov/documents/cf-standard-names/guidelines for
   CF-metadata Standard Names in XSugar.  */

/* Notes:
'Substance' needs to be further analysed in terms of its constituent parts
*/


BaseName           = amount|area|area_fraction|density|energy|energy_content|energy_density|frequency|frequency_of_occurence|heat_flux|heat_transport|horizontal_streamfunction|horizontal_velocity_potential|mass|mass_flux|mass_fraction|mass_mixing_ratio|mass_transport|mole_fraction|mole_flux|momentum_flux|partial_pressure|period|power|pressure|probability|radiative_flux|specific_eddy_kinetic_energy|speed|stress|temperature|thickness|velocity|volume|volume_flux|volume_fraction|volume_transport|vorticity
Condition          = clear_sky|deep_snow|no_snow
Direction          = upward|downward|northward|southward|eastward|westward|x|y
Medium             = air|atmosphere_boundary_layer|mesosphere|sea_ice|sea_water|soil|soil_water|stratosphere|thermosphere|troposphere
Substance          = condensed_water|oxygen|sulfate_aerosol|ammonium_dry_aerosol|black_carbon_dry_aerosol|cloud_condensed_water|cloud_ice|cloud_liquid_water|convective_cloud_condensed_water|convective_cloud_ice|convective_cloud_liquid_water|dimethyl_sulfide|dust_dry_aerosol|frozen_water|graupel|mercury_dry_aerosol|nitrate_dry_aerosol|ozone|particulate_organic_matter_dry_aerosol|pm1_aerosol|pm10_aerosol|pm2p5_aerosol|precipitation|primary_particulate_organic_matter_dry_aerosol|rain|seasalt_dry_aerosol|secondary_particulate_organic_matter_dry_aerosol|snow|stratiform_cloud_ice|stratiform_cloud_liquid_water|sulfate_dry_aerosol|sulfur_dioxide|unfrozen_water|water
Surface            = toa|tropopause|surface|adiabatic_condensation_level|cloud_top|convective_cloud_top|cloud_base|convective_cloud_base|freezing_level|ground_level|maximum_wind_speed_level|sea_floor|sea_ice_base|sea_level|top_of_atmosphere_boundary_layer|top_of_atmosphere_model|top_of_dry_convection
Process            = advection|convection|deep_convection|diabatic_processes|diffusion|dry_convection|gravity_wave_drag|gyre|isostatic_adjustment|large_scale_precipitation|longwave_heating|moist_convection|overturning|shallow_convection|shortwave_heating|thermodynamics
WhereType          = cloud|land|open_sea|sea|sea_ice|vegetation
NL                 = \r\n|\r|\n
Text               = [a-z]+(_[a-z0-9]+)*


file               : [standard_names Ss]
                   = <standard_names> [standard_names Ss] </>


standard_names     : [standard_name1 S] [NL] [standard_names Ss]
                   = <standard_name> [standard_name1 S] </> [standard_names Ss]

standard_names     >: [Text T] [NL] [standard_names Ss]
                   = <fail_to_parse> [Text T] </> [standard_names Ss]


standard_names     : =

/* The following is actually the "direction of the spatial component", so "component" is a bad name (but kept
   here for consistency with the original terminology).
   Note that the rules allow for two direction terms to be used for a tensor quantity.   Clearly, only
   certain pairings are possible, but I have not built this restriction in as yet. */

standard_name1      : [surface S] [component C] [standard_name N] [at_surface AS] [in_medium M]
                     [due_to_process P] [where_type T] [assuming_condition AC]
                   = [surface S] [component C] [standard_name N] [at_surface AS] [in_medium M]
                     [due_to_process P] [where_type T] [assuming_condition AC]


surface            : [Surface S] "_"
                   = <surface> [Surface S] </>

surface            : =
component          : [Direction D1] "_" [Direction D2] "_"
                   = <direction> [Direction D1] </> <direction> [Direction D2] </>

component          : [Direction D] "_"
                   = <direction> [Direction D] </>

component          : =
at_surface         : "_at_" [Surface S]
                   = <at_surface> [Surface S] </>

at_surface         : =
in_medium          : "_in_" [Medium M]
                   = <in_medium> [Medium M] </>

in_medium          : =
due_to_process     : "_due_to_" [Process P]
                   = <due_to_process> [Process P] </>

due_to_process     : =



where_type         : "_where_" [WhereType W]
                   = <where_type> [WhereType W] </>
where_type         : =

assuming_condition : "_assuming_" [Condition C]
                   = <assuming_condition> [Condition C] </>

                   : =
substance          : [Substance S]
                   = <substance> [Substance S] </>



standard_name      : "change_over_time_in_" [standard_name X]
                   = <change_over_time_in> [standard_name X] </>
standard_name      : "convergence_of_" [standard_name X]
                   = <convergence_of> [standard_name X] </>

standard_name      : "horizontal_convergence_of_" [standard_name X]
                   = <horizontal_convergence_of> [standard_name X] </>

standard_name      : "correlation_of_" [standard_name X] "_and_" [standard_name Y]
                   = <correlation_of> [standard_name X] [standard_name Y] </>
standard_name      : "correlation_of_" [standard_name X] "_and_" [standard_name Y] "_over_" [standard_name Z]
                   = <correlation_of> [standard_name X] [standard_name Y] [standard_name Z] </>

standard_name      : "covariance_of_" [standard_name X] "_and_" [standard_name Y]
                   = <covariance_of_> [standard_name X] [standard_name Y] </>

standard_name      : "covariance_of_" [standard_name X] "_and_" [standard_name Y] "_over_" [standard_name Z]
                   = <covariance_of_> [standard_name X] [standard_name Y] [standard_name Z] </>

standard_name      : [Direction D] "_derivative_of_" [standard_name X]
                   = <derivative_of> [Direction D] [standard_name X] </>
standard_name      : "derivative_of_" [standard_name X] "_wrt_" [standard_name Y]
                   = <derivative_of> [standard_name X] [standard_name Y] </>

standard_name      : "direction_of_" [standard_name X]
                   = <direction_of> [standard_name X] </>

standard_name      : "divergence_of_" [standard_name X]
                   = <divergence_of> [standard_name X] </>

standard_name      : "horizontal_divergence_of_" [standard_name X]
                   = <horizontal_divergence_of> [standard_name X] </>
standard_name      : "histogram_of_" [standard_name X]
                   = <histogram_of> [standard_name X] </>

standard_name      : "histogram_of_" [standard_name X] "_over_" [standard_name Y]
                   = <histogram_of> [standard_name X] [standard_name Y]</>

standard_name      : "integral_of_" [standard_name X] "_wrt_" [standard_name Y]
                   = <integral_of> [standard_name X] [standard_name Y]</>


/* I'm really uncomfortable handling standard functions (integral, ln, log10) like this.
   Given that we are now moving into MathML territory,  why not just include MathML?
*/
standard_name      : "ln_" [standard_name X]
                   = <ln> [standard_name X] </>

standard_name      : "log10_" [standard_name X]
                   = <log10> [standard_name X] </>

standard_name      : "magnitude_of_" [standard_name X]
                   = <magnitude_of> [standard_name X] </>

standard_name      : "probability_distribution_of_" [standard_name X]
                   = <probability_distribution_of> [standard_name X] </>
standard_name      : "probability_distribution_of_" [standard_name X] "_over_" [standard_name Z]
                   = <probability_distribution_of> [standard_name X] [standard_name Z] </>

standard_name      : "probability_distribution_function_of_" [standard_name X]
                   = <probability_distribution_function_of> [standard_name X] </>

standard_name      : "probability_distribution_function_of_" [standard_name X] "_over_" [standard_name Z]
                   = <probability_distribution_function_of> [standard_name X] [standard_name Z] </>

standard_name      : "product_of_" [standard_name X] "_and_" [standard_name Y]
                   = <product_of> [standard_name X] [standard_name Y] </>
standard_name      : "ratio_of_" [standard_name X] "_to_" [standard_name Y]
                   = <ratio_of> [standard_name X] [standard_name Y] </>

standard_name      : "square_of_" [standard_name X]
                   = <square_of> [standard_name X] </>

standard_name      : "tendency_of_" [standard_name X]
                   = <tendency_of> [standard_name X] </>

/* Hand-crafted rules */
standard_name      : "mass_concentration_of_" [substance S] [in_medium M]
                   = <mass_concentration_of> [substance S] [in_medium M] </>
standard_name      : "mass_fraction_of_" [substance S] [in_medium M]
                   = <mass_fraction_of> [substance S] [in_medium M] </>


/* This is a quick fix to get things up and running! */

standard_name      : [BaseName BN]
                   = <basename> [BaseName BN] </>