Skip to content

Instantly share code, notes, and snippets.

@6a6d74
Last active May 22, 2019 14:22
Show Gist options
  • Save 6a6d74/6563c5e4b978a42949b6 to your computer and use it in GitHub Desktop.
Save 6a6d74/6563c5e4b978a42949b6 to your computer and use it in GitHub Desktop.
Outlining how to use QUDT and Observable Property ontologies in WMO Codes Registry

Ontology references

QUDT Observable Property

A visual overview of the Observable Property ontology is provided here

Things to do

First, we need to add the 8 base quantity kinds associated with the SI system of units:

  • dimensionless (U)
  • length (L)
  • mass (M)
  • time (T)
  • electricCurrent (I)
  • thermodynamicTemperature (Ɵ)
  • amountOfSubstance (N)
  • luminousIntesity (J)

See the QUDT Quantity vocabulary for details of these quantity kinds.

As an aside, I note that when adding quantity kinds into the WMO Codes Registry, the appropriate subclass of qudt:QuantityKind should be used for the rdf:type declaration. These include: qudt:AtomicPhysicsQuantityKind, qudt:BiologyQuantityKind, qudt:ChemistryQuantityKind, qudt:ElectricityAndMagnetismQuantityKind, qudt:MechanicsQuantityKind, qudt:PhotometryQuantityKind, qudt:RadiologyQuantityKind, qudt:RadiometryQuantityKind, qudt:SpaceAndTimeQuantityKind and qudt:ThermodynamicsQuantityKind.

All the SI units for these base quantity kinds are provided in Code Table C-6. However, the name dimensionless is additonally used within the WMO Codes Registry to describe the unit without dimension. QUDT refers to this unit as "Unity".

Recommend modifying the rdfs:label and skos:prefLabel of term http://codes.wmo.int/common/unit/1 to indicate "Unity".

Where appropriate, we can now add qudt:generalization relationships between the terms in Code Table D-2 and the base SI units; for example:

<http://codes.wmo.int/common/quantity-kind/dewPointTemperature> qudt:generalization <http://codes.wmo.int/common/quantity-kind/thermodynamicTemperature> .

At present the dimension property of quantity kinds is specified as a literal; e.g.

<http://codes.wmo.int/common/quantity-kind/dewPointTemperature> <http://codes.wmo.int/def/common/dimensions> "Ɵ" .

I think it is appropriate to adopt the more sophisticated model from QUDT; wherein each dimension is specified as an object.

Previsouly @ TT-AvXML we agreed that we would re-use the QUDT ontology but not any of the vocabulary, so we need to (re-)define the dimension instances within the WMO Codes Registry. Let's create a new register for these entities: http://codes.wmo.int/common/dimension. For reference, please refer to the QUDT dimension vocabulary.

In contrast to the approach taken by QUDT where the individual dimension vectors are named individually, I suggest we use blank-nodes for these ... I can't see a need to have the dimension vectors individually identifiable.

Defining the dimension vectors is where the 8 base quantity kinds for the SI system of units is required; each vector uses the property qudt:basisElement to refer to one of the 8 base quantity kinds and asserts a magnitude for that element.

One dimension vector must be defined for each of the 8 base quantities.

Example: dimension for linear velocity

<http://codes.wmo.int/common/dimension/LT-1> a qudt:Dimension ;
  rdfs:label "L/T" ;
  qudt:symbol "L T^-1" ;
  qudt:dimensionVector 
    [ qudt:baseElement <http://codes.wmo.int/common/quantity-kind/dimensionless> ;
      qudt:vectorMagnitude 0.0 ] ,
    [ qudt:baseElement <http://codes.wmo.int/common/quantity-kind/length> ;
      qudt:vectorMagnitude 1.0 ] ,
    [ qudt:baseElement <http://codes.wmo.int/common/quantity-kind/mass> ;
      qudt:vectorMagnitude 0.0 ] ,
    [ qudt:baseElement <http://codes.wmo.int/common/quantity-kind/time> ;
      qudt:vectorMagnitude -1.0 ] ,
    [ qudt:baseElement <http://codes.wmo.int/common/quantity-kind/electricCurrent> ;
      qudt:vectorMagnitude 0.0 ] ,
    [ qudt:baseElement <http://codes.wmo.int/common/quantity-kind/thermodynamicTemperature> ;
      qudt:vectorMagnitude 0.0 ] ,
    [ qudt:baseElement <http://codes.wmo.int/common/quantity-kind/amountOfSubstance> ;
      qudt:vectorMagnitude 0.0 ] ,
    [ qudt:baseElement <http://codes.wmo.int/common/quantity-kind/luminousIntensity> ;
      qudt:vectorMagnitude 0.0 ] .

Example: dimension for dew-point temperature

