Skip to content

QuantityValue

A number with a unit, optionally with its standard uncertainty. It is the building block reused by every typed field in the other modules, so it is worth getting exactly right: if this one is awkward, the awkwardness spreads everywhere.

The schema

{
  "$schema": "https://oo-ld.org/latest/meta/oold-meta-schema.json",
  "$id": "QuantityValue.schema.json",
  "x-oold-uuid": "0d241e1a-9bf9-5441-81ff-5313948143c0",
  "x-oold-version": "1.0.0",
  "title": "QuantityValue",
  "type": "object",
  "properties": {
    "type": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "default": [
        "QuantityValue"
      ]
    },
    "value": {
      "type": "number"
    },
    "unit": {
      "type": "string",
      "format": "iri-reference"
    },
    "standard_uncertainty": {
      "type": "number",
      "description": "Standard uncertainty, expressed in the unit of value (GUM convention)"
    },
    "relative_standard_uncertainty": {
      "type": "number",
      "description": "Dimensionless ratio, NOT percent; ratio-scale quantities only, undefined at value 0; redundant with standard_uncertainty (u = r * |v|), give only one"
    }
  },
  "required": [
    "value"
  ],
  "@context": {
    "@version": 1.1,
    "qudt": "http://qudt.org/schema/qudt/",
    "qunit": "http://qudt.org/vocab/unit/",
    "schema": "http://schema.org/",
    "obo": "http://purl.obolibrary.org/obo/",
    "emmo": "https://w3id.org/emmo#",
    "type": {
      "@id": "@type",
      "@container": "@set"
    },
    "QuantityValue": "qudt:QuantityValue",
    "value": "qudt:value",
    "unit": {
      "@id": "qudt:hasUnit",
      "@type": "@vocab"
    },
    "standard_uncertainty": "qudt:standardUncertainty",
    "relative_standard_uncertainty": "qudt:relativeStandardUncertainty"
  },
  "x-oold-context": {
    "value": {
      "schema:value": {
        "x-sssom": {
          "predicate_id": "skos:exactMatch",
          "mapping_set_id": "https://example.org/mappings/schemaorg"
        }
      },
      "obo:OBI_0001937": {
        "x-sssom": {
          "predicate_id": "skos:exactMatch",
          "mapping_set_id": "https://example.org/mappings/pmdco"
        }
      }
    },
    "unit": {
      "schema:unitCode": {
        "@type": "@vocab",
        "x-sssom": {
          "predicate_id": "skos:exactMatch",
          "mapping_set_id": "https://example.org/mappings/schemaorg",
          "comment": "URL branch of schema:unitCode, carrying the QUDT unit IRI"
        }
      },
      "obo:IAO_0000039": {
        "@type": "@vocab",
        "x-sssom": {
          "predicate_id": "skos:closeMatch",
          "mapping_set_id": "https://example.org/mappings/pmdco",
          "comment": "range is iao:measurement unit label; unit-label vs QUDT-IRI mapping needed"
        }
      },
      "emmo:EMMO_eeb06032_dd4f_476e_9da6_aa24302b7588": {
        "@type": "@vocab",
        "x-sssom": {
          "predicate_id": "skos:exactMatch",
          "mapping_set_id": "https://example.org/mappings/emmo",
          "object_source": "https://w3id.org/emmo",
          "object_source_version": "https://w3id.org/emmo/1.0.4",
          "comment": "hasReferencePart; pinned 1.0.4 branch snapshot (units are individuals there)"
        }
      }
    },
    "standard_uncertainty": {
      "emmo:EMMO_bba7f0f0_3707_42b9_b3fa_fd04610ef147": {
        "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": "standardUncertainty (VIM4 3.6); 1.0.4 branch only"
        }
      }
    },
    "QuantityValue": {
      "schema:QuantitativeValue": {
        "x-sssom": {
          "predicate_id": "skos:closeMatch",
          "mapping_set_id": "https://example.org/mappings/schemaorg",
          "comment": "broader: also covers intervals/ranges"
        }
      },
      "obo:OBI_0001931": {
        "x-sssom": {
          "predicate_id": "skos:exactMatch",
          "mapping_set_id": "https://example.org/mappings/pmdco"
        }
      },
      "emmo:EMMO_f658c301_ce93_46cf_9639_4eace2c5d1d5": {
        "x-sssom": {
          "predicate_id": "skos:closeMatch",
          "mapping_set_id": "https://example.org/mappings/emmo",
          "comment": "EMMO QuantityValue requires a nested numerical part (EMMO#376)"
        }
      }
    }
  }
}
$schema: https://oo-ld.org/latest/meta/oold-meta-schema.json
$id: QuantityValue.schema.json
x-oold-uuid: 0d241e1a-9bf9-5441-81ff-5313948143c0
x-oold-version: 1.0.0
title: QuantityValue
type: object
properties:
  type:
    type: array
    items:
      type: string
    default:
    - QuantityValue
  value:
    type: number
  unit:
    type: string
    format: iri-reference
  standard_uncertainty:
    type: number
    description: Standard uncertainty, expressed in the unit of value (GUM convention)
  relative_standard_uncertainty:
    type: number
    description: Dimensionless ratio, NOT percent; ratio-scale quantities only, undefined at value 0;
      redundant with standard_uncertainty (u = r * |v|), give only one
