How it works¶
Four schemas, each building on the one before, are enough to show every mechanism in this library. The notation itself is specified in the OO-LD specification; this page is about what the schemas here do with it. Read them in order and you will have seen how one document carries structure and meaning at once, how a second community reading is added without touching the data, and what a subschema costs.
The widgets below are the same ones the modules pages use, rendered from the schemas themselves. Nothing here is retyped, so nothing here can go stale.
QuantityValue¶
QuantityValue is a number, a unit, and optionally the uncertainty of the number. Everything
else in the library reuses it, so it is worth reading closely: if this one is awkward, the
awkwardness spreads everywhere.
| Term | Constraints | Consensus mapping | Alternative mappings |
|---|---|---|---|
type | array, default ["QuantityValue"] | @type | - |
"QuantityValue" | type alias | qudt:Quantity value |
|
value * | number | qudt:value | |
unit | string, format iri-reference | qudt:has unit |
|
standard_uncertaintyStandard uncertainty, expressed in the unit of value (GUM convention) | number | qudt:standard uncertainty |
|
relative_standard_uncertaintyDimensionless ratio, not percent; ratio-scale quantities only, undefined at value 0; redundant with standard_uncertainty (u = r * |v|), give only one | number | qudt:relative standard uncertainty | - |
* marks a required property.
{
"$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": "0.2.0",
"title": "QuantityValue",
"examples": [
{
"type": [
"QuantityValue"
],
"value": 12.7,
"unit": "http://qudt.org/vocab/unit/SEC",
"standard_uncertainty": 0.05
}
],
"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#",
"pmd": "https://w3id.org/pmd/co/",
"id": "@id",
"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-oold-sssom": {
"predicate_id": "skos:exactMatch",
"mapping_set_id": "https://w3id.org/oo-ld/schemas/mappings/schemaorg.sssom.tsv"
}
},
"obo:OBI_0001937": {
"x-oold-sssom": {
"predicate_id": "skos:exactMatch",
"mapping_set_id": "https://w3id.org/oo-ld/schemas/mappings/pmdco.sssom.tsv"
}
}
},
"unit": {
"schema:unitCode": {
"@type": "@vocab",
"x-oold-sssom": {
"predicate_id": "skos:exactMatch",
"mapping_set_id": "https://w3id.org/oo-ld/schemas/mappings/schemaorg.sssom.tsv",
"comment": "URL branch of schema:unitCode, carrying the QUDT unit IRI"
}
},
"obo:IAO_0000039": {
"@type": "@vocab",
"x-oold-sssom": {
"predicate_id": "skos:closeMatch",
"mapping_set_id": "https://w3id.org/oo-ld/schemas/mappings/pmdco.sssom.tsv",
"comment": "range is iao:measurement unit label; unit-label vs QUDT-IRI mapping needed"
}
},
"emmo:EMMO_eeb06032_dd4f_476e_9da6_aa24302b7588": {
"@type": "@vocab",
"x-oold-sssom": {
"predicate_id": "skos:exactMatch",
"mapping_set_id": "https://w3id.org/oo-ld/schemas/mappings/emmo.sssom.tsv",
"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-oold-sssom": {
"predicate_id": "skos:exactMatch",
"mapping_set_id": "https://w3id.org/oo-ld/schemas/mappings/emmo.sssom.tsv",
"object_source_version": "https://w3id.org/emmo/1.0.4",
"comment": "standardUncertainty (VIM4 3.6); 1.0.4 branch only"
}
}
},
"QuantityValue": {
"schema:QuantitativeValue": {
"x-oold-sssom": {
"predicate_id": "skos:closeMatch",
"mapping_set_id": "https://w3id.org/oo-ld/schemas/mappings/schemaorg.sssom.tsv",
"comment": "broader: also covers intervals/ranges"
}
},
"obo:OBI_0001931": {
"x-oold-sssom": {
"predicate_id": "skos:exactMatch",
"mapping_set_id": "https://w3id.org/oo-ld/schemas/mappings/pmdco.sssom.tsv"
}
},
"emmo:EMMO_f658c301_ce93_46cf_9639_4eace2c5d1d5": {
"x-oold-sssom": {
"predicate_id": "skos:closeMatch",
"mapping_set_id": "https://w3id.org/oo-ld/schemas/mappings/emmo.sssom.tsv",
"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: 0.2.0
title: QuantityValue
examples:
- type:
- QuantityValue
value: 12.7
unit: http://qudt.org/vocab/unit/SEC
standard_uncertainty: 0.05
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#
pmd: https://w3id.org/pmd/co/
id: '@id'
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-oold-sssom:
predicate_id: skos:exactMatch
mapping_set_id: https://w3id.org/oo-ld/schemas/mappings/schemaorg.sssom.tsv
obo:OBI_0001937:
x-oold-sssom:
predicate_id: skos:exactMatch
mapping_set_id: https://w3id.org/oo-ld/schemas/mappings/pmdco.sssom.tsv
unit:
schema:unitCode:
'@type': '@vocab'
x-oold-sssom:
predicate_id: skos:exactMatch
mapping_set_id: https://w3id.org/oo-ld/schemas/mappings/schemaorg.sssom.tsv
comment: URL branch of schema:unitCode, carrying the QUDT unit IRI
obo:IAO_0000039:
'@type': '@vocab'
x-oold-sssom:
predicate_id: skos:closeMatch
mapping_set_id: https://w3id.org/oo-ld/schemas/mappings/pmdco.sssom.tsv
comment: range is iao:measurement unit label; unit-label vs QUDT-IRI mapping needed
emmo:EMMO_eeb06032_dd4f_476e_9da6_aa24302b7588:
'@type': '@vocab'
x-oold-sssom:
predicate_id: skos:exactMatch
mapping_set_id: https://w3id.org/oo-ld/schemas/mappings/emmo.sssom.tsv
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-oold-sssom:
predicate_id: skos:exactMatch
mapping_set_id: https://w3id.org/oo-ld/schemas/mappings/emmo.sssom.tsv
object_source_version: https://w3id.org/emmo/1.0.4
comment: standardUncertainty (VIM4 3.6); 1.0.4 branch only
QuantityValue:
schema:QuantitativeValue:
x-oold-sssom:
predicate_id: skos:closeMatch
mapping_set_id: https://w3id.org/oo-ld/schemas/mappings/schemaorg.sssom.tsv
comment: 'broader: also covers intervals/ranges'
obo:OBI_0001931:
x-oold-sssom:
predicate_id: skos:exactMatch
mapping_set_id: https://w3id.org/oo-ld/schemas/mappings/pmdco.sssom.tsv
emmo:EMMO_f658c301_ce93_46cf_9639_4eace2c5d1d5:
x-oold-sssom:
predicate_id: skos:closeMatch
mapping_set_id: https://w3id.org/oo-ld/schemas/mappings/emmo.sssom.tsv
comment: EMMO QuantityValue requires a nested numerical part (EMMO#376)
{
"$schema": "https://w3id.org/oo-ld/schemas/quantities/dev/QuantityValue.schema.json",
"@context": "https://w3id.org/oo-ld/schemas/quantities/dev/QuantityValue.schema.json",
"@id": "https://example.org/instance",
"type": [
"QuantityValue"
],
"value": 12.7,
"unit": "http://qudt.org/vocab/unit/SEC",
"standard_uncertainty": 0.05
}
PREFIX ex: <https://example.org/>
PREFIX qudt: <http://qudt.org/schema/qudt/>
PREFIX qunit: <http://qudt.org/vocab/unit/>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
ex:instance
a qudt:QuantityValue ;
qudt:hasUnit qunit:SEC ;
qudt:standardUncertainty 5e-02 ;
qudt:value 1.27e+01 ;
.
PREFIX emmo: <https://w3id.org/emmo#>
PREFIX ex: <https://example.org/>
PREFIX qudt: <http://qudt.org/schema/qudt/>
PREFIX qunit: <http://qudt.org/vocab/unit/>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
ex:instance
a emmo:EMMO_f658c301_ce93_46cf_9639_4eace2c5d1d5 ;
qudt:value 1.27e+01 ;
emmo:EMMO_bba7f0f0_3707_42b9_b3fa_fd04610ef147 5e-02 ;
emmo:EMMO_eeb06032_dd4f_476e_9da6_aa24302b7588 qunit:SEC ;
.
PREFIX ex: <https://example.org/>
PREFIX obo: <http://purl.obolibrary.org/obo/>
PREFIX qudt: <http://qudt.org/schema/qudt/>
PREFIX qunit: <http://qudt.org/vocab/unit/>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
ex:instance
a obo:OBI_0001931 ;
obo:IAO_0000039 qunit:SEC ;
obo:OBI_0001937 1.27e+01 ;
qudt:standardUncertainty 5e-02 ;
.
PREFIX ex: <https://example.org/>
PREFIX qudt: <http://qudt.org/schema/qudt/>
PREFIX qunit: <http://qudt.org/vocab/unit/>
PREFIX schema1: <http://schema.org/>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
ex:instance
a schema1:QuantitativeValue ;
qudt:standardUncertainty 5e-02 ;
schema1:unitCode qunit:SEC ;
schema1:value 1.27e+01 ;
.
flowchart LR
n0["instance<br>qudt:Quantity value"]
n1["qunit:Second"]
n2[/"0.05"/]
n3[/"12.7"/]
n0 -->|qudt:has unit| n1
n0 -->|qudt:standard uncertainty| n2
n0 -->|qudt:value| n3
flowchart LR
n0["instance<br>emmo:QuantityValue"]
n1[/"12.7"/]
n2[/"0.05"/]
n3["qunit:Second"]
n0 -->|qudt:value| n1
n0 -->|emmo:standardUncertainty| n2
n0 -->|emmo:hasReferencePart| n3
flowchart LR
n0["instance<br>obo:scalar value specification"]
n1["qunit:Second"]
n2[/"12.7"/]
n3[/"0.05"/]
n0 -->|obo:has measurement unit label| n1
n0 -->|obo:has specified numeric value| n2
n0 -->|qudt:standard uncertainty| n3
flowchart LR
n0["instance<br>schema:QuantitativeValue"]
n1[/"0.05"/]
n2["qunit:Second"]
n3[/"12.7"/]
n0 -->|qudt:standard uncertainty| n1
n0 -->|schema:unitCode| n2
n0 -->|schema:value| n3
Five tabs, one source. Terms is the schema read as a vocabulary: every term, what constrains it, what it means in the consensus reading, and what each community calls it instead. JSON and YAML are the schema itself. Instance is a document that validates against it. RDF is that same document expanded to triples, with a selector for the mapping set, which is the whole point of the exercise: one file, several readings.
Look at the unit row in the Terms tab. The property maps to qudt:hasUnit, and underneath
it sit the permitted values, each mapping to a unit individual of its own. That two-level
structure is what lets a community rename both the property and the units it points at.
Notes for implementers
Examples sit at the schema root, not on individual properties. A root-level examples
entry is a whole example instance, which is what the keyword is for, and it is what the
documentation and the generated instance tab use. It also avoids
oold-schema#134: the validator's depth
guard truncates anything below six levels, so a per-property examples becomes {} once a
schema is three inheritance levels deep, and a valid schema is reported as invalid.
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.
Time: constraining the units¶
Time restricts QuantityValue to time units. It is the pattern every quantity kind
follows.
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.
| Term | Constraints | Consensus mapping | Alternative mappings |
|---|---|---|---|
type | array, default ["QuantityValue"] | @type | - |
"QuantityValue" | type alias | qudt:Quantity value |
|
value * | number | qudt:value | |
unit | string, format iri-reference | qudt:has unit |
|
standard_uncertaintyStandard uncertainty, expressed in the unit of value (GUM convention) | number | qudt:standard uncertainty |
|
relative_standard_uncertaintyDimensionless ratio, not percent; ratio-scale quantities only, undefined at value 0; redundant with standard_uncertainty (u = r * |v|), give only one | number | qudt:relative standard uncertainty | - |
| Time | |||
type | default ["Time"] | @type | - |
"Time" | type alias | qkind:Time | |
unit | enum, default "second" | qudt:has unit | - |
"second" | value alias | qunit:Second |
|
"milli_second" | value alias | qunit:Millisecond |
|
"hour" | value alias | qunit:Hour | |
* marks a required property.
{
"$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": "0.2.0",
"title": "Time",
"examples": [
{
"type": [
"Time"
],
"value": 12.7,
"unit": "second",
"standard_uncertainty": 0.05
}
],
"allOf": [
{
"$ref": "QuantityValue.schema.json"
}
],
"@context": [
"QuantityValue.schema.json",
{
"qkind": "http://qudt.org/vocab/quantitykind/",
"Time": "qkind:Time",
"second": "qunit:SEC",
"milli_second": "qunit:MilliSEC",
"hour": "qunit:HR"
}
],
"properties": {
"type": {
"default": [
"Time"
]
},
"unit": {
"enum": [
"second",
"milli_second",
"hour"
],
"default": "second"
}
},
"x-oold-context": {
"Time": {
"emmo:EMMO_d4f7d378_5e3b_468a_baa1_a7e98358cda7": {
"x-oold-sssom": {
"predicate_id": "skos:exactMatch",
"mapping_set_id": "https://w3id.org/oo-ld/schemas/mappings/emmo.sssom.tsv",
"object_source_version": "https://w3id.org/emmo/1.0.4",
"comment": "Time (ISO 80000 item 3-7); Duration (EMMO_0adabf6f) is its subclass"
}
}
},
"second": {
"emmo:Second": {
"x-oold-sssom": {
"predicate_id": "skos:exactMatch",
"mapping_set_id": "https://w3id.org/oo-ld/schemas/mappings/emmo.sssom.tsv"
}
},
"obo:UO_0000010": {
"x-oold-sssom": {
"predicate_id": "skos:exactMatch",
"mapping_set_id": "https://w3id.org/oo-ld/schemas/mappings/pmdco.sssom.tsv",
"comment": "UO second; UO units are classes, punning like EMMO#377"
}
}
},
"milli_second": {
"emmo:MilliSecond": {
"x-oold-sssom": {
"predicate_id": "skos:exactMatch",
"mapping_set_id": "https://w3id.org/oo-ld/schemas/mappings/emmo.sssom.tsv"
}
},
"obo:UO_0000028": {
"x-oold-sssom": {
"predicate_id": "skos:exactMatch",
"mapping_set_id": "https://w3id.org/oo-ld/schemas/mappings/pmdco.sssom.tsv",
"comment": "UO millisecond"
}
}
},
"hour": {
"emmo:Hour": {
"x-oold-sssom": {
"predicate_id": "skos:exactMatch",
"mapping_set_id": "https://w3id.org/oo-ld/schemas/mappings/emmo.sssom.tsv"
}
},
"obo:UO_0000032": {
"x-oold-sssom": {
"predicate_id": "skos:exactMatch",
"mapping_set_id": "https://w3id.org/oo-ld/schemas/mappings/pmdco.sssom.tsv",
"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: 0.2.0
title: Time
examples:
- type:
- Time
value: 12.7
unit: second
standard_uncertainty: 0.05
allOf:
- $ref: QuantityValue.schema.json
'@context':
- QuantityValue.schema.json
- qkind: http://qudt.org/vocab/quantitykind/
Time: qkind:Time
second: qunit:SEC
milli_second: qunit:MilliSEC
hour: qunit:HR
properties:
type:
default:
- Time
unit:
enum:
- second
- milli_second
- hour
default: second
x-oold-context:
Time:
emmo:EMMO_d4f7d378_5e3b_468a_baa1_a7e98358cda7:
x-oold-sssom:
predicate_id: skos:exactMatch
mapping_set_id: https://w3id.org/oo-ld/schemas/mappings/emmo.sssom.tsv
object_source_version: https://w3id.org/emmo/1.0.4
comment: Time (ISO 80000 item 3-7); Duration (EMMO_0adabf6f) is its subclass
second:
emmo:Second:
x-oold-sssom:
predicate_id: skos:exactMatch
mapping_set_id: https://w3id.org/oo-ld/schemas/mappings/emmo.sssom.tsv
obo:UO_0000010:
x-oold-sssom:
predicate_id: skos:exactMatch
mapping_set_id: https://w3id.org/oo-ld/schemas/mappings/pmdco.sssom.tsv
comment: UO second; UO units are classes, punning like EMMO#377
milli_second:
emmo:MilliSecond:
x-oold-sssom:
predicate_id: skos:exactMatch
mapping_set_id: https://w3id.org/oo-ld/schemas/mappings/emmo.sssom.tsv
obo:UO_0000028:
x-oold-sssom:
predicate_id: skos:exactMatch
mapping_set_id: https://w3id.org/oo-ld/schemas/mappings/pmdco.sssom.tsv
comment: UO millisecond
hour:
emmo:Hour:
x-oold-sssom:
predicate_id: skos:exactMatch
mapping_set_id: https://w3id.org/oo-ld/schemas/mappings/emmo.sssom.tsv
obo:UO_0000032:
x-oold-sssom:
predicate_id: skos:exactMatch
mapping_set_id: https://w3id.org/oo-ld/schemas/mappings/pmdco.sssom.tsv
comment: UO hour
PREFIX ex: <https://example.org/>
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#>
ex: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 ex: <https://example.org/>
PREFIX qudt: <http://qudt.org/schema/qudt/>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
ex: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 ex: <https://example.org/>
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#>
ex:m1-duration
a qkind:Time ;
obo:IAO_0000039 obo:UO_0000010 ;
obo:OBI_0001937 1.27e+01 ;
qudt:standardUncertainty 5e-02 ;
.
PREFIX ex: <https://example.org/>
PREFIX qkind: <http://qudt.org/vocab/quantitykind/>
PREFIX qudt: <http://qudt.org/schema/qudt/>
PREFIX qunit: <http://qudt.org/vocab/unit/>
PREFIX schema1: <http://schema.org/>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
ex:m1-duration
a qkind:Time ;
qudt:standardUncertainty 5e-02 ;
schema1:unitCode qunit:SEC ;
schema1:value 1.27e+01 ;
.
flowchart LR
n0["m1-duration<br>qkind:Time"]
n1["qunit:Second"]
n2[/"0.05"/]
n3[/"12.7"/]
n0 -->|qudt:has unit| n1
n0 -->|qudt:standard uncertainty| n2
n0 -->|qudt:value| n3
flowchart LR
n0["m1-duration<br>emmo:Time"]
n1[/"12.7"/]
n2[/"0.05"/]
n3["emmo:Second"]
n0 -->|qudt:value| n1
n0 -->|emmo:standardUncertainty| n2
n0 -->|emmo:hasReferencePart| n3
flowchart LR
n0["m1-duration<br>qkind:Time"]
n1["obo:second"]
n2[/"12.7"/]
n3[/"0.05"/]
n0 -->|obo:has measurement unit label| n1
n0 -->|obo:has specified numeric value| n2
n0 -->|qudt:standard uncertainty| n3
flowchart LR
n0["m1-duration<br>qkind:Time"]
n1[/"0.05"/]
n2["qunit:Second"]
n3[/"12.7"/]
n0 -->|qudt:standard uncertainty| n1
n0 -->|schema:unitCode| n2
n0 -->|schema:value| n3
The subclass adds four things and inherits everything else:
- A more specific class term.
Timemaps to the QUDT quantity kindqkind:Time, with EMMO's ISQTimeclass 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. - Unit individuals as context terms.
SEC,MilliSECandHRare declared in the@context, which is what makes them aliasable at all. - An enum and a default. The enum pins the valid units, which also guards the
@vocabcoercion inherited fromQuantityValue: without it, a typo would be silently minted into an IRI under the vocabulary base. The default is the SI unit. - 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.
In the Terms tab this is visible as two sections: everything inherited from QuantityValue,
then what Time overrides. The class row sits under type, because that is what it is, the
default value of type resolved through a type alias, not a field of its own.
Reading the three graphs¶
Switch the mapping set in the RDF tab. Those 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 every reading for a lossless round-trip, so a mapping that drops or mangles a term fails the build rather than shipping quietly.
Length: the same pattern again¶
Length repeats the pattern for another quantity kind, which is the point: the second one
costs nothing new to design.
| Term | Constraints | Consensus mapping | Alternative mappings |
|---|---|---|---|
type | array, default ["QuantityValue"] | @type | - |
"QuantityValue" | type alias | qudt:Quantity value |
|
value * | number | qudt:value | |
unit | string, format iri-reference | qudt:has unit |
|
standard_uncertaintyStandard uncertainty, expressed in the unit of value (GUM convention) | number | qudt:standard uncertainty |
|
relative_standard_uncertaintyDimensionless ratio, not percent; ratio-scale quantities only, undefined at value 0; redundant with standard_uncertainty (u = r * |v|), give only one | number | qudt:relative standard uncertainty | - |
| Length | |||
type | default ["Length"] | @type | - |
"Length"QuantityValue restricted to length units. | type alias | qkind:Length |
|
unit | enum, default "metre" | qudt:has unit | - |
"kilo_metre" | value alias | qunit:Kilometre |
|
"metre" | value alias | qunit:Metre |
|
"milli_metre" | value alias | qunit:Millimetre |
|
"micro_metre" | value alias | qunit:Micrometre |
|
* marks a required property.
{
"$schema": "https://oo-ld.org/latest/meta/oold-meta-schema.json",
"$id": "Length.schema.json",
"x-oold-uuid": "7c1d5a80-b42f-5dd5-ace8-3ae6841f3faf",
"x-oold-version": "0.2.0",
"title": "Length",
"description": "QuantityValue restricted to length units.",
"examples": [
{
"type": [
"Length"
],
"value": 0.0254,
"unit": "metre"
}
],
"allOf": [
{
"$ref": "QuantityValue.schema.json"
}
],
"@context": [
"QuantityValue.schema.json",
{
"qkind": "http://qudt.org/vocab/quantitykind/",
"Length": "qkind:Length",
"kilo_metre": "qunit:KiloM",
"metre": "qunit:M",
"milli_metre": "qunit:MilliM",
"micro_metre": "qunit:MicroM"
}
],
"properties": {
"type": {
"default": [
"Length"
]
},
"unit": {
"enum": [
"kilo_metre",
"metre",
"milli_metre",
"micro_metre"
],
"default": "metre"
}
},
"x-oold-context": {
"Length": {
"emmo:EMMO_cd2cd0de_e0cc_4ef1_b27e_2e88db027bac": {
"x-oold-sssom": {
"predicate_id": "skos:exactMatch",
"mapping_set_id": "https://w3id.org/oo-ld/schemas/mappings/emmo.sssom.tsv",
"object_source_version": "https://w3id.org/emmo/1.0.4",
"comment": "EMMO Length, ISO 80000 item 3-1.1"
}
},
"obo:PATO_0000122": {
"x-oold-sssom": {
"predicate_id": "skos:closeMatch",
"mapping_set_id": "https://w3id.org/oo-ld/schemas/mappings/pmdco.sssom.tsv",
"comment": "PATO length is a quality inhering in a bearer, not a value with a unit"
}
}
},
"kilo_metre": {
"emmo:KiloMetre": {
"x-oold-sssom": {
"predicate_id": "skos:exactMatch",
"mapping_set_id": "https://w3id.org/oo-ld/schemas/mappings/emmo.sssom.tsv",
"object_source_version": "https://w3id.org/emmo/1.0.4"
}
},
"obo:UO_0010066": {
"x-oold-sssom": {
"predicate_id": "skos:exactMatch",
"mapping_set_id": "https://w3id.org/oo-ld/schemas/mappings/pmdco.sssom.tsv",
"comment": "UO kilometer; UO units are classes, punning as in EMMO#377"
}
}
},
"metre": {
"emmo:Metre": {
"x-oold-sssom": {
"predicate_id": "skos:exactMatch",
"mapping_set_id": "https://w3id.org/oo-ld/schemas/mappings/emmo.sssom.tsv",
"object_source_version": "https://w3id.org/emmo/1.0.4"
}
},
"obo:UO_0000008": {
"x-oold-sssom": {
"predicate_id": "skos:exactMatch",
"mapping_set_id": "https://w3id.org/oo-ld/schemas/mappings/pmdco.sssom.tsv",
"comment": "UO meter; UO units are classes, punning as in EMMO#377"
}
}
},
"milli_metre": {
"emmo:MilliMetre": {
"x-oold-sssom": {
"predicate_id": "skos:exactMatch",
"mapping_set_id": "https://w3id.org/oo-ld/schemas/mappings/emmo.sssom.tsv",
"object_source_version": "https://w3id.org/emmo/1.0.4"
}
},
"obo:UO_0000016": {
"x-oold-sssom": {
"predicate_id": "skos:exactMatch",
"mapping_set_id": "https://w3id.org/oo-ld/schemas/mappings/pmdco.sssom.tsv",
"comment": "UO millimeter; UO units are classes, punning as in EMMO#377"
}
}
},
"micro_metre": {
"emmo:MicroMetre": {
"x-oold-sssom": {
"predicate_id": "skos:exactMatch",
"mapping_set_id": "https://w3id.org/oo-ld/schemas/mappings/emmo.sssom.tsv",
"object_source_version": "https://w3id.org/emmo/1.0.4"
}
},
"obo:UO_0000017": {
"x-oold-sssom": {
"predicate_id": "skos:exactMatch",
"mapping_set_id": "https://w3id.org/oo-ld/schemas/mappings/pmdco.sssom.tsv",
"comment": "UO micrometer; UO units are classes, punning as in EMMO#377"
}
}
}
}
}
$schema: https://oo-ld.org/latest/meta/oold-meta-schema.json
$id: Length.schema.json
x-oold-uuid: 7c1d5a80-b42f-5dd5-ace8-3ae6841f3faf
x-oold-version: 0.2.0
title: Length
description: QuantityValue restricted to length units.
examples:
- type:
- Length
value: 0.0254
unit: metre
allOf:
- $ref: QuantityValue.schema.json
'@context':
- QuantityValue.schema.json
- qkind: http://qudt.org/vocab/quantitykind/
Length: qkind:Length
kilo_metre: qunit:KiloM
metre: qunit:M
milli_metre: qunit:MilliM
micro_metre: qunit:MicroM
properties:
type:
default:
- Length
unit:
enum:
- kilo_metre
- metre
- milli_metre
- micro_metre
default: metre
x-oold-context:
Length:
emmo:EMMO_cd2cd0de_e0cc_4ef1_b27e_2e88db027bac:
x-oold-sssom:
predicate_id: skos:exactMatch
mapping_set_id: https://w3id.org/oo-ld/schemas/mappings/emmo.sssom.tsv
object_source_version: https://w3id.org/emmo/1.0.4
comment: EMMO Length, ISO 80000 item 3-1.1
obo:PATO_0000122:
x-oold-sssom:
predicate_id: skos:closeMatch
mapping_set_id: https://w3id.org/oo-ld/schemas/mappings/pmdco.sssom.tsv
comment: PATO length is a quality inhering in a bearer, not a value with a unit
kilo_metre:
emmo:KiloMetre:
x-oold-sssom:
predicate_id: skos:exactMatch
mapping_set_id: https://w3id.org/oo-ld/schemas/mappings/emmo.sssom.tsv
object_source_version: https://w3id.org/emmo/1.0.4
obo:UO_0010066:
x-oold-sssom:
predicate_id: skos:exactMatch
mapping_set_id: https://w3id.org/oo-ld/schemas/mappings/pmdco.sssom.tsv
comment: UO kilometer; UO units are classes, punning as in EMMO#377
metre:
emmo:Metre:
x-oold-sssom:
predicate_id: skos:exactMatch
mapping_set_id: https://w3id.org/oo-ld/schemas/mappings/emmo.sssom.tsv
object_source_version: https://w3id.org/emmo/1.0.4
obo:UO_0000008:
x-oold-sssom:
predicate_id: skos:exactMatch
mapping_set_id: https://w3id.org/oo-ld/schemas/mappings/pmdco.sssom.tsv
comment: UO meter; UO units are classes, punning as in EMMO#377
milli_metre:
emmo:MilliMetre:
x-oold-sssom:
predicate_id: skos:exactMatch
mapping_set_id: https://w3id.org/oo-ld/schemas/mappings/emmo.sssom.tsv
object_source_version: https://w3id.org/emmo/1.0.4
obo:UO_0000016:
x-oold-sssom:
predicate_id: skos:exactMatch
mapping_set_id: https://w3id.org/oo-ld/schemas/mappings/pmdco.sssom.tsv
comment: UO millimeter; UO units are classes, punning as in EMMO#377
micro_metre:
emmo:MicroMetre:
x-oold-sssom:
predicate_id: skos:exactMatch
mapping_set_id: https://w3id.org/oo-ld/schemas/mappings/emmo.sssom.tsv
object_source_version: https://w3id.org/emmo/1.0.4
obo:UO_0000017:
x-oold-sssom:
predicate_id: skos:exactMatch
mapping_set_id: https://w3id.org/oo-ld/schemas/mappings/pmdco.sssom.tsv
comment: UO micrometer; UO units are classes, punning as in EMMO#377
PREFIX ex: <https://example.org/>
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#>
ex:instance
a qkind:Length ;
qudt:hasUnit qunit:M ;
qudt:value 2.54e-02 ;
.
PREFIX emmo: <https://w3id.org/emmo#>
PREFIX ex: <https://example.org/>
PREFIX qudt: <http://qudt.org/schema/qudt/>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
ex:instance
a emmo:EMMO_cd2cd0de_e0cc_4ef1_b27e_2e88db027bac ;
qudt:value 2.54e-02 ;
emmo:EMMO_eeb06032_dd4f_476e_9da6_aa24302b7588 emmo:Metre ;
.
flowchart LR
n0["instance<br>qkind:Length"]
n1["qunit:Metre"]
n2[/"0.0254"/]
n0 -->|qudt:has unit| n1
n0 -->|qudt:value| n2
flowchart LR
n0["instance<br>emmo:Length"]
n1[/"0.0254"/]
n2["emmo:Metre"]
n0 -->|qudt:value| n1
n0 -->|emmo:hasReferencePart| n2
flowchart LR
n0["instance<br>obo:length"]
n1["obo:meter"]
n2[/"0.0254"/]
n0 -->|obo:has measurement unit label| n1
n0 -->|obo:has specified numeric value| n2
flowchart LR
n0["instance<br>qkind:Length"]
n1["qunit:Metre"]
n2[/"0.0254"/]
n0 -->|schema:unitCode| n1
n0 -->|schema:value| n2
It adds a class term mapping to qkind:Length, a unit enum that pins the valid length units
and guards the inherited @vocab coercion, the SI unit as default so an instance may omit
unit entirely, and a value term per unit so each one is aliasable per community. With four
permitted units the Terms tab collapses them behind a toggle rather than pushing the properties
out of view.
Diameter: three levels deep¶
| Term | Constraints | Consensus mapping | Alternative mappings |
|---|---|---|---|
type | array, default ["QuantityValue"] | @type | - |
"QuantityValue" | type alias | qudt:Quantity value |
|
value * | number | qudt:value | |
unit | string, format iri-reference | qudt:has unit |
|
standard_uncertaintyStandard uncertainty, expressed in the unit of value (GUM convention) | number | qudt:standard uncertainty |
|
relative_standard_uncertaintyDimensionless ratio, not percent; ratio-scale quantities only, undefined at value 0; redundant with standard_uncertainty (u = r * |v|), give only one | number | qudt:relative standard uncertainty | - |
type | default ["Length"] | @type | - |
"Length"QuantityValue restricted to length units. | type alias | qkind:Length |
|
unit | enum, default "metre" | qudt:has unit | - |
"kilo_metre" | value alias | qunit:Kilometre |
|
"metre" | value alias | qunit:Metre |
|
"milli_metre" | value alias | qunit:Millimetre |
|
"micro_metre" | value alias | qunit:Micrometre |
|
| Diameter | |||
type | default ["Diameter"] | @type | - |
"Diameter"Length taken across a round object through its centre. | type alias | qkind:Diameter |
|
* marks a required property.
{
"$schema": "https://oo-ld.org/latest/meta/oold-meta-schema.json",
"$id": "Diameter.schema.json",
"x-oold-uuid": "805bf901-6ac5-5933-bcb2-f133b0b1b9bf",
"x-oold-version": "0.1.1",
"title": "Diameter",
"description": "Length taken across a round object through its centre.",
"examples": [
{
"type": [
"Diameter"
],
"value": 20.1,
"unit": "milli_metre"
}
],
"allOf": [
{
"$ref": "Length.schema.json"
}
],
"@context": [
"Length.schema.json",
{
"Diameter": "qkind:Diameter"
}
],
"properties": {
"type": {
"default": [
"Diameter"
]
}
},
"x-oold-context": {
"Diameter": {
"emmo:EMMO_c1c8ac3c_8a1c_4777_8e0b_14c1f9f9b0c6": {
"x-oold-sssom": {
"predicate_id": "skos:exactMatch",
"mapping_set_id": "https://w3id.org/oo-ld/schemas/mappings/emmo.sssom.tsv",
"object_source_version": "https://w3id.org/emmo/1.0.4",
"comment": "EMMO Diameter, ISO 80000 item 3-1.5"
}
},
"obo:PATO_0001334": {
"x-oold-sssom": {
"predicate_id": "skos:closeMatch",
"mapping_set_id": "https://w3id.org/oo-ld/schemas/mappings/pmdco.sssom.tsv",
"comment": "PATO diameter is a length quality of a bearer, not a value with a unit"
}
}
}
}
}
$schema: https://oo-ld.org/latest/meta/oold-meta-schema.json
$id: Diameter.schema.json
x-oold-uuid: 805bf901-6ac5-5933-bcb2-f133b0b1b9bf
x-oold-version: 0.1.1
title: Diameter
description: Length taken across a round object through its centre.
examples:
- type:
- Diameter
value: 20.1
unit: milli_metre
allOf:
- $ref: Length.schema.json
'@context':
- Length.schema.json
- Diameter: qkind:Diameter
properties:
type:
default:
- Diameter
x-oold-context:
Diameter:
emmo:EMMO_c1c8ac3c_8a1c_4777_8e0b_14c1f9f9b0c6:
x-oold-sssom:
predicate_id: skos:exactMatch
mapping_set_id: https://w3id.org/oo-ld/schemas/mappings/emmo.sssom.tsv
object_source_version: https://w3id.org/emmo/1.0.4
comment: EMMO Diameter, ISO 80000 item 3-1.5
obo:PATO_0001334:
x-oold-sssom:
predicate_id: skos:closeMatch
mapping_set_id: https://w3id.org/oo-ld/schemas/mappings/pmdco.sssom.tsv
comment: PATO diameter is a length quality of a bearer, not a value with a unit
PREFIX ex: <https://example.org/>
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#>
ex:instance
a qkind:Diameter ;
qudt:hasUnit qunit:MilliM ;
qudt:value 2.01e+01 ;
.
PREFIX emmo: <https://w3id.org/emmo#>
PREFIX ex: <https://example.org/>
PREFIX qudt: <http://qudt.org/schema/qudt/>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
ex:instance
a emmo:EMMO_c1c8ac3c_8a1c_4777_8e0b_14c1f9f9b0c6 ;
qudt:value 2.01e+01 ;
emmo:EMMO_eeb06032_dd4f_476e_9da6_aa24302b7588 emmo:MilliMetre ;
.
PREFIX ex: <https://example.org/>
PREFIX obo: <http://purl.obolibrary.org/obo/>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
ex:instance
a obo:PATO_0001334 ;
obo:IAO_0000039 obo:UO_0000016 ;
obo:OBI_0001937 2.01e+01 ;
.
PREFIX ex: <https://example.org/>
PREFIX qkind: <http://qudt.org/vocab/quantitykind/>
PREFIX qunit: <http://qudt.org/vocab/unit/>
PREFIX schema1: <http://schema.org/>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
ex:instance
a qkind:Diameter ;
schema1:unitCode qunit:MilliM ;
schema1:value 2.01e+01 ;
.
flowchart LR
n0["instance<br>qkind:Diameter"]
n1["qunit:Millimetre"]
n2[/"20.1"/]
n0 -->|qudt:has unit| n1
n0 -->|qudt:value| n2
flowchart LR
n0["instance<br>emmo:Diameter"]
n1[/"20.1"/]
n2["emmo:MilliMetre"]
n0 -->|qudt:value| n1
n0 -->|emmo:hasReferencePart| n2
flowchart LR
n0["instance<br>obo:diameter"]
n1["obo:millimeter"]
n2[/"20.1"/]
n0 -->|obo:has measurement unit label| n1
n0 -->|obo:has specified numeric value| n2
flowchart LR
n0["instance<br>qkind:Diameter"]
n1["qunit:Millimetre"]
n2[/"20.1"/]
n0 -->|schema:unitCode| n1
n0 -->|schema:value| n2
Note how little it declares. The units, their aliases, the value and uncertainty terms and every
mapping on them come from Length and QuantityValue; Diameter only narrows the class term
and the example. That is the point of the chain: a new quantity costs a handful of lines, and it
inherits a validated mapping set rather than restating one.
Where to go next¶
- Modules lists every schema with the same five tabs.
- Mapping sets covers the tiering mechanism in general.
- Mapping sets has the SSSOM exports and the derived crosswalks.
- Versions and identifiers says what you can pin and what a bump means.
- Contributing is the other side: where to edit and how versions are set.
References¶
- emmo-repo/EMMO#376, preferred representation of quantities
- emmo-repo/EMMO#377, relating quantity individuals to units
- OO-LD/oold-schema#107, the QuantityValue schema upstream
- OO-LD/oold-schema#108, the mapping-selection requirements