glam/schemas/20251121/linkml/modules/classes/StorageCondition.yaml
kempersc 174a420c08
All checks were successful
Deploy Frontend / build-and-deploy (push) Successful in 3m57s
refactor(schema): centralize 1515 inline slot definitions per Rule 48
- Remove inline slot definitions from 144 class files
- Create 7 new centralized slot files in modules/slots/:
  - custodian_type_broader.yaml
  - custodian_type_narrower.yaml
  - custodian_type_related.yaml
  - definition.yaml
  - finding_aid_access_restriction.yaml
  - finding_aid_description.yaml
  - finding_aid_temporal_coverage.yaml
- Add centralize_inline_slots.py automation script
- Update manifest with new timestamp

Rule 48: Class files must NOT define inline slots - all slots
must be imported from modules/slots/ directory.

Note: Pre-existing IdentifierFormat duplicate class definition
(in Standard.yaml and IdentifierFormat.yaml) not addressed in
this commit - requires separate schema refactor.
2026-01-11 22:02:14 +01:00

573 lines
20 KiB
YAML

id: https://nde.nl/ontology/hc/class/StorageCondition
name: storage_condition_class
title: Storage Condition Observation Class
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
crm: http://www.cidoc-crm.org/cidoc-crm/
premis: http://www.loc.gov/premis/rdf/v3/
prov: http://www.w3.org/ns/prov#
schema: http://schema.org/
dcterms: http://purl.org/dc/terms/
pico: https://personsincontext.org/model#
default_prefix: hc
imports:
- linkml:types
- ./Storage
- ./TimeSpan
- ../enums/StorageConditionStatusEnum
- ../enums/StorageObserverTypeEnum
- ../slots/supersede
- ../slots/confidence_score
- ../slots/observation_date
- ../slots/follow_up_date
- ../slots/has_assessment_category
- ../slots/has_or_had_category_assessment
- ../slots/category_measurement
- ../slots/category_note
- ../slots/category_status
- ../slots/compliance_status
- ../slots/condition_id
- ../slots/evidence_documentation
- ../slots/is_official_assessment
- ../slots/measurement_data
- ../slots/observation_note
- ../slots/observation_period
- ../slots/observer_affiliation
- ../slots/observer_name
- ../slots/observer_type
- ../slots/overall_status
- ../slots/refers_to_storage
- ../slots/remediation_note
- ../slots/remediation_required
- ../slots/specificity_annotation
- ../slots/template_specificity
- ./SpecificityAnnotation
- ./TemplateSpecificityScores
classes:
StorageCondition:
class_uri: hc:StorageConditionAssessment
description: "An observation-based report of actual storage conditions.\n\n**DEFINITION**:\n\nStorageCondition represents\
\ a specific assessment or observation of\na storage facility's actual state at a point in time. Multiple\nobservations\
\ can exist for the same storage facility, from different\nobservers with potentially different findings.\n\n**CRITICAL\
\ DISTINCTION**:\n\n- **StorageCondition** (THIS CLASS): What IS - actual observed state\n- **StorageConditionPolicy**:\
\ What SHOULD BE - designed/intended conditions\n\nThe gap between policy and observed condition is often significant\n\
and represents a critical transparency concern.\n\n**PiCo OBSERVATION PATTERN**:\n\nFollowing the Person in Context\
\ (PiCo) ontology pattern, observations\nare NOT assertions of truth but reports from specific observers with\ntheir\
\ own perspectives and potential biases.\n\nA journalist discovering white ants in a storage facility creates an\nobservation\
\ with:\n- observer_type: JOURNALIST\n- condition_status: CRITICAL\n- category: PEST_CONTROL\n- observation_notes: \"\
White ants discovered in main document depot\"\n\nThis observation exists ALONGSIDE any official self-assessment, without\n\
requiring reconciliation of conflicting reports.\n\n**PROV-O ALIGNMENT**:\n\n`prov:Activity` - \"An activity is something\
\ that occurs over a period\nof time and acts upon or with entities; it may include consuming,\nprocessing, transforming,\
\ modifying, relocating, using, or generating\nentities.\"\n\nThe observation activity:\n- `prov:wasAssociatedWith`\
\ → observer (prov:Agent)\n- `prov:used` → storage facility being observed\n- `prov:atTime` → observation timestamp\n\
- `prov:generated` → this condition report\n\n**RELATIONSHIP TO STORAGE CLASS**:\n\n```\nStorage\n │\n ├── storage_conditions[]\
\ → StorageCondition (THIS CLASS)\n │ ├── Observation 1: Internal staff, 2024-06 → GOOD\n │ ├── Observation\
\ 2: Journalist, 2024-09 → CRITICAL (pest issue)\n │ └── Observation 3: Government inspector, 2024-10 → POOR\n\
\ │\n └── condition_policy → StorageConditionPolicy (what SHOULD be)\n```\n\n**USE CASES**:\n\n1. **Regular Internal\
\ Assessment**:\n - observer_type: INTERNAL_STAFF\n - is_official_assessment: true\n - category_assessments: Temperature=GOOD,\
\ Humidity=GOOD\n \n2. **Investigative Journalism**:\n - observer_type: JOURNALIST\n - is_official_assessment:\
\ false\n - observation_notes: \"Photographs show water damage in basement storage\"\n - evidence_documentation:\
\ [URLs to published article]\n \n3. **Government Inspection**:\n - observer_type: GOVERNMENT_INSPECTOR\n - is_official_assessment:\
\ true (regulatory authority)\n - compliance_status: \"NON_COMPLIANT\"\n - remediation_required: true\n \n4. **Automated\
\ Monitoring**:\n - observer_type: AUTOMATED_SYSTEM\n - category: TEMPERATURE\n - measurement_value: \"23.5°C\"\
\n - threshold_exceeded: true\n"
exact_mappings:
- hc:StorageConditionAssessment
- crm:E14_Condition_Assessment
- prov:Activity
close_mappings:
- crm:E7_Activity
- premis:Event
- pico:Observation
- hc:StorageEnvironmentObservation
slots:
- has_or_had_category_assessment
- compliance_status
- condition_id
- confidence_score
- evidence_documentation
- follow_up_date
- is_official_assessment
- measurement_data
- observation_date
- observation_note
- observation_period
- observer_affiliation
- observer_name
- observer_type
- overall_status
- refers_to_storage
- remediation_note
- remediation_required
- specificity_annotation
- supersede
- template_specificity
slot_usage:
condition_id:
slot_uri: dcterms:identifier
description: 'Unique identifier for this condition observation.
Format: URI following NDE Heritage Custodian ontology conventions.
'
range: uriorcurie
required: true
identifier: true
examples:
- value: https://nde.nl/ontology/hc/condition/rijksmuseum-depot-2024-q2
description: Q2 2024 assessment of Rijksmuseum depot
refers_to_storage:
slot_uri: prov:used
description: 'The storage facility being assessed.
Links this observation to the Storage instance it describes.
PROV-O: used indicates entities used in activity.
'
range: Storage
required: true
examples:
- value: https://nde.nl/ontology/hc/storage/rijksmuseum-depot-amersfoort
observation_date:
slot_uri: prov:atTime
description: 'Date when this observation was made.
For automated systems: timestamp of data collection.
For human observers: date of site visit or assessment.
PROV-O: atTime specifies instant at which activity occurred.
'
range: date
required: true
examples:
- value: '2024-09-15'
observation_period:
slot_uri: crm:P4_has_time-span
description: 'Time period covered by this observation if not a point-in-time.
Use for assessments covering a period (e.g., quarterly review)
rather than a single site visit.
CIDOC-CRM: P4_has_time-span for temporal extent.
'
range: TimeSpan
examples:
- value: Q2 2024 (April-June)
observer_type:
slot_uri: prov:wasAssociatedWith
description: 'Type of observer who made this assessment.
**CRITICAL**: Determines how to interpret the observation.
- INTERNAL_STAFF may underreport issues
- JOURNALIST may have discovered unreported problems
- GOVERNMENT_INSPECTOR has regulatory authority
- WHISTLEBLOWER may have insider knowledge
PROV-O: wasAssociatedWith links activity to responsible agent.
'
range: StorageObserverTypeEnum
required: true
examples:
- value: JOURNALIST
- value: INTERNAL_STAFF
- value: GOVERNMENT_INSPECTOR
observer_name:
slot_uri: prov:wasAssociatedWith
description: 'Name of the individual or team who made this observation.
May be anonymized for whistleblowers or confidential sources.
'
range: string
examples:
- value: Maria van der Berg
- value: Collections Management Team
- value: Anonymous (confidential source)
observer_affiliation:
slot_uri: prov:actedOnBehalfOf
description: 'Organization the observer represents or works for.
For journalists: newspaper/media outlet.
For inspectors: government agency.
For consultants: consulting firm.
PROV-O: actedOnBehalfOf indicates delegated authority.
'
range: string
examples:
- value: De Volkskrant
- value: Rijksdienst voor het Cultureel Erfgoed
- value: ABC Conservation Consultants
is_official_assessment:
slot_uri: prov:wasAttributedTo
description: 'Whether this is an official institutional assessment or external observation.
TRUE = Official self-assessment or authorized inspection.
FALSE = External/investigative observation not sanctioned by institution.
**Important for interpretation**: Official assessments represent what
the institution claims; external observations may contradict this.
'
range: boolean
required: true
examples:
- value: true
description: Official annual condition survey
- value: false
description: Journalist investigation
overall_status:
slot_uri: premis:hasOutcome
description: 'Overall condition status based on this observation.
Aggregate assessment across all categories observed.
Individual category assessments may vary.
PREMIS: hasOutcome for preservation action results.
'
range: StorageConditionStatusEnum
required: true
examples:
- value: CRITICAL
description: White ant infestation discovered
- value: GOOD
description: All parameters within acceptable ranges
has_or_had_category_assessment:
slot_uri: schema:hasPart
description: 'Individual condition assessments for specific categories.
Each entry maps a StorageConditionCategoryEnum to a status and notes.
Not all categories need to be assessed in every observation.
Structure: List of category assessment objects with:
- category: StorageConditionCategoryEnum value
- status: StorageConditionStatusEnum value
- measurement: Optional measurement value
- notes: Optional category-specific notes
'
range: StorageConditionCategoryAssessment
multivalued: true
inlined_as_list: true
examples:
- value:
- category: TEMPERATURE
status: GOOD
measurement: 19.5°C
- category: PEST_CONTROL
status: CRITICAL
note: White ants discovered in main depot area
observation_note:
slot_uri: dcterms:description
description: 'Free-text notes documenting the observation.
Include:
- What was observed
- Context of the observation
- Specific concerns or findings
- Recommendations if any
'
range: string
examples:
- value: During routine inspection, white ant damage discovered in south wall of main document storage. Approximately
50 linear meters of shelving affected. Evidence of active infestation - live insects observed. Immediate treatment
recommended.
evidence_documentation:
slot_uri: prov:wasInfluencedBy
description: 'Links to supporting evidence for this observation.
May include:
- Photographs of conditions
- Published articles (for journalism)
- Official inspection reports
- Sensor data exports
- Video documentation
PROV-O: wasInfluencedBy for supporting sources.
'
range: uriorcurie
multivalued: true
examples:
- value:
- https://www.volkskrant.nl/archive-pest-investigation-2024
- https://archive.org/evidence/photos/depot-damage-20240915.zip
measurement_data:
slot_uri: schema:value
description: 'Structured measurement data from sensors or instruments.
JSON-LD compatible structure for environmental readings:
- temperature_celsius
- humidity_percent
- lux_level
- particulate_count
- etc.
'
range: string
examples:
- value: '{"temperature_celsius": 23.5, "humidity_percent": 58, "threshold_exceeded": true}'
compliance_status:
slot_uri: dcterms:conformsTo
description: 'Compliance status with referenced standards.
Values: COMPLIANT, NON_COMPLIANT, PARTIALLY_COMPLIANT, NOT_ASSESSED
Dublin Core: conformsTo for standards compliance.
'
range: string
examples:
- value: NON_COMPLIANT
description: Does not meet EN 16893:2018 requirements
remediation_required:
slot_uri: schema:potentialAction
description: 'Whether remediation action is required based on this observation.
TRUE = Issues found that require corrective action.
FALSE = No immediate action needed.
'
range: boolean
examples:
- value: true
description: Pest treatment required immediately
remediation_note:
slot_uri: schema:description
description: 'Notes on required or recommended remediation actions.
'
range: string
examples:
- value: 1. Engage licensed pest control immediately 2. Quarantine affected materials 3. Survey adjacent storage areas
4. Install additional monitoring traps 5. Report to Heritage Inspectorate within 48 hours
follow_up_date:
slot_uri: schema:scheduledTime
description: 'Scheduled date for follow-up assessment.
May be set for:
- Verification of remediation
- Regular monitoring cycle
- Compliance re-inspection
'
range: date
examples:
- value: '2024-12-01'
description: Post-treatment verification inspection
confidence_score:
slot_uri: prov:value
description: 'Confidence score (0.0-1.0) in the accuracy of this observation.
Factors affecting confidence:
- Observer expertise (professionals higher)
- Access level (full access higher)
- Evidence quality (documentation higher)
- Measurement calibration (verified higher)
'
range: float
minimum_value: 0.0
maximum_value: 1.0
examples:
- value: 0.95
description: Government inspector with full access
- value: 0.75
description: Journalist with limited access
supersede:
slot_uri: prov:wasRevisionOf
description: 'Previous condition observation that this one supersedes or updates.
Use when a new observation corrects or updates a previous one
from the same observer type.
PROV-O: wasRevisionOf for updated versions.
'
range: StorageCondition
examples:
- value: https://nde.nl/ontology/hc/condition/rijksmuseum-depot-2024-q1
specificity_annotation:
range: SpecificityAnnotation
inlined: true
template_specificity:
range: TemplateSpecificityScores
inlined: true
comments:
- Observations are NOT assertions of truth - they are reports from specific observers
- Multiple observations may exist for same storage with conflicting findings
- Gap between observed conditions and policy conditions is critical transparency metric
- External observations (journalists, researchers) may reveal unreported issues
- Official assessments vs external investigations treated equally as data
- Automated system observations provide objective measurements but require calibration
see_also:
- http://www.w3.org/ns/prov#Activity
- https://www.loc.gov/premis/rdf/v3/Event
examples:
- value:
condition_id: https://nde.nl/ontology/hc/condition/depot-pest-investigation-2024
refers_to_storage: https://nde.nl/ontology/hc/storage/national-archive-depot-b
observation_date: '2024-09-15'
observer_type: JOURNALIST
observer_name: Jan de Vries
observer_affiliation: De Volkskrant
is_official_assessment: false
overall_status: CRITICAL
has_or_had_category_assessment:
- category: PEST_CONTROL
status: CRITICAL
note: White ants discovered in main document depot
observation_notes: Investigative visit revealed active termite infestation in south section of Document Depot B. Approximately
50 linear meters of historical documents at risk. Institution was unaware of extent of damage until contacted for
comment.
evidence_documentation:
- https://www.volkskrant.nl/archive-pest-crisis-2024
remediation_required: true
confidence_score: 0.85
description: Journalist investigation discovering unreported pest infestation
- value:
condition_id: https://nde.nl/ontology/hc/condition/rijksmuseum-q2-2024
refers_to_storage: https://nde.nl/ontology/hc/storage/rijksmuseum-depot-amersfoort
observation_date: '2024-06-30'
observation_period:
start_date: '2024-04-01'
end_date: '2024-06-30'
observer_type: INTERNAL_STAFF
observer_name: Collections Management Team
observer_affiliation: Rijksmuseum
is_official_assessment: true
overall_status: GOOD
has_or_had_category_assessment:
- category: TEMPERATURE
status: EXCELLENT
measurement: 18.5°C average
- category: HUMIDITY
status: GOOD
measurement: 48% RH average
- category: PEST_CONTROL
status: GOOD
note: No pest activity detected in monitoring traps
- category: SECURITY
status: EXCELLENT
observation_notes: Quarterly facilities review. All parameters within policy ranges.
compliance_status: COMPLIANT
remediation_required: false
confidence_score: 0.9
description: Official quarterly internal assessment
StorageConditionCategoryAssessment:
class_uri: hc:StorageConditionCategoryAssessment
description: 'Individual category assessment within a StorageCondition observation.
Allows granular reporting of different condition categories with
independent status levels.
'
slots:
- has_assessment_category
- category_measurement
- category_note
- category_status
- specificity_annotation
- template_specificity
slot_usage:
has_assessment_category:
slot_uri: dcterms:type
description: Category being assessed (from StorageConditionCategoryEnum)
range: string
required: true
category_status:
slot_uri: premis:hasOutcome
description: Status for this specific category
range: StorageConditionStatusEnum
required: true
category_measurement:
slot_uri: schema:value
description: Measurement value if applicable (e.g., "19.5°C", "48% RH")
range: string
category_note:
slot_uri: dcterms:description
description: Notes specific to this category assessment
range: string
specificity_annotation:
range: SpecificityAnnotation
inlined: true
template_specificity:
range: TemplateSpecificityScores
inlined: true