required:
- value
'@context':
  '@version': 1.1
  qudt: http://qudt.org/schema/qudt/
  qunit: http://qudt.org/vocab/unit/
  schema: http://schema.org/
  obo: http://purl.obolibrary.org/obo/
  emmo: https://w3id.org/emmo#
  type:
    '@id': '@type'
    '@container': '@set'
  QuantityValue: qudt:QuantityValue
  value: qudt:value
  unit:
    '@id': qudt:hasUnit
    '@type': '@vocab'
  standard_uncertainty: qudt:standardUncertainty
  relative_standard_uncertainty: qudt:relativeStandardUncertainty
x-oold-context:
  value:
    schema:value:
      x-sssom:
        predicate_id: skos:exactMatch
        mapping_set_id: https://example.org/mappings/schemaorg
    obo:OBI_0001937:
      x-sssom:
        predicate_id: skos:exactMatch
        mapping_set_id: https://example.org/mappings/pmdco
  unit:
    schema:unitCode:
      '@type': '@vocab'
      x-sssom:
        predicate_id: skos:exactMatch
        mapping_set_id: https://example.org/mappings/schemaorg
        comment: URL branch of schema:unitCode, carrying the QUDT unit IRI
    obo:IAO_0000039:
      '@type': '@vocab'
      x-sssom:
        predicate_id: skos:closeMatch
        mapping_set_id: https://example.org/mappings/pmdco
        comment: range is iao:measurement unit label; unit-label vs QUDT-IRI mapping needed
    emmo:EMMO_eeb06032_dd4f_476e_9da6_aa24302b7588:
      '@type': '@vocab'
      x-sssom:
        predicate_id: skos:exactMatch
        mapping_set_id: https://example.org/mappings/emmo
        object_source: https://w3id.org/emmo
        object_source_version: https://w3id.org/emmo/1.0.4
        comment: hasReferencePart; pinned 1.0.4 branch snapshot (units are individuals there)
  standard_uncertainty:
    emmo:EMMO_bba7f0f0_3707_42b9_b3fa_fd04610ef147:
      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: standardUncertainty (VIM4 3.6); 1.0.4 branch only
  QuantityValue:
    schema:QuantitativeValue:
      x-sssom:
        predicate_id: skos:closeMatch
        mapping_set_id: https://example.org/mappings/schemaorg
        comment: 'broader: also covers intervals/ranges'
    obo:OBI_0001931:
      x-sssom:
        predicate_id: skos:exactMatch
        mapping_set_id: https://example.org/mappings/pmdco
    emmo:EMMO_f658c301_ce93_46cf_9639_4eace2c5d1d5:
      x-sssom:
        predicate_id: skos:closeMatch
        mapping_set_id: https://example.org/mappings/emmo
        comment: EMMO QuantityValue requires a nested numerical part (EMMO#376)

How each term reads

term consensus (@context) other readings (x-oold-context)
type the class term, aliased to @type schema:QuantitativeValue, obo:OBI_0001931, EMMO QuantityValue
value qudt:value schema:value, obo:OBI_0001937
unit qudt:hasUnit schema:unitCode, obo:IAO_0000039, EMMO hasReferencePart
standard_uncertainty qudt:standardUncertainty EMMO standardUncertainty
relative_standard_uncertainty qudt:relativeStandardUncertainty -

Class alternatives sit on the inline type term rather than in x-oold-instance-rdf-type, because that keyword materializes all declared types on every export. That is right for consensus co-typing and wrong for either/or community alignments, where the point is to pick one.

Decisions worth knowing

Uncertainty is flat, and deliberately incomplete. Only two forms are here: standard_uncertainty, in the unit of the value following the GUM convention, and relative_standard_uncertainty, a dimensionless ratio and not a percentage. These are the only two that released vocabularies actually map. Expanded uncertainty, coverage factor and coverage intervals have no flat target in QUDT, EMMO, PMDco or schema.org, so inventing terms for them here would create mappings that mean nothing to anyone else. They belong in a separate, node-shaped uncertainty record once there is something to map them to.

Numbers are not datatype-coerced. JSON numbers project to xsd:double, which is the only fractional datatype that survives the round-trip back into a native JSON number. Coercing to xsd:decimal looks tidier and quietly breaks re-validation, because the value returns from RDF as a string. QUDT constrains these properties to xsd:decimal on qudt:Quantifiable, but our nodes are not typed as Quantifiable, so no constraint is violated; a QUDT-strict consumer can canonicalize on ingest.

type declares @container: @set. A strictly array-typed property without it comes back from RDF as a scalar when it holds a single element, and then fails its own schema.

The unit is an IRI, and unit is coerced with @type: @vocab. Modelling the unit as a reference to a unit individual keeps the class-versus-individual question out of the data entirely. The @vocab coercion is what lets a subclass declare its unit individuals as terms and give each one community aliases; see Time.

EMMO has no synonym for value. EMMO models a quantity value as a node with a nested numerical part, and no JSON-LD term definition can produce a nested node from a literal. That is a structural mismatch, not an oversight, so the EMMO reading falls back to qudt:value and the correspondence is left to rule or SSSOM level. See emmo-repo/EMMO#376.

Provenance of the mappings

Each synonym records the ontology and the exact version it was checked against. The EMMO mappings target the 1.0.4 development branch rather than the 1.0.3 release, because that is where units became individuals and the VIM4 data properties appeared. The published build at w3id.org/emmo/1.0.4 was stale against its own branch when this was written, which is why the pin names a commit rather than trusting the version IRI.

References