Skip to content

Time

A duration, as a QuantityValue restricted to time units. It shows the per-quantity subclass pattern: constrain the units, default to the SI one, and give each unit individual its community aliases.

Not the same as the time module

This is the quantity kind Time: a duration with a unit. The time module is about process time, that is temporal regions, process start and end, and temporalized qualities. Upstream ontologies use the same word for both, so mapping one onto the other is a mistake that is easy to make and hard to notice.

The schema

The tabs show the schema itself, the same content as YAML, an instance of it, and that instance expanded to RDF under each mapping set.

{
  "$schema": "https://oo-ld.org/latest/meta/oold-meta-schema.json",
  "$id": "Time.schema.json",
  "x-oold-uuid": "d06f35fd-0b42-54db-a2e6-1c329204346d",
  "x-oold-version": "1.0.0",
  "title": "Time",
  "allOf": [
    {
      "$ref": "QuantityValue.schema.json"
    }
  ],
  "@context": [
    "QuantityValue.schema.json",
    {
      "qkind": "http://qudt.org/vocab/quantitykind/",
      "Time": "qkind:Time",
      "SEC": "qunit:SEC",
      "MilliSEC": "qunit:MilliSEC",
      "HR": "qunit:HR"
    }
  ],
  "properties": {
    "type": {
      "default": [
        "Time"
      ]
    },
    "unit": {
      "enum": [
        "SEC",
        "MilliSEC",
        "HR"
      ],
      "default": "SEC",
      "x-enum-varnames": [
        "second",
        "milli_second",
        "hour"
      ]
    }
  },
  "x-oold-context": {
    "Time": {
      "emmo:EMMO_d4f7d378_5e3b_468a_baa1_a7e98358cda7": {
        "x-sssom": {
          "predicate_id": "skos:exactMatch",
          "mapping_set_id": "https://example.org/mappings/emmo",
          "object_source_version": "https://w3id.org/emmo/1.0.4",
          "comment": "Time (ISO 80000 item 3-7); Duration (EMMO_0adabf6f) is its subclass"
        }
      }
    },
    "SEC": {
      "emmo:Second": {
        "x-sssom": {
          "predicate_id": "skos:exactMatch",
          "mapping_set_id": "https://example.org/mappings/emmo"
        }
      },
      "obo:UO_0000010": {
        "x-sssom": {
          "predicate_id": "skos:exactMatch",
          "mapping_set_id": "https://example.org/mappings/pmdco",
          "comment": "UO second; UO units are classes, punning like EMMO#377"
        }
      }
    },
    "MilliSEC": {
      "emmo:MilliSecond": {
        "x-sssom": {
          "predicate_id": "skos:exactMatch",
          "mapping_set_id": "https://example.org/mappings/emmo"
        }
      },
      "obo:UO_0000028": {
        "x-sssom": {
          "predicate_id": "skos:exactMatch",
          "mapping_set_id": "https://example.org/mappings/pmdco",
          "comment": "UO millisecond"
        }
      }
    },
    "HR": {
      "emmo:Hour": {
        "x-sssom": {
          "predicate_id": "skos:exactMatch",
          "mapping_set_id": "https://example.org/mappings/emmo"
        }
      },
      "obo:UO_0000032": {
        "x-sssom": {
          "predicate_id": "skos:exactMatch",
          "mapping_set_id": "https://example.org/mappings/pmdco",
          "comment": "UO hour"
        }
      }
    }
  }
}
$schema: https://oo-ld.org/latest/meta/oold-meta-schema.json
$id: Time.schema.json
x-oold-uuid: d06f35fd-0b42-54db-a2e6-1c329204346d
x-oold-version: 1.0.0
title: Time
allOf:
- $ref: QuantityValue.schema.json
'@context':
- QuantityValue.schema.json
- qkind: http://qudt.org/vocab/quantitykind/
  Time: qkind:Time
  SEC: qunit:SEC
  MilliSEC: qunit:MilliSEC
  HR: qunit:HR
properties:
  type:
    default:
    - Time
  unit:
    enum:
    - SEC
    - MilliSEC
    - HR
    default: SEC
    x-enum-varnames:
    - second
    - milli_second
    - hour
