Tier 1 Simple Dataset Example#
This recipe demonstrates how to annotate a simple, single-table dataset using Tier 1 Essential Properties.
With minimal effort and zero steep learning curve, you can make any basic dataset self-documenting, standards-compliant, and AI-ready out of the box.
See the companion schema files:
../../../examples/simple-dataset.jsonand../../../examples/simple-dataset.data.json
How-to: Annotate a Simple Dataset
Root Metadata: Add
title,description,fair:license/fair:licenseRef, andfair:contributorsat the schema root.Define Unit Type: Use
fair:unitTypeto specify what entity 1 row represents (e.g.,"Weather Station Observation").Annotate Fields: Add
fair:measurementUnit/Reffor physical units,fair:conceptReffor human meaning, andoneOf+const+titlefor self-documenting status codes.Validation: Validate using
fair-data-schema validate examples/simple-dataset.json examples/simple-dataset.data.json.
The Story: Weather Station Observations#
In this example, we have a flat table (array of objects) containing weather station observations: station_id, temperature, and operational status.
Without metadata, a machine or developer looking at raw JSON wouldn’t know:
What entity 1 row represents.
What unit
temperatureis in (Celsius, Fahrenheit, Kelvin?).What numeric status codes like
1,2, or3mean.
By adding Tier 1 fair: annotations directly into a standard JSON Schema, we answer all of these questions effortlessly.
1. Dataset-Level Metadata#
At the root of the schema, we define the dataset title, license, contributors, and the row entity (fair:unitType):
{
"$schema": "https://highvaluedata.net/fair-data-schema/dev",
"$id": "https://highvaluedata.net/fair-data-schema/dev/examples/simple-dataset",
"title": "Weather Station Observations (Tier 1 Simple Dataset)",
"description": "A simple flat dataset containing daily temperature and status readings across weather stations.",
"fair:resourceType": "dataset",
"fair:license": "CC-BY-4.0",
"fair:licenseRef": "https://spdx.org/licenses/CC-BY-4.0",
"fair:unitType": "Weather Station Observation",
"fair:contributors": [
{
"name": "Global Meteorological Network",
"role": "Producer",
"type": "Organization",
"contributorRef": "https://example.org/orgs/gmn"
}
]
}
Key Takeaways#
fair:unitType: Explains in plain English what 1 row in the table represents ("Weather Station Observation").fair:license&fair:licenseRef: Follows the Plain String vs. Machine Web Link (Ref) Rule to document legal reuse rights.
2. Field-Level Metadata#
Inside the property definitions, we annotate the fields with units, concepts, and self-documenting coded values:
"properties": {
"station_id": {
"title": "Station Identifier",
"type": "string",
"fair:conceptRef": "https://example.org/concepts/station-id"
},
"temperature": {
"title": "Air Temperature",
"type": "number",
"fair:measurementUnit": "Degree Celsius (°C)",
"fair:measurementUnitRef": "http://qudt.org/vocab/unit/DEG_C"
},
"status": {
"title": "Operational Status",
"type": "integer",
"fair:classification": "Station Status Codes",
"oneOf": [
{ "const": 1, "title": "Active" },
{ "const": 2, "title": "Maintenance" },
{ "const": 3, "title": "Offline" }
]
}
}
Key Takeaways#
fair:measurementUnit&Ref: Disambiguates numbers (21.5) as Degree Celsius (°C) with a QUDT URI (http://qudt.org/vocab/unit/DEG_C).Self-Documenting Coded Values (
oneOf+const+title): Converts raw status integers (1,2,3) into human-readable titles ("Active","Maintenance","Offline").
3. Full Schema & Instance#
{
"$schema": "https://highvaluedata.net/fair-data-schema/dev",
"$id": "https://highvaluedata.net/fair-data-schema/dev/examples/simple-dataset",
"title": "Weather Station Observations (Tier 1 Simple Dataset)",
"description": "A simple flat dataset containing daily temperature and status readings across weather stations. Demonstrates Tier 1 Essential FAIR annotations on a single dataset.",
"fair:resourceType": "dataset",
"fair:license": "CC-BY-4.0",
"fair:licenseRef": "https://spdx.org/licenses/CC-BY-4.0",
"fair:unitType": "Weather Station Observation",
"fair:contributors": [
{
"name": "Global Meteorological Network",
"role": "Producer",
"type": "Organization",
"contributorRef": "https://example.org/orgs/gmn"
}
],
"type": "array",
"items": {
"type": "object",
"required": ["station_id", "temperature", "status"],
"properties": {
"station_id": {
"title": "Station Identifier",
"type": "string",
"fair:conceptRef": "https://example.org/concepts/station-id"
},
"temperature": {
"title": "Air Temperature",
"type": "number",
"fair:measurementUnit": "Degree Celsius (°C)",
"fair:measurementUnitRef": "http://qudt.org/vocab/unit/DEG_C"
},
"status": {
"title": "Operational Status",
"type": "integer",
"fair:classification": "Station Status Codes",
"oneOf": [
{ "const": 1, "title": "Active" },
{ "const": 2, "title": "Maintenance" },
{ "const": 3, "title": "Offline" }
]
}
}
}
}
Example Data Instance#
[
{
"station_id": "ST-101",
"temperature": 21.5,
"status": 1
},
{
"station_id": "ST-102",
"temperature": 18.2,
"status": 2
},
{
"station_id": "ST-103",
"temperature": 15.0,
"status": 1
}
]
Next Steps: Advanced & Hierarchical Datasets (Tier 2)#
For multi-table datasets (like nested Census files with households and persons) or deep variable lineage cascades, see the advanced recipe: