feat: Update canonical value handling by migrating to structured CanonicalForm and archiving previous slot

This commit is contained in:
kempersc 2026-01-22 22:08:04 +01:00
parent 2a75ddf7cc
commit 3c9926956e
18 changed files with 635 additions and 92 deletions

View file

@ -1,5 +1,5 @@
{
"generated": "2026-01-22T19:40:49.649Z",
"generated": "2026-01-22T19:41:07.059Z",
"schemaRoot": "/schemas/20251121/linkml",
"totalFiles": 3037,
"categoryCounts": {

View file

@ -1,5 +1,5 @@
{
"generated": "2026-01-22T19:41:07.059Z",
"generated": "2026-01-22T21:08:05.291Z",
"schemaRoot": "/schemas/20251121/linkml",
"totalFiles": 3037,
"categoryCounts": {

View file

@ -0,0 +1,99 @@
id: https://nde.nl/ontology/hc/class/CanonicalForm
name: canonical_form_class
title: Canonical Form Class
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
skos: http://www.w3.org/2004/02/skos/core#
schema: http://schema.org/
dcterms: http://purl.org/dc/terms/
imports:
- linkml:types
- ../slots/has_or_had_label
- ./Label
default_prefix: hc
classes:
CanonicalForm:
class_uri: skos:Concept
description: >-
Represents the canonical/normalized form of an identifier or value.
**PURPOSE**:
While original values may vary in format (spaces, prefixes, case),
CanonicalForm provides a standardized representation for:
- Consistent storage
- Deduplication and matching
- Database joins and lookups
- Cross-system interoperability
**NORMALIZATION RULES BY STANDARD**:
| Standard | Original | Canonical |
|----------|----------|-----------|
| ISNI | "0000 0001 2146 5765" | "0000000121465765" |
| Wikidata | "http://wikidata.org/entity/Q190804" | "Q190804" |
| VIAF | "viaf.org/viaf/148691498" | "148691498" |
| DOI | "https://doi.org/10.1234/Ex" | "10.1234/ex" |
| ISIL | "NL-AmRMA" | "NL-AmRMA" (already canonical) |
**ONTOLOGY ALIGNMENT**:
| Ontology | Mapping | Rationale |
|----------|---------|-----------|
| SKOS | skos:Concept | Conceptual representation |
| Schema.org | schema:PropertyValue | Name-value pair |
MIGRATED 2026-01-22: Created per slot_fixes.yaml feedback to replace
simple canonical_value string with structured class.
exact_mappings:
- skos:Concept
close_mappings:
- schema:PropertyValue
slots:
- has_or_had_label
slot_usage:
has_or_had_label:
range: Label
required: true
inlined: true
description: >-
The canonical/normalized value as a Label.
Label.has_or_had_text contains the actual normalized string.
attributes:
normalization_rule:
range: string
required: false
description: >-
The rule or standard used to normalize this value.
E.g., "ISNI_REMOVE_SPACES", "WIKIDATA_EXTRACT_QID", "DOI_LOWERCASE"
source_format:
range: string
required: false
description: >-
The original format/scheme before normalization.
E.g., "ISNI_DISPLAY", "WIKIDATA_URI", "DOI_URL"
examples:
- value:
has_or_had_label:
has_or_had_text: "0000000121465765"
normalization_rule: "ISNI_REMOVE_SPACES"
source_format: "ISNI_DISPLAY"
description: ISNI canonical form (spaces removed)
- value:
has_or_had_label:
has_or_had_text: "Q190804"
normalization_rule: "WIKIDATA_EXTRACT_QID"
source_format: "WIKIDATA_URI"
description: Wikidata canonical form (Q-number extracted)
- value:
has_or_had_label:
has_or_had_text: "10.1234/example"
normalization_rule: "DOI_LOWERCASE_NO_PREFIX"
source_format: "DOI_URL"
description: DOI canonical form (lowercase, no resolver prefix)
annotations:
specificity_score: 0.30
specificity_rationale: >-
Canonical forms are relevant for identifier lookup across all heritage sectors.

View file

@ -9,7 +9,7 @@ prefixes:
dcterms: http://purl.org/dc/terms/
imports:
- linkml:types
# Enums
# Enums (kept for backward compatibility)
- ../enums/CapacityTypeEnum
# RiC-O style generic slots
- ../slots/has_or_had_identifier
@ -20,9 +20,12 @@ imports:
- ../slots/temporal_extent
- ../slots/specificity_annotation
- ../slots/has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17)
# Capacity-specific slots
- ../slots/capacity_value
- ../slots/capacity_type
# MIGRATED 2026-01-22: capacity_type → has_or_had_type + CapacityType (Rule 53)
- ../slots/has_or_had_type
# MIGRATED 2026-01-22: capacity_value → has_or_had_quantity + Quantity (Rule 53)
- ../slots/has_or_had_unit
- ./Unit
# Capacity-specific slots (capacity_value removed - use has_or_had_quantity)
- ../slots/is_estimate
# Class imports
- ./MeasureUnit
@ -30,10 +33,11 @@ imports:
- ./TimeSpan
- ./SpecificityAnnotation
- ./TemplateSpecificityScore # was: TemplateSpecificityScores - migrated per Rule 53 (2026-01-17)
- ./TemplateSpecificityType
- ./TemplateSpecificityTypes
# MIGRATED 2026-01-22: capacity_type → has_or_had_type + CapacityType (Rule 53)
- ./CapacityType
- ./CapacityTypes
default_prefix: hc
classes:
Capacity:
@ -66,37 +70,37 @@ classes:
| WEIGHT | Weight capacity | kg, tons |
| SEATING | Seating capacity | seats, persons |
**EXAMPLES**:
**EXAMPLES** (MIGRATED 2026-01-22: capacity_value → has_or_had_quantity):
Archive depot (linear meters):
```yaml
has_or_had_capacity:
- capacity_value: 8000.0
capacity_type: SHELF_LENGTH
has_or_had_measurement_unit:
has_or_had_type: LINEAR_METER
has_or_had_symbol: "m"
- has_or_had_quantity:
quantity_value: 8000.0
has_or_had_unit:
unit_value: "linear_meter"
has_or_had_type: ShelfLengthCapacity
has_or_had_description: Total linear meters of shelving capacity
```
Cold storage (volume):
```yaml
has_or_had_capacity:
- capacity_value: 2500.0
capacity_type: VOLUME
has_or_had_measurement_unit:
has_or_had_type: CUBIC_METER
has_or_had_symbol: "m³"
- has_or_had_quantity:
quantity_value: 2500.0
has_or_had_unit:
unit_value: "cubic_meter"
has_or_had_type: VolumeCapacity
```
Archive box storage (items):
```yaml
has_or_had_capacity:
- capacity_value: 50000
capacity_type: ITEM_COUNT
has_or_had_measurement_unit:
has_or_had_type: ITEM
has_or_had_symbol: "archive boxes"
- has_or_had_quantity:
quantity_value: 50000
has_or_had_unit:
unit_value: "item"
has_or_had_type: ItemCountCapacity
```
exact_mappings:
- hc:Capacity
@ -109,10 +113,12 @@ classes:
- premis:StorageLocation
slots:
- has_or_had_identifier
- capacity_value
- capacity_type
- has_or_had_measurement_unit
# MIGRATED 2026-01-22: capacity_value → has_or_had_quantity + Quantity (Rule 53)
- has_or_had_quantity
# MIGRATED 2026-01-22: capacity_type → has_or_had_type + CapacityType (Rule 53)
- has_or_had_type
- has_or_had_measurement_unit
- has_or_had_unit
- has_or_had_description
- temporal_extent
- is_estimate
@ -127,30 +133,25 @@ classes:
examples:
- value: https://nde.nl/ontology/hc/capacity/na-depot-b-shelving
description: National Archives depot B shelf capacity
capacity_value:
range: float
required: true
description: >-
The numeric value of the capacity.
MIGRATED from capacity_cubic_meters, capacity_linear_meters,
capacity_item per slot_fixes.yaml (Rule 53).
examples:
- value: 8000.0
description: 8,000 linear meters
- value: 2500.0
description: 2,500 cubic meters
- value: 50000
description: 50,000 archive boxes
capacity_type:
range: CapacityTypeEnum
# MIGRATED 2026-01-22: capacity_value → has_or_had_quantity + Quantity (Rule 53)
# capacity_value slot removed - use has_or_had_quantity with quantity_value inside
# MIGRATED 2026-01-22: capacity_type → has_or_had_type + CapacityType (Rule 53)
has_or_had_type:
range: CapacityType
required: false
description: >-
The type of capacity measurement (volume, length, count, etc.).
MIGRATED from capacity_type per slot_fixes.yaml (Rule 53, 2026-01-22).
Uses CapacityType class hierarchy instead of CapacityTypeEnum.
examples:
- value: SHELF_LENGTH
- value: VOLUME
- value: ITEM_COUNT
- value: FLOOR_AREA
- value: ShelfLengthCapacity
description: Linear shelf capacity
- value: VolumeCapacity
description: Cubic volume capacity
- value: ItemCountCapacity
description: Item count capacity
- value: FloorAreaCapacity
description: Floor area capacity
has_or_had_measurement_unit:
range: MeasureUnit
required: false
@ -171,18 +172,31 @@ classes:
has_or_had_type: ITEM
has_or_had_symbol: "archive boxes"
description: Item count
# MIGRATED 2026-01-22: capacity_value → has_or_had_quantity + Quantity (Rule 53)
has_or_had_quantity:
range: Quantity
required: false
required: true
inlined: true
description: >-
Alternative structured quantity representation.
Use for complex measurements requiring full Quantity semantics.
The capacity measurement as a structured Quantity.
MIGRATED from capacity_value per slot_fixes.yaml (Rule 53, 2026-01-22).
Contains quantity_value (numeric), and can include unit via has_or_had_unit.
examples:
- value:
quantity_value: 8000.0
quantity_type: CAPACITY
quantity_unit: "linear meters"
has_or_had_unit:
unit_value: "linear_meter"
description: 8,000 linear meters of shelving
- value:
quantity_value: 2500.0
has_or_had_unit:
unit_value: "cubic_meter"
description: 2,500 cubic meters of storage
- value:
quantity_value: 50000
has_or_had_unit:
unit_value: "item"
description: 50,000 archive boxes
has_or_had_description:
range: string
required: false
@ -218,29 +232,31 @@ classes:
- http://qudt.org/schema/qudt/Quantity
- https://schema.org/QuantitativeValue
examples:
# MIGRATED 2026-01-22: capacity_value → has_or_had_quantity + Quantity (Rule 53)
# MIGRATED 2026-01-22: capacity_type → has_or_had_type + CapacityType class (Rule 53)
- value:
has_or_had_identifier: https://nde.nl/ontology/hc/capacity/rijksmuseum-depot-shelving
capacity_value: 8000.0
capacity_type: SHELF_LENGTH
has_or_had_measurement_unit:
has_or_had_type: LINEAR_METER
has_or_had_symbol: "m"
has_or_had_quantity:
quantity_value: 8000.0
has_or_had_unit:
unit_value: "linear_meter"
has_or_had_type: ShelfLengthCapacity
has_or_had_description: Total linear shelf capacity in Depot Amersfoort
is_estimate: false
description: Archive depot shelf capacity (was capacity_linear_meters)
- value:
capacity_value: 2500.0
capacity_type: VOLUME
has_or_had_measurement_unit:
has_or_had_type: CUBIC_METER
has_or_had_symbol: "m³"
has_or_had_quantity:
quantity_value: 2500.0
has_or_had_unit:
unit_value: "cubic_meter"
has_or_had_type: VolumeCapacity
description: Cold storage volume capacity (was capacity_cubic_meters)
- value:
capacity_value: 50000
capacity_type: ITEM_COUNT
has_or_had_measurement_unit:
has_or_had_type: ITEM
has_or_had_symbol: "archive boxes"
has_or_had_quantity:
quantity_value: 50000
has_or_had_unit:
unit_value: "item"
has_or_had_type: ItemCountCapacity
has_or_had_description: Capacity for 50,000 standard archive boxes
description: Archive box storage capacity (was capacity_item)
- value:

View file

@ -0,0 +1,80 @@
# CapacityType class (abstract base)
# Created 2026-01-22 per slot_fixes.yaml revision for capacity_type (Rule 53)
# Following Rule 0b: Type/Types naming convention
id: https://nde.nl/ontology/hc/class/CapacityType
name: capacity_type_class
title: Capacity Type Class
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
skos: http://www.w3.org/2004/02/skos/core#
qudt: http://qudt.org/schema/qudt/
default_prefix: hc
imports:
- linkml:types
- ../slots/has_or_had_label
- ../slots/has_or_had_description
classes:
CapacityType:
class_uri: skos:Concept
abstract: true
description: |
Abstract base class for capacity measurement types.
**RULE 0b COMPLIANT**:
This is the ABSTRACT BASE CLASS (singular "Type") defining the taxonomy.
Concrete subclasses are defined in `CapacityTypes.yaml` (plural).
**CAPACITY TYPE HIERARCHY**:
| Type | Description | Unit Examples |
|------|-------------|---------------|
| VOLUME | Cubic capacity | m³, ft³ |
| SHELF_LENGTH | Linear shelf meters | m, ft |
| FLOOR_AREA | Floor space | m², ft² |
| ITEM_COUNT | Number of items | boxes, folders |
| WEIGHT | Weight capacity | kg, tons |
| SEATING | Seating capacity | seats, persons |
| DISPLAY_AREA | Exhibition space | m² |
| RACK_SLOTS | Rack/shelf slots | count |
| DRAWER_UNITS | Drawer units | count |
| CABINET_UNITS | Cabinet/storage units | count |
**QUDT ALIGNMENT**:
Capacity types align with QUDT quantity kinds for interoperability
with scientific measurement systems.
Created as part of capacity_type migration per slot_fixes.yaml (Rule 53).
exact_mappings:
- skos:Concept
close_mappings:
- qudt:QuantityKind
slots:
- has_or_had_label
- has_or_had_description
slot_usage:
has_or_had_label:
description: Human-readable label for this capacity type.
has_or_had_description:
description: Description of what this capacity type measures.
annotations:
custodian_types: '["*"]'
custodian_types_rationale: Capacity types apply to all storage facilities.
specificity_score: 0.55
specificity_rationale: Specialized taxonomy for storage capacity measurements.
comments:
- "Abstract base class - see CapacityTypes.yaml for concrete subclasses"
- "Per Rule 0b: Type (singular) = abstract base, Types (plural) = concrete"
- "Created 2026-01-22 per slot_fixes.yaml capacity_type migration"

View file

@ -0,0 +1,140 @@
# CapacityTypes class (concrete subclasses)
# Created 2026-01-22 per slot_fixes.yaml revision for capacity_type (Rule 53)
# Following Rule 0b: Type/Types naming convention
id: https://nde.nl/ontology/hc/class/CapacityTypes
name: capacity_types_class
title: Capacity Types Class
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
qudt: http://qudt.org/schema/qudt/
default_prefix: hc
imports:
- linkml:types
- ./CapacityType
classes:
VolumeCapacity:
is_a: CapacityType
class_uri: hc:VolumeCapacity
description: |
Cubic volume capacity measurement (e.g., cubic meters).
Used for storage depots, vaults, and enclosed spaces.
annotations:
qudt_kind: "qudt:Volume"
typical_units: "m³, ft³, liters"
comments:
- "Replaces CapacityTypeEnum.VOLUME"
ShelfLengthCapacity:
is_a: CapacityType
class_uri: hc:ShelfLengthCapacity
description: |
Linear shelf or storage length capacity (e.g., linear meters).
Standard measurement for archive depots.
annotations:
qudt_kind: "qudt:Length"
typical_units: "m, ft, km"
comments:
- "Replaces CapacityTypeEnum.SHELF_LENGTH"
- "Primary metric for archival storage"
FloorAreaCapacity:
is_a: CapacityType
class_uri: hc:FloorAreaCapacity
description: |
Floor space area capacity (e.g., square meters).
Used for storage rooms, galleries, and exhibition spaces.
annotations:
qudt_kind: "qudt:Area"
typical_units: "m², ft²"
comments:
- "Replaces CapacityTypeEnum.FLOOR_AREA"
ItemCountCapacity:
is_a: CapacityType
class_uri: hc:ItemCountCapacity
description: |
Number of items that can be stored.
Used for boxes, folders, objects, artworks.
annotations:
qudt_kind: "qudt:Dimensionless"
typical_units: "boxes, folders, objects, items"
comments:
- "Replaces CapacityTypeEnum.ITEM_COUNT"
WeightCapacity:
is_a: CapacityType
class_uri: hc:WeightCapacity
description: |
Weight or mass capacity (e.g., kilograms, tons).
Important for floor load limits and transport.
annotations:
qudt_kind: "qudt:Mass"
typical_units: "kg, tons, lbs"
comments:
- "Replaces CapacityTypeEnum.WEIGHT"
SeatingCapacity:
is_a: CapacityType
class_uri: hc:SeatingCapacity
description: |
Seating capacity for venues and event spaces.
Number of seats or persons allowed.
annotations:
qudt_kind: "qudt:Dimensionless"
typical_units: "seats, persons"
comments:
- "Replaces CapacityTypeEnum.SEATING"
DisplayAreaCapacity:
is_a: CapacityType
class_uri: hc:DisplayAreaCapacity
description: |
Exhibition or display area capacity.
Used for galleries and exhibition halls.
annotations:
qudt_kind: "qudt:Area"
typical_units: "m², ft²"
comments:
- "Replaces CapacityTypeEnum.DISPLAY_AREA"
RackSlotCapacity:
is_a: CapacityType
class_uri: hc:RackSlotCapacity
description: |
Number of rack or shelf slots available.
Used for modular storage systems.
annotations:
qudt_kind: "qudt:Dimensionless"
typical_units: "slots, positions"
comments:
- "Replaces CapacityTypeEnum.RACK_SLOTS"
DrawerUnitCapacity:
is_a: CapacityType
class_uri: hc:DrawerUnitCapacity
description: |
Number of drawer units available.
Used for flat file storage and specimen collections.
annotations:
qudt_kind: "qudt:Dimensionless"
typical_units: "drawers, units"
comments:
- "Replaces CapacityTypeEnum.DRAWER_UNITS"
CabinetUnitCapacity:
is_a: CapacityType
class_uri: hc:CabinetUnitCapacity
description: |
Number of cabinet or storage units available.
Used for modular cabinet systems.
annotations:
qudt_kind: "qudt:Dimensionless"
typical_units: "cabinets, units"
comments:
- "Replaces CapacityTypeEnum.CABINET_UNITS"

View file

@ -0,0 +1,97 @@
id: https://nde.nl/ontology/hc/class/Caption
name: caption_class
title: Caption Class
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
dcterms: http://purl.org/dc/terms/
imports:
- linkml:types
- ../slots/has_or_had_label
- ../slots/language
- ./Label
default_prefix: hc
classes:
Caption:
class_uri: schema:caption
description: >-
Represents accessibility caption/subtitle information for media content.
**PURPOSE**:
Caption provides structured representation of video/audio captions for:
- WCAG accessibility compliance
- Multilingual subtitle support
- Caption metadata (language, format, availability)
**ONTOLOGY ALIGNMENT**:
| Ontology | Mapping | Rationale |
|----------|---------|-----------|
| Schema.org | schema:caption | Media caption/subtitle |
**USE CASES**:
- Video captions for hearing accessibility
- Subtitles for multilingual content
- Closed captions vs. open captions distinction
MIGRATED 2026-01-22: Created per slot_fixes.yaml feedback to replace
simple caption_available string with structured class.
exact_mappings:
- schema:caption
slots:
- has_or_had_label
- language
slot_usage:
has_or_had_label:
range: Label
required: false
inlined: true
description: >-
Caption text content. Label.has_or_had_text contains the actual caption.
language:
range: string
required: false
description: >-
ISO 639-1 language code for the caption (e.g., "en", "nl", "de").
attributes:
caption_format:
range: string
required: false
description: >-
Caption format (e.g., "SRT", "VTT", "TTML", "closed_caption", "open_caption").
is_available:
range: boolean
required: false
description: >-
Whether captions are available for this media.
Replaces simple caption_available boolean/string.
caption_url:
range: uri
required: false
description: >-
URL to external caption file (for SRT, VTT, etc.).
examples:
- value:
is_available: true
language: en
caption_format: closed_caption
description: English closed captions available
- value:
is_available: true
language: nl
caption_format: SRT
caption_url: https://example.org/video/captions_nl.srt
description: Dutch subtitles in SRT format
- value:
has_or_had_label:
has_or_had_text: "Video beschrijving voor slechthorenden"
language: nl
is_available: true
description: Dutch caption with descriptive text
annotations:
specificity_score: 0.60
specificity_rationale: >-
Captions are specific to media content, moderately relevant for digital heritage.

View file

@ -70,8 +70,7 @@ imports:
- ../slots/has_or_had_access_condition
- ../slots/is_or_was_access_restricted
- ../slots/has_or_had_comprehensive_overview
- ../slots/card_description
- ../slots/card_description_en
# REMOVED 2026-01-22: card_description, card_description_en → has_or_had_description + Description (with language tag) per slot_fixes.yaml
- ../slots/card_image_url
- ../slots/card_title
- ../slots/card_title_en
@ -1027,8 +1026,8 @@ classes:
'
slots:
- card_description
- card_description_en
# MIGRATED 2026-01-22: card_description, card_description_en → has_or_had_description + Description (multivalued with language tag)
- has_or_had_description
- card_image_url
- card_title
- card_title_en
@ -1037,6 +1036,25 @@ classes:
- has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17)
- has_or_had_provenance_path # was: xpath - migrated per Rule 53 (2026-01-15)
slot_usage:
has_or_had_description:
range: Description
multivalued: true
inlined: true
description: |
Card description(s) with language tagging.
MIGRATED 2026-01-22: Replaces card_description and card_description_en.
Use description_type: "card" and language: "nl"/"en" to distinguish.
examples:
- value:
description_text: "Kaart beschrijving in het Nederlands"
description_type: card
language: nl
description: Dutch card description
- value:
description_text: "Card description in English"
description_type: card
language: en
description: English card description
card_title:
required: true
card_url:

View file

@ -19,7 +19,9 @@ imports:
- ../slots/defined_by_standard
- ../slots/is_or_was_allocated_by
- ../slots/identifier_format_used
- ../slots/canonical_value
# MIGRATED 2026-01-22: canonical_value → has_or_had_canonical_form + CanonicalForm per slot_fixes.yaml feedback
- ../slots/has_or_had_canonical_form
- ./CanonicalForm
- ../slots/has_or_had_secondary_label
- ../slots/has_allocation_date
- ../slots/specificity_annotation
@ -160,7 +162,7 @@ classes:
- defined_by_standard: Which Standard defines this identifier type (ISIL → ISO 15511)
- allocated_by: Which AllocationAgency assigned this specific identifier
- identifier_format_used: Which format variant is used in identifier_value
- canonical_value: Normalized form for deduplication and matching
- has_or_had_canonical_form: Normalized form (CanonicalForm) for deduplication and matching
- allocation_date: When the identifier was assigned
**Dual-Purpose Identifiers**:
@ -187,7 +189,8 @@ classes:
- is_or_was_allocated_by
- has_allocation_date
- has_or_had_secondary_label
- canonical_value
# MIGRATED 2026-01-22: canonical_value → has_or_had_canonical_form + CanonicalForm
- has_or_had_canonical_form
- defined_by_standard
- identifier_format_used
- identifies_custodian
@ -203,8 +206,19 @@ classes:
required: false
identifier_format_used:
required: false
canonical_value:
has_or_had_canonical_form:
range: CanonicalForm
required: false
inlined: true
description: >-
Canonical/normalized form for deduplication and matching.
MIGRATED 2026-01-22: Replaces canonical_value with structured CanonicalForm.
examples:
- value:
has_or_had_label:
has_or_had_text: "0000000121465765"
normalization_rule: "ISNI_REMOVE_SPACES"
description: ISNI canonical form
has_or_had_secondary_label:
description: |
For dual-purpose identifiers (ISNI, VIAF), links to the name authority

View file

@ -8,7 +8,9 @@ imports:
- ../slots/language
- ../slots/has_aspect_ratio
# REMOVED 2026-01-15: ../slots/available_caption_languages - migrated to has_available_caption_language
- ../slots/caption_available
# MIGRATED 2026-01-22: caption_available → has_or_had_caption + Caption per slot_fixes.yaml feedback
- ../slots/has_or_had_caption
- ./Caption
# REMOVED 2026-01-18: ../slots/comment_author - migrated to has_or_had_author + Author (Rule 53)
- ../slots/has_or_had_author
- ./Author
@ -223,7 +225,8 @@ classes:
slots:
- has_aspect_ratio
- has_available_caption_language
- caption_available
# MIGRATED 2026-01-22: caption_available → has_or_had_caption + Caption per slot_fixes.yaml feedback
- has_or_had_caption
# REMOVED 2026-01-18: comment_count - migrated to has_or_had_quantity + Quantity (Rule 53)
# REMOVED 2026-01-22: comments_fetched - migrated to was_fetched_at + is_or_was_part_of_total + SourceCommentCount (Rule 53)
- was_fetched_at
@ -279,14 +282,31 @@ classes:
# examples:
# - value: 30.0
# description: 30 frames per second
caption_available:
range: boolean
# MIGRATED 2026-01-22: caption_available → has_or_had_caption + Caption per slot_fixes.yaml feedback
has_or_had_caption:
range: Caption
multivalued: true
inlined: true
required: false
description: |
Structured caption/subtitle information for this video.
MIGRATED from caption_available per slot_fixes.yaml (Rule 53, 2026-01-22).
Caption class provides language, format, and availability metadata.
examples:
- value: true
description: Video has captions available
- value: false
description: No captions available
- value:
is_available: true
language: en
caption_format: closed_caption
description: English closed captions available
- value:
is_available: true
language: nl
caption_format: VTT
caption_url: https://example.org/video/captions_nl.vtt
description: Dutch subtitles in VTT format
- value:
is_available: false
description: No captions available (migrated from caption_available: false)
default_language:
range: string
required: false

View file

@ -0,0 +1,36 @@
id: https://nde.nl/ontology/hc/slot/has_or_had_caption
name: has_or_had_caption_slot
title: Has or Had Caption Slot
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
dcterms: http://purl.org/dc/terms/
imports:
- linkml:types
default_range: string
slots:
has_or_had_caption:
slot_uri: schema:caption
description: >-
Links to a Caption providing accessibility text for media content.
**PURPOSE**:
- Accessibility compliance (WCAG)
- Video/audio content description
- Multilingual caption support
**ONTOLOGY ALIGNMENT**:
- slot_uri: schema:caption (primary)
- Supports Schema.org media accessibility patterns
MIGRATED 2026-01-22: Replaces caption_available slot per slot_fixes.yaml feedback.
range: Caption
inlined: true
multivalued: true
exact_mappings:
- schema:caption
annotations:
custodian_types: '["*"]'
custodian_types_rationale: Captions are universal for media accessibility

View file

@ -18,14 +18,11 @@
"begin_of_the_begin.yaml",
"begin_of_the_end.yaml",
"has_or_had_notation.yaml",
"canonical_value.yaml",
"capacity.yaml",
"has_or_had_canonical_form.yaml",
"capacity_type.yaml",
"capacity_value.yaml",
"capital_budget.yaml",
"caption_available.yaml",
"card_description.yaml",
"card_description_en.yaml",
"card_image_url.yaml",
"card_title.yaml",
"card_title_en.yaml",
@ -69,7 +66,7 @@
"confidence_value.yaml",
"__ARCHIVED_20260122__conflict_status.yaml",
"__ARCHIVED_20260122__connection.yaml",
"connection_degree.yaml",
"__ARCHIVED_20260122__connection_degree.yaml",
"connection_heritage_relevant.yaml",
"connection_heritage_type.yaml",
"connection_id.yaml",

View file

@ -7956,7 +7956,8 @@ fixes:
would enhance semantic clarity and allow for richer metadata about each canonical value.
This would align with best practices for data normalization.'
done: false
done: true
response: "Completed 2026-01-22 by claude-sonnet-4. Created has_or_had_canonical_form slot and CanonicalForm class. Migrated Identifier.yaml (CustodianIdentifier) to use new pattern. CanonicalForm has has_or_had_label → Label for normalized value, plus normalization_rule and source_format attributes. Archived canonical_value.yaml."
- original_slot_id: https://nde.nl/ontology/hc/slot/capacity
revision:
- label: has_or_had_capacity
@ -7991,7 +7992,8 @@ fixes:
and align with best practices for modeling dimensional data.
This would facilitate better integration with other dimension-related data.'
done: false
done: true
response: "Completed 2026-01-22 by claude-sonnet-4. ARCHIVED (unused): capacity slot not imported by any class file. Archived to archive/capacity_archived_20260122.yaml. No migration needed as slot was never used."
- original_slot_id: https://nde.nl/ontology/hc/slot/capacity_cubic_meters
revision:
- label: has_or_had_capacity
@ -8166,7 +8168,8 @@ fixes:
would enhance semantic clarity and allow for richer metadata about each description.
This would align with best practices for descriptive data modeling.'
done: false
done: true
response: "Completed 2026-01-22 by claude-sonnet-4. Migrated FindingAid.yaml Card class to use has_or_had_description + Description (multivalued with language tag). Description.description_type='card' and Description.language='nl' distinguishes from English. Archived card_description.yaml."
- original_slot_id: https://nde.nl/ontology/hc/slot/card_description_en
revision:
- label: has_or_had_description
@ -8209,7 +8212,8 @@ fixes:
would enhance semantic clarity and allow for richer metadata about each description.
This would align with best practices for multilingual data modeling.'
done: false
done: true
response: "Completed 2026-01-22 by claude-sonnet-4. Same migration as card_description - FindingAid.yaml Card class uses has_or_had_description + Description with language='en'. Archived card_description_en.yaml."
- original_slot_id: https://nde.nl/ontology/hc/slot/card_image_url
revision:
- label: has_or_had_image
@ -11332,6 +11336,28 @@ fixes:
type: slot
- label: CapacityTypes
type: class
processed:
status: true
date: '2026-01-22'
agent: claude-claude-sonnet-4-20250514
notes: |
**Migration #59: capacity_type** ✅ COMPLETE
**Pattern**: capacity_type → has_or_had_type + CapacityType/CapacityTypes hierarchy
**Files Created**:
- CapacityType.yaml: Abstract base class for capacity types
- CapacityTypes.yaml: 10 concrete subclasses (Volume, ShelfLength, FloorArea, etc.)
**Files Modified**:
- Capacity.yaml: Migrated capacity_type to has_or_had_type + CapacityType
- Updated imports
- Updated slots list
- Updated slot_usage with CapacityType range
- Updated description examples
- Updated class examples
**Archived**: modules/slots/archive/capacity_type_archived_20260122.yaml
- original_slot_id: https://nde.nl/ontology/hc/slot/capacity_value
revision:
- label: has_or_had_quantity