x-oold-context:
  Time:
    emmo:EMMO_d4f7d378_5e3b_468a_baa1_a7e98358cda7:
      x-sssom:
        predicate_id: skos:exactMatch
        mapping_set_id: https://example.org/mappings/emmo
        object_source_version: https://w3id.org/emmo/1.0.4
        comment: Time (ISO 80000 item 3-7); Duration (EMMO_0adabf6f) is its subclass
  SEC:
    emmo:Second:
      x-sssom:
        predicate_id: skos:exactMatch
        mapping_set_id: https://example.org/mappings/emmo
    obo:UO_0000010:
      x-sssom:
        predicate_id: skos:exactMatch
        mapping_set_id: https://example.org/mappings/pmdco
        comment: UO second; UO units are classes, punning like EMMO#377
  MilliSEC:
    emmo:MilliSecond:
      x-sssom:
        predicate_id: skos:exactMatch
        mapping_set_id: https://example.org/mappings/emmo
    obo:UO_0000028:
      x-sssom:
        predicate_id: skos:exactMatch
        mapping_set_id: https://example.org/mappings/pmdco
        comment: UO millisecond
  HR:
    emmo:Hour:
      x-sssom:
        predicate_id: skos:exactMatch
        mapping_set_id: https://example.org/mappings/emmo
    obo:UO_0000032:
      x-sssom:
        predicate_id: skos:exactMatch
        mapping_set_id: https://example.org/mappings/pmdco
        comment: UO hour
{
  "@context": "Time.schema.json",
  "$schema": "Time.schema.json",
  "@id": "https://example.org/m1-duration",
  "type": ["Time"],
  "value": 12.7,
  "unit": "SEC",
  "standard_uncertainty": 0.05
}
@prefix qkind: <http://qudt.org/vocab/quantitykind/> .
@prefix qudt: <http://qudt.org/schema/qudt/> .
@prefix qunit: <http://qudt.org/vocab/unit/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

<https://example.org/m1-duration> a qkind:Time ;
    qudt:hasUnit qunit:SEC ;
    qudt:standardUncertainty 5e-02 ;
    qudt:value 1.27e+01 .
@prefix emmo: <https://w3id.org/emmo#> .
@prefix qudt: <http://qudt.org/schema/qudt/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

<https://example.org/m1-duration> a emmo:EMMO_d4f7d378_5e3b_468a_baa1_a7e98358cda7 ;
    qudt:value 1.27e+01 ;
    emmo:EMMO_bba7f0f0_3707_42b9_b3fa_fd04610ef147 5e-02 ;
    emmo:EMMO_eeb06032_dd4f_476e_9da6_aa24302b7588 emmo:Second .
@prefix obo: <http://purl.obolibrary.org/obo/> .
@prefix qkind: <http://qudt.org/vocab/quantitykind/> .
@prefix qudt: <http://qudt.org/schema/qudt/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

<https://example.org/m1-duration> a qkind:Time ;
    obo:IAO_0000039 obo:UO_0000010 ;
    obo:OBI_0001937 1.27e+01 ;
    qudt:standardUncertainty 5e-02 .

The subclass adds four things and inherits everything else:

  1. A more specific class term. Time maps to the QUDT quantity kind qkind:Time, with EMMO's ISQ Time class as a synonym. QUDT models quantity kinds as individuals, so typing an instance with one is punning, the same question EMMO faces for units. It is harmless for data exchange and left to the ontologies to settle.
  2. Unit individuals as context terms. SEC, MilliSEC and HR are declared in the @context, which is what makes them aliasable at all.
  3. An enum and a default. The enum pins the valid units, which also guards the @vocab coercion inherited from QuantityValue: without it, a typo would be silently minted into an IRI under the vocabulary base. The default is the SI unit.
  4. Value-level aliases. Each unit term carries its EMMO and UO counterparts, so a community reading resolves the unit itself, not just the property pointing at it.

Reading the three graphs

The RDF tabs above are three readings of one unchanged instance file.

The consensus reading types the node with the QUDT quantity kind and uses qudt:value and qudt:hasUnit. The emmo reading swaps in EMMO's ISQ Time class, hasReferencePart, the EMMO standardUncertainty data property, and, at value level, emmo:Second for the unit itself. The pmdco reading uses obo:OBI_0001937 for the value and obo:IAO_0000039 with the UO second.

The fallbacks are the honest part. EMMO has no term that a flat value can map to, so that triple stays qudt:value; PMDco has no quantity-kind class for the type and no uncertainty property, so those stay on the consensus mapping. A partial alignment remains usable, and it is visible exactly where a community has nothing to offer.

CI checks all three readings for a lossless round-trip, so a mapping that drops or mangles a term fails the build rather than shipping quietly.

Where the unit aliases come from

The EMMO 1.0.4 branch publishes around 1600 unit individuals, each carrying a qudtReference annotation. The alias table is therefore generated rather than hand-typed, and the same source gives the UCUM and UN/CEFACT codes when they are needed.