<http://codes.wmo.int/common/dimension/Ɵ> a qudt:Dimension ;
  rdfs:label "Ɵ" ;
  qudt:symbol "Ɵ" ;
  qudt:dimensionVector 
    [ qudt:baseElement <http://codes.wmo.int/common/quantity-kind/dimensionless> ;
      qudt:vectorMagnitude 0.0 ] ,
    [ qudt:baseElement <http://codes.wmo.int/common/quantity-kind/length> ;
      qudt:vectorMagnitude 0.0 ] ,
    [ qudt:baseElement <http://codes.wmo.int/common/quantity-kind/mass> ;
      qudt:vectorMagnitude 0.0 ] ,
    [ qudt:baseElement <http://codes.wmo.int/common/quantity-kind/time> ;
      qudt:vectorMagnitude 0.0 ] ,
    [ qudt:baseElement <http://codes.wmo.int/common/quantity-kind/electricCurrent> ;
      qudt:vectorMagnitude 0.0 ] ,
    [ qudt:baseElement <http://codes.wmo.int/common/quantity-kind/thermodynamicTemperature> ;
      qudt:vectorMagnitude 1.0 ] ,
    [ qudt:baseElement <http://codes.wmo.int/common/quantity-kind/amountOfSubstance> ;
      qudt:vectorMagnitude 0.0 ] ,
    [ qudt:baseElement <http://codes.wmo.int/common/quantity-kind/luminousIntensity> ;
      qudt:vectorMagnitude 0.0 ] .

A dimension entity needs to be created for each of the dimensions referenced by the set of quantity kinds.

Once these have been created we can then link the quantity kinds to the dimensions; e.g.

<http://codes.wmo.int/common/quantity-kind/dewPointTemperature> <http://codes.wmo.int/def/common/dimensions> <http://codes.wmo.int/common/dimension/Ɵ> .

In order to complete the adoption of QUDT semantics, we should update the units to include conversion multipliers and offsets from the base SI unit. See the QUDT unit vocabulary for more details.

Example: metres per second

<http://codes.wmo.int/common/unit/m_s-1>
  a skos:Concept, qudt:Unit, <http://codes.wmo.int/def/common/Unit> ;
  rdfs:label      "metres per second" ;
  <http://codes.wmo.int/def/common/code_figure> "731" ;
  <http://codes.wmo.int/def/common/wmoAbbreviation> "m s^-1" ;
  <http://codes.wmo.int/def/common/wmoAbbreviationIA2> "m/s" ;
  <http://codes.wmo.int/def/common/wmoAbbreviationIA5> "M/S" ;
  skos:altLabel   "m s^-1" ;
  skos:notation   "m/s" ;
  skos:prefLabel  "metres per second" ;
  qudt:abbreviation "m/s" ;
  qudt:symbol "m s^-1" ;
  qudt:conversionMultiplier 1.0 ;
  qudt:converionOffset 0.0 .

Example: Celsius

<http://codes.wmo.int/common/unit/degC>
  a skos:Concept, qudt:Unit, <http://codes.wmo.int/def/common/Unit> ;
  rdfs:label "degrees Celsius (8)" ;
  <http://codes.wmo.int/def/common/code_figure> "350" ;
  <http://codes.wmo.int/def/common/wmoAbbreviation> "˚ C" ;
  <http://codes.wmo.int/def/common/wmoAbbreviationIA2> "C" ;
  <http://codes.wmo.int/def/common/wmoAbbreviationIA5> "C" ;
  skos:altLabel "˚ C" ;
  skos:notation "degC" ;
  skos:prefLabel"degrees Celsius (8)" ;
  qudt:abbreviation "degC" ;
  qudt:symbol "degC" ;
  qudt:conversionMultiplier 1.0 ;
  qudt:converionOffset 273.15 .

(note the difference in approach between qudt:symbol and qudt:abbreviation and the addition of the qudt:Unit type declaration)

I am not yet clear whether we should also include the qudt:quantityKind property in the description of the unit to provide a relationship to the quantity kinds for which a given unit is applicable.

Now we can look at terms from BUFR Table B ...

Quantitative properties should be declared as type op:ScaledQuantityKind, specifying the appropriate unit of measure with property qudt:unit. Futhermore, the relationship with the appropriate term from /common/quantity-kind can be specified with the property qudt:generalization.

Example: BUFR B Class 12 Term 024 (dew-point temperature)

<http://codes.wmo.int/bufr4/b/12/024>
  a skos:Concept, op:ScaledQuantityKind ;
  rdfs:label "Dewpoint temperature"@en ;
  <http://codes.wmo.int/def/bufr4/dataWidth_Bits> 8 ;
  <http://codes.wmo.int/def/bufr4/fxy> "012024" ;
  <http://codes.wmo.int/def/bufr4/referenceValue> -99 ;
  <http://codes.wmo.int/def/bufr4/scale> 0 ;
  <http://codes.wmo.int/def/common/unit> <http://codes.wmo.int/common/unit/degC> ;
  skos:notation  "024" ;
  qudt:unit <http://codes.wmo.int/common/unit/degC> ;
  qudt:generalization <http://codes.wmo.int/common/quantity-kind/dewPointTemperature> .

(note: http://codes.wmo.int/def/common/unit could be declared as equivalent to qudt:unit)

Qualitative properties (declaring nominal values) should be declared as type op:QualityKind; using the property op:applicableVocabulary to assert the controlled vocabulary that should be used.

Example: BUFR B Class 20 Term 061 (state of the sea)

<http://codes.wmo.int/bufr4/b/22/061>
  a skos:Concept, op:QualityKind ;
  rdfs:label "State of the sea"@en ;
  <http://codes.wmo.int/def/bufr4/dataWidth_Bits> 4 ;
  <http://codes.wmo.int/def/bufr4/fxy> "022061" ;
  <http://codes.wmo.int/def/bufr4/referenceValue> 0 ;
  <http://codes.wmo.int/def/bufr4/scale> 0 ;
  dct:references  <http://codes.wmo.int/bufr4/codeflag/0-22-061> ;
  skos:notation   "061" ;
  op:applicableVocabulary <http://codes.wmo.int/bufr4/codeflag/0-22-061> .
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment