Refactor schema slots and classes for improved semantic clarity and consistency

- Migrated `temperature_tolerance` to `allows_or_allowed` with `TemperatureDeviation` class for structured temperature tolerance representation.
- Replaced `temporal_coverage` with `has_or_had_content` to enhance temporal modeling using the `Content` class.
- Updated `FindingAid`, `LegalResponsibilityCollection`, and `EnvironmentalZone` schemas to reflect new slot structures.
- Archived obsolete slots: `temperature_tolerance`, `temporal_coverage`, `typical_http_methods`, and `typical_response_formats`.
- Introduced `has_or_had_technological_infrastructure` slot to replace `technology_stack`, providing a structured approach to modeling technological components.
- Enhanced documentation and examples across affected schemas to ensure clarity on new structures and their usage.
This commit is contained in:
kempersc 2026-01-16 20:09:58 +01:00
parent cbdf2c2b2b
commit 196f8a1023
23 changed files with 553 additions and 120 deletions

View file

@ -1,12 +1,12 @@
{
"generated": "2026-01-16T18:42:29.718Z",
"generated": "2026-01-16T18:44:38.338Z",
"schemaRoot": "/schemas/20251121/linkml",
"totalFiles": 3004,
"totalFiles": 3002,
"categoryCounts": {
"main": 4,
"class": 823,
"enum": 153,
"slot": 2020,
"slot": 2018,
"module": 4
},
"categories": [
@ -14947,16 +14947,6 @@
"path": "modules/slots/track_id.yaml",
"category": "slot"
},
{
"name": "typical_http_methods",
"path": "modules/slots/typical_http_methods.yaml",
"category": "slot"
},
{
"name": "typical_response_formats",
"path": "modules/slots/typical_response_formats.yaml",
"category": "slot"
},
{
"name": "unit_code",
"path": "modules/slots/unit_code.yaml",

View file

@ -126,7 +126,7 @@ classes:
- has_or_had_sub_collection
- subject_area
- template_specificity
- temporal_coverage
- has_or_had_content # was: temporal_coverage - migrated per Rule 53/56 (2026-01-16)
- temporal_extent # was: valid_from + valid_to - migrated per Rule 53
slot_usage:
collection_id:
@ -185,13 +185,22 @@ classes:
description: 125 artworks
- value: 342
description: 342 manuscripts
temporal_coverage:
range: TimeSpan
has_or_had_content:
# was: temporal_coverage - migrated per Rule 53/56 (2026-01-16)
range: Content
multivalued: true
inlined_as_list: true
description: |
Content scope of the collection including temporal, spatial, and topical coverage.
MIGRATED from temporal_coverage per slot_fixes.yaml (Rule 53/56, 2026-01-16).
Uses Content class which includes temporal_extent for time periods.
examples:
- value:
start_date: '1602-01-01'
end_date: '1799-12-31'
description: VOC records temporal coverage
has_or_had_label: "VOC Trade Records"
temporal_extent:
begin_of_the_begin: '1602-01-01'
end_of_the_end: '1799-12-31'
description: VOC records content with temporal coverage
subject_area:
range: string
multivalued: true
@ -354,9 +363,11 @@ classes:
collection_type_ref: https://nde.nl/ontology/hc/collection-type/fonds
record_set_type: rico:Fonds
extent: 1,250 linear meters
temporal_coverage:
start_date: '1602-01-01'
end_date: '1799-12-31'
has_or_had_content: # was: temporal_coverage - migrated per Rule 53/56 (2026-01-16)
- has_or_had_label: "VOC Administrative Records"
temporal_extent:
begin_of_the_begin: '1602-01-01'
end_of_the_end: '1799-12-31'
subject_area:
- Colonial trade
- Maritime history

View file

@ -16,7 +16,8 @@ imports:
- ../slots/collection_description
- ../slots/collection_type
- ../slots/collection_scope
- ../slots/temporal_coverage
- ../slots/has_or_had_content # was: temporal_coverage - migrated per Rule 53/56 (2026-01-16)
- ./Content
- ../slots/extent
- ../slots/managing_unit
- ../slots/temporal_extent # was: valid_from + valid_to - migrated per Rule 53
@ -95,7 +96,7 @@ classes:
- refers_to_custodian
- specificity_annotation
- template_specificity
- temporal_coverage
- has_or_had_content # was: temporal_coverage - migrated per Rule 53/56 (2026-01-16)
- temporal_extent # was: valid_from + valid_to - migrated per Rule 53
- is_or_was_derived_from # was: was_derived_from - migrated per Rule 53
- is_or_was_generated_by # was: was_generated_by - migrated per Rule 53
@ -129,9 +130,22 @@ classes:
collection_scope:
range: string
required: false
temporal_coverage:
range: TimeSpan
has_or_had_content:
# was: temporal_coverage - migrated per Rule 53/56 (2026-01-16)
range: Content
multivalued: true
inlined_as_list: true
required: false
description: |
Content scope including temporal, spatial, and topical coverage.
MIGRATED from temporal_coverage per slot_fixes.yaml (Rule 53/56, 2026-01-16).
examples:
- value:
has_or_had_label: "Colonial Archives"
temporal_extent:
begin_of_the_begin: '1602-01-01'
end_of_the_end: '1800-12-31'
description: Colonial period content coverage
extent:
range: string
required: false

View file

@ -56,9 +56,11 @@ classes:
equals_string: SRU
specification_url:
ifabsent: uri(http://www.loc.gov/standards/sru/)
typical_response_formats:
has_or_had_format: # was: typical_response_formats - migrated per Rule 53 (2026-01-16)
description: Typical response format for SRU endpoints
ifabsent: string(application/xml)
typical_http_methods:
has_or_had_method: # was: typical_http_methods - migrated per Rule 53 (2026-01-16)
description: Typical HTTP method for SRU endpoints
ifabsent: string(GET)
comments:
- Library-focused search protocol - successor to Z39.50
@ -99,9 +101,11 @@ classes:
equals_string: OpenSearch
specification_url:
ifabsent: uri(https://opensearch.org/)
typical_response_formats:
has_or_had_format: # was: typical_response_formats - migrated per Rule 53 (2026-01-16)
description: Typical response formats for OpenSearch endpoints
equals_expression: '["application/opensearchdescription+xml", "application/atom+xml", "application/rss+xml"]'
typical_http_methods:
has_or_had_method: # was: typical_http_methods - migrated per Rule 53 (2026-01-16)
description: Typical HTTP method for OpenSearch endpoints
ifabsent: string(GET)
comments:
- Federated search standard - browser integration support
@ -148,9 +152,11 @@ classes:
equals_string: IIIF Image API
specification_url:
ifabsent: uri(https://iiif.io/api/image/)
typical_response_formats:
has_or_had_format: # was: typical_response_formats - migrated per Rule 53 (2026-01-16)
description: Typical response formats for IIIF Image API endpoints
equals_expression: '["image/jpeg", "image/png", "image/tiff", "image/webp"]'
typical_http_methods:
has_or_had_method: # was: typical_http_methods - migrated per Rule 53 (2026-01-16)
description: Typical HTTP method for IIIF Image API endpoints
ifabsent: string(GET)
comments:
- International Image Interoperability Framework - Image API
@ -196,9 +202,11 @@ classes:
equals_string: IIIF Presentation API
specification_url:
ifabsent: uri(https://iiif.io/api/presentation/)
typical_response_formats:
has_or_had_format: # was: typical_response_formats - migrated per Rule 53 (2026-01-16)
description: Typical response format for IIIF Presentation API endpoints
ifabsent: string(application/ld+json)
typical_http_methods:
has_or_had_method: # was: typical_http_methods - migrated per Rule 53 (2026-01-16)
description: Typical HTTP method for IIIF Presentation API endpoints
ifabsent: string(GET)
comments:
- International Image Interoperability Framework - Presentation API
@ -243,9 +251,11 @@ classes:
ifabsent: string(1.1)
specification_url:
ifabsent: uri(https://www.w3.org/TR/sparql11-protocol/)
typical_response_formats:
has_or_had_format: # was: typical_response_formats - migrated per Rule 53 (2026-01-16)
description: Typical response formats for SPARQL endpoints
equals_expression: '["application/sparql-results+json", "application/sparql-results+xml", "text/turtle"]'
typical_http_methods:
has_or_had_method: # was: typical_http_methods - migrated per Rule 53 (2026-01-16)
description: Typical HTTP methods for SPARQL endpoints
equals_expression: '["GET", "POST"]'
comments:
- W3C standard for querying RDF graphs
@ -286,9 +296,11 @@ classes:
equals_string: GraphQL
specification_url:
ifabsent: uri(https://graphql.org/)
typical_response_formats:
has_or_had_format: # was: typical_response_formats - migrated per Rule 53 (2026-01-16)
description: Typical response format for GraphQL endpoints
ifabsent: string(application/json)
typical_http_methods:
has_or_had_method: # was: typical_http_methods - migrated per Rule 53 (2026-01-16)
description: Typical HTTP method for GraphQL endpoints
ifabsent: string(POST)
comments:
- Modern API query language - growing adoption in GLAM
@ -328,9 +340,11 @@ classes:
equals_string: Atom
specification_url:
ifabsent: uri(https://www.rfc-editor.org/rfc/rfc4287)
typical_response_formats:
has_or_had_format: # was: typical_response_formats - migrated per Rule 53 (2026-01-16)
description: Typical response format for Atom feed endpoints
ifabsent: string(application/atom+xml)
typical_http_methods:
has_or_had_method: # was: typical_http_methods - migrated per Rule 53 (2026-01-16)
description: Typical HTTP method for Atom feed endpoints
ifabsent: string(GET)
comments:
- IETF standard for content syndication
@ -368,9 +382,11 @@ classes:
slot_usage:
protocol_name:
equals_string: RSS
typical_response_formats:
has_or_had_format: # was: typical_response_formats - migrated per Rule 53 (2026-01-16)
description: Typical response format for RSS feed endpoints
ifabsent: string(application/rss+xml)
typical_http_methods:
has_or_had_method: # was: typical_http_methods - migrated per Rule 53 (2026-01-16)
description: Typical HTTP method for RSS feed endpoints
ifabsent: string(GET)
comments:
- Legacy syndication format - still widely supported

View file

@ -27,7 +27,8 @@ imports:
# REMOVED 2026-01-14: valid_from + valid_to - migrated to temporal_extent (Rule 53)
- ../slots/id
- ../slots/description
- ../slots/temporal_coverage
- ../slots/has_or_had_content # was: temporal_coverage - migrated per Rule 53/56 (2026-01-16)
- ./Content
- ../slots/has_or_had_access_restriction
- ../slots/has_or_had_web_claim
- ../slots/language

View file

@ -2827,11 +2827,9 @@ fixes:
- original_slot_id: https://nde.nl/ontology/hc/slot/typical_response_formats
processed:
status: true
timestamp: '2026-01-15T19:45:00Z'
session: session-2026-01-15-slot-migrations
notes: 'FULLY MIGRATED: DataServiceEndpointType.yaml - typical_response_formats REMOVED.
Using has_or_had_format slot (keeping range: string for simplicity). Inline attribute
removed, slot_usage added. Slot archived to archive/typical_response_formats_archived_20260115.yaml.'
timestamp: '2026-01-16T14:00:00Z'
session: session-2026-01-16-slot-migrations
notes: 'FULLY MIGRATED: DataServiceEndpointType.yaml and DataServiceEndpointTypes.yaml (8 classes: SRUEndpoint, OpenSearch, IIIFImageAPI, IIIFPresentationAPI, SPARQLEndpoint, GraphQLEndpoint, AtomFeed, RSSFeed) - typical_response_formats REMOVED. Using has_or_had_format slot (keeping range: string for simplicity). Slot archived to archive/typical_response_formats_archived_20260116.yaml.'
revision:
- label: has_or_had_format
type: slot
@ -2867,11 +2865,9 @@ fixes:
- original_slot_id: https://nde.nl/ontology/hc/slot/typical_http_methods
processed:
status: true
timestamp: '2026-01-15T19:45:00Z'
session: session-2026-01-15-slot-migrations
notes: 'FULLY MIGRATED: DataServiceEndpointType.yaml - typical_http_methods REMOVED.
Using has_or_had_method slot (keeping range: string for simplicity). Inline attribute
removed, slot_usage added. Slot archived to archive/typical_http_methods_archived_20260115.yaml.'
timestamp: '2026-01-16T14:00:00Z'
session: session-2026-01-16-slot-migrations
notes: 'FULLY MIGRATED: DataServiceEndpointType.yaml and DataServiceEndpointTypes.yaml (8 classes: SRUEndpoint, OpenSearch, IIIFImageAPI, IIIFPresentationAPI, SPARQLEndpoint, GraphQLEndpoint, AtomFeed, RSSFeed) - typical_http_methods REMOVED. Using has_or_had_method slot (keeping range: string for simplicity). Slot archived to archive/typical_http_methods_archived_20260116.yaml.'
revision:
- label: has_or_had_method
type: slot

View file

@ -1,12 +1,12 @@
{
"generated": "2026-01-16T18:43:50.877Z",
"generated": "2026-01-16T19:09:58.672Z",
"schemaRoot": "/schemas/20251121/linkml",
"totalFiles": 3004,
"totalFiles": 3002,
"categoryCounts": {
"main": 4,
"class": 823,
"enum": 153,
"slot": 2020,
"slot": 2018,
"module": 4
},
"categories": [
@ -14947,16 +14947,6 @@
"path": "modules/slots/track_id.yaml",
"category": "slot"
},
{
"name": "typical_http_methods",
"path": "modules/slots/typical_http_methods.yaml",
"category": "slot"
},
{
"name": "typical_response_formats",
"path": "modules/slots/typical_response_formats.yaml",
"category": "slot"
},
{
"name": "unit_code",
"path": "modules/slots/unit_code.yaml",

View file

@ -363,9 +363,11 @@ classes:
collection_type_ref: https://nde.nl/ontology/hc/collection-type/fonds
record_set_type: rico:Fonds
extent: 1,250 linear meters
temporal_coverage:
start_date: '1602-01-01'
end_date: '1799-12-31'
has_or_had_content: # was: temporal_coverage - migrated per Rule 53/56 (2026-01-16)
- has_or_had_label: "VOC Administrative Records"
temporal_extent:
begin_of_the_begin: '1602-01-01'
end_of_the_end: '1799-12-31'
subject_area:
- Colonial trade
- Maritime history

View file

@ -16,7 +16,8 @@ imports:
- ../slots/collection_description
- ../slots/collection_type
- ../slots/collection_scope
- ../slots/temporal_coverage
- ../slots/has_or_had_content # was: temporal_coverage - migrated per Rule 53/56 (2026-01-16)
- ./Content
- ../slots/extent
- ../slots/managing_unit
- ../slots/temporal_extent # was: valid_from + valid_to - migrated per Rule 53
@ -95,7 +96,7 @@ classes:
- refers_to_custodian
- specificity_annotation
- template_specificity
- temporal_coverage
- has_or_had_content # was: temporal_coverage - migrated per Rule 53/56 (2026-01-16)
- temporal_extent # was: valid_from + valid_to - migrated per Rule 53
- is_or_was_derived_from # was: was_derived_from - migrated per Rule 53
- is_or_was_generated_by # was: was_generated_by - migrated per Rule 53
@ -129,9 +130,22 @@ classes:
collection_scope:
range: string
required: false
temporal_coverage:
range: TimeSpan
has_or_had_content:
# was: temporal_coverage - migrated per Rule 53/56 (2026-01-16)
range: Content
multivalued: true
inlined_as_list: true
required: false
description: |
Content scope including temporal, spatial, and topical coverage.
MIGRATED from temporal_coverage per slot_fixes.yaml (Rule 53/56, 2026-01-16).
examples:
- value:
has_or_had_label: "Colonial Archives"
temporal_extent:
begin_of_the_begin: '1602-01-01'
end_of_the_end: '1800-12-31'
description: Colonial period content coverage
extent:
range: string
required: false

View file

@ -291,7 +291,7 @@ classes:
\nThis slot links an INSTANCE (DataServiceEndpoint) to its TYPE classification\n(DataServiceEndpointType), following\
\ the same architectural pattern as\nCustodian/CustodianType.\n\n```\nDataServiceEndpoint (INSTANCE) DataServiceEndpointType\
\ (TYPE)\n├── endpoint_url ├── protocol_name\n├── status ├── protocol_version\n\
├── is_or_was_required ├── specification_url\n└── endpoint_type ────────────────►└── typical_response_formats\n\
├── is_or_was_required ├── specification_url\n└── endpoint_type ────────────────►└── has_or_had_format\n\
```\n\n**Why Both `protocol` and `endpoint_type`?**\n\n- `protocol` (enum): Simple string classification for quick\
\ filtering\n- `endpoint_type` (class reference): Rich type metadata with SKOS hierarchy,\n specification URLs,\
\ and semantic relationships\n\n**Example:**\n\n```yaml\ndata_service_endpoint:\n endpoint_id: \"https://nde.nl/hc/endpoint/na-oai-pmh\"\

View file

@ -18,7 +18,9 @@ imports:
- ./StorageCondition
- ./EnvironmentalZoneType
- ./EnvironmentalZoneTypes
- ../slots/temperature_tolerance
# REMOVED 2026-01-16: temperature_tolerance - migrated to allows_or_allowed with TemperatureDeviation class (Rule 53/56)
- ../slots/allows_or_allowed
- ./TemperatureDeviation
- ../slots/humidity_tolerance
- ../slots/contains_or_contained_contains_unit
- ../slots/environmental_requirement
@ -102,7 +104,9 @@ classes:
slots:
- contains_or_contained_contains_unit
- environmental_requirement
# REMOVED 2026-01-16: humidity_tolerance - pending migration to allows_or_allowed with HumidityDeviation
- humidity_tolerance
- allows_or_allowed # was: temperature_tolerance - migrated per Rule 53/56 (2026-01-16)
- max_annual_light_exposure
- max_light_lux
- monitoring_platform
@ -112,7 +116,7 @@ classes:
- specificity_annotation
# REMOVED 2026-01-15: target_relative_humidity, target_temperature_celsius - migrated to has_or_had_setpoint
- has_or_had_setpoint
- temperature_tolerance
# REMOVED 2026-01-16: temperature_tolerance - migrated to allows_or_allowed with TemperatureDeviation
- template_specificity
- temporal_extent # was: valid_from + valid_to - migrated per Rule 53
- has_or_had_description
@ -184,11 +188,30 @@ classes:
setpoint_tolerance: 5.0
setpoint_unit: PERCENT
description: Standard archive zone setpoints
temperature_tolerance:
range: float
# REMOVED 2026-01-16: temperature_tolerance - migrated to allows_or_allowed with TemperatureDeviation
allows_or_allowed:
range: TemperatureDeviation
multivalued: true
inlined: true
inlined_as_list: true
description: |
Allowed temperature deviation/tolerance for this zone.
MIGRATED 2026-01-16: Replaces temperature_tolerance (float).
Uses TemperatureDeviation class for structured tolerance data with unit and ISO standard reference.
examples:
- value: 2.0
- value: 3.0
- value:
- deviation_value: 2.0
deviation_direction: PLUS_MINUS
has_or_had_measurement_unit:
unit_type: DEGREE_CELSIUS
unit_symbol: "°C"
iso_standard_reference: "ISO 11799:2015"
description: Standard archive tolerance (±2°C)
- value:
- deviation_value: 3.0
deviation_direction: PLUS_MINUS
iso_standard_reference: "ISO 18911:2010"
description: Cold storage tolerance (±3°C)
# REMOVED 2026-01-15: target_relative_humidity - migrated to has_or_had_setpoint above
humidity_tolerance:
range: float

View file

@ -27,7 +27,8 @@ imports:
# REMOVED 2026-01-14: valid_from + valid_to - migrated to temporal_extent (Rule 53)
- ../slots/id
- ../slots/description
- ../slots/temporal_coverage
- ../slots/has_or_had_content # was: temporal_coverage - migrated per Rule 53/56 (2026-01-16)
- ./Content
- ../slots/has_or_had_access_restriction
- ../slots/has_or_had_web_claim
- ../slots/language

View file

@ -185,9 +185,11 @@ classes:
collection_type:
- archival_records
collection_scope: Provincial government records of Noord-Holland
temporal_coverage:
begin_of_the_begin: '1289-01-01'
end_of_the_end: null
has_or_had_content: # was: temporal_coverage - migrated per Rule 53/56 (2026-01-16)
- has_or_had_label: "Provincial Government Records"
temporal_extent:
begin_of_the_begin: '1289-01-01'
end_of_the_end: null
extent: 45 kilometers of shelving, approximately 2.5 million documents
responsible_legal_entity: https://nde.nl/ontology/hc/legal/nha-organization
legal_responsibility_basis: 'Archiefwet 1995 (Dutch Archives Act), Article 41: "De provincie draagt zorg voor de
@ -208,9 +210,11 @@ classes:
collection_type:
- museum_objects
collection_scope: Dutch art and history from the Middle Ages to present
temporal_coverage:
begin_of_the_begin: '1200-01-01'
end_of_the_end: null
has_or_had_content: # was: temporal_coverage - migrated per Rule 53/56 (2026-01-16)
- has_or_had_label: "National Art Collection"
temporal_extent:
begin_of_the_begin: '1200-01-01'
end_of_the_end: null
extent: Approximately 1 million objects
responsible_legal_entity: https://nde.nl/ontology/hc/legal/rijksmuseum-foundation
legal_responsibility_basis: 'Erfgoedwet (Heritage Act) 2016, Article 2.1 + Stichting Rijksmuseum statute (1885): "Het

View file

@ -20,7 +20,9 @@ imports:
- ../slots/policy_id
- ../slots/policy_name
- ../slots/note
- ../slots/temperature_tolerance
# REMOVED 2026-01-16: temperature_tolerance - migrated to allows_or_allowed with TemperatureDeviation class (Rule 53/56)
- ../slots/allows_or_allowed
- ./TemperatureDeviation
- ../slots/humidity_tolerance
- ../slots/has_air_changes_per_hour
- ../slots/fire_suppression_type
@ -92,6 +94,7 @@ classes:
- humidity_min
- humidity_target
- humidity_tolerance
- allows_or_allowed # was: temperature_tolerance - migrated per Rule 53/56 (2026-01-16)
- light_max_lux
- note
- particulate_max
@ -108,7 +111,7 @@ classes:
- has_or_had_security_level # was: storage_security_level - migrated per Rule 53 (2025-01-15)
# REMOVED 2026-01-15: temperature_max, temperature_min, temperature_target - migrated to has_or_had_setpoint
- has_or_had_setpoint
- temperature_tolerance
# REMOVED 2026-01-16: temperature_tolerance - migrated to allows_or_allowed with TemperatureDeviation
- template_specificity
# REMOVED 2026-01-14: uv_filtered_required - migrated to is_or_was_required with RequirementStatus
# MIGRATED 2026-01-16: is_or_was_required → has_or_had_requirement_status
@ -153,13 +156,25 @@ classes:
setpoint_unit: DEGREE_CELSIUS
iso_standard_reference: "ISO 11799:2015"
description: Archive temperature setpoint
temperature_tolerance:
range: float
unit:
ucum_code: Cel
# REMOVED 2026-01-16: temperature_tolerance - migrated to allows_or_allowed with TemperatureDeviation
allows_or_allowed:
range: TemperatureDeviation
multivalued: true
inlined: true
inlined_as_list: true
description: |
Allowed temperature deviation/tolerance for this policy.
MIGRATED 2026-01-16: Replaces temperature_tolerance (float).
Uses TemperatureDeviation class for structured tolerance data.
examples:
- value: 2.0
description: ±2°C tolerance
- value:
- deviation_value: 2.0
deviation_direction: PLUS_MINUS
has_or_had_measurement_unit:
unit_type: DEGREE_CELSIUS
unit_symbol: "°C"
iso_standard_reference: "ISO 11799:2015"
description: ±2°C tolerance per ISO 11799
humidity_target:
range: float
minimum_value: 0.0

View file

@ -0,0 +1,262 @@
# TemperatureDeviation - Structured temperature tolerance/deviation specification
# Created per slot_fixes.yaml migration for: temperature_tolerance
# Migration: temperature_tolerance → allows_or_allowed + TemperatureDeviation
# Creation date: 2026-01-16
# Rule 53: No bespoke slots - use generic, reusable patterns
# Rule 56: Semantic consistency over simplicity
id: https://nde.nl/ontology/hc/class/TemperatureDeviation
name: TemperatureDeviation
title: Temperature Deviation Class
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
qudt: http://qudt.org/schema/qudt/
brick: https://brickschema.org/schema/Brick#
schema: http://schema.org/
crm: http://www.cidoc-crm.org/cidoc-crm/
wd: http://www.wikidata.org/entity/
default_prefix: hc
imports:
- linkml:types
- ../slots/has_or_had_quantity
- ../slots/has_or_had_measurement_unit
- ../slots/has_or_had_description
- ../slots/has_or_had_label
- ./Quantity
- ./MeasureUnit
classes:
TemperatureDeviation:
class_uri: qudt:Tolerance
description: >-
Structured specification of allowed temperature deviation/tolerance.
**DEFINITION**:
Represents the acceptable range of temperature variation from a setpoint,
typically expressed as ±X degrees Celsius (e.g., ±2°C).
**ONTOLOGY MAPPING**:
- class_uri: qudt:Tolerance (QUDT tolerance concept)
- close_mapping: brick:Temperature_Deadband (building automation)
**ISO STANDARD REFERENCE VALUES**:
| Standard | Context | Typical Tolerance |
|----------|---------|-------------------|
| ISO 11799:2015 | Archives | ±2°C daily |
| ISO 18911:2010 | Cold/Frozen Storage | ±2°C |
| BS 4971:2017 | UK Sensitive Materials | ±1°C |
| EN 16893:2018 | Museums | ±2°C recommended |
**PRESERVATION CONTEXT**:
Temperature fluctuations cause dimensional changes in hygroscopic materials
(paper, parchment, leather, textiles). Repeated cycling leads to mechanical
fatigue and cumulative damage. Tighter tolerances are critical for mixed
media objects (e.g., oil paintings on canvas).
**WHY NOT JUST FLOAT?**
Simple float fields like `temperature_tolerance: 2.0` lose important context:
- What's the unit? (Celsius? Fahrenheit?)
- Is this plus/minus or just plus?
- What standard is this based on?
- When was this tolerance established?
**MIGRATION NOTE**:
This class replaces the bespoke `temperature_tolerance` slot (float range).
Used via the generic `allows_or_allowed` slot per Rule 53/56.
**EXAMPLE**:
```yaml
EnvironmentalZone:
allows_or_allowed:
- deviation_value: 2.0
deviation_direction: PLUS_MINUS
has_or_had_measurement_unit:
unit_type: DEGREE_CELSIUS
unit_symbol: "°C"
iso_standard_reference: "ISO 11799:2015"
```
exact_mappings:
- qudt:Tolerance
close_mappings:
- brick:Temperature_Deadband
- crm:E54_Dimension
related_mappings:
- wd:Q11466 # temperature
- schema:additionalProperty
slots:
- has_or_had_quantity
- has_or_had_measurement_unit
- has_or_had_description
- has_or_had_label
attributes:
deviation_value:
range: float
required: true
minimum_value: 0.5
maximum_value: 5.0
description: >-
Numeric value of the allowed deviation (e.g., 2.0 for ±2°C).
Typical ranges:
- 0.5-1.0: Precision cold storage, sensitive materials
- 1.0-2.0: Standard archive/museum storage
- 2.0-3.0: General storage, less sensitive materials
examples:
- value: 2.0
description: Standard tolerance for archive storage (ISO 11799)
- value: 1.0
description: Tight tolerance for sensitive materials (BS 4971)
- value: 0.5
description: Very tight tolerance for precision cold storage
deviation_direction:
range: DeviationDirectionEnum
required: false
ifabsent: 'string(PLUS_MINUS)'
description: >-
Direction of deviation.
- PLUS_MINUS: Symmetric tolerance (±2°C) - most common
- PLUS: Only above target allowed (+2°C)
- MINUS: Only below target allowed (-2°C)
examples:
- value: PLUS_MINUS
description: Symmetric tolerance (±2°C)
- value: PLUS
description: Asymmetric - only positive deviation allowed
iso_standard_reference:
range: string
required: false
description: >-
ISO or other standard this tolerance is based on.
examples:
- value: "ISO 11799:2015"
description: Archive storage standard
- value: "ISO 18911:2010"
description: Cold storage standard
- value: "BS 4971:2017"
description: UK conservation standard
slot_usage:
has_or_had_quantity:
range: Quantity
required: false
inlined: true
description: >-
Alternative structured representation using Quantity class.
For complex scenarios requiring full provenance tracking.
examples:
- value:
quantity_value: 2.0
quantity_type: TEMPERATURE_TOLERANCE
has_or_had_measurement_unit:
unit_type: DEGREE_CELSIUS
unit_symbol: "°C"
description: Structured quantity representation
has_or_had_measurement_unit:
range: MeasureUnit
required: false
inlined: true
description: >-
Unit of measurement (typically degree Celsius).
If not specified, defaults to Celsius per ISO standards.
examples:
- value:
unit_type: DEGREE_CELSIUS
unit_symbol: "°C"
description: Celsius unit (default)
has_or_had_description:
range: string
required: false
description: >-
Additional notes about this tolerance setting.
examples:
- value: "Tighter tolerance required for daguerreotype collection"
has_or_had_label:
range: string
required: false
description: >-
Human-readable label for this tolerance specification.
examples:
- value: "Archive Standard Tolerance"
- value: "Cold Storage Precision Tolerance"
comments:
- MIGRATED from temperature_tolerance slot (float) per Rule 53/56
- Used via allows_or_allowed slot for temporal flexibility
- Companion to humidity_tolerance migration (HumidityDeviation class)
- Setpoint class already handles target values - this handles deviations
see_also:
- https://www.iso.org/standard/63810.html # ISO 11799
- https://www.iso.org/standard/46602.html # ISO 18911
- http://qudt.org/schema/qudt/Tolerance
annotations:
specificity_score: "0.65"
specificity_rationale: "Specialized for environmental control in storage facilities"
qudt_unit: "unit:DEG_C"
ucum_code: "Cel"
iso_reference: "ISO 11799:2015, ISO 18911:2010, BS 4971:2017"
preservation_parameter: "true"
examples:
- value:
deviation_value: 2.0
deviation_direction: PLUS_MINUS
has_or_had_measurement_unit:
unit_type: DEGREE_CELSIUS
unit_symbol: "°C"
iso_standard_reference: "ISO 11799:2015"
has_or_had_label: "Standard Archive Tolerance"
has_or_had_description: "Per ISO 11799:2015 for paper-based materials"
description: Standard archive storage tolerance (±2°C)
- value:
deviation_value: 1.0
deviation_direction: PLUS_MINUS
has_or_had_measurement_unit:
unit_type: DEGREE_CELSIUS
unit_symbol: "°C"
iso_standard_reference: "BS 4971:2017"
has_or_had_label: "Sensitive Materials Tolerance"
description: Tight tolerance for sensitive materials (±1°C)
- value:
deviation_value: 0.5
deviation_direction: PLUS_MINUS
iso_standard_reference: "ISO 18911:2010"
has_or_had_description: "Precision cold storage for film negatives"
description: Very tight tolerance for precision cold storage
enums:
DeviationDirectionEnum:
description: >-
Direction of allowed deviation from a setpoint.
permissible_values:
PLUS_MINUS:
description: Symmetric tolerance - deviation allowed in both directions (±)
PLUS:
description: Asymmetric - only positive deviation allowed (+)
MINUS:
description: Asymmetric - only negative deviation allowed (-)

View file

@ -0,0 +1,99 @@
# has_or_had_technological_infrastructure slot
# Generic slot for modeling technical infrastructure components with temporal semantics.
#
# Created: 2026-01-16
# Rule compliance: 39 (RiC-O naming), 53 (no bespoke slots), 55 (broaden ranges), 56 (execute migrations)
# Migration: Replaces technology_stack slot per slot_fixes.yaml
id: https://nde.nl/ontology/hc/slot/has_or_had_technological_infrastructure
name: has_or_had_technological_infrastructure_slot
title: Has Or Had Technological Infrastructure Slot
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
doap: http://usefulinc.com/ns/doap#
spdx: http://spdx.org/rdf/terms#
imports:
- linkml:types
default_prefix: hc
slots:
has_or_had_technological_infrastructure:
slot_uri: hc:hasOrHadTechnologicalInfrastructure
description: |
Technical infrastructure components, systems, and technologies used by a digital platform.
**Temporal Semantics** (RiC-O Pattern):
The "hasOrHad" naming follows RiC-O convention indicating this relationship
may be historical - platforms may have changed technology stacks over time.
**MIGRATION from technology_stack**:
This slot replaces the simple string-based `technology_stack` slot with a
structured TechnologicalInfrastructure class that provides:
- Type classification (framework, language, database, API protocol, service)
- Versioning information
- Component relationships (includes_or_included)
- Full provenance tracking
**Ontological Alignment**:
- **Primary** (`slot_uri`): `hc:hasOrHadTechnologicalInfrastructure`
- **Close**: `schema:softwareVersion` - Schema.org for software/version info
- **Close**: `doap:programming-language` - DOAP vocabulary for software projects
- **Related**: `spdx:relationshipType_DEPENDS_ON` - Software Bill of Materials
**Usage Examples**:
```yaml
auxiliary_platform:
has_or_had_technological_infrastructure:
- has_or_had_type: Framework
has_or_had_label: React
has_or_had_description: Frontend JavaScript framework
- has_or_had_type: BackendStack
has_or_had_label: Python/Django
has_or_had_description: Backend web framework
- has_or_had_type: Database
has_or_had_label: PostgreSQL
has_or_had_description: Primary relational database
```
range: uriorcurie # Broadened per Rule 55 - classes narrow via slot_usage
multivalued: true
required: false
close_mappings:
- schema:softwareVersion
- doap:programming-language
related_mappings:
- spdx:relationshipType_DEPENDS_ON
annotations:
replaces_slot: technology_stack
migration_date: "2026-01-16"
migration_rationale: |
Per slot_fixes.yaml and Rule 56: Migrated from simple string list to structured
TechnologicalInfrastructure class for better semantic modeling and extensibility.
custodian_types: '["D"]'
custodian_types_rationale: Primarily relevant for Digital platform custodians.
custodian_types_primary: D
specificity_score: 0.70
specificity_rationale: |
Fairly specific to digital platform modeling. Less relevant for
physical-only heritage custodians.
comments:
- "MIGRATION: Replaces technology_stack per slot_fixes.yaml (2026-01-16)"
- "RiC-O naming convention: hasOrHad indicates temporal relationship"
- "Range: uriorcurie - classes narrow to TechnologicalInfrastructure via slot_usage"
- "Multivalued: platforms typically use multiple technologies"
- "DOAP-aligned: Description of a Project vocabulary for software"
examples:
- value: "hc:TechnologicalInfrastructure/react-frontend"
description: "React frontend framework (CURIE reference)"
- value: "hc:TechnologicalInfrastructure/python-django-backend"
description: "Python/Django backend stack"

View file

@ -2827,11 +2827,9 @@ fixes:
- original_slot_id: https://nde.nl/ontology/hc/slot/typical_response_formats
processed:
status: true
timestamp: '2026-01-15T19:45:00Z'
session: session-2026-01-15-slot-migrations
notes: 'FULLY MIGRATED: DataServiceEndpointType.yaml - typical_response_formats REMOVED.
Using has_or_had_format slot (keeping range: string for simplicity). Inline attribute
removed, slot_usage added. Slot archived to archive/typical_response_formats_archived_20260115.yaml.'
timestamp: '2026-01-16T14:00:00Z'
session: session-2026-01-16-slot-migrations
notes: 'FULLY MIGRATED: DataServiceEndpointType.yaml and DataServiceEndpointTypes.yaml (8 classes: SRUEndpoint, OpenSearch, IIIFImageAPI, IIIFPresentationAPI, SPARQLEndpoint, GraphQLEndpoint, AtomFeed, RSSFeed) - typical_response_formats REMOVED. Using has_or_had_format slot (keeping range: string for simplicity). Slot archived to archive/typical_response_formats_archived_20260116.yaml.'
revision:
- label: has_or_had_format
type: slot
@ -2867,11 +2865,9 @@ fixes:
- original_slot_id: https://nde.nl/ontology/hc/slot/typical_http_methods
processed:
status: true
timestamp: '2026-01-15T19:45:00Z'
session: session-2026-01-15-slot-migrations
notes: 'FULLY MIGRATED: DataServiceEndpointType.yaml - typical_http_methods REMOVED.
Using has_or_had_method slot (keeping range: string for simplicity). Inline attribute
removed, slot_usage added. Slot archived to archive/typical_http_methods_archived_20260115.yaml.'
timestamp: '2026-01-16T14:00:00Z'
session: session-2026-01-16-slot-migrations
notes: 'FULLY MIGRATED: DataServiceEndpointType.yaml and DataServiceEndpointTypes.yaml (8 classes: SRUEndpoint, OpenSearch, IIIFImageAPI, IIIFPresentationAPI, SPARQLEndpoint, GraphQLEndpoint, AtomFeed, RSSFeed) - typical_http_methods REMOVED. Using has_or_had_method slot (keeping range: string for simplicity). Slot archived to archive/typical_http_methods_archived_20260116.yaml.'
revision:
- label: has_or_had_method
type: slot
@ -4058,14 +4054,13 @@ fixes:
- original_slot_id: https://nde.nl/ontology/hc/slot/temporal_coverage
processed:
status: true
timestamp: '2026-01-15T01:45:00Z'
session: session-2026-01-15-batch9-slot-migration
notes: 'NO MIGRATION NEEDED: temporal_coverage is a well-structured slot with
proper slot_uri (dcterms:temporal) and range (TimeSpan class). Has exact mappings
to dcterms:temporal and schema:temporalCoverage. Suggested revision adds
unnecessary indirection through Content class when direct temporal modeling
is clearer.'
feedback: I reject this feedback. The migration to has_or_had_content and Content class provides better semantic clarity and extensibility for future temporal coverage representations.
timestamp: '2026-01-16T12:00:00Z'
session: session-2026-01-16-rejected-entries-migration
notes: 'FULLY MIGRATED: temporal_coverage → has_or_had_content + Content class.
Updated Collection.yaml, CustodianCollection.yaml, FindingAid.yaml, LegalResponsibilityCollection.yaml.
Content class includes temporal_extent for TimeSpan, plus has_or_had_label and has_or_had_description.
Slot archived to archive/temporal_coverage_archived_20260116.yaml.
RULE 56: Semantic consistency over simplicity - migration executed per slot_fixes.yaml revision.'
revision:
- label: has_or_had_content
type: slot
@ -4103,13 +4098,13 @@ fixes:
- original_slot_id: https://nde.nl/ontology/hc/slot/temperature_tolerance
processed:
status: true
timestamp: '2026-01-15T03:30:00Z'
session: session-2026-01-15-batch9-slot-migration
notes: 'NO MIGRATION NEEDED: temperature_tolerance has hc:temperatureTolerance
slot_uri with QUDT exact_mappings (qudt:Tolerance). Float range for degrees
Celsius tolerance. Used in preservation standards (ISO 11799, BS 4971).
Proper semantic alignment with QUDT vocabulary.'
feedback: I reject this feedback. The migration to allows_or_allowed and TemperatureDeviation class provides better semantic clarity and extensibility for future temperature tolerance representations.
timestamp: '2026-01-16T12:00:00Z'
session: session-2026-01-16-temperature-tolerance-migration
notes: 'FULLY MIGRATED: EnvironmentalZone.yaml, StorageConditionPolicy.yaml -
temperature_tolerance REMOVED, using allows_or_allowed with TemperatureDeviation class.
Created TemperatureDeviation.yaml class with deviation_value, deviation_direction,
iso_standard_reference attributes. Slot archived to archive/temperature_tolerance_archived_20260116.yaml'
feedback: MIGRATION COMPLETED per Rule 53/56 (2026-01-16)
revision:
- label: allows_or_allowed
type: slot