EnVar microschema · class
Provenance Chain
ProvenanceChain
The ordered list of all upstream ToolRuns whose outputs were inputs to this run, terminating in a typed root. Patterned after W3C PROV (prov:wasDerivedFrom, prov:wasGeneratedBy).
Where it sits
Composed intoEnvironmentalExposureRecord
ReferencesToolRun
Fields
A step-by-step history of every program run that led to this data, oldest first — like a parcel's tracking history showing each station it passed through on the way to you.
Ordered list of upstream ToolRuns, from oldest to most recent, whose outputs were inputs to this run.
Example
None — a single upstream geocoding step preceding the daymet run
Covered by — 5 standards
Why it matters & mappings
A value like a daily temperature is usually the end of several runs (geocode, then extract); without the ordered steps a consumer can verify only the last hop, and any upstream error is invisible. The chain lets anyone walk the full derivation back to its root.
See also: https://www.w3.org/TR/prov-o/
This says what the very first link of the history is — freshly downloaded raw data, simulated data, or an existing curated dataset. Different starting points deserve different levels of scrutiny.
The kind of root of the chain.
Example
raw_source_download
Allowed values
raw_source_download Chain terminates at a raw download from the source producer
synthetic_data Chain terminates at a synthetic / simulated dataset
pre_existing_curated_dataset Chain terminates at a pre-existing curated dataset
Covered by — 5 standards
Why it matters & mappings
A chain that just stops is unverifiable — stating whether it ends at a raw source download, synthetic data, or a pre-existing curated dataset tells consumers what kind of trust the root deserves, and makes the no-orphaned-steps validation rule checkable.
These are notes saying "step B was built to accept what step A produces" — like declaring that a plug and a socket follow the same standard, so a checker can catch mismatched pairs automatically.
Declarations that two chain steps are compatible (e.g. daymet@1.0.0 expects geocoder@>=3.0.0 output column schema). Optional but enables strict-mode validation.
Example
None
Why it matters & mappings
Version bumps in one chain step can silently break the assumptions of the next (e.g. a changed output column schema); explicit compatibility declarations make such mismatches machine-checkable in strict mode instead of surfacing later as wrong values.
Full field reference — every slot, cardinality & inheritance
| Field | Name | Tier | Cardinality / Range | Description |
|---|---|---|---|---|
| Provenance Chain Steps | provenance_chain_steps |
recommended | * ToolRun |
Ordered list of upstream ToolRuns, from oldest to most recent, whose output... |
| Provenance Chain Terminus Type | provenance_chain_terminus_type |
recommended | 0..1 ProvenanceChainTerminusEnum |
The kind of root of the chain |
| Chain Compatibility Assertions | chain_compatibility_assertions |
optional | * String |
Declarations that two chain steps are compatible (e |
Diagram & LinkML source
classDiagram
class ProvenanceChain
click ProvenanceChain href "../../classes/ProvenanceChain/"
ProvenanceChain : chain_compatibility_assertions
ProvenanceChain : provenance_chain_steps
ProvenanceChain --> "*" ToolRun : provenance_chain_steps
click ToolRun href "../../classes/ToolRun/"
ProvenanceChain : provenance_chain_terminus_type
ProvenanceChain --> "0..1" ProvenanceChainTerminusEnum : provenance_chain_terminus_type
click ProvenanceChainTerminusEnum href "../../enums/ProvenanceChainTerminusEnum/"
name: ProvenanceChain
annotations:
domain_of_use:
tag: domain_of_use
value: environmental_exposure
description: The ordered list of all upstream `ToolRun`s whose outputs were inputs
to this run, terminating in a typed root. Patterned after W3C PROV (`prov:wasDerivedFrom`,
`prov:wasGeneratedBy`).
title: Provenance Chain
from_schema: https://w3id.org/linkml/microschemas/envar
see_also:
- https://www.w3.org/TR/prov-o/
- https://www.w3.org/TR/prov-primer/
rank: 1000
attributes:
provenance_chain_steps:
name: provenance_chain_steps
annotations:
tier:
tag: tier
value: recommended
justification:
tag: justification
value: A value like a daily temperature is usually the end of several runs
(geocode, then extract); without the ordered steps a consumer can verify
only the last hop, and any upstream error is invisible. The chain lets anyone
walk the full derivation back to its root.
explanation:
tag: explanation
value: A step-by-step history of every program run that led to this data,
oldest first — like a parcel's tracking history showing each station it
passed through on the way to you.
covered_by:
tag: covered_by
annotations:
omop_gaia:
tag: omop_gaia
annotations:
extent:
tag: extent
value: partial
status:
tag: status
value: asserted
where:
tag: where
value: gaia_catalog/meta_etl_*.json (ETL recipe) + gaia_db/spatial_join_log.txt
(SQL NOTICE lines)
note:
tag: note
value: 'Gaia''s ETL descriptor plus the spatial-join log capture upstream
steps, but not as an ordered per-run W3C-PROV chain. Conservative:
partial.'
degauss:
tag: degauss
annotations:
extent:
tag: extent
value: absent
status:
tag: status
value: asserted
where:
tag: where
value: no column
note:
tag: note
value: DeGAUSS emits no ordered upstream-run chain on its native outputs.
amadeus:
tag: amadeus
annotations:
extent:
tag: extent
value: absent
status:
tag: status
value: asserted
where:
tag: where
value: no column
note:
tag: note
value: No native Amadeus file records an ordered upstream-run chain.
cher:
tag: cher
annotations:
extent:
tag: extent
value: partial
status:
tag: status
value: asserted
where:
tag: where
value: dataset_lineage table (parent-child links) + lineage_notes
note:
tag: note
value: C-HER's dataset_lineage links parent and child resources but
is a dataset-lineage graph, not an ordered per-run W3C-PROV tool
chain.
codata:
tag: codata
annotations:
extent:
tag: extent
value: out_of_layer
status:
tag: status
value: asserted
where:
tag: where
value: no column
note:
tag: note
value: Ordered tool-run provenance is instance-layer; out of scope
for CODATA.
description: Ordered list of upstream `ToolRun`s, from oldest to most recent,
whose outputs were inputs to this run.
title: Provenance Chain Steps
examples:
- description: a single upstream geocoding step preceding the daymet run
object:
tool_name: geocoder
tool_version: 3.3.0
run_timestamp_utc: '2026-05-23T14:02:11Z'
output_file_sha256: 5b6c7d8e9f0a...
from_schema: https://w3id.org/linkml/microschemas/envar
see_also:
- https://www.w3.org/TR/prov-o/
owner: ProvenanceChain
domain_of:
- ProvenanceChain
range: ToolRun
multivalued: true
inlined: true
inlined_as_list: true
provenance_chain_terminus_type:
name: provenance_chain_terminus_type
annotations:
tier:
tag: tier
value: recommended
justification:
tag: justification
value: A chain that just stops is unverifiable — stating whether it ends at
a raw source download, synthetic data, or a pre-existing curated dataset
tells consumers what kind of trust the root deserves, and makes the no-orphaned-steps
validation rule checkable.
explanation:
tag: explanation
value: This says what the very first link of the history is — freshly downloaded
raw data, simulated data, or an existing curated dataset. Different starting
points deserve different levels of scrutiny.
covered_by:
tag: covered_by
annotations:
omop_gaia:
tag: omop_gaia
annotations:
extent:
tag: extent
value: absent
status:
tag: status
value: asserted
where:
tag: where
value: no column
note:
tag: note
value: Gaia's meta_etl points at raw source downloads but has no typed
chain-terminus field.
degauss:
tag: degauss
annotations:
extent:
tag: extent
value: absent
status:
tag: status
value: asserted
where:
tag: where
value: no column
note:
tag: note
value: DeGAUSS carries no typed provenance-chain terminus.
amadeus:
tag: amadeus
annotations:
extent:
tag: extent
value: absent
status:
tag: status
value: asserted
where:
tag: where
value: no column
note:
tag: note
value: Amadeus carries no typed provenance-chain terminus.
cher:
tag: cher
annotations:
extent:
tag: extent
value: absent
status:
tag: status
value: asserted
where:
tag: where
value: no column
note:
tag: note
value: C-HER's lineage graph has no typed terminus field on the chain.
codata:
tag: codata
annotations:
extent:
tag: extent
value: out_of_layer
status:
tag: status
value: asserted
where:
tag: where
value: no column
note:
tag: note
value: Chain-terminus typing is instance-layer; out of scope for CODATA.
description: The kind of root of the chain.
title: Provenance Chain Terminus Type
examples:
- value: raw_source_download
from_schema: https://w3id.org/linkml/microschemas/envar
owner: ProvenanceChain
domain_of:
- ProvenanceChain
range: ProvenanceChainTerminusEnum
chain_compatibility_assertions:
name: chain_compatibility_assertions
annotations:
tier:
tag: tier
value: optional
justification:
tag: justification
value: Version bumps in one chain step can silently break the assumptions
of the next (e.g. a changed output column schema); explicit compatibility
declarations make such mismatches machine-checkable in strict mode instead
of surfacing later as wrong values.
explanation:
tag: explanation
value: These are notes saying "step B was built to accept what step A produces"
— like declaring that a plug and a socket follow the same standard, so a
checker can catch mismatched pairs automatically.
description: Declarations that two chain steps are compatible (e.g. `daymet@1.0.0`
expects `geocoder@>=3.0.0` output column schema). Optional but enables strict-mode
validation.
title: Chain Compatibility Assertions
examples:
- object: daymet@1.0.0 expects geocoder@>=3.0.0 output column schema
from_schema: https://w3id.org/linkml/microschemas/envar
owner: ProvenanceChain
domain_of:
- ProvenanceChain
range: string
multivalued: true
class_uri: prov:Bundle
See Also
Identifier and Mapping Information
Annotations
| property | value |
|---|---|
| domain_of_use | environmental_exposure |
Schema Source
- from schema: https://w3id.org/linkml/microschemas/envar
Mappings
| Mapping Type | Mapped Value |
|---|---|
| self | prov:Bundle |
| native | envar:ProvenanceChain |