Refactor schema: Migrate slots to new patterns and create new classes

- Migrated `audio_event_segments` to `has_or_had_segment` with range `AudioEventSegment` in VideoAudioAnnotation.yaml.
- Removed deprecated slots: `approved_by`, `audio_event_segments`, `bay_number`, `box_number`, and `budget_status`.
- Created new classes: `AudioEventSegment`, `BayNumber`, `BoxNumber`, and `BudgetStatus` to encapsulate previously slot-based data.
- Introduced `has_or_had_auxiliary_entities` slot to replace `auxiliary_places` and `auxiliary_platforms`.
- Archived removed slots to maintain historical context.
- Updated LinkMLViewerPage to utilize new schema element popup for better navigation.
This commit is contained in:
kempersc 2026-01-14 15:20:53 +01:00
parent 7691a11e79
commit 5ddb7e818a
22 changed files with 803 additions and 97 deletions

View file

@ -1,12 +1,12 @@
{
"generated": "2026-01-14T14:13:07.428Z",
"generated": "2026-01-14T14:15:37.461Z",
"schemaRoot": "/schemas/20251121/linkml",
"totalFiles": 2884,
"totalFiles": 2883,
"categoryCounts": {
"main": 4,
"class": 679,
"class": 683,
"enum": 147,
"slot": 2050,
"slot": 2045,
"module": 4
},
"categories": [
@ -280,6 +280,11 @@
"path": "modules/classes/AssociationArchive.yaml",
"category": "class"
},
{
"name": "AudioEventSegment",
"path": "modules/classes/AudioEventSegment.yaml",
"category": "class"
},
{
"name": "AudiovisualArchive",
"path": "modules/classes/AudiovisualArchive.yaml",
@ -345,6 +350,11 @@
"path": "modules/classes/BankArchiveRecordSetTypes.yaml",
"category": "class"
},
{
"name": "BayNumber",
"path": "modules/classes/BayNumber.yaml",
"category": "class"
},
{
"name": "Bildstelle",
"path": "modules/classes/Bildstelle.yaml",
@ -380,6 +390,11 @@
"path": "modules/classes/Bookplate.yaml",
"category": "class"
},
{
"name": "BoxNumber",
"path": "modules/classes/BoxNumber.yaml",
"category": "class"
},
{
"name": "BranchOffice",
"path": "modules/classes/BranchOffice.yaml",
@ -400,6 +415,11 @@
"path": "modules/classes/Budget.yaml",
"category": "class"
},
{
"name": "BudgetStatus",
"path": "modules/classes/BudgetStatus.yaml",
"category": "class"
},
{
"name": "BudgetType",
"path": "modules/classes/BudgetType.yaml",
@ -4227,11 +4247,6 @@
"path": "modules/slots/applies_to_call.yaml",
"category": "slot"
},
{
"name": "approved_by",
"path": "modules/slots/approved_by.yaml",
"category": "slot"
},
{
"name": "approximate",
"path": "modules/slots/approximate.yaml",
@ -4252,11 +4267,6 @@
"path": "modules/slots/asserted_by.yaml",
"category": "slot"
},
{
"name": "audio_event_segments",
"path": "modules/slots/audio_event_segments.yaml",
"category": "slot"
},
{
"name": "authors",
"path": "modules/slots/authors.yaml",
@ -4282,11 +4292,6 @@
"path": "modules/slots/base_surname.yaml",
"category": "slot"
},
{
"name": "bay_number",
"path": "modules/slots/bay_number.yaml",
"category": "slot"
},
{
"name": "begin_of_the_begin",
"path": "modules/slots/begin_of_the_begin.yaml",
@ -4342,11 +4347,6 @@
"path": "modules/slots/bounding_box.yaml",
"category": "slot"
},
{
"name": "box_number",
"path": "modules/slots/box_number.yaml",
"category": "slot"
},
{
"name": "branch_head",
"path": "modules/slots/branch_head.yaml",
@ -4367,11 +4367,6 @@
"path": "modules/slots/budget_currency.yaml",
"category": "slot"
},
{
"name": "budget_status",
"path": "modules/slots/budget_status.yaml",
"category": "slot"
},
{
"name": "building_floor_area_sqm",
"path": "modules/slots/building_floor_area_sqm.yaml",

View file

@ -0,0 +1,172 @@
id: https://nde.nl/ontology/hc/class/AudioEventSegment
name: audio_event_segment_class
title: Audio Event Segment Class
description: |
A temporal segment of audio containing a detected audio event (speech, music, silence, etc.).
MIGRATED from audio_event_segments slot (Rule 53).
Uses generic has_or_had_segment slot with range narrowed to AudioEventSegment.
imports:
- linkml:types
- ../slots/start_seconds
- ../slots/end_seconds
- ../slots/start_time
- ../slots/end_time
- ../slots/segment_index
- ../slots/segment_text
- ../slots/confidence
- ../slots/specificity_annotation
- ../slots/template_specificity
- ./SpecificityAnnotation
- ./TemplateSpecificityScores
- ../enums/AudioEventTypeEnum
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
dcterms: http://purl.org/dc/terms/
crm: http://www.cidoc-crm.org/cidoc-crm/
oa: http://www.w3.org/ns/oa#
ma: http://www.w3.org/ns/ma-ont#
default_prefix: hc
classes:
AudioEventSegment:
class_uri: hc:AudioEventSegment
description: |
A temporal segment of audio containing a detected audio event.
**DEFINITION**:
AudioEventSegment represents a bounded temporal portion of audio content
where a specific type of audio event has been detected. This includes:
- Speech segments (with optional speaker/language info)
- Music segments (with optional genre/type info)
- Silence segments (gaps between audio)
- Sound event segments (applause, laughter, ambient sounds)
- Noise segments (for quality assessment)
**RELATIONSHIP TO VideoTimeSegment**:
AudioEventSegment is a specialized sibling of VideoTimeSegment:
- Both extend CIDOC-CRM E52_Time-Span concept
- VideoTimeSegment: general video temporal segments
- AudioEventSegment: audio-specific event segments
**AUDIO EVENT TYPES**:
| Event Type | Description | Example |
|------------|-------------|---------|
| SPEECH | Human speech detected | Interview segment |
| MUSIC | Music detected | Background soundtrack |
| SILENCE | Very low or no audio | Gap between segments |
| SOUND_EVENT | Non-speech/music sounds | Applause, footsteps |
| NOISE | Noise/interference | Quality issue marker |
| MIXED | Multiple event types | Overlapping audio |
**HERITAGE USE CASES**:
| Content Type | Application |
|--------------|-------------|
| Oral histories | Speech segment identification |
| Virtual tours | Background music detection |
| Lecture recordings | Audience reaction segments |
| Conservation videos | Narration vs ambient sound |
| Archival footage | Audio quality assessment |
**PROVENANCE**:
Created as part of slot migration (Rule 53) from deprecated
`audio_event_segments` slot to generic `has_or_had_segment` pattern.
exact_mappings:
- hc:AudioEventSegment
close_mappings:
- crm:E52_Time-Span
- ma:MediaFragment
related_mappings:
- oa:FragmentSelector
slots:
- start_seconds
- end_seconds
- start_time
- end_time
- segment_index
- segment_text
- confidence
- specificity_annotation
- template_specificity
attributes:
audio_event_type:
range: AudioEventTypeEnum
required: true
description: The type of audio event detected in this segment.
examples:
- value: SPEECH
description: Speech detected in this segment
- value: MUSIC
description: Music detected in this segment
slot_usage:
start_seconds:
range: float
required: true
minimum_value: 0.0
description: Start time in seconds for this audio event segment.
examples:
- value: 0.0
description: Audio event starts at beginning
- value: 45.5
description: Audio event starts at 45.5 seconds
end_seconds:
range: float
required: true
minimum_value: 0.0
description: End time in seconds for this audio event segment.
examples:
- value: 15.0
description: Audio event ends at 15 seconds
- value: 60.0
description: Audio event ends at 1 minute
start_time:
range: string
required: false
pattern: "^PT(\\d+H)?(\\d+M)?(\\d+(\\.\\d+)?S)?$"
description: Start time in ISO 8601 duration format.
examples:
- value: PT0M30S
description: 30 seconds from start
end_time:
range: string
required: false
pattern: "^PT(\\d+H)?(\\d+M)?(\\d+(\\.\\d+)?S)?$"
description: End time in ISO 8601 duration format.
examples:
- value: PT0M45S
description: 45 seconds from start
segment_text:
range: string
required: false
description: Text content for this segment (e.g., speech transcript, music description).
examples:
- value: "Welcome to the Rijksmuseum"
description: Speech transcript text
- value: "Classical background music"
description: Music segment description
confidence:
range: float
required: false
minimum_value: 0.0
maximum_value: 1.0
description: Confidence score (0.0-1.0) for the audio event detection.
examples:
- value: 0.95
description: High confidence detection
- value: 0.72
description: Medium confidence detection
comments:
- Audio event segment for speech, music, silence, sound event detection
- Temporal boundaries with start/end seconds (primary) and ISO 8601 (secondary)
- Confidence scoring for AI-generated detections
- Part of Rule 53 slot migration from audio_event_segments
see_also:
- https://www.w3.org/TR/media-frags/
- https://www.w3.org/ns/ma-ont

View file

@ -0,0 +1,92 @@
id: https://nde.nl/ontology/hc/class/BayNumber
name: bay_number_class
title: Bay Number Class
description: |
A storage bay or section identifier within a storage row.
MIGRATED from bay_number slot (Rule 53).
Uses generic has_or_had_identifier slot with range narrowed to BayNumber.
imports:
- linkml:types
- ../slots/identifier_value
- ../slots/specificity_annotation
- ../slots/template_specificity
- ./SpecificityAnnotation
- ./TemplateSpecificityScores
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
dcterms: http://purl.org/dc/terms/
crm: http://www.cidoc-crm.org/cidoc-crm/
default_prefix: hc
classes:
BayNumber:
class_uri: hc:BayNumber
description: |
An identifier for a storage bay or section within a row/aisle of a storage facility.
**DEFINITION**:
BayNumber represents a discrete location identifier within a storage system.
In heritage storage facilities, storage is typically organized hierarchically:
```
Storage Facility
└── Zone (environmental control)
└── Row/Aisle (physical corridor)
└── Bay/Section (THIS CLASS - vertical unit in row)
└── Shelf (horizontal level within bay)
└── Storage Unit (box, drawer, etc.)
```
**TYPICAL VALUES**:
| Format | Example | Description |
|--------|---------|-------------|
| Numeric | "3", "12" | Sequential bay numbers |
| Alphabetic | "A", "C", "AA" | Lettered bays |
| Mixed | "3A", "B2" | Combined formats |
| Descriptive | "North-3" | Location-based |
**HERITAGE USE CASES**:
| Institution Type | Bay Naming Convention |
|------------------|----------------------|
| Archives | Sequential numeric (1, 2, 3...) |
| Museums | Alphanumeric by collection area |
| Libraries | By call number range |
| Natural history | By specimen type |
**PROVENANCE**:
Created as part of slot migration (Rule 53) from deprecated
`bay_number` slot to generic `has_or_had_identifier` pattern.
exact_mappings:
- hc:BayNumber
close_mappings:
- crm:E42_Identifier
related_mappings:
- schema:identifier
slots:
- specificity_annotation
- template_specificity
attributes:
value:
range: string
required: true
description: The bay number/identifier value.
examples:
- value: "3"
description: Numeric bay number
- value: "C"
description: Alphabetic bay identifier
- value: "North-3"
description: Location-descriptive bay
comments:
- Storage bay identifier within a row/aisle
- Part of hierarchical storage location addressing
- Part of Rule 53 slot migration from bay_number
see_also:
- https://nde.nl/ontology/hc/StorageUnit

View file

@ -0,0 +1,97 @@
id: https://nde.nl/ontology/hc/class/BoxNumber
name: box_number_class
title: Box Number Class
description: |
A storage box number or position identifier on a shelf.
MIGRATED from box_number slot (Rule 53).
Uses generic has_or_had_identifier slot with range narrowed to BoxNumber.
imports:
- linkml:types
- ../slots/identifier_value
- ../slots/specificity_annotation
- ../slots/template_specificity
- ./SpecificityAnnotation
- ./TemplateSpecificityScores
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
dcterms: http://purl.org/dc/terms/
crm: http://www.cidoc-crm.org/cidoc-crm/
default_prefix: hc
classes:
BoxNumber:
class_uri: hc:BoxNumber
description: |
An identifier for a storage box or its position on a shelf.
**DEFINITION**:
BoxNumber represents the position or identifier of a storage box within
a storage unit hierarchy. Archive boxes are the most common physical
containers for heritage materials, particularly in archives.
```
Shelf
└── Box 1 (THIS CLASS - position on shelf)
└── Box 2
└── Box 3
...
```
**TYPICAL VALUES**:
| Type | Example | Description |
|------|---------|-------------|
| Sequential | 1, 2, 3, 12 | Position on shelf left-to-right |
| Inventory | 145, 2024-0042 | Unique box inventory number |
| Combined | 12.3 | Bay 12, Box 3 |
**ARCHIVE BOX STANDARDS**:
Heritage institutions typically use acid-free archive boxes conforming to:
- ISO 16245 (Boxes for documents)
- ANSI/NISO Z39.77 (Guidelines for materials in archives)
**HERITAGE USE CASES**:
| Material Type | Box Format |
|---------------|------------|
| Documents | Standard archive box (legal/letter) |
| Photographs | Photo storage boxes |
| Oversized | Flat boxes, tubes |
| Fragile | Custom padded boxes |
**PROVENANCE**:
Created as part of slot migration (Rule 53) from deprecated
`box_number` slot to generic `has_or_had_identifier` pattern.
exact_mappings:
- hc:BoxNumber
close_mappings:
- crm:E42_Identifier
related_mappings:
- schema:identifier
slots:
- specificity_annotation
- template_specificity
attributes:
value:
range: integer
required: true
minimum_value: 1
description: The box number (position on shelf or inventory number).
examples:
- value: 12
description: Box at position 12 on shelf
- value: 145
description: Archive box inventory number 145
comments:
- Storage box position identifier
- Typically integer representing shelf position or inventory number
- Part of Rule 53 slot migration from box_number
see_also:
- https://nde.nl/ontology/hc/StorageUnit
- https://www.wikidata.org/wiki/Q854619

View file

@ -16,7 +16,10 @@ imports:
- ../slots/budget_currency
- ../slots/has_or_had_description
- ../slots/has_or_had_label
- ../slots/budget_status
# REMOVED - migrated to has_or_had_status with range BudgetStatus (Rule 53)
# - ../slots/budget_status
- ../slots/has_or_had_status
- ./BudgetStatus
- ../slots/has_or_had_type
- ../slots/capital_budget
- ./BudgetType
@ -97,7 +100,9 @@ classes:
- budget_currency
- has_or_had_description
- has_or_had_label
- budget_status
# MIGRATED from budget_status to has_or_had_status (Rule 53)
# - budget_status
- has_or_had_status
- has_or_had_type
- capital_budget
- digitization_budget
@ -249,12 +254,25 @@ classes:
description: Agent (person/organization) that approved this budget
range: string
required: false
budget_status:
range: string
# MIGRATED from budget_status to has_or_had_status (Rule 53)
# budget_status:
# range: string
# required: true
# examples:
# - value: ACTIVE
# description: Current fiscal year budget in effect
has_or_had_status:
description: |
MIGRATED from budget_status (Rule 53).
Current status of this budget in its lifecycle.
Uses BudgetStatus class for structured status tracking.
range: BudgetStatus
required: true
examples:
- value: ACTIVE
description: Current fiscal year budget in effect
- value: '{value: "ACTIVE", effective_date: "2024-01-01"}'
description: Budget currently in effect
- value: '{value: "DRAFT", effective_date: "2023-10-01"}'
description: Budget under development
revision_number:
range: integer
required: false
@ -319,7 +337,9 @@ classes:
endowment_draw: 5000000.0
approval_date: '2023-11-15'
is_or_was_approved_by: Board of Directors
budget_status: ACTIVE
has_or_had_status:
value: ACTIVE
effective_date: '2024-01-01'
refers_to_custodian: https://nde.nl/ontology/hc/nl-nh-ams-m-rm-q190804
description: Major museum annual operating budget
- value:
@ -341,6 +361,8 @@ classes:
internal_funding: 2500000.0
approval_date: '2024-03-01'
is_or_was_approved_by: Province of Noord-Holland
budget_status: ACTIVE
has_or_had_status:
value: ACTIVE
effective_date: '2024-04-01'
refers_to_custodian: https://nde.nl/ontology/hc/nl-nh-haa-a-nha
description: Regional archive government-funded budget

View file

@ -0,0 +1,105 @@
id: https://nde.nl/ontology/hc/class/BudgetStatus
name: budget_status_class
title: Budget Status Class
description: |
Status of a heritage custodian budget throughout its lifecycle.
MIGRATED from budget_status slot (Rule 53).
Uses generic has_or_had_status slot with range narrowed to BudgetStatus.
imports:
- linkml:types
- ../slots/specificity_annotation
- ../slots/template_specificity
- ./SpecificityAnnotation
- ./TemplateSpecificityScores
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
dcterms: http://purl.org/dc/terms/
frapo: http://purl.org/cerif/frapo/
default_prefix: hc
classes:
BudgetStatus:
class_uri: hc:BudgetStatus
description: |
Status of a budget document throughout its lifecycle.
**DEFINITION**:
BudgetStatus represents the current state of a budget document
as it moves through the approval and execution lifecycle.
**BUDGET LIFECYCLE STAGES**:
```
DRAFT → PROPOSED → APPROVED → ACTIVE → REVISED → CLOSED
↓ ↓
REJECTED SUPERSEDED
```
**STATUS VALUES**:
| Status | Description | Typical Duration |
|--------|-------------|------------------|
| DRAFT | Under development | Weeks/months |
| PROPOSED | Submitted for approval | Days/weeks |
| APPROVED | Officially approved | Until fiscal start |
| ACTIVE | Currently in effect | Fiscal year |
| REVISED | Modified after approval | Variable |
| CLOSED | Fiscal period ended | Permanent |
| REJECTED | Not approved | Terminal |
| SUPERSEDED | Replaced by revision | Terminal |
**HERITAGE INSTITUTION CONTEXT**:
Heritage institution budgets typically follow these approval paths:
| Institution Type | Approval Authority |
|------------------|-------------------|
| Museum (stichting) | Board of Directors |
| Regional Archive | Provincial Government |
| National Library | Ministry of Culture |
| University Collection | University Board |
**PROVENANCE**:
Created as part of slot migration (Rule 53) from deprecated
`budget_status` slot to generic `has_or_had_status` pattern.
exact_mappings:
- hc:BudgetStatus
close_mappings:
- schema:status
related_mappings:
- dcterms:status
slots:
- specificity_annotation
- template_specificity
attributes:
value:
range: string
required: true
description: |
The budget status value.
Valid values: DRAFT, PROPOSED, APPROVED, ACTIVE, REVISED, CLOSED, REJECTED, SUPERSEDED
examples:
- value: ACTIVE
description: Budget currently in effect
- value: DRAFT
description: Budget under development
- value: CLOSED
description: Fiscal period ended
effective_date:
range: date
required: false
description: Date when this status became effective.
examples:
- value: "2024-01-01"
description: Status effective from start of year
comments:
- Budget lifecycle status tracking
- Supports audit trail of budget state changes
- Part of Rule 53 slot migration from budget_status
see_also:
- https://nde.nl/ontology/hc/Budget

View file

@ -31,7 +31,7 @@ imports:
- ../slots/light_max_lux
- ../slots/particulate_max
- ../slots/pest_management_required
- ../slots/policy_approved_by
- ../slots/is_or_was_approved_by # MIGRATED: was ../slots/policy_approved_by (2026-01-15)
- ../slots/policy_description
- ../slots/policy_effective_from
- ../slots/policy_effective_to
@ -46,6 +46,7 @@ imports:
- ../slots/uv_filtered_required
- ./SpecificityAnnotation
- ./TemplateSpecificityScores
- ./Approver # Added for is_or_was_approved_by migration (2026-01-15)
classes:
StorageConditionPolicy:
class_uri: odrl:Policy
@ -91,7 +92,7 @@ classes:
- note
- particulate_max
- pest_management_required
- policy_approved_by
- is_or_was_approved_by # MIGRATED: was policy_approved_by (2026-01-15)
- policy_description
- policy_effective_from
- policy_effective_to

View file

@ -17,8 +17,13 @@ imports:
- ../slots/unit_name
- ../slots/unit_type
- ../slots/capacity_item
- ../slots/bay_number
- ../slots/box_number
# REMOVED - migrated to has_or_had_identifier with range BayNumber (Rule 53)
# - ../slots/bay_number
# REMOVED - migrated to has_or_had_identifier with range BoxNumber (Rule 53)
# - ../slots/box_number
- ../slots/has_or_had_identifier
- ./BayNumber
- ./BoxNumber
- ../slots/current_item_count
- ../slots/drawer_number
- ../slots/part_of_storage
@ -75,8 +80,10 @@ classes:
- hc:EnvironmentalZone
- schema:Place
slots:
- bay_number
- box_number
# MIGRATED from bay_number and box_number to has_or_had_identifier (Rule 53)
# - bay_number
# - box_number
- has_or_had_identifier
- capacity_item
- current_item_count
- drawer_number
@ -124,11 +131,22 @@ classes:
- value: A
- value: '12'
- value: North-3
bay_number:
has_or_had_identifier:
description: |
MIGRATED from bay_number and box_number (Rule 53).
Storage location identifiers including bay and box numbers.
Use BayNumber for bay/section identifiers, BoxNumber for box positions.
range: string
multivalued: true
examples:
- value: '3'
- value: C
- value: '[{type: BayNumber, value: "3"}, {type: BoxNumber, value: 12}]'
description: Bay 3, Box 12
# DEPRECATED - use has_or_had_identifier with range BayNumber
# bay_number:
# range: string
# examples:
# - value: '3'
# - value: C
shelf_number:
range: integer
examples:
@ -138,10 +156,11 @@ classes:
range: integer
examples:
- value: 3
box_number:
range: integer
examples:
- value: 12
# DEPRECATED - use has_or_had_identifier with range BoxNumber
# box_number:
# range: integer
# examples:
# - value: 12
capacity_item:
range: integer
current_item_count:

View file

@ -5,7 +5,10 @@ imports:
- linkml:types
- ./VideoAnnotation
- ./VideoTimeSegment
- ../slots/audio_event_segments
- ./AudioEventSegment
# REMOVED - migrated to has_or_had_segment with range AudioEventSegment (Rule 53)
# - ../slots/audio_event_segments
- ../slots/has_or_had_segment
- ../slots/has_audio_quality_score
- ../slots/diarization_confidence
- ../slots/diarization_enabled
@ -112,7 +115,9 @@ classes:
- wikidata:Q11028
- wikidata:Q638
slots:
- audio_event_segments
# MIGRATED from audio_event_segments to has_or_had_segment (Rule 53)
# - audio_event_segments
- has_or_had_segment
- audio_quality_score
- diarization_enabled
- has_or_had_diarization_segment
@ -138,6 +143,20 @@ classes:
- has_or_had_speech_segment
- template_specificity
slot_usage:
has_or_had_segment:
description: |
MIGRATED from audio_event_segments (Rule 53).
Audio event segments detected in the video content.
range: AudioEventSegment
multivalued: true
required: false
inlined_as_list: true
examples:
- value: '[{audio_event_type: SPEECH, start_seconds: 0.0, end_seconds: 15.0, segment_text: "Speech detected - Speaker 1", confidence: 0.95}]'
description: Speech detection segment
- value: '[{audio_event_type: MUSIC, start_seconds: 30.0, end_seconds: 60.0, segment_text: "Background classical music", confidence: 0.88}]'
description: Music detection segment
# NOTE: has_audio_event_segment is deprecated - use has_or_had_segment above
has_audio_event_segment:
range: VideoTimeSegment
multivalued: true

View file

@ -1344,3 +1344,106 @@ fixes:
type: slot
- label: WritingSystem
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/worldcat_id
revision:
- label: has_or_had_identifier
type: slot
- label: WorldCatIdentifier
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/workshop_space
revision:
- label: has_or_had_quantity
type: slot
- label: Quantity
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/work_location
revision:
- label: has_or_had_location
type: slot
- label: Location
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/word_count
revision:
- label: has_or_had_quantity
type: slot
- label: WordCount
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/within_place
revision:
- label: is_or_was_located_within
type: slot
- label: Place
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/within_auxiliary_place
revision:
- label: is_or_was_located_within
type: slot
- label: Place
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/wikidata_mapping_rationale
revision:
- label: has_or_had_rationale
type: slot
- label: Rationale
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/wikidata_mapping
revision:
- label: is_or_was_related_to
type: slot
- label: WikiDataEntry
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/wikidata_id
revision:
- label: has_or_had_identifier
type: slot
- label: WikiDataIdentifier
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/wikidata_equivalent
revision:
- label: is_or_was_equivalent_to
type: slot
- label: WikiDataEntry
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/wikidata_entity_label
revision:
- label: has_or_had_label
type: slot
- label: Label
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/wikidata_entity_id
revision:
- label: has_or_had_identifier
type: slot
- label: WikiDataIdentifier
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/wikidata_entity
revision:
- label: has_or_had_identifier
type: slot
- label: WikiDataIdentifier
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/wikidata_class
revision:
- label: is_or_was_instance_of
type: slot
- label: WikiDataEntry
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/wikidata_alignment
revision:
- label: is_or_was_related_to
type: slot
- label: WikiDataEntry
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/wikidata
revision:
- label: is_or_was_instance_of
type: slot
- label: WikiDataEntry
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/whatsapp_enrichment
revision:
- label: has_or_had_contact_details
type: slot
- label: WhatsAppProfile
type: class
-

View file

@ -2595,7 +2595,7 @@ const LinkMLViewerPage: React.FC = () => {
<button
key={subclass}
className="linkml-viewer__exports-link"
onClick={() => navigateToClass(subclass)}
onClick={() => setSchemaElementPopup({ name: subclass, type: 'class' })}
>
{subclass}
</button>
@ -2612,7 +2612,7 @@ const LinkMLViewerPage: React.FC = () => {
<button
key={user}
className="linkml-viewer__exports-link"
onClick={() => navigateToClass(user)}
onClick={() => setSchemaElementPopup({ name: user, type: 'class' })}
>
{user}
</button>
@ -2642,7 +2642,7 @@ const LinkMLViewerPage: React.FC = () => {
<button
key={`${className}-${slotName}`}
className="linkml-viewer__exports-link"
onClick={() => navigateToClass(className)}
onClick={() => setSchemaElementPopup({ name: className, type: 'class' })}
title={`via slot: ${slotName}`}
>
{className} <span className="linkml-viewer__exports-via">via {slotName}</span>
@ -2660,7 +2660,7 @@ const LinkMLViewerPage: React.FC = () => {
<button
key={refClass}
className="linkml-viewer__exports-link"
onClick={() => navigateToClass(refClass)}
onClick={() => setSchemaElementPopup({ name: refClass, type: 'class' })}
>
{refClass}
</button>
@ -4158,6 +4158,16 @@ const LinkMLViewerPage: React.FC = () => {
onClose={() => setOntologyPopupCurie(null)}
/>
)}
{/* Schema Element Popup - renders when clicking class/slot/enum in Imports/Exports */}
{schemaElementPopup && (
<SchemaElementPopup
elementName={schemaElementPopup.name}
elementType={schemaElementPopup.type}
onClose={() => setSchemaElementPopup(null)}
onNavigate={handleSchemaElementNavigate}
/>
)}
</div>
);
};

View file

@ -1,12 +1,12 @@
{
"generated": "2026-01-14T14:14:23.659Z",
"generated": "2026-01-14T14:20:53.577Z",
"schemaRoot": "/schemas/20251121/linkml",
"totalFiles": 2884,
"totalFiles": 2883,
"categoryCounts": {
"main": 4,
"class": 679,
"class": 683,
"enum": 147,
"slot": 2050,
"slot": 2045,
"module": 4
},
"categories": [
@ -280,6 +280,11 @@
"path": "modules/classes/AssociationArchive.yaml",
"category": "class"
},
{
"name": "AudioEventSegment",
"path": "modules/classes/AudioEventSegment.yaml",
"category": "class"
},
{
"name": "AudiovisualArchive",
"path": "modules/classes/AudiovisualArchive.yaml",
@ -345,6 +350,11 @@
"path": "modules/classes/BankArchiveRecordSetTypes.yaml",
"category": "class"
},
{
"name": "BayNumber",
"path": "modules/classes/BayNumber.yaml",
"category": "class"
},
{
"name": "Bildstelle",
"path": "modules/classes/Bildstelle.yaml",
@ -380,6 +390,11 @@
"path": "modules/classes/Bookplate.yaml",
"category": "class"
},
{
"name": "BoxNumber",
"path": "modules/classes/BoxNumber.yaml",
"category": "class"
},
{
"name": "BranchOffice",
"path": "modules/classes/BranchOffice.yaml",
@ -400,6 +415,11 @@
"path": "modules/classes/Budget.yaml",
"category": "class"
},
{
"name": "BudgetStatus",
"path": "modules/classes/BudgetStatus.yaml",
"category": "class"
},
{
"name": "BudgetType",
"path": "modules/classes/BudgetType.yaml",
@ -4227,11 +4247,6 @@
"path": "modules/slots/applies_to_call.yaml",
"category": "slot"
},
{
"name": "approved_by",
"path": "modules/slots/approved_by.yaml",
"category": "slot"
},
{
"name": "approximate",
"path": "modules/slots/approximate.yaml",
@ -4252,11 +4267,6 @@
"path": "modules/slots/asserted_by.yaml",
"category": "slot"
},
{
"name": "audio_event_segments",
"path": "modules/slots/audio_event_segments.yaml",
"category": "slot"
},
{
"name": "authors",
"path": "modules/slots/authors.yaml",
@ -4282,11 +4292,6 @@
"path": "modules/slots/base_surname.yaml",
"category": "slot"
},
{
"name": "bay_number",
"path": "modules/slots/bay_number.yaml",
"category": "slot"
},
{
"name": "begin_of_the_begin",
"path": "modules/slots/begin_of_the_begin.yaml",
@ -4342,11 +4347,6 @@
"path": "modules/slots/bounding_box.yaml",
"category": "slot"
},
{
"name": "box_number",
"path": "modules/slots/box_number.yaml",
"category": "slot"
},
{
"name": "branch_head",
"path": "modules/slots/branch_head.yaml",
@ -4367,11 +4367,6 @@
"path": "modules/slots/budget_currency.yaml",
"category": "slot"
},
{
"name": "budget_status",
"path": "modules/slots/budget_status.yaml",
"category": "slot"
},
{
"name": "building_floor_area_sqm",
"path": "modules/slots/building_floor_area_sqm.yaml",

View file

@ -14,7 +14,9 @@ imports:
- ./GeoSpatialPlace
- ../enums/PlaceSpecificityEnum
- ./ReconstructedEntity
- ../slots/auxiliary_places
# REMOVED - migrated to has_or_had_auxiliary_entities with range AuxiliaryPlace (Rule 53)
# - ../slots/auxiliary_places
- ../slots/has_or_had_auxiliary_entities
- ../slots/place_name
- ../slots/place_language
- ../slots/place_specificity
@ -65,7 +67,9 @@ classes:
- prov:Entity
- crm:E27_Site
slots:
- auxiliary_places
# MIGRATED from auxiliary_places to has_or_had_auxiliary_entities (Rule 53)
# - auxiliary_places
- has_or_had_auxiliary_entities
- country
- has_feature_type
- has_geospatial_location
@ -171,7 +175,11 @@ classes:
has_accuracy_in_meters: 50.0
spatial_resolution: NEIGHBORHOOD
description: Approximate location from neighborhood reference
has_auxiliary_place:
# MIGRATED from auxiliary_places / has_auxiliary_place (Rule 53)
has_or_had_auxiliary_entities:
description: |
MIGRATED from auxiliary_places (Rule 53).
Subordinate or auxiliary locations associated with this custodian place.
range: AuxiliaryPlace
multivalued: true
inlined_as_list: true
@ -211,7 +219,7 @@ classes:
- Link to GeoSpatialPlace via has_geospatial_location slot (TOOI pattern)
- Can be vague ('the mansion') or specific ('het museum op het Museumplein 1')
- Historical place names capture how custodians were referenced in archival documents
- 'NEW: auxiliary_places links to subordinate AuxiliaryPlace sites (depots, branches, labs)'
- 'MIGRATED: auxiliary_places → has_or_had_auxiliary_entities for AuxiliaryPlace sites (depots, branches, labs)'
- Hierarchical pattern mirrors CustodianName → CustodianAppellation relationship
see_also:
- http://www.cidoc-crm.org/html/cidoc_crm_v7.1.3.html#E53

View file

@ -0,0 +1,58 @@
id: https://nde.nl/ontology/hc/slot/has_or_had_auxiliary_entities
name: has_or_had_auxiliary_entities_slot
title: Has Or Had Auxiliary Entities Slot
description: |
Generic slot for auxiliary/supporting entities associated with a primary entity.
CREATED as part of slot migration (Rule 53) to replace:
- `auxiliary_places` → range: AuxiliaryPlace
- `auxiliary_platforms` → range: AuxiliaryPlatform
Follows RiC-O temporal predicate pattern (has_or_had_*).
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
rico: https://www.ica.org/standards/RiC/ontology#
schema: http://schema.org/
imports:
- linkml:types
default_prefix: hc
slots:
has_or_had_auxiliary_entities:
description: >-
Auxiliary or supporting entities associated with the primary entity.
**SEMANTIC PATTERN**:
This slot follows the RiC-O temporal predicate pattern (has_or_had_*)
to indicate that auxiliary relationships may change over time.
**REPLACES**:
- `auxiliary_places` - Physical locations supporting the main entity
- `auxiliary_platforms` - Digital platforms supporting the main entity
**USE CASES**:
1. **Storage locations**: Off-site storage, external repositories
2. **Branch facilities**: Satellite offices, reading rooms
3. **Partner platforms**: External discovery services, aggregators
slot_uri: rico:hasOrHadPart
range: uriorcurie
multivalued: true
exact_mappings:
- rico:hasOrHadPart
close_mappings:
- schema:hasPart
annotations:
custodian_types: '["*"]'
custodian_types_rationale: Applicable to all heritage custodian types.
custodian_types_primary: M
specificity_score: 0.4
specificity_rationale: Broadly applicable auxiliary entity relationship.
examples:
- value: "hc:auxiliary-place/rijksmuseum-depot-amersfoort"
description: Off-site storage depot
- value: "hc:auxiliary-platform/europeana-aggregation"
description: External discovery platform

View file

@ -421,10 +421,15 @@ fixes:
- original_slot_id: https://nde.nl/ontology/hc/slot/approved_by
processed:
status: false
timestamp: null
session: null
notes: "Requires Approver class creation"
status: true
timestamp: '2026-01-14T11:15:00Z'
session: "slot-migration-session-8"
notes: |
MIGRATED: approved_by → is_or_was_approved_by + Approver
- is_or_was_approved_by slot already existed
- Approver class already existed
- Budget.yaml already migrated (session 2026-01-15)
- Archived to modules/slots/archive/approved_by_archived_20260114.yaml
revision:
- label: is_or_was_approved_by
type: slot
@ -610,10 +615,15 @@ fixes:
- original_slot_id: https://nde.nl/ontology/hc/slot/auxiliary_places
processed:
status: false
timestamp: null
session: null
notes: "Maps to existing AuxiliaryPlace class"
status: true
timestamp: '2026-01-14T11:30:00Z'
session: "slot-migration-session-8"
notes: |
MIGRATED: auxiliary_places → has_or_had_auxiliary_entities + AuxiliaryPlace
- Created has_or_had_auxiliary_entities.yaml slot
- AuxiliaryPlace class already existed
- Updated CustodianPlace.yaml: imports, slots list, slot_usage
- Archived to modules/slots/archive/auxiliary_places_archived_20260114.yaml
revision:
- label: has_or_had_auxiliary_entities
type: slot