EnVar microschema · class
Temporal Reference
TemporalReference
Temporal provenance of an environmental exposure value: native temporal grain, aggregation rule, day-boundary convention, coverage of the source product, the extraction window the run actually pulled, and calendar. One per record.
Where it sits
Composed intoEnvironmentalExposureRecord
Fields
How often does this dataset produce a number — one per hour, one per day, one per year? A daily temperature and a yearly average temperature are very different things, so you need to know which kind of value you are looking at before comparing anything.
Native temporal grain of the values.
Examples
daily — Daymet Tmax — one value per day.
annual — ACAG satellite PM2.5 — one value per year.
Allowed values
instantaneous Instantaneous snapshot at a timestamp
hourly One value per hour
three_hourly One value per 3-hour window (NARR sub-daily)
daily One value per day
monthly One value per calendar month
seasonal One value per season (3-month window)
annual One value per year
Covered by — 5 standards
Why it matters & mappings
A daily value and an annual value of the same variable are different exposures with different health associations; without the native grain an analyst cannot tell whether a series supports an acute (day-level) analysis or only a chronic one, and silent resampling between products goes undetected.
Within each time window there are many raw measurements; this says which single number was kept — the highest, the average, the total. The hottest moment of a day and the average across the whole day can differ by many degrees, so it matters which one the value represents.
How the value summarises sub-period values. Maps 1:1 to CF cell_methods.
Examples
maximum — Daily Tmax — time: maximum in CF.
mean — Annual-mean PM2.5 — time: mean in CF.
Allowed values
mean Arithmetic mean over the window
maximum Maximum over the window
minimum Minimum over the window
sum Sum over the window
percentile A percentile of the values in the window
point_in_time A point-in-time sample with no aggregation applied
Covered by — 5 standards
Why it matters & mappings
"Daily maximum" and "daily mean" temperature are different exposures with different health associations, and this is the field that separates them. Omitting it lets two studies silently compare a maximum against a mean and reach opposite conclusions about the same heat event.
When does "Tuesday" start and end for this dataset — midnight local time, midnight in London, or noon-to-noon? Different products genuinely disagree, which changes which hot afternoon lands on which day.
Where the 24-hour day window starts. Mandatory. Daymet = local_midnight; PRISM = 24h_ending_1200_GMT; NARR / ERA5 sub-daily = utc_midnight. The single most-omitted slot in the literature and a known source of cross-study disagreement.
Examples
local_midnight — Daymet convention — day starts at local midnight.
not_applicable — Annual PM2.5 aggregate — no day boundary is meaningful.
Allowed values
local_midnight Day starts at local midnight at the target location
utc_midnight Day starts at 00:00 UTC
ending_1200_gmt 24-hour window ending 12:00 GMT, used by PRISM and historically common in US ...
solar_noon_centered 24-hour window centered on local solar noon
observation_dependent Day boundary follows whatever the underlying observation network uses (e
not_applicable No day boundary applies — e
Covered by — 5 standards
Why it matters & mappings
The single most-omitted slot in the environmental-health literature and a known source of cross-study disagreement: Daymet's local-midnight day and PRISM's 24h-ending-1200-GMT day slice the same thermometer readings differently, so the "daily Tmax" for the same calendar date can differ between products and lagged analyses can shift by a whole day. It is also the exposure-side half of the day-boundary cross-check against the clinical-side clinical_date_assignment_convention.
The same "how long is one time step" answer, but written as a plain number of seconds — a day is 86,400 seconds. Computers can check and compare numbers much more reliably than words like "daily", so the redundancy is deliberate.
Redundant with temporal_resolution but explicit for machine use; e.g. 86400 for daily, 3600 for hourly.
Examples
86400 — Daily window (Daymet Tmax).
31536000 — Annual window (satellite PM2.5).
Covered by — 5 standards
Why it matters & mappings
A machine-checkable twin of temporal_resolution: an explicit numeric window (86400 for daily) lets validators verify the declared grain arithmetically instead of interpreting an enum label, catching a mislabelled resolution before it corrupts a temporal join.
The earliest date the source dataset has any data for at all. If you ask for a date before this, the answer is not "missing" — the dataset simply never covered that time.
Start of the source product's full temporal coverage.
Example
1980-01-01 — Daymet V4 coverage starts in 1980.
Covered by — 5 standards
Why it matters & mappings
Distinguishes out-of-coverage from missing: without the product's coverage start, a gap before 1980 in a Daymet-derived series looks like missing data rather than a request outside the product's lifetime, and imputation or exclusion decisions go wrong.
The latest date the source dataset covers; some products are still being extended. Asking for a date after this returns nothing — not because data is missing, but because it does not exist yet.
End of the source product's coverage. May be an "ongoing" sentinel for live products.
Example
2024-12-31 — End of Daymet V4 coverage at extraction time.
Covered by — 5 standards
Why it matters & mappings
Distinguishes out-of-coverage from missing at the recent end, and — because live products keep growing — pins down which vintage of the product this run saw, so a later re-run against a longer series can be recognised as a different extract.
Of everything the dataset covers, this is the first date this particular job actually downloaded — like noting which pages of a big book you photocopied.
Actual start date the run extracted.
Example
2022-07-18 — Day before the Phoenix index date, for lag analysis.
Covered by — 5 standards
Why it matters & mappings
Records the dates this run actually pulled, as opposed to what the product offers; without it a reproducer cannot re-request the same slice, and a lag analysis cannot verify that the pre-event days (e.g. the day before the index date) were actually in the extract.
Of everything the dataset covers, this is the last date this particular job actually downloaded — the end of the photocopied page range.
Actual end date the run extracted.
Example
2022-07-20 — Day after the Phoenix index date, for lag analysis.
Covered by — 5 standards
Why it matters & mappings
The closing bracket of the slice this run actually pulled; without it a reproducer cannot re-request the same window, and a lag analysis cannot verify that the post-event days it needs were actually extracted rather than silently truncated.
Most data uses the ordinary calendar, but some climate models simplify — for example pretending every year has exactly 365 days (no leap days) or twelve 30-day months. If you line those dates up against a real calendar without converting, they slowly drift out of sync.
Calendar of the time axis. gregorian is the default; only matters when a source uses a non-standard calendar. Covers both the CF calendar values and product-specific conventions that CF has no term for — e.g. Daymet's fixed 365-day year (daymet_365), which keeps Feb 29 but drops Dec 31 in leap years and is therefore neither gregorian nor noleap.
Examples
gregorian — The default; used by ACAG PM2.5.
daymet_365 — Daymet — fixed 365-day year; keeps Feb 29, drops Dec 31 in leap years.
Allowed values
gregorian Standard mixed Julian / Gregorian calendar (default)
noleap 365-day calendar with no leap days (Feb 29 dropped)
daymet_365 Fixed 365-day year that keeps Feb 29 but drops Dec 31 in leap years — the Day...
all_leap 366-day calendar with all years leap
day_360 12 months of 30 days each (CF `calendar` value `360_day`)
julian Proleptic Julian calendar
proleptic_gregorian Proleptic Gregorian calendar
Covered by — 5 standards
Why it matters & mappings
Some climate-model output uses non-standard calendars (365-day noleap, 360-day); joining such a series to real-world Gregorian clinical dates without converting shifts daily values progressively through the year — a silent, cumulative misalignment.
Full field reference — every slot, cardinality & inheritance
| Field | Name | Tier | Cardinality / Range | Description |
|---|---|---|---|---|
| Temporal Resolution | temporal_resolution |
core | 1 TemporalResolutionEnum |
Native temporal grain of the values |
| Temporal Aggregation Method | temporal_aggregation_method |
core | 1 TemporalAggregationMethodEnum |
How the value summarises sub-period values |
| Aggregation Window (seconds) | temporal_aggregation_window_seconds |
recommended | 0..1 Integer |
Redundant with temporal_resolution but explicit for machine use; e |
| Day-Boundary Convention | day_boundary_convention |
core | 1 DayBoundaryConventionEnum |
Where the 24-hour day window starts |
| Temporal Coverage Start | temporal_coverage_start |
recommended | 0..1 Date |
Start of the source product's full temporal coverage |
| Temporal Coverage End | temporal_coverage_end |
recommended | 0..1 Date |
End of the source product's coverage |
| Extraction Window Start | extraction_window_start |
recommended | 0..1 Date |
Actual start date the run extracted |
| Extraction Window End | extraction_window_end |
recommended | 0..1 Date |
Actual end date the run extracted |
| Calendar (CF) | calendar |
recommended | 0..1 CalendarEnum |
Calendar of the time axis |
Diagram & LinkML source
classDiagram
class TemporalReference
click TemporalReference href "../../classes/TemporalReference/"
TemporalReference : calendar
TemporalReference --> "0..1" CalendarEnum : calendar
click CalendarEnum href "../../enums/CalendarEnum/"
TemporalReference : day_boundary_convention
TemporalReference --> "1" DayBoundaryConventionEnum : day_boundary_convention
click DayBoundaryConventionEnum href "../../enums/DayBoundaryConventionEnum/"
TemporalReference : extraction_window_end
TemporalReference : extraction_window_start
TemporalReference : temporal_aggregation_method
TemporalReference --> "1" TemporalAggregationMethodEnum : temporal_aggregation_method
click TemporalAggregationMethodEnum href "../../enums/TemporalAggregationMethodEnum/"
TemporalReference : temporal_aggregation_window_seconds
TemporalReference : temporal_coverage_end
TemporalReference : temporal_coverage_start
TemporalReference : temporal_resolution
TemporalReference --> "1" TemporalResolutionEnum : temporal_resolution
click TemporalResolutionEnum href "../../enums/TemporalResolutionEnum/"
name: TemporalReference
annotations:
domain_of_use:
tag: domain_of_use
value: environmental_exposure
description: 'Temporal provenance of an environmental exposure value: native temporal
grain, aggregation rule, day-boundary convention, coverage of the source product,
the extraction window the run actually pulled, and calendar. One per record.'
title: Temporal Reference
from_schema: https://w3id.org/linkml/microschemas/envar
see_also:
- https://cfconventions.org/
- https://en.wikipedia.org/wiki/ISO_8601
rank: 1000
slot_usage:
temporal_resolution:
name: temporal_resolution
required: true
temporal_aggregation_method:
name: temporal_aggregation_method
required: true
day_boundary_convention:
name: day_boundary_convention
required: true
attributes:
temporal_resolution:
name: temporal_resolution
annotations:
tier:
tag: tier
value: core
justification:
tag: justification
value: A daily value and an annual value of the same variable are different
exposures with different health associations; without the native grain an
analyst cannot tell whether a series supports an acute (day-level) analysis
or only a chronic one, and silent resampling between products goes undetected.
explanation:
tag: explanation
value: How often does this dataset produce a number — one per hour, one per
day, one per year? A daily temperature and a yearly average temperature
are very different things, so you need to know which kind of value you are
looking at before comparing anything.
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: No first-class temporal_resolution slot in gaiaCatalog or gaia-db.
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's daily grain is implicit in one-row-per-day, with
no resolution field.
amadeus:
tag: amadeus
annotations:
extent:
tag: extent
value: partial
status:
tag: status
value: asserted
where:
tag: where
value: thredds_dataset.xml day axis increment = 1.0 (days since 1900-01-01)
note:
tag: note
value: Only derivable from the THREDDS time-axis increment; not written
as a discrete resolution field.
cher:
tag: cher
annotations:
extent:
tag: extent
value: full
status:
tag: status
value: asserted
where:
tag: where
value: table_name temporal-resolution code (§2.4); inheritable temporal_resolution
note:
tag: note
value: C-HER carries temporal resolution first-class as a code in
the table_name pattern and as an inheritable lineage field.
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: The native temporal grain of a specific run is instance-layer
detail outside the conceptual EV/DDI-CDI layer.
description: Native temporal grain of the values.
title: Temporal Resolution
examples:
- value: daily
description: Daymet Tmax — one value per day.
- value: annual
description: ACAG satellite PM2.5 — one value per year.
from_schema: https://w3id.org/linkml/microschemas/envar
see_also:
- https://cfconventions.org/cf-conventions/cf-conventions.html#time-coordinate
owner: TemporalReference
domain_of:
- TemporalReference
range: TemporalResolutionEnum
required: true
temporal_aggregation_method:
name: temporal_aggregation_method
annotations:
tier:
tag: tier
value: core
justification:
tag: justification
value: '"Daily maximum" and "daily mean" temperature are different exposures
with different health associations, and this is the field that separates
them. Omitting it lets two studies silently compare a maximum against a
mean and reach opposite conclusions about the same heat event.'
explanation:
tag: explanation
value: Within each time window there are many raw measurements; this says
which single number was kept — the highest, the average, the total. The
hottest moment of a day and the average across the whole day can differ
by many degrees, so it matters which one the value represents.
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: No aggregation-method slot in gaiaCatalog or gaia-db.
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 temporal-aggregation field.
amadeus:
tag: amadeus
annotations:
extent:
tag: extent
value: partial
status:
tag: status
value: asserted
where:
tag: where
value: thredds_dataset.xml long_name / grid name (daily_maximum_temperature)
note:
tag: note
value: The aggregation (daily maximum) is recoverable only from the
variable long_name, not a structured field.
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 data-level codes track processing stage, not which
statistic summarises a sub-period; no aggregation-method field.
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: How sub-period values were aggregated in one run is instance-layer
detail outside the conceptual EV/DDI-CDI layer.
description: How the value summarises sub-period values. Maps 1:1 to CF cell_methods.
title: Temporal Aggregation Method
examples:
- value: maximum
description: 'Daily Tmax — `time: maximum` in CF.'
- value: mean
description: 'Annual-mean PM2.5 — `time: mean` in CF.'
from_schema: https://w3id.org/linkml/microschemas/envar
see_also:
- https://cfconventions.org/cf-conventions/cf-conventions.html#cell-methods
owner: TemporalReference
domain_of:
- TemporalReference
range: TemporalAggregationMethodEnum
required: true
temporal_aggregation_window_seconds:
name: temporal_aggregation_window_seconds
annotations:
tier:
tag: tier
value: recommended
justification:
tag: justification
value: 'A machine-checkable twin of `temporal_resolution`: an explicit numeric
window (86400 for daily) lets validators verify the declared grain arithmetically
instead of interpreting an enum label, catching a mislabelled resolution
before it corrupts a temporal join.'
explanation:
tag: explanation
value: The same "how long is one time step" answer, but written as a plain
number of seconds — a day is 86,400 seconds. Computers can check and compare
numbers much more reliably than words like "daily", so the redundancy is
deliberate.
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: No aggregation-window field; the temporal grain itself is absent.
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 explicit window-length field.
amadeus:
tag: amadeus
annotations:
extent:
tag: extent
value: partial
status:
tag: status
value: asserted
where:
tag: where
value: thredds_dataset.xml day axis increment = 1.0 (days since 1900-01-01)
note:
tag: note
value: The 1-day window is derivable in the THREDDS time axis but
not emitted as an explicit seconds value.
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 encodes a temporal-resolution code but not a machine
seconds-per-step window.
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: The numeric aggregation window of one run is instance-layer
detail outside the conceptual EV/DDI-CDI layer.
description: Redundant with `temporal_resolution` but explicit for machine use;
e.g. 86400 for daily, 3600 for hourly.
title: Aggregation Window (seconds)
examples:
- value: '86400'
description: Daily window (Daymet Tmax).
- value: '31536000'
description: Annual window (satellite PM2.5).
from_schema: https://w3id.org/linkml/microschemas/envar
owner: TemporalReference
domain_of:
- TemporalReference
range: integer
day_boundary_convention:
name: day_boundary_convention
annotations:
tier:
tag: tier
value: core
justification:
tag: justification
value: 'The single most-omitted slot in the environmental-health literature
and a known source of cross-study disagreement: Daymet''s local-midnight
day and PRISM''s 24h-ending-1200-GMT day slice the same thermometer readings
differently, so the "daily Tmax" for the same calendar date can differ between
products and lagged analyses can shift by a whole day. It is also the exposure-side
half of the day-boundary cross-check against the clinical-side `clinical_date_assignment_convention`.'
explanation:
tag: explanation
value: When does "Tuesday" start and end for this dataset — midnight local
time, midnight in London, or noon-to-noon? Different products genuinely
disagree, which changes which hot afternoon lands on which day.
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: No day-boundary slot anywhere in gaiaCatalog or gaia-db.
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 records no day-boundary convention.
amadeus:
tag: amadeus
annotations:
extent:
tag: extent
value: absent
status:
tag: status
value: asserted
where:
tag: where
value: no column
note:
tag: note
value: The NetCDF time axis (days since 1900-01-01) has no calendar
day-edge clarification — pure ambiguity.
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 has no field for where the 24-hour day window starts.
codata:
tag: codata
annotations:
extent:
tag: extent
value: absent
status:
tag: status
value: asserted
where:
tag: where
value: no column
note:
tag: note
value: Day-boundary convention is an EnVar-novel commensurability
slot no standard carries; not merely out-of-layer — genuinely absent.
description: Where the 24-hour day window starts. **Mandatory.** Daymet = `local_midnight`;
PRISM = `24h_ending_1200_GMT`; NARR / ERA5 sub-daily = `utc_midnight`. The single
most-omitted slot in the literature and a known source of cross-study disagreement.
title: Day-Boundary Convention
examples:
- value: local_midnight
description: Daymet convention — day starts at local midnight.
- value: not_applicable
description: Annual PM2.5 aggregate — no day boundary is meaningful.
from_schema: https://w3id.org/linkml/microschemas/envar
see_also:
- https://daymet.ornl.gov/
- https://prism.oregonstate.edu/
- https://psl.noaa.gov/data/gridded/data.narr.html
owner: TemporalReference
domain_of:
- TemporalReference
range: DayBoundaryConventionEnum
required: true
temporal_coverage_start:
name: temporal_coverage_start
annotations:
tier:
tag: tier
value: recommended
justification:
tag: justification
value: 'Distinguishes out-of-coverage from missing: without the product''s
coverage start, a gap before 1980 in a Daymet-derived series looks like
missing data rather than a request outside the product''s lifetime, and
imputation or exclusion decisions go wrong.'
explanation:
tag: explanation
value: The earliest date the source dataset has any data for at all. If you
ask for a date before this, the answer is not "missing" — the dataset simply
never covered that time.
covered_by:
tag: covered_by
annotations:
omop_gaia:
tag: omop_gaia
annotations:
extent:
tag: extent
value: full
status:
tag: status
value: verified
where:
tag: where
value: gaia_catalog meta_dcat_*.json dct:temporal; gaia_db variable_source.start_date
evidence:
tag: evidence
value: EnVar/examples/heat/COMPARISON.md §H (dataset time-span ✅)
note:
tag: note
value: GAIA records the product time-span via DCAT dct:temporal and
variable_source.start_date/end_date.
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 product coverage-start.
amadeus:
tag: amadeus
annotations:
extent:
tag: extent
value: full
status:
tag: status
value: verified
where:
tag: where
value: thredds_dataset.xml TimeSpan (1979 -> present)
evidence:
tag: evidence
value: EnVar/examples/heat/COMPARISON.md §H (dataset time-span ✅)
note:
tag: note
value: The THREDDS dataset.xml TimeSpan gives the product's full temporal
coverage.
cher:
tag: cher
annotations:
extent:
tag: extent
value: full
status:
tag: status
value: asserted
where:
tag: where
value: table_name temporal-extent YYYYMMDDYYYYMMDD (start); inheritable
temporal_extent
note:
tag: note
value: C-HER encodes the coverage start in the concatenated temporal-extent
code (§2.4) and as an inheritable lineage field.
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: A product's coverage start is instance/discovery-layer detail
outside the conceptual EV/DDI-CDI layer.
description: Start of the source product's full temporal coverage.
title: Temporal Coverage Start
examples:
- value: '1980-01-01'
description: Daymet V4 coverage starts in 1980.
from_schema: https://w3id.org/linkml/microschemas/envar
owner: TemporalReference
domain_of:
- TemporalReference
range: date
temporal_coverage_end:
name: temporal_coverage_end
annotations:
tier:
tag: tier
value: recommended
justification:
tag: justification
value: Distinguishes out-of-coverage from missing at the recent end, and —
because live products keep growing — pins down which vintage of the product
this run saw, so a later re-run against a longer series can be recognised
as a different extract.
explanation:
tag: explanation
value: The latest date the source dataset covers; some products are still
being extended. Asking for a date after this returns nothing — not because
data is missing, but because it does not exist yet.
covered_by:
tag: covered_by
annotations:
omop_gaia:
tag: omop_gaia
annotations:
extent:
tag: extent
value: full
status:
tag: status
value: verified
where:
tag: where
value: gaia_catalog meta_dcat_*.json dct:temporal; gaia_db variable_source.end_date
evidence:
tag: evidence
value: EnVar/examples/heat/COMPARISON.md §H (dataset time-span ✅)
note:
tag: note
value: GAIA records the product coverage-end via DCAT dct:temporal
and variable_source.end_date.
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 product coverage-end.
amadeus:
tag: amadeus
annotations:
extent:
tag: extent
value: full
status:
tag: status
value: verified
where:
tag: where
value: thredds_dataset.xml TimeSpan (-> present)
evidence:
tag: evidence
value: EnVar/examples/heat/COMPARISON.md §H (dataset time-span ✅)
note:
tag: note
value: The THREDDS TimeSpan closes the product's coverage window (open
to present for live products).
cher:
tag: cher
annotations:
extent:
tag: extent
value: full
status:
tag: status
value: asserted
where:
tag: where
value: table_name temporal-extent YYYYMMDDYYYYMMDD (end); inheritable
temporal_extent
note:
tag: note
value: C-HER encodes the coverage end in the concatenated temporal-extent
code (§2.4) and as an inheritable lineage field.
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: A product's coverage end is instance/discovery-layer detail
outside the conceptual EV/DDI-CDI layer.
description: End of the source product's coverage. May be an "ongoing" sentinel
for live products.
title: Temporal Coverage End
examples:
- value: '2024-12-31'
description: End of Daymet V4 coverage at extraction time.
from_schema: https://w3id.org/linkml/microschemas/envar
owner: TemporalReference
domain_of:
- TemporalReference
range: date
extraction_window_start:
name: extraction_window_start
annotations:
tier:
tag: tier
value: recommended
justification:
tag: justification
value: Records the dates this run actually pulled, as opposed to what the
product offers; without it a reproducer cannot re-request the same slice,
and a lag analysis cannot verify that the pre-event days (e.g. the day before
the index date) were actually in the extract.
explanation:
tag: explanation
value: Of everything the dataset covers, this is the first date this particular
job actually downloaded — like noting which pages of a big book you photocopied.
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-native output collapses per-day to the variable's window-wide
validity range; the run's actual extraction window start is not
recorded.
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 writes per-day rows but records no explicit run extraction-window-start
field.
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 records the product TimeSpan but not the start date
this particular run pulled.
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 temporal_extent is the dataset's coverage span, not
the window an individual extraction job pulled.
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: The window a specific run pulled is instance-layer provenance
outside the conceptual EV/DDI-CDI layer.
description: Actual start date the run extracted.
title: Extraction Window Start
examples:
- value: '2022-07-18'
description: Day before the Phoenix index date, for lag analysis.
from_schema: https://w3id.org/linkml/microschemas/envar
owner: TemporalReference
domain_of:
- TemporalReference
range: date
extraction_window_end:
name: extraction_window_end
annotations:
tier:
tag: tier
value: recommended
justification:
tag: justification
value: The closing bracket of the slice this run actually pulled; without
it a reproducer cannot re-request the same window, and a lag analysis cannot
verify that the post-event days it needs were actually extracted rather
than silently truncated.
explanation:
tag: explanation
value: Of everything the dataset covers, this is the last date this particular
job actually downloaded — the end of the photocopied page range.
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 collapses to the variable's window; no per-run extraction-window-end
is recorded.
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 records no explicit run extraction-window-end field.
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 records the product TimeSpan but not the end date this
particular run pulled.
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 temporal_extent is the dataset span, not the window
a specific extraction job pulled.
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: The window a specific run pulled is instance-layer provenance
outside the conceptual EV/DDI-CDI layer.
description: Actual end date the run extracted.
title: Extraction Window End
examples:
- value: '2022-07-20'
description: Day after the Phoenix index date, for lag analysis.
from_schema: https://w3id.org/linkml/microschemas/envar
owner: TemporalReference
domain_of:
- TemporalReference
range: date
calendar:
name: calendar
annotations:
tier:
tag: tier
value: recommended
justification:
tag: justification
value: Some climate-model output uses non-standard calendars (365-day noleap,
360-day); joining such a series to real-world Gregorian clinical dates without
converting shifts daily values progressively through the year — a silent,
cumulative misalignment.
explanation:
tag: explanation
value: Most data uses the ordinary calendar, but some climate models simplify
— for example pretending every year has exactly 365 days (no leap days)
or twelve 30-day months. If you line those dates up against a real calendar
without converting, they slowly drift out of sync.
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: No calendar/time-origin slot in gaia.
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 calendar field.
amadeus:
tag: amadeus
annotations:
extent:
tag: extent
value: full
status:
tag: status
value: verified
where:
tag: where
value: thredds_dataset.xml day axis (days since 1900-01-01, calendar
= gregorian)
evidence:
tag: evidence
value: EnVar/examples/heat/COMPARISON.md §H (time-origin / calendar
✅)
note:
tag: note
value: The THREDDS day axis declares the calendar (gregorian) and
time origin explicitly.
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 has no calendar-of-time-axis field.
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: The calendar of a specific product's time axis is instance-layer
representation detail outside the conceptual EV/DDI-CDI layer.
description: Calendar of the time axis. `gregorian` is the default; only matters
when a source uses a non-standard calendar. Covers both the CF `calendar` values
and product-specific conventions that CF has no term for — e.g. Daymet's fixed
365-day year (`daymet_365`), which keeps Feb 29 but drops Dec 31 in leap years
and is therefore neither `gregorian` nor `noleap`.
title: Calendar (CF)
examples:
- value: gregorian
description: The default; used by ACAG PM2.5.
- value: daymet_365
description: Daymet — fixed 365-day year; keeps Feb 29, drops Dec 31 in leap
years.
from_schema: https://w3id.org/linkml/microschemas/envar
see_also:
- https://cfconventions.org/cf-conventions/cf-conventions.html#calendar
owner: TemporalReference
domain_of:
- TemporalReference
range: CalendarEnum
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 | envar:TemporalReference |
| native | envar:TemporalReference |