feat: Migrate multiple slots to structured classes and update processing notes

This commit is contained in:
kempersc 2026-01-26 01:41:04 +01:00
parent 48d89206f9
commit fba1ab9353
121 changed files with 4478 additions and 650 deletions

View file

@ -1,12 +1,12 @@
{
"generated": "2026-01-25T11:47:39.065Z",
"generated": "2026-01-25T23:23:44.391Z",
"schemaRoot": "/schemas/20251121/linkml",
"totalFiles": 3045,
"totalFiles": 3044,
"categoryCounts": {
"main": 4,
"class": 1026,
"class": 1033,
"enum": 154,
"slot": 1857,
"slot": 1849,
"module": 4
},
"categories": [
@ -1490,6 +1490,11 @@
"path": "modules/classes/DeviceTypes.yaml",
"category": "class"
},
{
"name": "DiarizationStatus",
"path": "modules/classes/DiarizationStatus.yaml",
"category": "class"
},
{
"name": "DigitalArchive",
"path": "modules/classes/DigitalArchive.yaml",
@ -1505,11 +1510,21 @@
"path": "modules/classes/DigitalArchiveRecordSetTypes.yaml",
"category": "class"
},
{
"name": "DigitalConfidence",
"path": "modules/classes/DigitalConfidence.yaml",
"category": "class"
},
{
"name": "DigitalPlatform",
"path": "modules/classes/DigitalPlatform.yaml",
"category": "class"
},
{
"name": "DigitalPlatformScore",
"path": "modules/classes/DigitalPlatformScore.yaml",
"category": "class"
},
{
"name": "DigitalPlatformType",
"path": "modules/classes/DigitalPlatformType.yaml",
@ -1575,6 +1590,21 @@
"path": "modules/classes/DigitalPlatformV2TransformationMetadata.yaml",
"category": "class"
},
{
"name": "DigitalPresence",
"path": "modules/classes/DigitalPresence.yaml",
"category": "class"
},
{
"name": "DigitalPresenceType",
"path": "modules/classes/DigitalPresenceType.yaml",
"category": "class"
},
{
"name": "DigitalProficiency",
"path": "modules/classes/DigitalProficiency.yaml",
"category": "class"
},
{
"name": "DimArchives",
"path": "modules/classes/DimArchives.yaml",
@ -4045,6 +4075,11 @@
"path": "modules/classes/SourceWork.yaml",
"category": "class"
},
{
"name": "Speaker",
"path": "modules/classes/Speaker.yaml",
"category": "class"
},
{
"name": "SpecialCollection",
"path": "modules/classes/SpecialCollection.yaml",
@ -6697,71 +6732,11 @@
"path": "modules/slots/description_type.yaml",
"category": "slot"
},
{
"name": "device_count",
"path": "modules/slots/device_count.yaml",
"category": "slot"
},
{
"name": "diarization_confidence",
"path": "modules/slots/diarization_confidence.yaml",
"category": "slot"
},
{
"name": "diarization_enabled",
"path": "modules/slots/diarization_enabled.yaml",
"category": "slot"
},
{
"name": "diarization_end_seconds",
"path": "modules/slots/diarization_end_seconds.yaml",
"category": "slot"
},
{
"name": "diarization_speaker_id",
"path": "modules/slots/diarization_speaker_id.yaml",
"category": "slot"
},
{
"name": "diarization_speaker_label",
"path": "modules/slots/diarization_speaker_label.yaml",
"category": "slot"
},
{
"name": "diarization_start_seconds",
"path": "modules/slots/diarization_start_seconds.yaml",
"category": "slot"
},
{
"name": "digital_confidence",
"path": "modules/slots/digital_confidence.yaml",
"category": "slot"
},
{
"name": "digital_indicator",
"path": "modules/slots/digital_indicator.yaml",
"category": "slot"
},
{
"name": "digital_platform",
"path": "modules/slots/digital_platform.yaml",
"category": "slot"
},
{
"name": "digital_platform_score",
"path": "modules/slots/digital_platform_score.yaml",
"category": "slot"
},
{
"name": "digital_presence_type",
"path": "modules/slots/digital_presence_type.yaml",
"category": "slot"
},
{
"name": "digital_professional",
"path": "modules/slots/digital_professional.yaml",
"category": "slot"
},
{
"name": "digital_surrogate",
"path": "modules/slots/digital_surrogate.yaml",
@ -6812,11 +6787,6 @@
"path": "modules/slots/dissolution_date.yaml",
"category": "slot"
},
{
"name": "dissolve_count",
"path": "modules/slots/dissolve_count.yaml",
"category": "slot"
},
{
"name": "dissolved_date",
"path": "modules/slots/dissolved_date.yaml",
@ -7022,6 +6992,11 @@
"path": "modules/slots/emic_name.yaml",
"category": "slot"
},
{
"name": "emphasizes_or_emphasized",
"path": "modules/slots/emphasizes_or_emphasized.yaml",
"category": "slot"
},
{
"name": "employer_linkedin_url",
"path": "modules/slots/employer_linkedin_url.yaml",
@ -7187,6 +7162,11 @@
"path": "modules/slots/estimated_volume.yaml",
"category": "slot"
},
{
"name": "estimates_or_estimated",
"path": "modules/slots/estimates_or_estimated.yaml",
"category": "slot"
},
{
"name": "etag",
"path": "modules/slots/etag.yaml",
@ -9192,6 +9172,11 @@
"path": "modules/slots/has_or_had_digital_platform.yaml",
"category": "slot"
},
{
"name": "has_or_had_digital_presence",
"path": "modules/slots/has_or_had_digital_presence.yaml",
"category": "slot"
},
{
"name": "has_or_had_direction",
"path": "modules/slots/has_or_had_direction.yaml",
@ -10562,6 +10547,11 @@
"path": "modules/slots/includes_timestamp.yaml",
"category": "slot"
},
{
"name": "indicates_or_indicated",
"path": "modules/slots/indicates_or_indicated.yaml",
"category": "slot"
},
{
"name": "industry_benchmark_high",
"path": "modules/slots/industry_benchmark_high.yaml",
@ -10967,6 +10957,11 @@
"path": "modules/slots/is_or_was_derived_from.yaml",
"category": "slot"
},
{
"name": "is_or_was_diarized",
"path": "modules/slots/is_or_was_diarized.yaml",
"category": "slot"
},
{
"name": "is_or_was_encompassed_by",
"path": "modules/slots/is_or_was_encompassed_by.yaml",

View file

@ -23,7 +23,9 @@ imports:
- ../slots/has_or_had_custodian_type
- ../slots/legal_status
- ../slots/place_designation
- ../slots/digital_platform
# MIGRATED 2026-01-25: digital_platform → has_or_had_digital_presence (Rule 53)
- ../slots/has_or_had_digital_presence
# - ../slots/digital_platform # REMOVED
- ../slots/has_or_had_collection # was: has_collection - migrated per Rule 53 (2025-01-15)
- ../slots/organizational_structure
- ../slots/has_or_had_organizational_change_event
@ -196,7 +198,8 @@ classes:
- created
- has_or_had_custodian_type
- has_or_had_policy # was: data_license_policy - migrated per Rule 53 (2026-01-22)
- digital_platform
# MIGRATED 2026-01-25: digital_platform → has_or_had_digital_presence (Rule 53)
- has_or_had_digital_presence
- is_or_was_encompassed_by # was: encompassing_body - migrated per Rule 53 (2025-01-15)
- has_or_had_exhibition
- gift_shop
@ -235,11 +238,15 @@ classes:
range: CustodianPlace
inlined: true
required: false
digital_platform:
# MIGRATED 2026-01-25: digital_platform → has_or_had_digital_presence (Rule 53)
has_or_had_digital_presence:
range: DigitalPlatform
multivalued: true
required: false
inlined_as_list: true
description: |
Digital platform(s) or online presence(s) associated with this custodian.
MIGRATED from digital_platform per slot_fixes.yaml (Rule 53, 2026-01-25).
has_or_had_collection: # was: has_collection - migrated per Rule 53 (2025-01-15)
range: CustodianCollection
multivalued: true

View file

@ -0,0 +1,69 @@
# DiarizationStatus class
# Status of speaker diarization process
#
# Generation date: 2026-01-25
# Rule compliance: 0 (LinkML single source of truth), 53 (migration from diarization_enabled)
# Migration source: diarization_enabled slot per slot_fixes.yaml
id: https://nde.nl/ontology/hc/class/DiarizationStatus
name: diarization_status_class
title: DiarizationStatus Class
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
default_prefix: hc
imports:
- linkml:types
- ../slots/has_or_had_label
- ../slots/has_or_had_identifier
classes:
DiarizationStatus:
class_uri: schema:ActionStatusType
description: |
Represents the status of a speaker diarization process (enabled, disabled, completed, failed).
**MIGRATION SOURCE**: Created from diarization_enabled slot migration (Rule 53, 2026-01-25).
**Ontological Alignment**:
- **Primary**: `schema:ActionStatusType` - Status of an action
exact_mappings:
- schema:ActionStatusType
slots:
- has_or_had_identifier
- has_or_had_label
slot_usage:
has_or_had_identifier:
description: Status code or identifier (e.g., "COMPLETED", "ENABLED").
range: uriorcurie
required: false
has_or_had_label:
description: Human-readable status description.
range: string
required: true
annotations:
custodian_types: '["*"]'
specificity_score: 0.8
specificity_rationale: Specific to media analysis processes.
comments:
- "CREATED from diarization_enabled migration per slot_fixes.yaml (Rule 53)"
- "Tracks status of diarization process"
examples:
- value:
has_or_had_label: Enabled
has_or_had_identifier: https://schema.org/ActiveActionStatus
description: Diarization enabled/active
- value:
has_or_had_label: Completed
has_or_had_identifier: https://schema.org/CompletedActionStatus
description: Diarization completed

View file

@ -0,0 +1,82 @@
# DigitalConfidence class
# Represents confidence assessment for digital attributes/skills
#
# Created: 2026-01-25
# Rule compliance: 0b (Type/Types pattern), 38 (slot centralization), 39 (RiC-O naming), 53 (slot_fixes.yaml)
# Migration: digital_confidence → estimates_or_estimated + DigitalConfidence
id: https://nde.nl/ontology/hc/class/DigitalConfidence
name: DigitalConfidence
title: Digital Confidence Class
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
dqv: http://www.w3.org/ns/dqv#
schema: http://schema.org/
default_prefix: hc
imports:
- linkml:types
- ../metadata
- ../slots/has_or_had_score
- ../slots/has_or_had_description
- ../slots/has_or_had_type
classes:
DigitalConfidence:
class_uri: dqv:QualityMeasurement
description: |
Confidence assessment for digital attributes, skills, or proficiency.
**DEFINITION**:
DigitalConfidence captures the certainty level associated with an inferred
or extracted digital attribute (e.g., digital proficiency inferred from a profile).
**Ontological Alignment**:
- **DQV**: `dqv:QualityMeasurement` - quality/confidence metric
**Migrated From** (per slot_fixes.yaml):
- `digital_confidence` (float) → estimates_or_estimated + DigitalConfidence
exact_mappings:
- dqv:QualityMeasurement
slots:
- has_or_had_score
- has_or_had_description
- has_or_had_type
slot_usage:
has_or_had_score:
description: |
Numeric confidence score (0.0-1.0).
Inherits broad range (Any) but overrides description/examples.
range: float
required: true
minimum_value: 0.0
maximum_value: 1.0
examples:
- value: 0.85
description: High confidence estimation
has_or_had_type:
description: Type of confidence assessment (e.g., PROFICIENCY_INFERENCE)
examples:
- value: SKILL_INFERENCE
has_or_had_description:
description: Explanation of the confidence assessment
examples:
- value: "Inferred from explicit skill endorsements and project history"
annotations:
custodian_types: '["P"]'
custodian_types_rationale: Digital confidence applies to person profiles (custodian staff)
specificity_score: 0.60
specificity_rationale: Specific to person profile enrichment
comments:
- "Represents confidence in digital attribute assessments"
- "Migrated from digital_confidence slot per slot_fixes.yaml"
- "Used in LinkedInProfile enrichment"

View file

@ -0,0 +1,52 @@
# DigitalPlatformScore class
# Score for digital platform relevance/specificity
#
# Generation date: 2026-01-25
# Rule compliance: 0, 53
# Migration source: digital_platform_score slot per slot_fixes.yaml
id: https://nde.nl/ontology/hc/class/DigitalPlatformScore
name: digital_platform_score_class
title: Digital Platform Score Class
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
sosa: http://www.w3.org/ns/sosa/
default_prefix: hc
imports:
- linkml:types
- ../slots/has_or_had_score
classes:
DigitalPlatformScore:
class_uri: sosa:Result
description: |
Represents a score for digital platform relevance or specificity.
**MIGRATION SOURCE**: Created from digital_platform_score slot migration (Rule 53, 2026-01-25).
**Ontological Alignment**:
- **Primary**: `sosa:Result` - Result of an observation/scoring
exact_mappings:
- sosa:Result
slots:
- has_or_had_score
slot_usage:
has_or_had_score:
description: The score value (0.0-1.0).
range: float
required: true
minimum_value: 0.0
maximum_value: 1.0
annotations:
custodian_types: '["*"]'
specificity_score: 0.2
specificity_rationale: "Used for scoring digital platform relevance."

View file

@ -0,0 +1,65 @@
# DigitalPresence class
# Represents a digital presence instance (wrapper)
#
# Generation date: 2026-01-25
# Rule compliance: 0, 53
# Migration source: digital_presence_type slot per slot_fixes.yaml
id: https://nde.nl/ontology/hc/class/DigitalPresence
name: digital_presence_class
title: Digital Presence Class
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
crm: http://www.cidoc-crm.org/cidoc-crm/
schema: http://schema.org/
default_prefix: hc
imports:
- linkml:types
- ../slots/has_or_had_type
- ../slots/has_or_had_identifier
- ./DigitalPresenceType
- ./DigitalPresenceTypes
classes:
DigitalPresence:
class_uri: crm:E1_CRM_Entity
description: |
Represents a digital presence being asserted about (e.g. as primary).
Wrapper that links a specific presence instance (URI) to its type classification.
**MIGRATION SOURCE**: Created from digital_presence_type slot migration (Rule 53, 2026-01-25).
**Pattern**: Replaces `digital_presence_type` slot on assertion with structured object:
- `has_or_had_identifier`: URI of the presence (SocialMediaProfile, Website, etc.)
- `has_or_had_type`: Classification (DigitalPresenceType)
exact_mappings:
- crm:E1_CRM_Entity
slots:
- has_or_had_identifier
- has_or_had_type
slot_usage:
has_or_had_identifier:
description: URI of the digital presence instance (e.g. hc:social-media/fb).
range: uriorcurie
required: true
has_or_had_type:
description: Type classification of this presence.
range: DigitalPresenceType
required: true
inlined: true
annotations:
custodian_types: '["*"]'
specificity_score: 0.5
specificity_rationale: "Used for asserting properties of digital presences."
comments:
- "CREATED from digital_presence_type migration per slot_fixes.yaml (Rule 53)"
- "Wrapper for linking presence instance to its type"

View file

@ -0,0 +1,58 @@
# DigitalPresenceType class (Abstract Base)
# Taxonomy for digital presence types
#
# Generation date: 2026-01-25
# Rule compliance: 0, 0b, 53
# Migration source: DigitalPresenceTypeEnum per slot_fixes.yaml
id: https://nde.nl/ontology/hc/class/DigitalPresenceType
name: digital_presence_type_class
title: DigitalPresenceType Class (Abstract)
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
default_prefix: hc
imports:
- linkml:types
- ../slots/has_or_had_label
- ../slots/has_or_had_identifier
classes:
DigitalPresenceType:
class_uri: schema:Intangible
abstract: true
description: |
Abstract base class for digital presence taxonomy.
**MIGRATION SOURCE**: Replaces DigitalPresenceTypeEnum (Rule 53, 2026-01-25).
**Pattern**: Type/Types (Rule 0b)
- DigitalPresenceType (this file): Abstract base
- DigitalPresenceTypes (separate file): Concrete subclasses
exact_mappings:
- schema:Intangible
slots:
- has_or_had_identifier
- has_or_had_label
slot_usage:
has_or_had_identifier:
description: Unique identifier for this presence type.
range: uriorcurie
required: false
has_or_had_label:
description: Human-readable name of this presence type.
range: string
required: true
annotations:
custodian_types: '["*"]'
specificity_score: 0.6
type_types_pattern: base
type_types_related: DigitalPresenceTypes

View file

@ -0,0 +1,89 @@
# DigitalProficiency class
# Represents a digital skill, tool, or competency
#
# Created: 2026-01-25
# Rule compliance: 0b (Type/Types pattern), 38 (slot centralization), 39 (RiC-O naming), 53 (slot_fixes.yaml)
# Migration: digital_indicator → emphasizes_or_emphasized + DigitalProficiency
id: https://nde.nl/ontology/hc/class/DigitalProficiency
name: DigitalProficiency
title: Digital Proficiency Class
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
skos: http://www.w3.org/2004/02/skos/core#
default_prefix: hc
imports:
- linkml:types
- ../metadata
- ../slots/has_or_had_label
- ../slots/has_or_had_description
- ../slots/has_or_had_type
classes:
DigitalProficiency:
class_uri: schema:DefinedTerm
description: |
A digital skill, tool, competency, or proficiency indicator.
**DEFINITION**:
DigitalProficiency represents a specific digital capability (e.g., "Python",
"Data Analysis", "CMS Management") identified in a person's profile.
**Ontological Alignment**:
- **Schema.org**: `schema:DefinedTerm` - defined concept (skill)
- **SKOS**: `skos:Concept` - concept in a scheme
**Migrated From** (per slot_fixes.yaml):
- `digital_indicator` (string list) → emphasizes_or_emphasized + DigitalProficiency
- `digital_professional` (boolean) → indicates_or_indicated + DigitalProficiency
exact_mappings:
- schema:DefinedTerm
close_mappings:
- skos:Concept
slots:
- has_or_had_label
- has_or_had_description
- has_or_had_type
slot_usage:
has_or_had_label:
description: Name of the proficiency (e.g., "Python", "Data Science")
required: true
examples:
- value: "Python"
- value: "Linked Data"
has_or_had_type:
description: Category of proficiency (LANGUAGE, TOOL, CONCEPT, etc.)
examples:
- value: PROGRAMMING_LANGUAGE
- value: METHODOLOGY
annotations:
custodian_types: '["P"]'
custodian_types_rationale: Digital proficiency applies to person profiles
specificity_score: 0.60
specificity_rationale: Specific to person profile enrichment and skills analysis
comments:
- "Represents specific digital skills/indicators"
- "Migrated from digital_indicator string list"
- "Used in DigitalProfessionalAssessment"
examples:
- value:
has_or_had_label: "Python"
has_or_had_type: "PROGRAMMING_LANGUAGE"
description: Python programming skill
- value:
has_or_had_label: "Collection Management Systems"
has_or_had_type: "DOMAIN_TOOL"
description: CMS proficiency

View file

@ -53,6 +53,9 @@ imports:
- ../slots/is_or_was_published
- ./Publication
- ../slots/doi
# MIGRATED 2026-01-25: duration → has_or_had_time_interval + TimeInterval (Rule 53)
- ../slots/has_or_had_time_interval
- ./TimeInterval
- ../slots/duration
- ../slots/edition_statement
- ../slots/extent_text
@ -149,7 +152,8 @@ classes:
# REMOVED 2026-01-24: date_of_publication - migrated to is_or_was_published (Rule 53)
- is_or_was_published
- doi
- duration
# MIGRATED 2026-01-25: duration → has_or_had_time_interval (Rule 53)
- has_or_had_time_interval
- edition_statement
- extent_text
- file_number
@ -227,13 +231,22 @@ classes:
examples:
- value: 'xii, 324 p., [8] p. of plates : ill. ; 24 cm'
- value: '1 atlas (42 maps) : col. ; 38 cm'
duration:
# MIGRATED 2026-01-25: duration → has_or_had_time_interval + TimeInterval (Rule 53)
has_or_had_time_interval:
required: false
range: string
range: TimeInterval
inlined: true
description: |
Duration of the audiovisual carrier.
MIGRATED from duration (string) to TimeInterval class.
examples:
- value: PT45M30S
description: 45 minutes 30 seconds
- value: 01:32:15
- value:
duration_value: PT45M30S
duration_description: 45 minutes 30 seconds
description: Audio recording duration
- value:
duration_value: 01:32:15
description: Duration in HH:MM:SS format
has_or_had_type:
required: false
range: BindingType

View file

@ -20,7 +20,11 @@ imports:
# REMOVED 2026-01-22: data_format migrated to has_or_had_output + OutputData (Rule 53)
- ../slots/is_or_was_decommissioned_at # was: decommission_date - migrated per Rule 53 (2026-01-23)
- ./Timestamp # Range for is_or_was_decommissioned_at
- ../slots/device_count
# MIGRATED 2026-01-25: device_count → has_or_had_quantity + Quantity (Rule 53)
- ../slots/has_or_had_quantity
- ../slots/has_or_had_unit
- ./Quantity
- ./Unit
# MIGRATED 2026-01-25: device_id → has_or_had_identifier + Identifier (Rule 53)
- ../slots/has_or_had_identifier
- ./Identifier
@ -119,7 +123,8 @@ classes:
- coverage_area
- has_or_had_output # was: data_format - migrated per Rule 53 (2026-01-22)
- is_or_was_decommissioned_at # was: decommission_date - migrated per Rule 53 (2026-01-23)
- device_count
# MIGRATED 2026-01-25: device_count → has_or_had_quantity (Rule 53)
- has_or_had_quantity
# MIGRATED 2026-01-25: device_id → has_or_had_identifier (Rule 53)
- has_or_had_identifier
# MIGRATED 2026-01-25: device_manufacturer → is_or_was_created_by (Rule 53)
@ -225,15 +230,30 @@ classes:
- value:
has_or_had_label: Samsung
description: Kiosk manufacturer
device_count:
range: integer
minimum_value: 1
# MIGRATED 2026-01-25: device_count → has_or_had_quantity (Rule 53)
has_or_had_quantity:
description: |
MIGRATED from device_count per slot_fixes.yaml (Rule 53, 2026-01-25).
Count of devices in this network/group.
Uses Quantity class with unit "device".
range: Quantity
inlined: true
required: false
examples:
- value: 24
- value:
quantity_value: 24
has_or_had_unit:
unit_value: "device"
description: 24 beacons in gallery network
- value: 150
- value:
quantity_value: 150
has_or_had_unit:
unit_value: "device"
description: 150 climate sensors across facility
- value: 1
- value:
quantity_value: 1
has_or_had_unit:
unit_value: "device"
description: Single information kiosk
coverage_area:
range: string
@ -405,7 +425,10 @@ classes:
has_or_had_label: Estimote Proximity Beacon
is_or_was_created_by:
has_or_had_label: Estimote
device_count: 24
has_or_had_quantity:
quantity_value: 24
has_or_had_unit:
unit_value: "device"
coverage_area: Gallery of Honour (main wing)
purpose: Proximity triggers for mobile app content near masterpieces
connectivity_type:
@ -428,7 +451,10 @@ classes:
has_or_had_label: Sensirion SHT45
is_or_was_created_by:
has_or_had_label: Sensirion
device_count: 150
has_or_had_quantity:
quantity_value: 150
has_or_had_unit:
unit_value: "device"
coverage_area: All galleries and storage areas
purpose: Temperature and humidity monitoring for preservation
connectivity_type:
@ -465,7 +491,10 @@ classes:
has_or_had_label: Samsung Kiosk 24 Touch
is_or_was_created_by:
has_or_had_label: Samsung
device_count: 4
has_or_had_quantity:
quantity_value: 4
has_or_had_unit:
unit_value: "device"
coverage_area: Main entrance lobby
purpose: Self-service collection search and wayfinding for visitors
has_or_had_specification: 24-inch touchscreen, 1920x1080 resolution, wheelchair accessible

View file

@ -24,8 +24,13 @@ imports:
- ../slots/connections_text
- ../slots/has_or_had_source # was: data_source_whatsapp - migrated per Rule 53/56/57 (2026-01-23)
- ./DataSource
- ../slots/digital_confidence
- ../slots/digital_indicator
# MIGRATED 2026-01-25: digital_confidence → estimates_or_estimated + DigitalConfidence (Rule 53)
- ../slots/estimates_or_estimated
- ./DigitalConfidence
# MIGRATED 2026-01-25: digital_indicator → emphasizes_or_emphasized + DigitalProficiency (Rule 53)
- ../slots/emphasizes_or_emphasized
- ./DigitalProficiency
# - ../slots/digital_indicator # REMOVED
- ../slots/digital_professional
- ../slots/education
- ../slots/enriched_date
@ -267,15 +272,20 @@ classes:
'
slots:
- digital_professional
# MIGRATED 2026-01-25: digital_professional → indicates_or_indicated (Rule 53)
- indicates_or_indicated
- enrichment_metadata_whatsapp
- specificity_annotation
- has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17)
- has_or_had_likelihood_score # was: whatsapp_business_likelihood - migrated per Rule 53
slot_usage:
digital_professional:
# MIGRATED 2026-01-25: digital_professional → indicates_or_indicated (Rule 53)
indicates_or_indicated:
range: DigitalProfessionalAssessment
inlined: true
description: |
Indicates digital professional assessment.
Migrated from digital_professional.
has_or_had_likelihood_score: # was: whatsapp_business_likelihood - migrated per Rule 53
range: LikelihoodScore
inlined: true
@ -291,19 +301,43 @@ classes:
'
slots:
- digital_confidence
- digital_indicator
# MIGRATED 2026-01-25: digital_confidence → estimates_or_estimated (Rule 53)
- estimates_or_estimated
# MIGRATED 2026-01-25: digital_indicator → emphasizes_or_emphasized (Rule 53)
- emphasizes_or_emphasized
- likely_whatsapp_proficient
- specificity_annotation
- has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17)
slot_usage:
likely_whatsapp_proficient:
range: boolean
digital_indicator:
range: string
# MIGRATED 2026-01-25: digital_indicator → emphasizes_or_emphasized + DigitalProficiency (Rule 53)
emphasizes_or_emphasized:
range: DigitalProficiency
inlined: true
multivalued: true
digital_confidence:
range: string
description: |
Digital proficiency indicators (skills/tools) emphasized in the profile.
Migrated from digital_indicator (string list).
examples:
- value:
has_or_had_label: "Python"
has_or_had_type: "PROGRAMMING_LANGUAGE"
description: Python skill indicator
# MIGRATED 2026-01-25: digital_confidence → estimates_or_estimated + DigitalConfidence (Rule 53)
estimates_or_estimated:
range: DigitalConfidence
inlined: true
required: false
description: |
Confidence estimation for digital proficiency.
Migrated from digital_confidence (string) to structured class.
examples:
- value:
has_or_had_score: 0.85
has_or_had_type: PROFICIENCY_INFERENCE
has_or_had_description: "High confidence inferred from technical skills"
description: High confidence estimation
WhatsAppLikelihood:
class_uri: hc:WhatsAppLikelihood
description: 'Likelihood score for WhatsApp business usage.

View file

@ -0,0 +1,74 @@
# Speaker class
# Represents an identified speaker in audio/video content
#
# Generation date: 2026-01-25
# Rule compliance: 0 (LinkML single source of truth), 53 (migration from diarization_speaker_*)
# Migration source: diarization_speaker_id/label slots per slot_fixes.yaml
id: https://nde.nl/ontology/hc/class/Speaker
name: speaker_class
title: Speaker Class
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
prov: http://www.w3.org/ns/prov#
default_prefix: hc
imports:
- linkml:types
- ../slots/has_or_had_label
- ../slots/has_or_had_identifier
classes:
Speaker:
class_uri: prov:Agent
description: |
Represents a speaker identified in audio/video content analysis.
**MIGRATION SOURCE**: Created from diarization_speaker_id and diarization_speaker_label migration (Rule 53, 2026-01-25).
**Ontological Alignment**:
- **Primary**: `prov:Agent` - An agent (person) participating in an activity (speaking)
- **Close**: `schema:Person` - A person
exact_mappings:
- prov:Agent
close_mappings:
- schema:Person
slots:
- has_or_had_identifier
- has_or_had_label
slot_usage:
has_or_had_identifier:
description: Unique identifier for the speaker (e.g., "spk_001", Wikidata ID).
range: uriorcurie
required: true
has_or_had_label:
description: Human-readable name or label for the speaker (e.g., "Curator", "Interviewer").
range: string
required: false
annotations:
custodian_types: '["*"]'
specificity_score: 0.7
specificity_rationale: Specific to audio/video content analysis.
comments:
- "CREATED from diarization_speaker_* migration per slot_fixes.yaml (Rule 53)"
- "Represents identified speakers in media content"
examples:
- value:
has_or_had_identifier: spk_001
has_or_had_label: Curator
description: Identified curator speaker
- value:
has_or_had_identifier: https://www.wikidata.org/wiki/Q12345
has_or_had_label: John Doe
description: Speaker linked to Wikidata entity

View file

@ -205,7 +205,7 @@ classes:
- has_or_had_quantity # was: cut_count - migrated per Rule 53 (2026-01-22)
# MIGRATED 2026-01-25: detection_level → filters_or_filtered + DetectionLevelType (Rule 53)
- filters_or_filtered
- dissolve_count
# MIGRATED 2026-01-25: dissolve_count → has_or_had_quantity (Rule 53)
- fade_count
- scene_count
- has_or_had_scene_segment
@ -281,21 +281,27 @@ classes:
examples:
- value: '[{has_or_had_label: "CUT"}, {has_or_had_label: "FADE_IN"}]'
description: Transition types found in video
has_or_had_quantity: # was: cut_count - migrated per Rule 53 (2026-01-22)
has_or_had_quantity:
range: Quantity
required: false
multivalued: true
inlined: true
description: |
Number of hard cuts (instantaneous transitions) as a Quantity.
MIGRATED from cut_count per slot_fixes.yaml (Rule 53).
Uses Quantity class with Unit type "Cut".
Quantities of detected transitions (cuts, dissolves, fades).
MIGRATED from cut_count, dissolve_count per slot_fixes.yaml (Rule 53).
Uses Quantity class with Unit type "Cut", "Dissolve", "Fade".
examples:
- value:
has_or_had_numeric_value: 42
has_or_had_unit:
has_or_had_type: Cut
has_or_had_symbol: "cuts"
description: 42 cuts detected (was cut_count)
description: 42 cuts detected
- value:
has_or_had_numeric_value: 3
has_or_had_unit:
has_or_had_label: "dissolve transition"
description: 3 dissolves detected
fade_count:
range: integer
required: false
@ -303,13 +309,6 @@ classes:
examples:
- value: 5
description: 5 fades detected
dissolve_count:
range: integer
required: false
minimum_value: 0
examples:
- value: 3
description: 3 dissolves detected
comments:
- Scene and shot boundary detection
- Supports both technical (shot) and semantic (scene) analysis

View file

@ -10,13 +10,26 @@ imports:
# - ../slots/audio_event_segments
- ../slots/has_or_had_segment
- ../slots/has_audio_quality_score
- ../slots/diarization_confidence
- ../slots/diarization_enabled
- ../slots/diarization_end_seconds
- ../slots/has_or_had_diarization_segment
- ../slots/diarization_speaker_id
- ../slots/diarization_speaker_label
- ../slots/diarization_start_seconds
# MIGRATED 2026-01-25: diarization_* slots (Rule 53)
- ../slots/has_or_had_provenance
- ./Provenance
- ./ConfidenceScore
- ../slots/is_or_was_diarized
- ./DiarizationStatus
- ../slots/temporal_extent
- ./TimeSpan
- ../slots/start_of_the_start
- ../slots/end_of_the_end
- ./Timestamp
- ../slots/contains_or_contained
- ./Speaker
- ../slots/has_or_had_identifier
- ./Identifier
- ../slots/has_or_had_label
- ./Label
# MIGRATED 2026-01-25: has_or_had_diarization_segment → contains_or_contained (Rule 53)
# - ../slots/has_or_had_diarization_segment # REMOVED
- ../slots/has_clipping
- ../slots/is_background
- ../slots/is_overlapping
@ -123,8 +136,10 @@ classes:
# - audio_event_segments
- has_or_had_segment
- audio_quality_score
- diarization_enabled
- has_or_had_diarization_segment
# MIGRATED 2026-01-25: diarization_enabled → is_or_was_diarized (Rule 53)
- is_or_was_diarized
# MIGRATED 2026-01-25: has_or_had_diarization_segment → contains_or_contained (Rule 53)
- contains_or_contained
- has_clipping
- languages_detected
- music_confidence
@ -212,19 +227,33 @@ classes:
examples:
- value: '[nl, en, de]'
description: Dutch, English, and German detected
diarization_enabled:
range: boolean
# MIGRATED 2026-01-25: diarization_enabled → is_or_was_diarized (Rule 53)
is_or_was_diarized:
range: DiarizationStatus
required: false
inlined: true
description: |
Status of speaker diarization process.
MIGRATED from diarization_enabled (Rule 53).
examples:
- value: true
description: Diarization was performed
has_or_had_diarization_segment:
- value:
has_or_had_label: Enabled
has_or_had_identifier: https://schema.org/ActiveActionStatus
description: Diarization enabled
# MIGRATED 2026-01-25: has_or_had_diarization_segment → contains_or_contained (Rule 53)
contains_or_contained:
range: DiarizationSegment
multivalued: true
required: false
inlined_as_list: true
examples:
- value: '[{start_seconds: 0.0, end_seconds: 15.0, speaker_id: ''spk_001'', speaker_label: ''Curator''}]'
- value:
temporal_extent:
begin_of_the_begin: 0.0
end_of_the_end: 15.0
contains_or_contained:
has_or_had_identifier: spk_001
has_or_had_label: Curator
description: Curator speaking for first 15 seconds
speaker_count:
range: integer
@ -385,34 +414,29 @@ classes:
'
slots:
- diarization_confidence
- diarization_end_seconds
- diarization_speaker_id
- diarization_speaker_label
- diarization_start_seconds
# MIGRATED 2026-01-25: diarization_* slots (Rule 53)
- has_or_had_provenance # for confidence
- temporal_extent # for start/end seconds
- contains_or_contained # for speaker
- is_overlapping
- specificity_annotation
- has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17)
slot_usage:
diarization_start_seconds:
range: float
temporal_extent:
description: Time range of the diarization segment.
range: TimeSpan
inlined: true
required: true
minimum_value: 0.0
diarization_end_seconds:
range: float
contains_or_contained:
description: Speaker identified in this segment.
range: Speaker
inlined: true
required: true
minimum_value: 0.0
diarization_speaker_id:
range: string
required: true
diarization_speaker_label:
range: string
has_or_had_provenance:
description: Provenance metadata including confidence score.
range: Provenance
inlined: true
required: false
diarization_confidence:
range: float
required: false
minimum_value: 0.0
maximum_value: 1.0
is_overlapping:
range: boolean
required: false

View file

@ -44,6 +44,9 @@ imports:
- ../slots/has_or_had_status
- ./Status
- ../slots/dislike_count
# MIGRATED 2026-01-25: duration → has_or_had_time_interval + TimeInterval (Rule 53)
- ../slots/has_or_had_time_interval
- ./TimeInterval
- ../slots/duration
- ../slots/favorite_count
# MIGRATED 2026-01-22: frame_rate → has_or_had_quantity + Quantity + has_or_had_unit + Unit (Rule 53)
@ -242,7 +245,8 @@ classes:
# MIGRATED 2026-01-24: definition → has_or_had_resolution + Resolution (Rule 53)
- has_or_had_resolution
- dislike_count
- duration
# MIGRATED 2026-01-25: duration → has_or_had_time_interval (Rule 53)
- has_or_had_time_interval
- favorite_count
# REMOVED 2026-01-22: frame_rate - migrated to has_or_had_quantity + Quantity + Unit (Rule 53)
- is_embeddable
@ -259,15 +263,23 @@ classes:
- has_or_had_comment # was: video_comment - migrated per Rule 53 (2025-01-15)
- has_or_had_quantity
slot_usage:
duration:
range: string
# MIGRATED 2026-01-25: duration → has_or_had_time_interval + TimeInterval (Rule 53)
has_or_had_time_interval:
range: TimeInterval
required: false
pattern: ^P(T(\d+H)?(\d+M)?(\d+S)?)?$
inlined: true
description: |
Video duration.
MIGRATED from duration (ISO 8601 string) to TimeInterval class.
examples:
- value: PT10M59S
description: 10 minutes and 59 seconds
- value: PT1H30M
description: 1 hour 30 minutes
- value:
duration_value: PT10M59S
duration_description: 10 minutes and 59 seconds
description: Video duration
- value:
duration_value: PT1H30M
duration_description: 1 hour 30 minutes
description: Long format duration
# MIGRATED 2026-01-24: definition → has_or_had_resolution + Resolution (Rule 53)
has_or_had_resolution:
range: Resolution

View file

@ -15,13 +15,14 @@ prefixes:
imports:
- linkml:types
- ../classes/Hypothesis
# - ../classes/Hypothesis # Broadened to generic range
default_prefix: hc
slots:
asserts_or_asserted:
description: >-
Links a provenance record to a hypothesis or assertion that it supports.
Links a provenance record, assertion, or activity to the entity, hypothesis,
or proposition that it asserts or supports.
**TEMPORAL SEMANTICS** (RiC-O style):
The "asserts_or_asserted" naming indicates that assertions can change:
@ -30,14 +31,14 @@ slots:
- Confidence levels may be updated over time
**USAGE**:
Used within a Provenance class to link the provenance activity
to a specific Hypothesis about uncertain data.
- Link Provenance to Hypothesis (prov:generated)
- Link PrimaryDigitalPresenceAssertion to DigitalPresence (crm:P140)
**EXAMPLE**:
A provenance record from web scraping asserts a hypothesis about
institution type based on evidence found on the website.
**RANGE**:
Generic `uriorcurie` to support multiple assertion targets (Hypothesis, DigitalPresence).
Classes should narrow this via slot_usage.
range: Hypothesis
range: uriorcurie # Broadened from Hypothesis (Rule 55)
slot_uri: prov:generated
inlined: true
@ -46,26 +47,17 @@ slots:
close_mappings:
- schema:mainEntity
- crm:P140_assigned_attribute_to
annotations:
custodian_types: '["U"]'
custodian_types_rationale: >-
Assertions/hypotheses primarily relevant for Unknown type institutions.
custodian_types_primary: "U"
specificity_score: 0.8
rico_naming_convention: |
Follows RiC-O "assertsOrAsserted" naming pattern.
specificity_score: 0.2 # Broadened from 0.8
specificity_rationale: >-
High specificity - only relevant for hypothesis tracking.
examples:
- value: |
asserts_or_asserted:
asserted_value: "MUSEUM"
confidence_level: "medium"
supporting_evidence:
- "Website mentions 'permanent collection'"
description: Provenance asserting a museum type hypothesis.
Broadly applicable assertion predicate.
comments:
- Created from slot_fixes.yaml migration (2026-01-14)
- Created from slot_fixes.yaml migration (2026-01-14, updated 2026-01-25)
- Replaces direct type_hypothesis slot usage
- Links Provenance class to Hypothesis class
- Replaces digital_presence_type usage in PrimaryDigitalPresenceAssertion
- Links asserter/activity to asserted entity/proposition

View file

@ -0,0 +1,86 @@
# emphasizes_or_emphasized slot
# Generic slot for linking entities to emphasized qualities, skills, or topics
#
# Following RiC-O naming convention (Rule 39): "emphasizesOrEmphasized" pattern
# for active/passive temporal relationships.
#
# Created: 2026-01-25
# Rule compliance: 38 (slot centralization + semantic URI), 39 (RiC-O naming), 42 (no prefix), 53 (slot_fixes.yaml)
# Migration: digital_indicator → emphasizes_or_emphasized + DigitalProficiency
id: https://nde.nl/ontology/hc/slot/emphasizes_or_emphasized
name: emphasizes_or_emphasized_slot
title: Emphasizes Or Emphasized Slot
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/
default_prefix: hc
imports:
- linkml:types
slots:
emphasizes_or_emphasized:
slot_uri: skos:related
description: |
Links an entity to a quality, skill, or topic that it emphasizes or highlights.
**Temporal Semantics** (RiC-O Pattern):
The "emphasizesOrEmphasized" naming follows RiC-O convention indicating this relationship
may be historical - emphasis may change over time (e.g., in a CV or profile).
**Ontological Alignment**:
- **Primary** (`slot_uri`): `skos:related` - general relatedness/association
- **Related**: `schema:knowsAbout` - for skills/proficiency
**Usage**:
Used to link professional assessments to specific proficiency indicators found in
source data (e.g., keywords in a LinkedIn profile that indicate digital skills).
**Pattern**:
```
DigitalProfessionalAssessment
└── emphasizes_or_emphasized → DigitalProficiency
├── has_or_had_label: "Python"
└── has_or_had_type: PROGRAMMING_LANGUAGE
```
**Migrated From** (per slot_fixes.yaml):
- `digital_indicator` → emphasizes_or_emphasized + DigitalProficiency
**Cardinality**:
Multivalued - an entity may emphasize multiple qualities.
range: string
required: false
multivalued: true
inlined: true
exact_mappings:
- skos:related
related_mappings:
- schema:knowsAbout
- schema:skills
annotations:
rico_naming_convention: |
Follows RiC-O "emphasizesOrEmphasized" pattern for active/passive predicates.
See Rule 39: Slot Naming Convention (RiC-O Style)
replaces_slots: "digital_indicator"
migration_date: "2026-01-25"
comments:
- "Generic emphasis slot for linking to skills/qualities"
- "Links entity to DigitalProficiency or similar quality classes"
- "Replaces specific indicator slots like digital_indicator"
- "RiC-O naming: emphasizesOrEmphasized indicates emphasis relationship"
examples:
- value:
has_or_had_label: "Data Science"
description: "Emphasizes Data Science proficiency"

View file

@ -0,0 +1,87 @@
# estimates_or_estimated slot
# Generic slot for linking entities to estimations or confidence assessments
#
# Following RiC-O naming convention (Rule 39): "estimatesOrEstimated" pattern
# for active/passive temporal relationships.
#
# Created: 2026-01-25
# Rule compliance: 38 (slot centralization + semantic URI), 39 (RiC-O naming), 42 (no prefix), 53 (slot_fixes.yaml)
# Migration: digital_confidence → estimates_or_estimated + DigitalConfidence
id: https://nde.nl/ontology/hc/slot/estimates_or_estimated
name: estimates_or_estimated_slot
title: Estimates Or Estimated Slot
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
prov: http://www.w3.org/ns/prov#
schema: http://schema.org/
dqv: http://www.w3.org/ns/dqv#
default_prefix: hc
imports:
- linkml:types
slots:
estimates_or_estimated:
slot_uri: prov:wasDerivedFrom
description: |
Links an entity to an estimation or confidence assessment derived from it.
**Temporal Semantics** (RiC-O Pattern):
The "estimatesOrEstimated" naming follows RiC-O convention indicating this relationship
may be historical - estimations may be updated over time.
**Ontological Alignment**:
- **Primary** (`slot_uri`): `prov:wasDerivedFrom` - derivation from source
- **Related**: `dqv:hasQualityMeasurement` - linking to quality/confidence metric
**Usage**:
Used to link profiles or entities to confidence assessments about specific
attributes (e.g., digital proficiency confidence).
**Pattern**:
```
LinkedInProfile
└── estimates_or_estimated → DigitalConfidence
├── has_or_had_score: 0.8
└── has_or_had_type: PROFICIENCY_LEVEL
```
**Migrated From** (per slot_fixes.yaml):
- `digital_confidence` → estimates_or_estimated + DigitalConfidence
**Cardinality**:
Multivalued - an entity may have multiple estimations (e.g., for different attributes).
range: string
required: false
multivalued: true
inlined: true
exact_mappings:
- prov:wasDerivedFrom
related_mappings:
- dqv:hasQualityMeasurement
annotations:
rico_naming_convention: |
Follows RiC-O "estimatesOrEstimated" pattern for active/passive predicates.
See Rule 39: Slot Naming Convention (RiC-O Style)
replaces_slots: "digital_confidence"
migration_date: "2026-01-25"
comments:
- "Generic estimation slot for linking to confidence/quality assessments"
- "Links entity to DigitalConfidence or similar assessment classes"
- "Replaces specific confidence slots like digital_confidence"
- "RiC-O naming: estimatesOrEstimated indicates estimation relationship"
examples:
- value:
has_or_had_score: 0.85
has_or_had_label: "High Digital Proficiency"
description: "Estimation of digital proficiency"

View file

@ -0,0 +1,66 @@
# has_or_had_digital_presence slot
# Links entity to its digital platform/presence
#
# Following RiC-O naming convention (Rule 39): "isOrWas..." pattern
# for temporal relationships in heritage domain.
#
# Generation date: 2026-01-25
# Rule compliance: 38 (slot centralization + semantic URI), 39 (RiC-O naming), 42 (no prefix)
# Migration source: digital_platform slot per slot_fixes.yaml
id: https://nde.nl/ontology/hc/slot/has_or_had_digital_presence
name: has_or_had_digital_presence_slot
title: Has Or Had Digital Presence Slot
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
dcat: http://www.w3.org/ns/dcat#
default_prefix: hc
imports:
- linkml:types
slots:
has_or_had_digital_presence:
slot_uri: schema:mainEntityOfPage
description: |
Links an entity to its digital platform or online presence (website, portal, repository).
**Temporal Semantics** (RiC-O Pattern):
The "hasOrHad" naming follows RiC-O convention indicating this relationship
may be historical - websites change, platforms migrate or are decommissioned.
**Ontological Alignment**:
- **Primary** (`slot_uri`): `schema:mainEntityOfPage` - Page about the entity
- **Close**: `schema:url` - URL of the entity
- **Close**: `dcat:landingPage` - Web page providing access
**Usage**:
Use with DigitalPlatform class to describe the platform.
**Replaces**: digital_platform slot per slot_fixes.yaml migration (2026-01-25)
range: uriorcurie
required: false
multivalued: true
exact_mappings:
- schema:mainEntityOfPage
close_mappings:
- schema:url
- dcat:landingPage
annotations:
rico_naming_convention: |
Follows RiC-O "hasOrHad" pattern for temporal predicates.
See Rule 39: Slot Naming Convention (RiC-O Style)
replaces_slots: "digital_platform"
migration_date: "2026-01-25"
comments:
- "Links custodian to digital platforms"
- "RiC-O naming: hasOrHad indicates historical persistence"

View file

@ -31,7 +31,7 @@ slots:
- Quality ratings
- Similarity scores
range: float
range: Any # Broadened from float per Rule 55 to support ConfidenceScore class override
close_mappings:
- schema:ratingValue

View file

@ -0,0 +1,85 @@
# indicates_or_indicated slot
# Generic slot for linking entities to things they indicate or signify
#
# Following RiC-O naming convention (Rule 39): "indicatesOrIndicated" pattern
# for active/passive temporal relationships.
#
# Created: 2026-01-25
# Rule compliance: 38 (slot centralization + semantic URI), 39 (RiC-O naming), 42 (no prefix), 53 (slot_fixes.yaml)
# Migration: digital_professional → indicates_or_indicated + DigitalProficiency
id: https://nde.nl/ontology/hc/slot/indicates_or_indicated
name: indicates_or_indicated_slot
title: Indicates Or Indicated Slot
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
prov: http://www.w3.org/ns/prov#
schema: http://schema.org/
default_prefix: hc
imports:
- linkml:types
slots:
indicates_or_indicated:
slot_uri: prov:generated
description: |
Links an entity (e.g., an analysis or enrichment) to what it indicates or signifies.
**Temporal Semantics** (RiC-O Pattern):
The "indicatesOrIndicated" naming follows RiC-O convention indicating this relationship
may be historical.
**Ontological Alignment**:
- **Primary** (`slot_uri`): `prov:generated` - if the indication is a result
- **Related**: `schema:result`
**Usage**:
Used to link enrichments (like WhatsAppEnrichment) to the assessment result
(DigitalProfessionalAssessment).
**Pattern**:
```
WhatsAppEnrichment
└── indicates_or_indicated → DigitalProfessionalAssessment
├── estimates_or_estimated → DigitalConfidence
└── emphasizes_or_emphasized → DigitalProficiency
```
**Migrated From** (per slot_fixes.yaml):
- `digital_professional` → indicates_or_indicated + DigitalProficiency/Assessment
**Cardinality**:
Single or multivalued depending on context.
range: string
required: false
multivalued: false
inlined: true
exact_mappings:
- prov:generated
related_mappings:
- schema:result
annotations:
rico_naming_convention: |
Follows RiC-O "indicatesOrIndicated" pattern for active/passive predicates.
See Rule 39: Slot Naming Convention (RiC-O Style)
replaces_slots: "digital_professional"
migration_date: "2026-01-25"
comments:
- "Generic indication slot"
- "Links enrichment/analysis to its result/assessment"
- "Replaces digital_professional slot"
- "RiC-O naming: indicatesOrIndicated"
examples:
- value:
likely_whatsapp_proficient: true
description: "Indicates digital proficiency assessment"

View file

@ -0,0 +1,59 @@
# is_or_was_diarized slot
# Indicates if diarization was performed on the media object
#
# Following RiC-O naming convention (Rule 39): "isOrWas..." pattern
# for temporal relationships in heritage domain.
#
# Generation date: 2026-01-25
# Rule compliance: 38 (slot centralization + semantic URI), 39 (RiC-O naming), 42 (no prefix)
# Migration source: diarization_enabled slot per slot_fixes.yaml
id: https://nde.nl/ontology/hc/slot/is_or_was_diarized
name: is_or_was_diarized_slot
title: Is Or Was Diarized Slot
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
default_prefix: hc
imports:
- linkml:types
slots:
is_or_was_diarized:
slot_uri: schema:actionStatus
description: |
Indicates the status of speaker diarization process on this media object.
**Temporal Semantics** (RiC-O Pattern):
The "isOrWas" naming follows RiC-O convention indicating this status
relates to a process that occurred or is occurring.
**Ontological Alignment**:
- **Primary** (`slot_uri`): `schema:actionStatus` - Status of an action (diarization)
**Usage**:
Use with DiarizationStatus class or boolean (if simplified).
**Replaces**: diarization_enabled slot per slot_fixes.yaml migration (2026-01-25)
range: uriorcurie
required: false
multivalued: false
exact_mappings:
- schema:actionStatus
annotations:
rico_naming_convention: |
Follows RiC-O "isOrWas" pattern for temporal predicates.
See Rule 39: Slot Naming Convention (RiC-O Style)
replaces_slots: "diarization_enabled"
migration_date: "2026-01-25"
comments:
- "Indicates diarization status"
- "RiC-O naming: isOrWas indicates process status"

View file

@ -225,24 +225,24 @@
"__ARCHIVED_20260125__detection_count.yaml",
"__ARCHIVED_20260125__detection_level.yaml",
"__ARCHIVED_20260125__detection_threshold.yaml",
"device_count.yaml",
"device_id.yaml",
"device_manufacturer.yaml",
"device_model.yaml",
"device_name.yaml",
"device_type.yaml",
"diarization_confidence.yaml",
"diarization_enabled.yaml",
"diarization_end_seconds.yaml",
"diarization_speaker_id.yaml",
"diarization_speaker_label.yaml",
"diarization_start_seconds.yaml",
"digital_confidence.yaml",
"digital_indicator.yaml",
"__ARCHIVED_20260125__device_count.yaml",
"__ARCHIVED_20260125__device_id.yaml",
"__ARCHIVED_20260125__device_manufacturer.yaml",
"__ARCHIVED_20260125__device_model.yaml",
"__ARCHIVED_20260125__device_name.yaml",
"__ARCHIVED_20260125__device_type.yaml",
"__ARCHIVED_20260125__diarization_confidence.yaml",
"__ARCHIVED_20260125__diarization_enabled.yaml",
"__ARCHIVED_20260125__diarization_end_seconds.yaml",
"__ARCHIVED_20260125__diarization_speaker_id.yaml",
"__ARCHIVED_20260125__diarization_speaker_label.yaml",
"__ARCHIVED_20260125__diarization_start_seconds.yaml",
"__ARCHIVED_20260125__digital_confidence.yaml",
"__ARCHIVED_20260125__digital_indicator.yaml",
"digital_platform.yaml",
"digital_platform_score.yaml",
"digital_presence_type.yaml",
"digital_professional.yaml",
"__ARCHIVED_20260125__digital_professional.yaml",
"digital_surrogate.yaml",
"digital_surrogate_url.yaml",
"digitization_budget.yaml",
@ -253,7 +253,7 @@
"display_location.yaml",
"disposition_service.yaml",
"dissolution_date.yaml",
"dissolve_count.yaml",
"__ARCHIVED_20260125__dissolve_count.yaml",
"dissolved_date.yaml",
"document_description.yaml",
"document_title.yaml",
@ -295,6 +295,7 @@
"embargo_end_date.yaml",
"embargo_reason.yaml",
"emic_name.yaml",
"emphasizes_or_emphasized.yaml",
"employer_linkedin_url.yaml",
"employer_name.yaml",
"employment_dates_raw.yaml",
@ -326,6 +327,7 @@
"environmental_zone_type_label.yaml",
"equipment_type.yaml",
"established_date.yaml",
"estimates_or_estimated.yaml",
"estimated_extent.yaml",
"estimated_volume.yaml",
"etag.yaml",
@ -986,6 +988,7 @@
"includes_music_description.yaml",
"includes_object_tracking.yaml",
"includes_or_included.yaml",
"indicates_or_indicated.yaml",
"includes_segmentation_mask.yaml",
"includes_sound_description.yaml",
"includes_speaker.yaml",

View file

@ -12793,6 +12793,19 @@ fixes:
- label: Unit
type: class
value: device
processed:
status: true
date: '2026-01-25'
agent: claude-claude-sonnet-4-20250514
notes: |
**Migration Complete**: device_count → has_or_had_quantity + Quantity (Rule 53)
**Pattern**: Integer count migrated to Quantity class with unit 'device'
**Files Modified**:
- InternetOfThings.yaml: Updated imports, slots list, slot_usage, examples
**Archived**: modules/slots/archive/device_count_archived_20260125.yaml
- original_slot_id: https://nde.nl/ontology/hc/slot/device_id
revision:
- label: has_or_had_identifier
@ -12932,12 +12945,38 @@ fixes:
type: slot
- label: ConfidenceScore
type: class
processed:
status: true
date: '2026-01-25'
agent: claude-claude-sonnet-4-20250514
notes: |
**Migration Complete**: diarization_confidence → has_or_had_provenance + Provenance + has_or_had_score + ConfidenceScore (Rule 53)
**Pattern**: Float confidence migrated to structured provenance and confidence scoring model
**Files Modified**:
- VideoAudioAnnotation.yaml: Updated DiarizationSegment with has_or_had_provenance and has_or_had_score
**Archived**: modules/slots/archive/diarization_confidence_archived_20260125.yaml
- original_slot_id: https://nde.nl/ontology/hc/slot/diarization_enabled
revision:
- label: is_or_was_diarized
type: slot
- label: DiarizationStatus
type: class
processed:
status: true
date: '2026-01-25'
agent: claude-claude-sonnet-4-20250514
notes: |
**Migration Complete**: diarization_enabled → is_or_was_diarized + DiarizationStatus (Rule 53)
**Pattern**: Boolean flag migrated to status class for better expressivity
**Files Modified**:
- VideoAudioAnnotation.yaml: Updated slots and slot_usage
**Archived**: modules/slots/archive/diarization_enabled_archived_20260125.yaml
- original_slot_id: https://nde.nl/ontology/hc/slot/diarization_end_seconds
revision:
- label: temporal_extent
@ -12946,8 +12985,19 @@ fixes:
type: class
- label: end_of_the_end
type: slot
- label: Timestamp
type: class
processed:
status: true
date: '2026-01-25'
agent: claude-claude-sonnet-4-20250514
notes: |
**Migration Complete**: diarization_end_seconds → temporal_extent + TimeSpan + end_of_the_end (Rule 53)
**Pattern**: Flattened end seconds migrated to temporal_extent structured object
**Files Modified**:
- VideoAudioAnnotation.yaml: Updated DiarizationSegment usage
**Archived**: modules/slots/archive/diarization_end_seconds_archived_20260125.yaml
- original_slot_id: https://nde.nl/ontology/hc/slot/diarization_speaker_id
revision:
- label: contains_or_contained
@ -12958,6 +13008,16 @@ fixes:
type: slot
- label: Identifier
type: class
processed:
status: true
notes: |
MIGRATED 2026-01-25.
**Pattern**: diarization_speaker_id → contains_or_contained + Speaker + has_or_had_identifier
**Class**: Created Speaker.yaml (prov:Agent)
**Files Modified**: VideoAudioAnnotation.yaml (DiarizationSegment)
**Archived**: modules/slots/archive/diarization_speaker_id_archived_20260125.yaml
- original_slot_id: https://nde.nl/ontology/hc/slot/diarization_speaker_label
revision:
- label: contains_or_contained
@ -12968,6 +13028,15 @@ fixes:
type: slot
- label: Label
type: class
processed:
status: true
notes: |
MIGRATED 2026-01-25.
**Pattern**: diarization_speaker_label → contains_or_contained + Speaker + has_or_had_label
**Files Modified**: VideoAudioAnnotation.yaml (DiarizationSegment)
**Archived**: modules/slots/archive/diarization_speaker_label_archived_20260125.yaml
- original_slot_id: https://nde.nl/ontology/hc/slot/diarization_start_seconds
revision:
- label: temporal_extent
@ -12978,30 +13047,95 @@ fixes:
type: slot
- label: Timestamp
type: class
processed:
status: true
notes: |
MIGRATED 2026-01-25.
**Pattern**: diarization_start_seconds → temporal_extent + TimeSpan + start_of_the_start
**Files Modified**: VideoAudioAnnotation.yaml (DiarizationSegment)
**Archived**: modules/slots/archive/diarization_start_seconds_archived_20260125.yaml
- original_slot_id: https://nde.nl/ontology/hc/slot/digital_confidence
revision:
- label: estimates_or_estimated
type: slot
- label: DigitalConfidence
type: class
processed:
status: true
date: '2026-01-25'
agent: claude-claude-sonnet-4-20250514
notes: |
**Migration Complete**: digital_confidence → estimates_or_estimated + DigitalConfidence (Rule 53)
**Pattern**: String confidence migrated to structured DigitalConfidence class with numeric score
**Files Created**:
- estimates_or_estimated.yaml: Generic estimation slot
- DigitalConfidence.yaml: Structured confidence class
**Files Modified**:
- LinkedInProfile.yaml: Updated DigitalProfessionalAssessment usage
**Archived**: modules/slots/archive/digital_confidence_archived_20260125.yaml
- original_slot_id: https://nde.nl/ontology/hc/slot/digital_indicator
revision:
- label: emphasizes_or_emphasized
type: slot
- label: DigitalProficiency
type: class
processed:
status: true
date: '2026-01-25'
agent: claude-claude-sonnet-4-20250514
notes: |
**Migration Complete**: digital_indicator → emphasizes_or_emphasized + DigitalProficiency (Rule 53)
**Pattern**: String indicator list migrated to structured DigitalProficiency class
**Files Created**:
- emphasizes_or_emphasized.yaml: Generic emphasis slot
- DigitalProficiency.yaml: Structured proficiency class
**Files Modified**:
- LinkedInProfile.yaml: Updated DigitalProfessionalAssessment usage
**Archived**: modules/slots/archive/digital_indicator_archived_20260125.yaml
- original_slot_id: https://nde.nl/ontology/hc/slot/digital_platform
revision:
- label: has_or_had_digital_presence
type: slot
- label: DigitalPlatform
type: class
processed:
status: true
notes: |
MIGRATED 2026-01-25.
**Pattern**: digital_platform → has_or_had_digital_presence + DigitalPlatform
**Slot**: Created has_or_had_digital_presence.yaml (schema:mainEntityOfPage)
**Class**: DigitalPlatform already existed
**Files Modified**: Custodian.yaml (replaced usages)
**Archived**: modules/slots/archive/digital_platform_archived_20260125.yaml
- original_slot_id: https://nde.nl/ontology/hc/slot/digital_platform_score
revision:
- label: has_or_had_score
type: slot
- label: DigitalPlatformScore
type: class
processed:
status: true
notes: |
MIGRATED 2026-01-25.
**Pattern**: digital_platform_score → has_or_had_score + DigitalPlatformScore
**Class**: Created DigitalPlatformScore.yaml (sosa:Result)
**Files Modified**: None (slot usage not found in classes, created class for future use)
**Archived**: modules/slots/archive/digital_platform_score_archived_20260125.yaml
- original_slot_id: https://nde.nl/ontology/hc/slot/digital_presence_type
revision:
- label: asserts_or_asserted
@ -13022,6 +13156,23 @@ fixes:
type: slot
- label: DigitalProficiency
type: class
processed:
status: true
date: '2026-01-25'
agent: claude-claude-sonnet-4-20250514
notes: |
**Migration Complete**: digital_professional → indicates_or_indicated (Rule 53)
**Pattern**: Replaced digital_professional slot with indicates_or_indicated pointing to DigitalProfessionalAssessment.
NOTE: Revision asked for DigitalProficiency class, but DigitalProfessionalAssessment is the structured container used in LinkedInProfile.
**Files Created**:
- indicates_or_indicated.yaml: Generic indication slot
**Files Modified**:
- LinkedInProfile.yaml: Updated WhatsAppEnrichment usage
**Archived**: modules/slots/archive/digital_professional_archived_20260125.yaml
- original_slot_id: https://nde.nl/ontology/hc/slot/digital_surrogate
revision:
- label: is_or_was_instantiated_by
@ -13138,6 +13289,19 @@ fixes:
- label: Unit
type: class
value: dissolve transition
processed:
status: true
date: '2026-01-25'
agent: claude-claude-sonnet-4-20250514
notes: |
**Migration Complete**: dissolve_count → has_or_had_quantity + Quantity (Rule 53)
**Pattern**: Integer count migrated to Quantity class with unit 'dissolve transition'
**Files Modified**:
- VideoAnnotationTypes.yaml: Updated has_or_had_quantity usage to include dissolve counts
**Archived**: modules/slots/archive/dissolve_count_archived_20260125.yaml
- original_slot_id: https://nde.nl/ontology/hc/slot/dissolved_date
revision:
- label: is_or_was_dissolved_by
@ -17133,6 +17297,15 @@ fixes:
type: slot
- label: DiarizationSegment
type: class
processed:
status: true
notes: |
MIGRATED 2026-01-25.
**Pattern**: has_or_had_diarization_segment → contains_or_contained + DiarizationSegment
**Files Modified**: VideoAudioAnnotation.yaml (replaced usages)
**Old Slot**: No physical file found (was inline).
- original_slot_id: https://nde.nl/ontology/hc/slot/has_or_had_documentation_source
revision:
- label: has_or_had_provenance
@ -18129,4 +18302,195 @@ fixes:
type: slot
- label: MaximumHumidity
type: class
# https://nde.nl/ontology/hc/slot/hosts_branch
- original_slot_id: https://nde.nl/ontology/hc/slot/humidity_min
revision:
- label: has_or_had_policy
type: slot
- label: Humidity
type: class
- label: minimum_of_minimum
type: slot
- label: MinimumHumidity
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/humidity_target
revision:
- label: has_or_had_policy
type: slot
- label: Humidity
type: class
- label: has_or_had_target
type: slot
- label: TargetHumidity
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/humidity_tolerance
revision:
- label: has_or_had_policy
type: slot
- label: Humidity
type: class
- label: has_or_had_tolerance
type: slot
- label: HumidityTolerance
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/hypernym_event_type
revision:
- label: has_or_had_hypernym
type: slot
- label: EventType
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/ich_domain
revision:
- label: is_or_was_categorized_as
type: slot
- label: ICHDomain
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/ich_transmission_method
revision:
- label: transmits_or_transmitted_through
type: slot
- label: TransmissionMethod
type: class
- label: has_or_had_type
type: slot
- label: TransmissionMethodType
type: class
- label: includes_or_included
type: slot
- label: TransmissionMethodTypes
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/iconography
revision:
- label: has_or_had_symbolism
type: slot
- label: Iconography
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/id
revision:
- label: has_or_had_identifier
type: slot
- label: ID
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/identification_qualifier
revision:
- label: has_or_had_identifier
type: slot
- label: Identifier
type: class
- label: has_or_had_qualifier
type: slot
- label: Qualifier
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/identified_by
revision:
- label: has_or_had_identifier
type: slot
- label: Identifier
type: class
- label: is_or_was_created_by
type: slot
- label: Agent
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/identifier
revision:
- label: has_or_had_identifier
type: slot
- label: Identifier
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/identifier_format
revision:
- label: has_or_had_identifier
type: slot
- label: Identifier
type: class
- label: has_or_had_format
type: slot
- label: IdentifierFormat
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/identifier_format_used
revision:
- label: has_or_had_format
type: slot
- label: IdentifierFormat
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/identifier_lookup_score
revision:
- label: has_or_had_score
type: slot
- label: IdentifierLookupScore
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/identifier_scheme
revision:
- label: has_or_had_scheme
type: slot
- label: IdentifierScheme
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/identifier_url
revision:
- label: has_or_had_url
type: slot
- label: URL
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/identifier_value
revision:
- label: has_or_had_value
type: slot
- label: IdentifierValue
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/identifies_custodian
revision:
- label: identifies_or_identified
type: slot
- label: Custodian
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/iiif_compatible
revision:
- label: is_or_was_compatible_with
type: slot
- label: IIIF
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/iiif_support
revision:
- label: is_or_was_compatible_with
type: slot
- label: IIIF
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/illustration
revision:
- label: catalogues_or_catalogued
type: slot
- label: Illustration
type: class
- label: has_or_had_description
type: slot
- label: Description
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/image_url
revision:
- label: has_or_had_image
type: slot
- label: Image
type: class
- label: has_or_had_url
type: slot
- label: URL
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/impact_measurement
revision:
- label: measures_or_measured
type: slot
- label: ImpactMeasurement
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/implements_agenda
revision:
- label: implements_or_implemented
type: slot
- label: Agenda
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/implements_auxiliary_platform
revision:
- label: is_or_was_related_to
type: slot
- label: WebPlatform
type: class
# https://nde.nl/ontology/hc/slot/implements_digital_platform

View file

@ -70,6 +70,7 @@ export interface UMLNode {
type: 'class' | 'enum' | 'entity' | 'slot';
attributes?: { name: string; type: string }[];
methods?: { name: string; returnType?: string }[];
slotUsage?: string[]; // List of properties overridden in slot_usage (e.g., ["range", "description"])
x?: number;
y?: number;
width?: number;
@ -651,6 +652,20 @@ const UMLVisualizationInner: React.FC<UMLVisualizationProps> = ({
});
}
// Measure slotUsage widths
if (node.slotUsage && node.slotUsage.length > 0) {
// Header "SLOT USAGE OVERRIDES"
const headerWidth = measureTextWidth("SLOT USAGE OVERRIDES", '10px', 'bold', sansSerifFont) + textPadding * 2;
maxWidth = Math.max(maxWidth, headerWidth);
// Items
node.slotUsage.forEach(item => {
// "✦ item"
const itemWidth = measureTextWidth(`${item}`, '12px', 'normal', monospaceFont) + textPadding * 2;
maxWidth = Math.max(maxWidth, itemWidth);
});
}
// Clamp to max width
return Math.min(maxWidth, maxNodeWidth);
};
@ -791,17 +806,20 @@ const UMLVisualizationInner: React.FC<UMLVisualizationProps> = ({
association: workingLinks.filter(l => l.type === 'association').length,
});
workingNodes.forEach(node => {
// When showing attributes as edges, don't count attributes for node height
const attributeCount = showAttributesAsEdges ? 0 : (node.attributes?.length || 0);
const methodCount = node.methods?.length || 0;
// Calculate dynamic width based on content (also respects showAttributesAsEdges)
node.width = calculateNodeWidth(node, showAttributesAsEdges);
node.height = nodeHeaderHeight +
(attributeCount > 0 ? attributeCount * attributeHeight + nodePadding : 0) +
(methodCount > 0 ? methodCount * methodHeight + nodePadding : 0);
});
workingNodes.forEach(node => {
// When showing attributes as edges, don't count attributes for node height
const attributeCount = showAttributesAsEdges ? 0 : (node.attributes?.length || 0);
const methodCount = node.methods?.length || 0;
const slotUsageCount = node.slotUsage?.length || 0;
// Calculate dynamic width based on content (also respects showAttributesAsEdges)
node.width = calculateNodeWidth(node, showAttributesAsEdges);
node.height = nodeHeaderHeight +
(attributeCount > 0 ? attributeCount * attributeHeight + nodePadding : 0) +
(methodCount > 0 ? methodCount * methodHeight + nodePadding : 0) +
(slotUsageCount > 0 ? 20 + slotUsageCount * attributeHeight + nodePadding : 0); // 20px for header
});
// When showAttributesAsEdges is true, create primitive type nodes and edges for attributes
if (showAttributesAsEdges) {
@ -2000,40 +2018,107 @@ const UMLVisualizationInner: React.FC<UMLVisualizationProps> = ({
});
}
// Draw methods section
nodes.each(function(d) {
if (!d.methods || d.methods.length === 0) return;
// Draw methods section
nodes.each(function(d) {
if (!d.methods || d.methods.length === 0) return;
const nodeGroup = d3.select(this);
const attributeCount = d.attributes?.length || 0;
let yOffset = nodeHeaderHeight + nodePadding +
(attributeCount > 0 ? attributeCount * attributeHeight + nodePadding : 0);
const nodeGroup = d3.select(this);
const attributeCount = d.attributes?.length || 0;
let yOffset = nodeHeaderHeight + nodePadding +
(attributeCount > 0 ? attributeCount * attributeHeight + nodePadding : 0);
// Methods divider
nodeGroup.append('line')
.attr('x1', 0)
.attr('y1', yOffset - nodePadding)
.attr('x2', d.width || defaultNodeWidth)
.attr('y2', yOffset - nodePadding)
.attr('stroke', '#0a3dfa')
.attr('stroke-width', 1);
// Methods divider
nodeGroup.append('line')
.attr('x1', 0)
.attr('y1', yOffset - nodePadding)
.attr('x2', d.width || defaultNodeWidth)
.attr('y2', yOffset - nodePadding)
.attr('stroke', '#0a3dfa')
.attr('stroke-width', 1);
// Method entries
d.methods.forEach((method, i) => {
const methodText = method.returnType
? `${method.name}(): ${method.returnType}`
: `${method.name}()`;
nodeGroup.append('text')
.attr('class', 'node-method')
.attr('x', 10)
.attr('y', yOffset + i * methodHeight)
.attr('fill', '#172a59')
.attr('font-size', '12px')
.attr('font-family', "'Monaco', 'Courier New', monospace")
.text(methodText);
// Method entries
d.methods.forEach((method, i) => {
const methodText = method.returnType
? `${method.name}(): ${method.returnType}`
: `${method.name}()`;
nodeGroup.append('text')
.attr('class', 'node-method')
.attr('x', 10)
.attr('y', yOffset + i * methodHeight)
.attr('fill', '#172a59')
.attr('font-size', '12px')
.attr('font-family', "'Monaco', 'Courier New', monospace")
.text(methodText);
});
});
});
// Draw slotUsage section
nodes.each(function(d) {
if (!d.slotUsage || d.slotUsage.length === 0) return;
const nodeGroup = d3.select(this);
const attributeCount = d.attributes?.length || 0;
const methodCount = d.methods?.length || 0;
let yOffset = nodeHeaderHeight + nodePadding +
(attributeCount > 0 ? attributeCount * attributeHeight + nodePadding : 0) +
(methodCount > 0 ? methodCount * methodHeight + nodePadding : 0);
// Slot usage divider (green to match slot theme)
nodeGroup.append('line')
.attr('x1', 0)
.attr('y1', yOffset - nodePadding)
.attr('x2', d.width || defaultNodeWidth)
.attr('y2', yOffset - nodePadding)
.attr('stroke', '#10b981')
.attr('stroke-width', 1)
.attr('stroke-dasharray', '4,2'); // Dashed to indicate it's special
// Slot Usage Header
// Background for header
nodeGroup.append('rect')
.attr('x', 2)
.attr('y', yOffset - nodePadding + 2)
.attr('width', (d.width || defaultNodeWidth) - 4)
.attr('height', 16)
.attr('fill', '#d1fae5') // Light emerald
.attr('rx', 2);
nodeGroup.append('text')
.attr('x', (d.width || defaultNodeWidth) / 2)
.attr('y', yOffset - nodePadding + 14) // Center vertically in rect
.attr('text-anchor', 'middle')
.attr('fill', '#065f46') // Dark emerald
.attr('font-size', '10px')
.attr('font-weight', 'bold')
.attr('text-transform', 'uppercase')
.text('Slot Usage Overrides');
yOffset += 20; // Move down past header
// Slot usage entries
d.slotUsage.forEach((item, i) => {
// Bullet point (✦)
nodeGroup.append('text')
.attr('x', 10)
.attr('y', yOffset + i * attributeHeight)
.attr('fill', '#059669') // Emerald 600
.attr('font-size', '10px')
.text('✦'); // Sparkle/star icon
// Item text
nodeGroup.append('text')
.attr('class', 'node-slot-usage')
.attr('x', 24)
.attr('y', yOffset + i * attributeHeight)
.attr('fill', '#064e3b') // Emerald 900
.attr('font-size', '12px')
.attr('font-family', "'Monaco', 'Courier New', monospace")
.text(item);
});
});
// Shared function to update all link positions - ensures edges stay attached to box borders
const updateLinkPositions = () => {

View file

@ -257,8 +257,8 @@ export interface SlotExportInfo {
/** Classes that have slot_usage overrides for this slot */
classesWithSlotUsage: Array<{
className: string;
/** Properties overridden in slot_usage (e.g., 'range', 'description', 'required') */
overrides: string[];
/** Properties overridden in slot_usage with their values */
overrides: Array<{ property: string; value: string }>;
}>;
/** The range type if it's a class or enum (for navigation) */
@ -1568,17 +1568,33 @@ class LinkMLSchemaService {
// Check if class has slot_usage for this slot
if (classDef.slot_usage?.[slotName]) {
const slotUsage = classDef.slot_usage[slotName];
const overrides: string[] = [];
const overrides: Array<{ property: string; value: string }> = [];
// Detect which properties are overridden
if (slotUsage.range !== undefined) overrides.push('range');
if (slotUsage.description !== undefined) overrides.push('description');
if (slotUsage.required !== undefined) overrides.push('required');
if (slotUsage.multivalued !== undefined) overrides.push('multivalued');
if (slotUsage.pattern !== undefined) overrides.push('pattern');
if (slotUsage.slot_uri !== undefined) overrides.push('slot_uri');
if (slotUsage.identifier !== undefined) overrides.push('identifier');
if (slotUsage.examples !== undefined) overrides.push('examples');
// Detect which properties are overridden and capture values
if (slotUsage.range !== undefined) {
overrides.push({ property: 'range', value: String(slotUsage.range) });
}
if (slotUsage.description !== undefined) {
overrides.push({ property: 'description', value: slotUsage.description });
}
if (slotUsage.required !== undefined) {
overrides.push({ property: 'required', value: String(slotUsage.required) });
}
if (slotUsage.multivalued !== undefined) {
overrides.push({ property: 'multivalued', value: String(slotUsage.multivalued) });
}
if (slotUsage.pattern !== undefined) {
overrides.push({ property: 'pattern', value: slotUsage.pattern });
}
if (slotUsage.slot_uri !== undefined) {
overrides.push({ property: 'slot_uri', value: slotUsage.slot_uri });
}
if (slotUsage.identifier !== undefined) {
overrides.push({ property: 'identifier', value: String(slotUsage.identifier) });
}
if (slotUsage.examples !== undefined) {
overrides.push({ property: 'examples', value: `(${slotUsage.examples.length} examples)` });
}
exportInfo.classesWithSlotUsage.push({
className,

View file

@ -3059,3 +3059,25 @@
.dark .wcms-only-item:hover:not(.selected) {
background: rgba(255, 255, 255, 0.03);
}
/* Profile Sources Section (Matches Email Semantics Section style) */
.profile-sources-section {
margin-top: 1rem;
padding: 0.75rem;
background: rgba(16, 185, 129, 0.05);
border-radius: 8px;
border: 1px solid rgba(16, 185, 129, 0.15);
}
.dark .profile-sources-section {
background: rgba(16, 185, 129, 0.1);
border-color: rgba(16, 185, 129, 0.25);
}
/* Remove default styling from inner existing-source-urls when inside profile-sources-section */
.profile-sources-section .existing-source-urls {
background: transparent;
border: none;
padding: 0;
margin-bottom: 0;
}

View file

@ -491,11 +491,16 @@ export default function EntityReviewPage() {
// Initialize search fields from profile data
setSearchName(data.name || '');
setSearchInstitution(data.wcms_identifiers?.institution_name || '');
// Auto-select first pending candidate
// Auto-select candidate: prioritize matched, then pending
const matchedCandidate = data.match_candidates?.find((c: MatchCandidate) => c.review_decision === 'match');
const pendingCandidate = data.match_candidates?.find((c: MatchCandidate) => !c.reviewed);
if (pendingCandidate) {
setSelectedCandidate(pendingCandidate);
fetchLinkedinProfile(pendingCandidate.linkedin_ppid);
// Select matched first, then pending, otherwise none (or could select first available)
const candidateToSelect = matchedCandidate || pendingCandidate;
if (candidateToSelect) {
setSelectedCandidate(candidateToSelect);
fetchLinkedinProfile(candidateToSelect.linkedin_ppid);
}
} catch (err) {
setError(err instanceof Error ? err.message : 'Unknown error');
@ -1796,6 +1801,68 @@ export default function EntityReviewPage() {
</div>
</div>
)}
{/* Existing Source URLs (Moved from bottom) */}
{selectedProfile.source_urls && selectedProfile.source_urls.length > 0 && (
<div className="profile-sources-section">
<div className="section-header">
<span className="section-title">
{language === 'nl' ? '🌐 Extra Bronnen' : '🌐 Additional Sources'}
</span>
</div>
<div className="existing-source-urls">
{selectedProfile.source_urls.map((source: SourceUrlItem) => {
// Extract path from URL for display (full URL minus protocol)
let displayUrl = source.source_url;
try {
const urlObj = new URL(source.source_url);
// Show hostname + path (truncate if too long)
displayUrl = urlObj.hostname + urlObj.pathname;
if (displayUrl.length > 50) {
displayUrl = displayUrl.substring(0, 47) + '...';
}
} catch {
displayUrl = source.source_domain || source.source_url;
}
return (
<div key={source.source_id} className="source-url-item">
<div className="source-url-header">
<a
href={source.source_url}
target="_blank"
rel="noopener noreferrer"
className="source-url-link"
title={source.source_url}
>
<Globe size={12} />
{displayUrl}
</a>
{source.provides_match && (
<span
className="provides-match-badge"
title={language === 'nl' ? 'Bron volstaat als match' : 'Provides match'}
>
<CheckCircle size={10} />
{language === 'nl' ? 'Match' : 'Match'}
</span>
)}
</div>
{source.comment && (
<div className="source-url-comment">
"{source.comment}"
</div>
)}
{source.added_at && (
<div className="source-url-date">
{new Date(source.added_at).toLocaleDateString()}
</div>
)}
</div>
);
})}
</div>
</div>
)}
</div>
{/* Candidate selector */}
@ -2114,64 +2181,7 @@ export default function EntityReviewPage() {
{/* Other Source URL Section */}
<div className="source-url-section">
{/* Display existing source URLs */}
{selectedProfile?.source_urls && selectedProfile.source_urls.length > 0 && (
<div className="existing-source-urls">
<div className="source-urls-header">
<Globe size={14} />
{language === 'nl' ? 'Toegevoegde bronnen' : 'Added sources'}
</div>
{selectedProfile.source_urls.map((source: SourceUrlItem) => {
// Extract path from URL for display (full URL minus protocol)
let displayUrl = source.source_url;
try {
const urlObj = new URL(source.source_url);
// Show hostname + path (truncate if too long)
displayUrl = urlObj.hostname + urlObj.pathname;
if (displayUrl.length > 50) {
displayUrl = displayUrl.substring(0, 47) + '...';
}
} catch {
displayUrl = source.source_domain || source.source_url;
}
return (
<div key={source.source_id} className="source-url-item">
<div className="source-url-header">
<a
href={source.source_url}
target="_blank"
rel="noopener noreferrer"
className="source-url-link"
title={source.source_url}
>
<Globe size={12} />
{displayUrl}
</a>
{source.provides_match && (
<span
className="provides-match-badge"
title={language === 'nl' ? 'Bron volstaat als match' : 'Provides match'}
>
<CheckCircle size={10} />
{language === 'nl' ? 'Match' : 'Match'}
</span>
)}
</div>
{source.comment && (
<div className="source-url-comment">
"{source.comment}"
</div>
)}
{source.added_at && (
<div className="source-url-date">
{new Date(source.added_at).toLocaleDateString()}
</div>
)}
</div>
);
})}
</div>
)}
{/* Existing source URLs moved to profile details */}
<button
className="toggle-source-url-btn"

View file

@ -930,11 +930,22 @@ const buildSlotUMLDiagram = (
for (const className of slotExportInfo.classesUsingSlot) {
// Check if this class also has slot_usage overrides
const overrides = classOverrides.get(className);
const attributes = overrides && overrides.length > 0
? [{ name: 'slot_usage', type: overrides.join(', ') }]
: [];
const node: UMLNode = {
id: className,
name: className,
type: 'class',
attributes: [],
methods: [],
};
if (overrides && overrides.length > 0) {
node.slotUsage = overrides;
}
addNode(className, 'class', attributes);
if (!addedNodes.has(className)) {
addedNodes.add(className);
nodes.push(node);
}
// Link from class to slot (subject → predicate)
links.push({
@ -950,11 +961,20 @@ const buildSlotUMLDiagram = (
// Skip if already added (declared the slot)
if (addedNodes.has(className)) continue;
const attributes = overrides.length > 0
? [{ name: 'slot_usage', type: overrides.join(', ') }]
: [];
const node: UMLNode = {
id: className,
name: className,
type: 'class',
attributes: [],
methods: [],
};
if (overrides && overrides.length > 0) {
node.slotUsage = overrides;
}
addNode(className, 'class', attributes);
addedNodes.add(className);
nodes.push(node);
// Link from class to slot - these customize but don't declare
links.push({

View file

@ -1,12 +1,12 @@
{
"generated": "2026-01-25T11:47:39.065Z",
"generated": "2026-01-26T00:41:04.603Z",
"schemaRoot": "/schemas/20251121/linkml",
"totalFiles": 3045,
"totalFiles": 3044,
"categoryCounts": {
"main": 4,
"class": 1026,
"class": 1033,
"enum": 154,
"slot": 1857,
"slot": 1849,
"module": 4
},
"categories": [
@ -1490,6 +1490,11 @@
"path": "modules/classes/DeviceTypes.yaml",
"category": "class"
},
{
"name": "DiarizationStatus",
"path": "modules/classes/DiarizationStatus.yaml",
"category": "class"
},
{
"name": "DigitalArchive",
"path": "modules/classes/DigitalArchive.yaml",
@ -1505,11 +1510,21 @@
"path": "modules/classes/DigitalArchiveRecordSetTypes.yaml",
"category": "class"
},
{
"name": "DigitalConfidence",
"path": "modules/classes/DigitalConfidence.yaml",
"category": "class"
},
{
"name": "DigitalPlatform",
"path": "modules/classes/DigitalPlatform.yaml",
"category": "class"
},
{
"name": "DigitalPlatformScore",
"path": "modules/classes/DigitalPlatformScore.yaml",
"category": "class"
},
{
"name": "DigitalPlatformType",
"path": "modules/classes/DigitalPlatformType.yaml",
@ -1575,6 +1590,21 @@
"path": "modules/classes/DigitalPlatformV2TransformationMetadata.yaml",
"category": "class"
},
{
"name": "DigitalPresence",
"path": "modules/classes/DigitalPresence.yaml",
"category": "class"
},
{
"name": "DigitalPresenceType",
"path": "modules/classes/DigitalPresenceType.yaml",
"category": "class"
},
{
"name": "DigitalProficiency",
"path": "modules/classes/DigitalProficiency.yaml",
"category": "class"
},
{
"name": "DimArchives",
"path": "modules/classes/DimArchives.yaml",
@ -4045,6 +4075,11 @@
"path": "modules/classes/SourceWork.yaml",
"category": "class"
},
{
"name": "Speaker",
"path": "modules/classes/Speaker.yaml",
"category": "class"
},
{
"name": "SpecialCollection",
"path": "modules/classes/SpecialCollection.yaml",
@ -6697,71 +6732,11 @@
"path": "modules/slots/description_type.yaml",
"category": "slot"
},
{
"name": "device_count",
"path": "modules/slots/device_count.yaml",
"category": "slot"
},
{
"name": "diarization_confidence",
"path": "modules/slots/diarization_confidence.yaml",
"category": "slot"
},
{
"name": "diarization_enabled",
"path": "modules/slots/diarization_enabled.yaml",
"category": "slot"
},
{
"name": "diarization_end_seconds",
"path": "modules/slots/diarization_end_seconds.yaml",
"category": "slot"
},
{
"name": "diarization_speaker_id",
"path": "modules/slots/diarization_speaker_id.yaml",
"category": "slot"
},
{
"name": "diarization_speaker_label",
"path": "modules/slots/diarization_speaker_label.yaml",
"category": "slot"
},
{
"name": "diarization_start_seconds",
"path": "modules/slots/diarization_start_seconds.yaml",
"category": "slot"
},
{
"name": "digital_confidence",
"path": "modules/slots/digital_confidence.yaml",
"category": "slot"
},
{
"name": "digital_indicator",
"path": "modules/slots/digital_indicator.yaml",
"category": "slot"
},
{
"name": "digital_platform",
"path": "modules/slots/digital_platform.yaml",
"category": "slot"
},
{
"name": "digital_platform_score",
"path": "modules/slots/digital_platform_score.yaml",
"category": "slot"
},
{
"name": "digital_presence_type",
"path": "modules/slots/digital_presence_type.yaml",
"category": "slot"
},
{
"name": "digital_professional",
"path": "modules/slots/digital_professional.yaml",
"category": "slot"
},
{
"name": "digital_surrogate",
"path": "modules/slots/digital_surrogate.yaml",
@ -6812,11 +6787,6 @@
"path": "modules/slots/dissolution_date.yaml",
"category": "slot"
},
{
"name": "dissolve_count",
"path": "modules/slots/dissolve_count.yaml",
"category": "slot"
},
{
"name": "dissolved_date",
"path": "modules/slots/dissolved_date.yaml",
@ -7022,6 +6992,11 @@
"path": "modules/slots/emic_name.yaml",
"category": "slot"
},
{
"name": "emphasizes_or_emphasized",
"path": "modules/slots/emphasizes_or_emphasized.yaml",
"category": "slot"
},
{
"name": "employer_linkedin_url",
"path": "modules/slots/employer_linkedin_url.yaml",
@ -7187,6 +7162,11 @@
"path": "modules/slots/estimated_volume.yaml",
"category": "slot"
},
{
"name": "estimates_or_estimated",
"path": "modules/slots/estimates_or_estimated.yaml",
"category": "slot"
},
{
"name": "etag",
"path": "modules/slots/etag.yaml",
@ -9192,6 +9172,11 @@
"path": "modules/slots/has_or_had_digital_platform.yaml",
"category": "slot"
},
{
"name": "has_or_had_digital_presence",
"path": "modules/slots/has_or_had_digital_presence.yaml",
"category": "slot"
},
{
"name": "has_or_had_direction",
"path": "modules/slots/has_or_had_direction.yaml",
@ -10562,6 +10547,11 @@
"path": "modules/slots/includes_timestamp.yaml",
"category": "slot"
},
{
"name": "indicates_or_indicated",
"path": "modules/slots/indicates_or_indicated.yaml",
"category": "slot"
},
{
"name": "industry_benchmark_high",
"path": "modules/slots/industry_benchmark_high.yaml",
@ -10967,6 +10957,11 @@
"path": "modules/slots/is_or_was_derived_from.yaml",
"category": "slot"
},
{
"name": "is_or_was_diarized",
"path": "modules/slots/is_or_was_diarized.yaml",
"category": "slot"
},
{
"name": "is_or_was_encompassed_by",
"path": "modules/slots/is_or_was_encompassed_by.yaml",

View file

@ -28,8 +28,13 @@ imports:
- ../slots/has_or_had_main_part
- ./MainPart
- ./BudgetType
- ../slots/digitization_budget
- ../slots/documented_by
- ../slots/allocates_or_allocated
- ./DigitizationBudget
- ../slots/has_or_had_quantity
- ../classes/Quantity
- ../slots/has_or_had_unit
- ../classes/Unit
- ../slots/employee_benefits_expenses
- ../slots/endowment_draw
- ../slots/external_funding
- ../slots/fiscal_year_end
@ -119,8 +124,7 @@ classes:
- has_or_had_type
# MIGRATED 2026-01-22: capital_budget → has_or_had_main_part + MainPart per slot_fixes.yaml revision
- has_or_had_main_part
- digitization_budget
- documented_by
- allocates_or_allocated
- endowment_draw
- external_funding
- fiscal_year_end
@ -286,9 +290,14 @@ classes:
preservation_budget:
range: decimal
required: false
digitization_budget:
range: decimal
allocates_or_allocated:
range: DigitizationBudget
required: false
multivalued: true
inlined: true
description: >-
Budget allocated for digitization activities.
MIGRATED from digitization_budget (2026-01-25) per Rule 53.
innovation_budget:
range: decimal
required: false
@ -413,7 +422,11 @@ classes:
acquisition_budget: 2000000.0
personnel_budget: 22000000.0
preservation_budget: 1500000.0
digitization_budget: 500000.0
allocates_or_allocated:
- has_or_had_quantity:
has_or_had_value: 500000.0
has_or_had_unit:
has_or_had_label: "EUR"
innovation_budget: 750000.0
external_funding: 15000000.0
internal_funding: 25000000.0
@ -447,7 +460,11 @@ classes:
part_type: capital_budget
currency_code: EUR
personnel_budget: 5200000.0
digitization_budget: 800000.0
allocates_or_allocated:
- has_or_had_quantity:
has_or_had_value: 800000.0
has_or_had_unit:
has_or_had_label: "EUR"
external_funding: 6000000.0
internal_funding: 2500000.0
approval_date: '2024-03-01'

View file

@ -40,8 +40,8 @@ imports:
# REMOVED 2026-01-18: ../slots/collection_type_ref - migrated to is_or_was_categorized_as + CollectionType (Rule 53)
- ../slots/has_or_had_curation_activity
- ../slots/custodial_history
- ../slots/digital_surrogate_url
- ../slots/digitization_status
- ../slots/is_or_was_instantiated_by
- ./DigitalInstantiation
- ../slots/extent
- ../slots/extent_item
- ../slots/has_or_had_finding_aid
@ -127,8 +127,7 @@ classes:
- has_or_had_curation_activity
- custodial_history
- has_or_had_custodian_type
- digital_surrogate_url
- digitization_status
- is_or_was_instantiated_by
- extent
- extent_item
- has_or_had_finding_aid
@ -456,6 +455,19 @@ classes:
language:
- nl
- en
digitization_status: PARTIAL
part_of_custodian_collection: https://nde.nl/ontology/hc/custodian-collection/nationaal-archief
is_or_was_instantiated_by:
range: DigitalInstantiation
multivalued: true
inlined: true
description: |
Digital surrogates (URL) or digitization status.
MIGRATED from digital_surrogate_url and digitization_status (2026-01-25).
examples:
- value:
has_or_had_status:
has_or_had_label: PARTIAL
has_or_had_url:
url_value: "https://www.nationaalarchief.nl/onderzoeken/archief/1.04.02/download"
description: Partial digitization with download link
part_of_custodian_collection: https://nde.nl/ontology/hc/custodian-collection/nationaal-archief
description: VOC archival fonds at Nationaal Archief

View file

@ -0,0 +1,39 @@
id: https://nde.nl/ontology/hc/class/ContactDetails
name: ContactDetails
title: Contact Details Class
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
vcard: http://www.w3.org/2006/vcard/ns#
default_prefix: hc
imports:
- linkml:types
- ../metadata
- ../slots/includes_or_included
- ./EmailAddress
classes:
ContactDetails:
class_uri: schema:ContactPoint
description: >-
Structured contact information for an entity.
**Ontology Alignment**:
- **Primary**: `schema:ContactPoint`
- **Close**: `vcard:VCard`
slots:
- includes_or_included
slot_usage:
includes_or_included:
range: EmailAddress
description: Email addresses included in these contact details.
annotations:
custodian_types: '["*"]'
specificity_score: 0.2
specificity_rationale: Universal contact info class.

View file

@ -23,7 +23,9 @@ imports:
- ../slots/has_or_had_custodian_type
- ../slots/legal_status
- ../slots/place_designation
- ../slots/digital_platform
# MIGRATED 2026-01-25: digital_platform → has_or_had_digital_presence (Rule 53)
- ../slots/has_or_had_digital_presence
# - ../slots/digital_platform # REMOVED
- ../slots/has_or_had_collection # was: has_collection - migrated per Rule 53 (2025-01-15)
- ../slots/organizational_structure
- ../slots/has_or_had_organizational_change_event
@ -196,7 +198,8 @@ classes:
- created
- has_or_had_custodian_type
- has_or_had_policy # was: data_license_policy - migrated per Rule 53 (2026-01-22)
- digital_platform
# MIGRATED 2026-01-25: digital_platform → has_or_had_digital_presence (Rule 53)
- has_or_had_digital_presence
- is_or_was_encompassed_by # was: encompassing_body - migrated per Rule 53 (2025-01-15)
- has_or_had_exhibition
- gift_shop
@ -235,11 +238,15 @@ classes:
range: CustodianPlace
inlined: true
required: false
digital_platform:
# MIGRATED 2026-01-25: digital_platform → has_or_had_digital_presence (Rule 53)
has_or_had_digital_presence:
range: DigitalPlatform
multivalued: true
required: false
inlined_as_list: true
description: |
Digital platform(s) or online presence(s) associated with this custodian.
MIGRATED from digital_platform per slot_fixes.yaml (Rule 53, 2026-01-25).
has_or_had_collection: # was: has_collection - migrated per Rule 53 (2025-01-15)
range: CustodianCollection
multivalued: true

View file

@ -11,7 +11,8 @@ imports:
- ./CollectionManagementSystem
- ./ReconstructedEntity
- ../slots/preservation_level
- ../slots/digitization_status
- ../slots/is_or_was_instantiated_by
- ./DigitalInstantiation
# REMOVED 2026-01-18: ../slots/collection_name - migrated to has_or_had_label + Label (Rule 53)
- ../slots/has_or_had_label
- ./Label
@ -36,7 +37,6 @@ imports:
- ../slots/is_or_was_generated_by # was: was_generated_by - migrated per Rule 53
- ../slots/has_or_had_custodian_type
- ../slots/custody_history
- ../slots/digital_surrogate
- ../slots/id
- ../slots/has_or_had_managed_by_cm
- ../slots/has_or_had_provenance # was: provenance_note - migrated per Rule 53/56 (2026-01-18)
@ -102,8 +102,7 @@ classes:
# REMOVED 2026-01-22: collection_type - migrated to has_or_had_content + CollectionContent (Rule 53)
- has_or_had_custodian_type
- custody_history
- digital_surrogate
- digitization_status
- is_or_was_instantiated_by
- extent
- id
- has_or_had_managed_by_cm
@ -216,18 +215,13 @@ classes:
has_or_had_access_right:
range: string
required: false
digital_surrogate:
range: string
is_or_was_instantiated_by:
range: DigitalInstantiation
multivalued: true
required: false
digitization_status:
range: string
required: false
examples:
- value: PARTIAL
description: 30% of collection digitized as of 2024
- value: COMPLETE
description: Full collection digitized 2019-2021
inlined: true
description: |
Digital surrogates or digitization status.
MIGRATED from digital_surrogate and digitization_status (2026-01-25).
preservation_level:
range: string
required: false

View file

@ -0,0 +1,69 @@
# DiarizationStatus class
# Status of speaker diarization process
#
# Generation date: 2026-01-25
# Rule compliance: 0 (LinkML single source of truth), 53 (migration from diarization_enabled)
# Migration source: diarization_enabled slot per slot_fixes.yaml
id: https://nde.nl/ontology/hc/class/DiarizationStatus
name: diarization_status_class
title: DiarizationStatus Class
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
default_prefix: hc
imports:
- linkml:types
- ../slots/has_or_had_label
- ../slots/has_or_had_identifier
classes:
DiarizationStatus:
class_uri: schema:ActionStatusType
description: |
Represents the status of a speaker diarization process (enabled, disabled, completed, failed).
**MIGRATION SOURCE**: Created from diarization_enabled slot migration (Rule 53, 2026-01-25).
**Ontological Alignment**:
- **Primary**: `schema:ActionStatusType` - Status of an action
exact_mappings:
- schema:ActionStatusType
slots:
- has_or_had_identifier
- has_or_had_label
slot_usage:
has_or_had_identifier:
description: Status code or identifier (e.g., "COMPLETED", "ENABLED").
range: uriorcurie
required: false
has_or_had_label:
description: Human-readable status description.
range: string
required: true
annotations:
custodian_types: '["*"]'
specificity_score: 0.8
specificity_rationale: Specific to media analysis processes.
comments:
- "CREATED from diarization_enabled migration per slot_fixes.yaml (Rule 53)"
- "Tracks status of diarization process"
examples:
- value:
has_or_had_label: Enabled
has_or_had_identifier: https://schema.org/ActiveActionStatus
description: Diarization enabled/active
- value:
has_or_had_label: Completed
has_or_had_identifier: https://schema.org/CompletedActionStatus
description: Diarization completed

View file

@ -0,0 +1,82 @@
# DigitalConfidence class
# Represents confidence assessment for digital attributes/skills
#
# Created: 2026-01-25
# Rule compliance: 0b (Type/Types pattern), 38 (slot centralization), 39 (RiC-O naming), 53 (slot_fixes.yaml)
# Migration: digital_confidence → estimates_or_estimated + DigitalConfidence
id: https://nde.nl/ontology/hc/class/DigitalConfidence
name: DigitalConfidence
title: Digital Confidence Class
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
dqv: http://www.w3.org/ns/dqv#
schema: http://schema.org/
default_prefix: hc
imports:
- linkml:types
- ../metadata
- ../slots/has_or_had_score
- ../slots/has_or_had_description
- ../slots/has_or_had_type
classes:
DigitalConfidence:
class_uri: dqv:QualityMeasurement
description: |
Confidence assessment for digital attributes, skills, or proficiency.
**DEFINITION**:
DigitalConfidence captures the certainty level associated with an inferred
or extracted digital attribute (e.g., digital proficiency inferred from a profile).
**Ontological Alignment**:
- **DQV**: `dqv:QualityMeasurement` - quality/confidence metric
**Migrated From** (per slot_fixes.yaml):
- `digital_confidence` (float) → estimates_or_estimated + DigitalConfidence
exact_mappings:
- dqv:QualityMeasurement
slots:
- has_or_had_score
- has_or_had_description
- has_or_had_type
slot_usage:
has_or_had_score:
description: |
Numeric confidence score (0.0-1.0).
Inherits broad range (Any) but overrides description/examples.
range: float
required: true
minimum_value: 0.0
maximum_value: 1.0
examples:
- value: 0.85
description: High confidence estimation
has_or_had_type:
description: Type of confidence assessment (e.g., PROFICIENCY_INFERENCE)
examples:
- value: SKILL_INFERENCE
has_or_had_description:
description: Explanation of the confidence assessment
examples:
- value: "Inferred from explicit skill endorsements and project history"
annotations:
custodian_types: '["P"]'
custodian_types_rationale: Digital confidence applies to person profiles (custodian staff)
specificity_score: 0.60
specificity_rationale: Specific to person profile enrichment
comments:
- "Represents confidence in digital attribute assessments"
- "Migrated from digital_confidence slot per slot_fixes.yaml"
- "Used in LinkedInProfile enrichment"

View file

@ -0,0 +1,33 @@
id: https://nde.nl/ontology/hc/class/DigitalInstantiation
name: DigitalInstantiation
description: >-
Representation of a digital surrogate, digitization status, or digital manifestation of an entity.
Captures details about digital availability, format, and resolution.
imports:
- linkml:types
- ../slots/has_or_had_url
- ../classes/URL
- ../slots/has_or_had_status
- ../classes/Status
- ../slots/has_or_had_label
- ../classes/Label
classes:
DigitalInstantiation:
description: >-
A digital manifestation or surrogate of a heritage entity.
MIGRATED from digital_surrogate, digital_surrogate_url, and digitization_status slots (2026-01-25).
slots:
- has_or_had_url
- has_or_had_status
- has_or_had_label
slot_usage:
has_or_had_url:
range: URL
description: "URL to the digital surrogate or download endpoint."
has_or_had_status:
range: Status
description: "Digitization status (e.g., PARTIAL, COMPLETE)."
has_or_had_label:
range: Label
description: "Label or name of the digital instantiation."

View file

@ -0,0 +1,52 @@
# DigitalPlatformScore class
# Score for digital platform relevance/specificity
#
# Generation date: 2026-01-25
# Rule compliance: 0, 53
# Migration source: digital_platform_score slot per slot_fixes.yaml
id: https://nde.nl/ontology/hc/class/DigitalPlatformScore
name: digital_platform_score_class
title: Digital Platform Score Class
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
sosa: http://www.w3.org/ns/sosa/
default_prefix: hc
imports:
- linkml:types
- ../slots/has_or_had_score
classes:
DigitalPlatformScore:
class_uri: sosa:Result
description: |
Represents a score for digital platform relevance or specificity.
**MIGRATION SOURCE**: Created from digital_platform_score slot migration (Rule 53, 2026-01-25).
**Ontological Alignment**:
- **Primary**: `sosa:Result` - Result of an observation/scoring
exact_mappings:
- sosa:Result
slots:
- has_or_had_score
slot_usage:
has_or_had_score:
description: The score value (0.0-1.0).
range: float
required: true
minimum_value: 0.0
maximum_value: 1.0
annotations:
custodian_types: '["*"]'
specificity_score: 0.2
specificity_rationale: "Used for scoring digital platform relevance."

View file

@ -0,0 +1,65 @@
# DigitalPresence class
# Represents a digital presence instance (wrapper)
#
# Generation date: 2026-01-25
# Rule compliance: 0, 53
# Migration source: digital_presence_type slot per slot_fixes.yaml
id: https://nde.nl/ontology/hc/class/DigitalPresence
name: digital_presence_class
title: Digital Presence Class
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
crm: http://www.cidoc-crm.org/cidoc-crm/
schema: http://schema.org/
default_prefix: hc
imports:
- linkml:types
- ../slots/has_or_had_type
- ../slots/has_or_had_identifier
- ./DigitalPresenceType
- ./DigitalPresenceTypes
classes:
DigitalPresence:
class_uri: crm:E1_CRM_Entity
description: |
Represents a digital presence being asserted about (e.g. as primary).
Wrapper that links a specific presence instance (URI) to its type classification.
**MIGRATION SOURCE**: Created from digital_presence_type slot migration (Rule 53, 2026-01-25).
**Pattern**: Replaces `digital_presence_type` slot on assertion with structured object:
- `has_or_had_identifier`: URI of the presence (SocialMediaProfile, Website, etc.)
- `has_or_had_type`: Classification (DigitalPresenceType)
exact_mappings:
- crm:E1_CRM_Entity
slots:
- has_or_had_identifier
- has_or_had_type
slot_usage:
has_or_had_identifier:
description: URI of the digital presence instance (e.g. hc:social-media/fb).
range: uriorcurie
required: true
has_or_had_type:
description: Type classification of this presence.
range: DigitalPresenceType
required: true
inlined: true
annotations:
custodian_types: '["*"]'
specificity_score: 0.5
specificity_rationale: "Used for asserting properties of digital presences."
comments:
- "CREATED from digital_presence_type migration per slot_fixes.yaml (Rule 53)"
- "Wrapper for linking presence instance to its type"

View file

@ -0,0 +1,58 @@
# DigitalPresenceType class (Abstract Base)
# Taxonomy for digital presence types
#
# Generation date: 2026-01-25
# Rule compliance: 0, 0b, 53
# Migration source: DigitalPresenceTypeEnum per slot_fixes.yaml
id: https://nde.nl/ontology/hc/class/DigitalPresenceType
name: digital_presence_type_class
title: DigitalPresenceType Class (Abstract)
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
default_prefix: hc
imports:
- linkml:types
- ../slots/has_or_had_label
- ../slots/has_or_had_identifier
classes:
DigitalPresenceType:
class_uri: schema:Intangible
abstract: true
description: |
Abstract base class for digital presence taxonomy.
**MIGRATION SOURCE**: Replaces DigitalPresenceTypeEnum (Rule 53, 2026-01-25).
**Pattern**: Type/Types (Rule 0b)
- DigitalPresenceType (this file): Abstract base
- DigitalPresenceTypes (separate file): Concrete subclasses
exact_mappings:
- schema:Intangible
slots:
- has_or_had_identifier
- has_or_had_label
slot_usage:
has_or_had_identifier:
description: Unique identifier for this presence type.
range: uriorcurie
required: false
has_or_had_label:
description: Human-readable name of this presence type.
range: string
required: true
annotations:
custodian_types: '["*"]'
specificity_score: 0.6
type_types_pattern: base
type_types_related: DigitalPresenceTypes

View file

@ -0,0 +1,131 @@
# DigitalPresenceTypes class (Concrete Subclasses)
# Concrete classes for digital presence taxonomy
#
# Generation date: 2026-01-25
# Rule compliance: 0, 0b, 53
# Migration source: DigitalPresenceTypeEnum per slot_fixes.yaml
id: https://nde.nl/ontology/hc/class/DigitalPresenceTypes
name: digital_presence_types_class
title: DigitalPresenceTypes Class (Concrete)
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
dcat: http://www.w3.org/ns/dcat#
foaf: http://xmlns.com/foaf/0.1/
default_prefix: hc
imports:
- linkml:types
- ./DigitalPresenceType
classes:
# PRIMARY
WebsitePresenceType:
is_a: DigitalPresenceType
class_uri: schema:WebSite
description: "Traditional website - informational web presence."
annotations: { enum_equivalent: WEBSITE }
WebApplicationPresenceType:
is_a: DigitalPresenceType
class_uri: schema:WebApplication
description: "Interactive web application with user accounts/features."
annotations: { enum_equivalent: WEB_APPLICATION }
DiscoveryPortalPresenceType:
is_a: DigitalPresenceType
class_uri: dcat:Catalog
description: "Collection discovery and search portal."
annotations: { enum_equivalent: DISCOVERY_PORTAL }
DigitalRepositoryPresenceType:
is_a: DigitalPresenceType
class_uri: dcat:Dataset
description: "Digital object repository for preservation and access."
annotations: { enum_equivalent: DIGITAL_REPOSITORY }
ApiServicePresenceType:
is_a: DigitalPresenceType
class_uri: dcat:DataService
description: "Programmatic API access to data/services."
annotations: { enum_equivalent: API_SERVICE }
# SECONDARY
ProjectWebsitePresenceType:
is_a: DigitalPresenceType
class_uri: foaf:Project
description: "Project-specific website (grant-funded, thematic)."
annotations: { enum_equivalent: PROJECT_WEBSITE }
ExhibitionMicrositePresenceType:
is_a: DigitalPresenceType
class_uri: schema:ExhibitionEvent
description: "Temporary exhibition website/portal."
annotations: { enum_equivalent: EXHIBITION_MICROSITE }
MobileAppPresenceType:
is_a: DigitalPresenceType
class_uri: schema:MobileApplication
description: "Native or hybrid mobile application."
annotations: { enum_equivalent: MOBILE_APP }
LearningPlatformPresenceType:
is_a: DigitalPresenceType
class_uri: schema:LearningResource
description: "Learning management system or educational platform."
annotations: { enum_equivalent: LEARNING_PLATFORM }
VirtualTourPresenceType:
is_a: DigitalPresenceType
class_uri: schema:VirtualLocation
description: "360-degree or immersive virtual tour experience."
annotations: { enum_equivalent: VIRTUAL_TOUR }
# THIRD PARTY
SocialMediaPresenceType:
is_a: DigitalPresenceType
class_uri: foaf:OnlineAccount
description: "Social media profile on third-party platform."
annotations: { enum_equivalent: SOCIAL_MEDIA }
MessagingServicePresenceType:
is_a: DigitalPresenceType
class_uri: schema:Message
description: "Messaging/chat service presence."
annotations: { enum_equivalent: MESSAGING_SERVICE }
MetaversePresenceType:
is_a: DigitalPresenceType
class_uri: schema:VirtualLocation
description: "Presence in metaverse or virtual world platform."
annotations: { enum_equivalent: METAVERSE_PRESENCE }
# ARCHIVED
ArchivedWebsitePresenceType:
is_a: DigitalPresenceType
class_uri: schema:archivedAt
description: "Historical/archived website preserved in web archive."
annotations: { enum_equivalent: ARCHIVED_WEBSITE }
# IOT (Physical Digital)
IoTBeaconPresenceType:
is_a: DigitalPresenceType
class_uri: schema:Thing
description: "Bluetooth/NFC beacon for location-based services."
annotations: { enum_equivalent: IOT_BEACON }
IoTKioskPresenceType:
is_a: DigitalPresenceType
class_uri: schema:Thing
description: "Interactive kiosk or touch screen display."
annotations: { enum_equivalent: IOT_KIOSK }
IoTSensorPresenceType:
is_a: DigitalPresenceType
class_uri: schema:Thing
description: "Environmental or monitoring sensor."
annotations: { enum_equivalent: IOT_SENSOR }

View file

@ -0,0 +1,89 @@
# DigitalProficiency class
# Represents a digital skill, tool, or competency
#
# Created: 2026-01-25
# Rule compliance: 0b (Type/Types pattern), 38 (slot centralization), 39 (RiC-O naming), 53 (slot_fixes.yaml)
# Migration: digital_indicator → emphasizes_or_emphasized + DigitalProficiency
id: https://nde.nl/ontology/hc/class/DigitalProficiency
name: DigitalProficiency
title: Digital Proficiency Class
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
skos: http://www.w3.org/2004/02/skos/core#
default_prefix: hc
imports:
- linkml:types
- ../metadata
- ../slots/has_or_had_label
- ../slots/has_or_had_description
- ../slots/has_or_had_type
classes:
DigitalProficiency:
class_uri: schema:DefinedTerm
description: |
A digital skill, tool, competency, or proficiency indicator.
**DEFINITION**:
DigitalProficiency represents a specific digital capability (e.g., "Python",
"Data Analysis", "CMS Management") identified in a person's profile.
**Ontological Alignment**:
- **Schema.org**: `schema:DefinedTerm` - defined concept (skill)
- **SKOS**: `skos:Concept` - concept in a scheme
**Migrated From** (per slot_fixes.yaml):
- `digital_indicator` (string list) → emphasizes_or_emphasized + DigitalProficiency
- `digital_professional` (boolean) → indicates_or_indicated + DigitalProficiency
exact_mappings:
- schema:DefinedTerm
close_mappings:
- skos:Concept
slots:
- has_or_had_label
- has_or_had_description
- has_or_had_type
slot_usage:
has_or_had_label:
description: Name of the proficiency (e.g., "Python", "Data Science")
required: true
examples:
- value: "Python"
- value: "Linked Data"
has_or_had_type:
description: Category of proficiency (LANGUAGE, TOOL, CONCEPT, etc.)
examples:
- value: PROGRAMMING_LANGUAGE
- value: METHODOLOGY
annotations:
custodian_types: '["P"]'
custodian_types_rationale: Digital proficiency applies to person profiles
specificity_score: 0.60
specificity_rationale: Specific to person profile enrichment and skills analysis
comments:
- "Represents specific digital skills/indicators"
- "Migrated from digital_indicator string list"
- "Used in DigitalProfessionalAssessment"
examples:
- value:
has_or_had_label: "Python"
has_or_had_type: "PROGRAMMING_LANGUAGE"
description: Python programming skill
- value:
has_or_had_label: "Collection Management Systems"
has_or_had_type: "DOMAIN_TOOL"
description: CMS proficiency

View file

@ -0,0 +1,17 @@
id: https://nde.nl/ontology/hc/class/DigitizationBudget
name: DigitizationBudget
description: >-
Representation of a budget allocated for digitization activities.
MIGRATED from digitization_budget slot (2026-01-25).
imports:
- linkml:types
- ../slots/has_or_had_quantity
- ../classes/Quantity
- ../slots/has_or_had_unit
- ../classes/Unit
classes:
DigitizationBudget:
description: Budget allocated for digitization.
slots:
- has_or_had_quantity
- has_or_had_unit

View file

@ -25,7 +25,7 @@ imports:
- ./PermissionTypes
- ../slots/has_or_had_custodian_type
- ../slots/diocese_name
- ../slots/ecclesiastical_province
- ../slots/originates_or_originated_from
# MIGRATED 2026-01-22: founding_date_diocese → is_or_was_part_of + Diocese (Rule 53)
- ../slots/is_or_was_part_of
- ./Diocese
@ -49,7 +49,7 @@ classes:
- requires_or_required # was: canonical_access_rule - migrated 2026-01-22
- has_or_had_custodian_type
- diocese_name
- ecclesiastical_province
- originates_or_originated_from
- is_or_was_part_of # was: founding_date_diocese - migrated per Rule 53 (2026-01-22)
- hold_or_held_record_set_type
- specificity_annotation
@ -83,10 +83,16 @@ classes:
range: string
examples:
- value: Archdiocese of Utrecht
ecclesiastical_province:
range: string
originates_or_originated_from:
range: Diocese
description: |
The diocese from which this archive originates (and is likely part of).
MIGRATED from ecclesiastical_province per Rule 53 (2026-01-25).
examples:
- value: Province of Utrecht
- value:
diocese_name: Diocese of Utrecht
is_or_was_located_in:
has_or_had_label: Province of Utrecht
# MIGRATED 2026-01-22: founding_date_diocese → is_or_was_part_of + Diocese (Rule 53)
is_or_was_part_of:
description: |
@ -152,7 +158,10 @@ classes:
has_or_had_description: Archive of a bishopric (diocese) # was: type_description - migrated per Rule 53/56 (2026-01-16)
diocese_name: Diocese of 's-Hertogenbosch
archdiocese_name: Archdiocese of Utrecht
ecclesiastical_province: Province of Utrecht
originates_or_originated_from:
diocese_name: Diocese of 's-Hertogenbosch
is_or_was_located_in:
has_or_had_label: Province of Utrecht
# MIGRATED 2026-01-22: founding_date_diocese → is_or_was_part_of + Diocese (Rule 53)
is_or_was_part_of:
diocese_name: "Diocese of 's-Hertogenbosch"

View file

@ -23,6 +23,8 @@ imports:
- ../slots/has_or_had_identifier
- ../slots/has_or_had_label
- ../slots/description
- ../slots/is_or_was_located_in
- ./EcclesiasticalProvince
- ./FoundingEvent
classes:
@ -63,6 +65,7 @@ classes:
- has_or_had_identifier
- has_or_had_label
- description
- is_or_was_located_in
attributes:
diocese_id:
@ -97,12 +100,7 @@ classes:
examples:
- value: "Archdiocese of Utrecht"
ecclesiastical_province:
description: |
Name of the ecclesiastical province containing this diocese.
range: string
examples:
- value: "Province of Utrecht"
# ecclesiastical_province migrated to is_or_was_located_in + EcclesiasticalProvince (Rule 53)
denomination:
description: |
@ -115,6 +113,15 @@ classes:
- value: "Eastern Orthodox"
slot_usage:
is_or_was_located_in:
range: EcclesiasticalProvince
description: |
The ecclesiastical province this diocese belongs to.
MIGRATED from ecclesiastical_province per Rule 53 (2026-01-25).
examples:
- value:
has_or_had_label: "Province of Utrecht"
description: Part of the Province of Utrecht
is_or_was_founded_through:
description: |
The founding event of this diocese.
@ -141,7 +148,8 @@ classes:
diocese_id: "wd:Q1808831"
diocese_name: "Diocese of Utrecht"
archdiocese_name: "Archdiocese of Utrecht"
ecclesiastical_province: "Province of Utrecht"
is_or_was_located_in:
has_or_had_label: "Province of Utrecht"
denomination: "Roman Catholic"
is_or_was_founded_through:
temporal_extent:
@ -154,7 +162,8 @@ classes:
diocese_id: "hc:diocese/s-hertogenbosch"
diocese_name: "Diocese of 's-Hertogenbosch"
archdiocese_name: "Archdiocese of Utrecht"
ecclesiastical_province: "Province of Utrecht"
is_or_was_located_in:
has_or_had_label: "Province of Utrecht"
denomination: "Roman Catholic"
is_or_was_founded_through:
temporal_extent:

View file

@ -0,0 +1,60 @@
# EADIdentifier class
# Represents an Encoded Archival Description (EAD) identifier
#
# Created: 2026-01-25
# Rule compliance: 0b (Type/Types pattern), 38 (slot centralization), 39 (RiC-O naming), 53 (slot_fixes.yaml)
# Migration: ead_id → has_or_had_identifier + EADIdentifier
id: https://nde.nl/ontology/hc/class/EADIdentifier
name: EADIdentifier
title: EAD Identifier Class
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
default_prefix: hc
imports:
- linkml:types
- ./Identifier
classes:
EADIdentifier:
is_a: Identifier
description: |
Identifier used in Encoded Archival Description (EAD) finding aids.
**DEFINITION**:
Uniquely identifies a finding aid or archival description component
within the EAD standard context.
**Ontological Alignment**:
- **Schema.org**: `schema:PropertyValue`
**Migrated From** (per slot_fixes.yaml):
- `ead_id` (string) → has_or_had_identifier + EADIdentifier
slot_usage:
identifier_scheme:
equals_string: "EAD"
has_or_had_type:
description: Type of EAD identifier (e.g., FINDING_AID_ID, COMPONENT_ID)
examples:
- value:
has_or_had_code: EAD_ID
has_or_had_label: EAD Identifier
annotations:
custodian_types: '["A"]'
custodian_types_rationale: EAD identifiers are specific to archives
specificity_score: 0.80
specificity_rationale: Specific to archival description standards
examples:
- value:
identifier_value: "NL-HaNA_2.21.006.50"
identifier_scheme: "EAD"
description: "National Archives EAD identifier"

View file

@ -0,0 +1,49 @@
id: https://nde.nl/ontology/hc/class/EBook
name: EBook
title: EBook Class
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
bf: http://id.loc.gov/ontologies/bibframe/
default_prefix: hc
imports:
- linkml:types
- ../metadata
- ../slots/has_or_had_url
- ./URL
classes:
EBook:
class_uri: schema:EBook
description: >-
A digital book or publication in electronic format.
Used to represent the electronic manifestation of an ExhibitionCatalog or Book.
**Ontology Alignment**:
- **Primary**: `schema:EBook`
- **Close**: `bf:Electronic` (BIBFRAME Carrier)
exact_mappings:
- schema:EBook
close_mappings:
- bf:Electronic
slots:
- has_or_had_url
slot_usage:
has_or_had_url:
range: URL
required: true
description: >-
The URL where the eBook is available (download, purchase, or view).
Uses structured URL class.
annotations:
custodian_types: '["*"]'
specificity_score: 0.3
specificity_rationale: Specific manifestation class for digital publications.

View file

@ -0,0 +1,42 @@
id: https://nde.nl/ontology/hc/class/EcclesiasticalProvince
name: EcclesiasticalProvince
title: Ecclesiastical Province Class
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
org: http://www.w3.org/ns/org#
default_prefix: hc
imports:
- linkml:types
- ../metadata
- ../slots/has_or_had_label
- ../slots/has_or_had_identifier
classes:
EcclesiasticalProvince:
class_uri: org:Organization
description: >-
An ecclesiastical province is a large jurisdiction of religious government,
consisting of several dioceses (one archdiocese and several suffragan dioceses).
**Usage**:
Used to model the hierarchical location of a Diocese.
**Ontology Alignment**:
- **Primary**: `org:Organization` (Administrative unit)
- **Close**: `schema:Organization`
exact_mappings:
- org:Organization
slots:
- has_or_had_label
- has_or_had_identifier
annotations:
custodian_types: '["H"]'
specificity_score: 0.8
specificity_rationale: Highly specific to ecclesiastical hierarchy.

View file

@ -0,0 +1,51 @@
id: https://nde.nl/ontology/hc/class/Edition
name: Edition
title: Edition Class
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
bf: http://id.loc.gov/ontologies/bibframe/
default_prefix: hc
imports:
- linkml:types
- ../metadata
- ../slots/has_or_had_identifier
- ../slots/has_or_had_label
- ../slots/has_or_had_note
classes:
Edition:
class_uri: bf:Edition
description: >-
Information relating to the edition of a work or event.
Used to capture edition numbers (e.g. "25th edition") and statements
(e.g. "Revised and expanded edition").
**Ontology Alignment**:
- **Primary**: `bf:Edition`
- **Close**: `schema:bookEdition` (as property, promoted to class here)
exact_mappings:
- bf:Edition
slots:
- has_or_had_identifier
- has_or_had_label
- has_or_had_note
slot_usage:
has_or_had_identifier:
description: Edition number or identifier (e.g., "1", "25", "IX").
has_or_had_label:
description: Edition name or label (e.g., "Silver Jubilee Edition").
has_or_had_note:
description: Edition statement or descriptive note.
annotations:
custodian_types: '["*"]'
specificity_score: 0.4
specificity_rationale: Common bibliographic and event metadata.

View file

@ -0,0 +1,45 @@
id: https://nde.nl/ontology/hc/class/Editor
name: Editor
title: Editor Class
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
bibo: http://purl.org/ontology/bibo/
default_prefix: hc
imports:
- linkml:types
- ../metadata
- ../slots/has_or_had_identifier
- ../slots/has_or_had_label
- ../slots/has_or_had_role
- ../slots/has_or_had_affiliation
classes:
Editor:
class_uri: schema:Person
description: >-
A person or organization responsible for editing a publication or work.
**Ontology Alignment**:
- **Primary**: `schema:Person` or `schema:Organization` (Role-based)
- **Close**: `bibo:Editor`
slots:
- has_or_had_label
- has_or_had_identifier
- has_or_had_role
- has_or_had_affiliation
slot_usage:
has_or_had_label:
description: Name of the editor.
has_or_had_role:
description: Specific editorial role (e.g., "Editor-in-Chief", "Guest Editor").
annotations:
custodian_types: '["*"]'
specificity_score: 0.5
specificity_rationale: Common bibliographic role.

View file

@ -0,0 +1,47 @@
id: https://nde.nl/ontology/hc/class/Education
name: Education
title: Education Class
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
default_prefix: hc
imports:
- linkml:types
- ../metadata
- ../slots/has_or_had_identifier
- ../slots/has_or_had_label
- ../slots/temporal_extent
- ./TimeSpan
- ../slots/has_or_had_description
classes:
Education:
class_uri: schema:EducationalOccupationalCredential
description: >-
An educational background entry, credential, or degree program.
Used to model education history in profiles (e.g. LinkedIn) or heritage education context.
**Ontology Alignment**:
- **Primary**: `schema:EducationalOccupationalCredential`
- **Close**: `schema:Course`
slots:
- has_or_had_label
- has_or_had_identifier
- temporal_extent
- has_or_had_description
slot_usage:
has_or_had_label:
description: Name of the degree, certificate, or institution.
temporal_extent:
description: Time period of the education (start/end years).
annotations:
custodian_types: '["*"]'
specificity_score: 0.6
specificity_rationale: Specific to person/staff profiles.

View file

@ -0,0 +1,38 @@
id: https://nde.nl/ontology/hc/class/EmailAddress
name: EmailAddress
title: Email Address Class
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
vcard: http://www.w3.org/2006/vcard/ns#
default_prefix: hc
imports:
- linkml:types
- ../metadata
- ../slots/has_or_had_label
classes:
EmailAddress:
class_uri: schema:email
description: >-
An email address.
**Ontology Alignment**:
- **Primary**: `schema:email` (property promoted to class for structure if needed, or just value)
- **Close**: `vcard:Email`
slots:
- has_or_had_label
slot_usage:
has_or_had_label:
description: The email address string (e.g., info@example.com).
pattern: "^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\\.[a-zA-Z0-9-.]+$"
annotations:
custodian_types: '["*"]'
specificity_score: 0.1
specificity_rationale: Basic datatype class.

View file

@ -45,7 +45,8 @@ imports:
- ../slots/contributor
- ../slots/has_or_had_custodian_type
- ../slots/doi
- ../slots/ebook_url
- ../slots/is_or_was_instantiated_as
- ./EBook
- ../slots/editor
- ../slots/has_or_had_essay
- ../slots/illustration
@ -114,7 +115,7 @@ classes:
- contributor
- has_or_had_custodian_type
- doi
- ebook_url
- is_or_was_instantiated_as
- editor
- has_or_had_essay
- illustration
@ -369,11 +370,19 @@ classes:
range: uri
examples:
- value: https://www.rijksmuseum.nl/media/vermeer-catalog.pdf
ebook_url:
required: false
range: uri
is_or_was_instantiated_as:
range: EBook
inlined: true
multivalued: true
description: >-
Electronic version (eBook) of the catalog.
MIGRATED from ebook_url per Rule 53 (2026-01-25).
examples:
- value: https://www.amazon.com/dp/B0XXXXX
- value:
has_or_had_url:
has_or_had_url: "https://www.amazon.com/dp/B0XXXXX"
has_or_had_type: "purchase_page"
description: eBook available on Amazon
price:
required: false
range: string

View file

@ -90,6 +90,10 @@ imports:
- ../slots/was_retrieved_at # was: date_retrieved - migrated per Rule 53/56/57 (2026-01-23)
- ./Timestamp
- ../slots/de
# MIGRATED 2026-01-25: ead_id → has_or_had_identifier + EADIdentifier (Rule 53)
- ../slots/has_or_had_identifier
- ./Identifier
- ./EADIdentifier
- ../slots/ead_id
- ../slots/en
- ../slots/end
@ -277,7 +281,8 @@ classes:
- creator
- custodian
- finding_aid_description
- ead_id
# MIGRATED 2026-01-25: ead_id → has_or_had_identifier (Rule 53)
- has_or_had_identifier
- has_or_had_external_resource
- finding_aid_note
- has_or_had_type
@ -317,6 +322,18 @@ classes:
required: true
slug:
required: true
# MIGRATED 2026-01-25: ead_id → has_or_had_identifier (Rule 53)
has_or_had_identifier:
range: EADIdentifier
description: |
EAD Identifier for the finding aid.
MIGRATED from ead_id (string) to EADIdentifier class per Rule 53.
inlined: true
examples:
- value:
identifier_value: "NL-HaNA_2.21.006.50"
identifier_scheme: "EAD"
description: National Archives EAD identifier
has_or_had_type:
required: true
range: FindingAidType

View file

@ -53,8 +53,12 @@ imports:
- ../slots/is_or_was_published
- ./Publication
- ../slots/doi
# MIGRATED 2026-01-25: duration → has_or_had_time_interval + TimeInterval (Rule 53)
- ../slots/has_or_had_time_interval
- ./TimeInterval
- ../slots/duration
- ../slots/edition_statement
- ../slots/has_or_had_edition
- ./Edition
- ../slots/extent_text
- ../slots/file_number
- ../slots/folio_count
@ -149,8 +153,9 @@ classes:
# REMOVED 2026-01-24: date_of_publication - migrated to is_or_was_published (Rule 53)
- is_or_was_published
- doi
- duration
- edition_statement
# MIGRATED 2026-01-25: duration → has_or_had_time_interval (Rule 53)
- has_or_had_time_interval
- has_or_had_edition
- extent_text
- file_number
- folio_count
@ -227,13 +232,22 @@ classes:
examples:
- value: 'xii, 324 p., [8] p. of plates : ill. ; 24 cm'
- value: '1 atlas (42 maps) : col. ; 38 cm'
duration:
# MIGRATED 2026-01-25: duration → has_or_had_time_interval + TimeInterval (Rule 53)
has_or_had_time_interval:
required: false
range: string
range: TimeInterval
inlined: true
description: |
Duration of the audiovisual carrier.
MIGRATED from duration (string) to TimeInterval class.
examples:
- value: PT45M30S
description: 45 minutes 30 seconds
- value: 01:32:15
- value:
duration_value: PT45M30S
duration_description: 45 minutes 30 seconds
description: Audio recording duration
- value:
duration_value: 01:32:15
description: Duration in HH:MM:SS format
has_or_had_type:
required: false
range: BindingType
@ -373,12 +387,22 @@ classes:
begin_of_the_begin: "1623-01-01"
publication_date_string: "1623"
description: Year-level precision
edition_statement:
required: false
range: string
has_or_had_edition:
range: Edition
inlined: true
multivalued: true
description: |
Edition statement(s) for the carrier.
MIGRATED from edition_statement per Rule 53 (2026-01-25).
Uses Edition class with has_or_had_note for the statement text.
examples:
- value: First edition
- value: Second edition, revised and enlarged
- value:
has_or_had_note: "First edition"
description: Standard edition statement
- value:
has_or_had_note: "Second edition, revised and enlarged"
has_or_had_label: "2nd Edition"
description: Complex edition statement
copy_number:
required: false
range: string

View file

@ -15,7 +15,8 @@ imports:
- ../slots/event_id
- ../slots/has_or_had_audience_size
- ../slots/has_or_had_custodian_type
- ../slots/edition_number
- ../slots/has_or_had_edition
- ./Edition
- ../slots/event_cancelled_reason
- ../slots/event_date_end
- ../slots/event_date_start
@ -74,7 +75,7 @@ classes:
slots:
- audience_size
- has_or_had_custodian_type
- edition_number
- has_or_had_edition
- event_cancelled_reason
- event_date_end
- event_date_start
@ -121,11 +122,17 @@ classes:
inlined: false
examples:
- value: https://nde.nl/ontology/hc/heritage-form/pride-amsterdam
edition_number:
required: false
range: integer
has_or_had_edition:
range: Edition
inlined: true
multivalued: true
description: |
Edition of the event (e.g. 29th edition).
MIGRATED from edition_number per Rule 53 (2026-01-25).
examples:
- value: 29
- value:
has_or_had_identifier: "29"
has_or_had_label: "29th Edition"
description: Pride Amsterdam 2024
event_date_start:
required: true
@ -239,7 +246,8 @@ classes:
'
instance_of: https://nde.nl/ontology/hc/heritage-form/pride-amsterdam
edition_number: 29
has_or_had_edition:
- has_or_had_identifier: "29"
event_date_start: '2024-08-03'
event_date_end: '2024-08-10'
event_location:
@ -261,7 +269,8 @@ classes:
'
instance_of: https://nde.nl/ontology/hc/heritage-form/pride-amsterdam
edition_number: 25
has_or_had_edition:
- has_or_had_identifier: "25"
event_date_start: '2020-08-01'
event_date_end: '2020-08-08'
event_status: CANCELLED

View file

@ -20,7 +20,11 @@ imports:
# REMOVED 2026-01-22: data_format migrated to has_or_had_output + OutputData (Rule 53)
- ../slots/is_or_was_decommissioned_at # was: decommission_date - migrated per Rule 53 (2026-01-23)
- ./Timestamp # Range for is_or_was_decommissioned_at
- ../slots/device_count
# MIGRATED 2026-01-25: device_count → has_or_had_quantity + Quantity (Rule 53)
- ../slots/has_or_had_quantity
- ../slots/has_or_had_unit
- ./Quantity
- ./Unit
# MIGRATED 2026-01-25: device_id → has_or_had_identifier + Identifier (Rule 53)
- ../slots/has_or_had_identifier
- ./Identifier
@ -119,7 +123,8 @@ classes:
- coverage_area
- has_or_had_output # was: data_format - migrated per Rule 53 (2026-01-22)
- is_or_was_decommissioned_at # was: decommission_date - migrated per Rule 53 (2026-01-23)
- device_count
# MIGRATED 2026-01-25: device_count → has_or_had_quantity (Rule 53)
- has_or_had_quantity
# MIGRATED 2026-01-25: device_id → has_or_had_identifier (Rule 53)
- has_or_had_identifier
# MIGRATED 2026-01-25: device_manufacturer → is_or_was_created_by (Rule 53)
@ -225,15 +230,30 @@ classes:
- value:
has_or_had_label: Samsung
description: Kiosk manufacturer
device_count:
range: integer
minimum_value: 1
# MIGRATED 2026-01-25: device_count → has_or_had_quantity (Rule 53)
has_or_had_quantity:
description: |
MIGRATED from device_count per slot_fixes.yaml (Rule 53, 2026-01-25).
Count of devices in this network/group.
Uses Quantity class with unit "device".
range: Quantity
inlined: true
required: false
examples:
- value: 24
- value:
quantity_value: 24
has_or_had_unit:
unit_value: "device"
description: 24 beacons in gallery network
- value: 150
- value:
quantity_value: 150
has_or_had_unit:
unit_value: "device"
description: 150 climate sensors across facility
- value: 1
- value:
quantity_value: 1
has_or_had_unit:
unit_value: "device"
description: Single information kiosk
coverage_area:
range: string
@ -405,7 +425,10 @@ classes:
has_or_had_label: Estimote Proximity Beacon
is_or_was_created_by:
has_or_had_label: Estimote
device_count: 24
has_or_had_quantity:
quantity_value: 24
has_or_had_unit:
unit_value: "device"
coverage_area: Gallery of Honour (main wing)
purpose: Proximity triggers for mobile app content near masterpieces
connectivity_type:
@ -428,7 +451,10 @@ classes:
has_or_had_label: Sensirion SHT45
is_or_was_created_by:
has_or_had_label: Sensirion
device_count: 150
has_or_had_quantity:
quantity_value: 150
has_or_had_unit:
unit_value: "device"
coverage_area: All galleries and storage areas
purpose: Temperature and humidity monitoring for preservation
connectivity_type:
@ -465,7 +491,10 @@ classes:
has_or_had_label: Samsung Kiosk 24 Touch
is_or_was_created_by:
has_or_had_label: Samsung
device_count: 4
has_or_had_quantity:
quantity_value: 4
has_or_had_unit:
unit_value: "device"
coverage_area: Main entrance lobby
purpose: Self-service collection search and wayfinding for visitors
has_or_had_specification: 24-inch touchscreen, 1920x1080 resolution, wheelchair accessible

View file

@ -24,8 +24,13 @@ imports:
- ../slots/connections_text
- ../slots/has_or_had_source # was: data_source_whatsapp - migrated per Rule 53/56/57 (2026-01-23)
- ./DataSource
- ../slots/digital_confidence
- ../slots/digital_indicator
# MIGRATED 2026-01-25: digital_confidence → estimates_or_estimated + DigitalConfidence (Rule 53)
- ../slots/estimates_or_estimated
- ./DigitalConfidence
# MIGRATED 2026-01-25: digital_indicator → emphasizes_or_emphasized + DigitalProficiency (Rule 53)
- ../slots/emphasizes_or_emphasized
- ./DigitalProficiency
# - ../slots/digital_indicator # REMOVED
- ../slots/digital_professional
- ../slots/education
- ../slots/enriched_date
@ -267,15 +272,20 @@ classes:
'
slots:
- digital_professional
# MIGRATED 2026-01-25: digital_professional → indicates_or_indicated (Rule 53)
- indicates_or_indicated
- enrichment_metadata_whatsapp
- specificity_annotation
- has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17)
- has_or_had_likelihood_score # was: whatsapp_business_likelihood - migrated per Rule 53
slot_usage:
digital_professional:
# MIGRATED 2026-01-25: digital_professional → indicates_or_indicated (Rule 53)
indicates_or_indicated:
range: DigitalProfessionalAssessment
inlined: true
description: |
Indicates digital professional assessment.
Migrated from digital_professional.
has_or_had_likelihood_score: # was: whatsapp_business_likelihood - migrated per Rule 53
range: LikelihoodScore
inlined: true
@ -291,19 +301,43 @@ classes:
'
slots:
- digital_confidence
- digital_indicator
# MIGRATED 2026-01-25: digital_confidence → estimates_or_estimated (Rule 53)
- estimates_or_estimated
# MIGRATED 2026-01-25: digital_indicator → emphasizes_or_emphasized (Rule 53)
- emphasizes_or_emphasized
- likely_whatsapp_proficient
- specificity_annotation
- has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17)
slot_usage:
likely_whatsapp_proficient:
range: boolean
digital_indicator:
range: string
# MIGRATED 2026-01-25: digital_indicator → emphasizes_or_emphasized + DigitalProficiency (Rule 53)
emphasizes_or_emphasized:
range: DigitalProficiency
inlined: true
multivalued: true
digital_confidence:
range: string
description: |
Digital proficiency indicators (skills/tools) emphasized in the profile.
Migrated from digital_indicator (string list).
examples:
- value:
has_or_had_label: "Python"
has_or_had_type: "PROGRAMMING_LANGUAGE"
description: Python skill indicator
# MIGRATED 2026-01-25: digital_confidence → estimates_or_estimated + DigitalConfidence (Rule 53)
estimates_or_estimated:
range: DigitalConfidence
inlined: true
required: false
description: |
Confidence estimation for digital proficiency.
Migrated from digital_confidence (string) to structured class.
examples:
- value:
has_or_had_score: 0.85
has_or_had_type: PROFICIENCY_INFERENCE
has_or_had_description: "High confidence inferred from technical skills"
description: High confidence estimation
WhatsAppLikelihood:
class_uri: hc:WhatsAppLikelihood
description: 'Likelihood score for WhatsApp business usage.

View file

@ -5,7 +5,8 @@ imports:
- linkml:types
- ./WebObservation
- ./TimeSpan
- ../enums/DigitalPresenceTypeEnum
# MIGRATED 2026-01-25: DigitalPresenceTypeEnum → DigitalPresence class hierarchy (Rule 53)
# - ../enums/DigitalPresenceTypeEnum # REMOVED
- ../slots/supersedes_or_superseded # was: supersede - migrated per Rule 53/56 (2026-01-17)
# REMOVED 2026-01-19: ../slots/confidence_score - migrated to is_or_was_generated_by + GenerationEvent + ConfidenceScore (Rule 53)
- ../slots/is_or_was_generated_by
@ -23,7 +24,12 @@ imports:
- ../slots/has_assertion_rationale
- ../slots/has_assertion_value
- ../slots/has_or_had_based_on_observation
- ../slots/digital_presence_type
# MIGRATED 2026-01-25: digital_presence_type → asserts_or_asserted + DigitalPresence (Rule 53)
# - ../slots/digital_presence_type # REMOVED
- ../slots/asserts_or_asserted
- ./DigitalPresence
- ./DigitalPresenceType
- ./DigitalPresenceTypes
- ../slots/specificity_annotation
- ../slots/has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17)
- ../slots/temporal_extent
@ -112,7 +118,8 @@ classes:
- has_or_had_based_on_observation
# REMOVED 2026-01-19: confidence_score - migrated to is_or_was_generated_by (Rule 53)
- is_or_was_generated_by
- digital_presence_type
# MIGRATED 2026-01-25: digital_presence_type → asserts_or_asserted (Rule 53)
- asserts_or_asserted
- specificity_annotation
- is_or_was_superseded_by # was: superseded_by - migrated per Rule 53/56 (2026-01-16)
- supersedes_or_superseded # was: supersede - migrated per Rule 53/56 (2026-01-17)
@ -132,16 +139,26 @@ classes:
- value: https://nde.nl/ontology/hc/social-media/hvn-facebook
- value: https://nde.nl/ontology/hc/platform/rijksmuseum-website
- value: https://nde.nl/ontology/hc/iot/museum-beacon-network
digital_presence_type:
range: DigitalPresenceTypeEnum
# MIGRATED 2026-01-25: digital_presence_type → asserts_or_asserted (Rule 53)
asserts_or_asserted:
range: DigitalPresence
required: false
inlined: true
description: |
The digital presence classification being asserted.
MIGRATED from digital_presence_type per slot_fixes.yaml (Rule 53, 2026-01-25).
Uses DigitalPresence wrapper with typed classification (WebsitePresenceType, SocialMediaPresenceType, etc.).
examples:
- value: SOCIAL_MEDIA
- value:
has_or_had_type:
has_or_had_label: "Social Media Profile"
has_or_had_identifier: "https://nde.nl/ontology/hc/type/social-media"
description: Characterizing a social media profile
- value: WEBSITE
- value:
has_or_had_type:
has_or_had_label: "Website"
has_or_had_identifier: "https://nde.nl/ontology/hc/type/website"
description: Characterizing main website
- value: IOT_BEACON
description: Characterizing beacon network
has_assertion_value:
range: boolean
required: true

View file

@ -76,7 +76,15 @@ classes:
multivalued: true
inlined_as_list: true
description: Languages known
specifies_or_specified:
range: Education
multivalued: true
inlined_as_list: true
description: >-
Educational background.
MIGRATED from education per Rule 53 (2026-01-25).
education:
deprecated: "Migrated to specifies_or_specified"
range: EducationEntry
multivalued: true
inlined_as_list: true

View file

@ -0,0 +1,74 @@
# Speaker class
# Represents an identified speaker in audio/video content
#
# Generation date: 2026-01-25
# Rule compliance: 0 (LinkML single source of truth), 53 (migration from diarization_speaker_*)
# Migration source: diarization_speaker_id/label slots per slot_fixes.yaml
id: https://nde.nl/ontology/hc/class/Speaker
name: speaker_class
title: Speaker Class
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
prov: http://www.w3.org/ns/prov#
default_prefix: hc
imports:
- linkml:types
- ../slots/has_or_had_label
- ../slots/has_or_had_identifier
classes:
Speaker:
class_uri: prov:Agent
description: |
Represents a speaker identified in audio/video content analysis.
**MIGRATION SOURCE**: Created from diarization_speaker_id and diarization_speaker_label migration (Rule 53, 2026-01-25).
**Ontological Alignment**:
- **Primary**: `prov:Agent` - An agent (person) participating in an activity (speaking)
- **Close**: `schema:Person` - A person
exact_mappings:
- prov:Agent
close_mappings:
- schema:Person
slots:
- has_or_had_identifier
- has_or_had_label
slot_usage:
has_or_had_identifier:
description: Unique identifier for the speaker (e.g., "spk_001", Wikidata ID).
range: uriorcurie
required: true
has_or_had_label:
description: Human-readable name or label for the speaker (e.g., "Curator", "Interviewer").
range: string
required: false
annotations:
custodian_types: '["*"]'
specificity_score: 0.7
specificity_rationale: Specific to audio/video content analysis.
comments:
- "CREATED from diarization_speaker_* migration per slot_fixes.yaml (Rule 53)"
- "Represents identified speakers in media content"
examples:
- value:
has_or_had_identifier: spk_001
has_or_had_label: Curator
description: Identified curator speaker
- value:
has_or_had_identifier: https://www.wikidata.org/wiki/Q12345
has_or_had_label: John Doe
description: Speaker linked to Wikidata entity

View file

@ -205,7 +205,7 @@ classes:
- has_or_had_quantity # was: cut_count - migrated per Rule 53 (2026-01-22)
# MIGRATED 2026-01-25: detection_level → filters_or_filtered + DetectionLevelType (Rule 53)
- filters_or_filtered
- dissolve_count
# MIGRATED 2026-01-25: dissolve_count → has_or_had_quantity (Rule 53)
- fade_count
- scene_count
- has_or_had_scene_segment
@ -281,21 +281,27 @@ classes:
examples:
- value: '[{has_or_had_label: "CUT"}, {has_or_had_label: "FADE_IN"}]'
description: Transition types found in video
has_or_had_quantity: # was: cut_count - migrated per Rule 53 (2026-01-22)
has_or_had_quantity:
range: Quantity
required: false
multivalued: true
inlined: true
description: |
Number of hard cuts (instantaneous transitions) as a Quantity.
MIGRATED from cut_count per slot_fixes.yaml (Rule 53).
Uses Quantity class with Unit type "Cut".
Quantities of detected transitions (cuts, dissolves, fades).
MIGRATED from cut_count, dissolve_count per slot_fixes.yaml (Rule 53).
Uses Quantity class with Unit type "Cut", "Dissolve", "Fade".
examples:
- value:
has_or_had_numeric_value: 42
has_or_had_unit:
has_or_had_type: Cut
has_or_had_symbol: "cuts"
description: 42 cuts detected (was cut_count)
description: 42 cuts detected
- value:
has_or_had_numeric_value: 3
has_or_had_unit:
has_or_had_label: "dissolve transition"
description: 3 dissolves detected
fade_count:
range: integer
required: false
@ -303,13 +309,6 @@ classes:
examples:
- value: 5
description: 5 fades detected
dissolve_count:
range: integer
required: false
minimum_value: 0
examples:
- value: 3
description: 3 dissolves detected
comments:
- Scene and shot boundary detection
- Supports both technical (shot) and semantic (scene) analysis

View file

@ -10,13 +10,26 @@ imports:
# - ../slots/audio_event_segments
- ../slots/has_or_had_segment
- ../slots/has_audio_quality_score
- ../slots/diarization_confidence
- ../slots/diarization_enabled
- ../slots/diarization_end_seconds
- ../slots/has_or_had_diarization_segment
- ../slots/diarization_speaker_id
- ../slots/diarization_speaker_label
- ../slots/diarization_start_seconds
# MIGRATED 2026-01-25: diarization_* slots (Rule 53)
- ../slots/has_or_had_provenance
- ./Provenance
- ./ConfidenceScore
- ../slots/is_or_was_diarized
- ./DiarizationStatus
- ../slots/temporal_extent
- ./TimeSpan
- ../slots/start_of_the_start
- ../slots/end_of_the_end
- ./Timestamp
- ../slots/contains_or_contained
- ./Speaker
- ../slots/has_or_had_identifier
- ./Identifier
- ../slots/has_or_had_label
- ./Label
# MIGRATED 2026-01-25: has_or_had_diarization_segment → contains_or_contained (Rule 53)
# - ../slots/has_or_had_diarization_segment # REMOVED
- ../slots/has_clipping
- ../slots/is_background
- ../slots/is_overlapping
@ -123,8 +136,10 @@ classes:
# - audio_event_segments
- has_or_had_segment
- audio_quality_score
- diarization_enabled
- has_or_had_diarization_segment
# MIGRATED 2026-01-25: diarization_enabled → is_or_was_diarized (Rule 53)
- is_or_was_diarized
# MIGRATED 2026-01-25: has_or_had_diarization_segment → contains_or_contained (Rule 53)
- contains_or_contained
- has_clipping
- languages_detected
- music_confidence
@ -212,19 +227,33 @@ classes:
examples:
- value: '[nl, en, de]'
description: Dutch, English, and German detected
diarization_enabled:
range: boolean
# MIGRATED 2026-01-25: diarization_enabled → is_or_was_diarized (Rule 53)
is_or_was_diarized:
range: DiarizationStatus
required: false
inlined: true
description: |
Status of speaker diarization process.
MIGRATED from diarization_enabled (Rule 53).
examples:
- value: true
description: Diarization was performed
has_or_had_diarization_segment:
- value:
has_or_had_label: Enabled
has_or_had_identifier: https://schema.org/ActiveActionStatus
description: Diarization enabled
# MIGRATED 2026-01-25: has_or_had_diarization_segment → contains_or_contained (Rule 53)
contains_or_contained:
range: DiarizationSegment
multivalued: true
required: false
inlined_as_list: true
examples:
- value: '[{start_seconds: 0.0, end_seconds: 15.0, speaker_id: ''spk_001'', speaker_label: ''Curator''}]'
- value:
temporal_extent:
begin_of_the_begin: 0.0
end_of_the_end: 15.0
contains_or_contained:
has_or_had_identifier: spk_001
has_or_had_label: Curator
description: Curator speaking for first 15 seconds
speaker_count:
range: integer
@ -385,34 +414,29 @@ classes:
'
slots:
- diarization_confidence
- diarization_end_seconds
- diarization_speaker_id
- diarization_speaker_label
- diarization_start_seconds
# MIGRATED 2026-01-25: diarization_* slots (Rule 53)
- has_or_had_provenance # for confidence
- temporal_extent # for start/end seconds
- contains_or_contained # for speaker
- is_overlapping
- specificity_annotation
- has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17)
slot_usage:
diarization_start_seconds:
range: float
temporal_extent:
description: Time range of the diarization segment.
range: TimeSpan
inlined: true
required: true
minimum_value: 0.0
diarization_end_seconds:
range: float
contains_or_contained:
description: Speaker identified in this segment.
range: Speaker
inlined: true
required: true
minimum_value: 0.0
diarization_speaker_id:
range: string
required: true
diarization_speaker_label:
range: string
has_or_had_provenance:
description: Provenance metadata including confidence score.
range: Provenance
inlined: true
required: false
diarization_confidence:
range: float
required: false
minimum_value: 0.0
maximum_value: 1.0
is_overlapping:
range: boolean
required: false

View file

@ -44,6 +44,9 @@ imports:
- ../slots/has_or_had_status
- ./Status
- ../slots/dislike_count
# MIGRATED 2026-01-25: duration → has_or_had_time_interval + TimeInterval (Rule 53)
- ../slots/has_or_had_time_interval
- ./TimeInterval
- ../slots/duration
- ../slots/favorite_count
# MIGRATED 2026-01-22: frame_rate → has_or_had_quantity + Quantity + has_or_had_unit + Unit (Rule 53)
@ -242,7 +245,8 @@ classes:
# MIGRATED 2026-01-24: definition → has_or_had_resolution + Resolution (Rule 53)
- has_or_had_resolution
- dislike_count
- duration
# MIGRATED 2026-01-25: duration → has_or_had_time_interval (Rule 53)
- has_or_had_time_interval
- favorite_count
# REMOVED 2026-01-22: frame_rate - migrated to has_or_had_quantity + Quantity + Unit (Rule 53)
- is_embeddable
@ -259,15 +263,23 @@ classes:
- has_or_had_comment # was: video_comment - migrated per Rule 53 (2025-01-15)
- has_or_had_quantity
slot_usage:
duration:
range: string
# MIGRATED 2026-01-25: duration → has_or_had_time_interval + TimeInterval (Rule 53)
has_or_had_time_interval:
range: TimeInterval
required: false
pattern: ^P(T(\d+H)?(\d+M)?(\d+S)?)?$
inlined: true
description: |
Video duration.
MIGRATED from duration (ISO 8601 string) to TimeInterval class.
examples:
- value: PT10M59S
description: 10 minutes and 59 seconds
- value: PT1H30M
description: 1 hour 30 minutes
- value:
duration_value: PT10M59S
duration_description: 10 minutes and 59 seconds
description: Video duration
- value:
duration_value: PT1H30M
duration_description: 1 hour 30 minutes
description: Long format duration
# MIGRATED 2026-01-24: definition → has_or_had_resolution + Resolution (Rule 53)
has_or_had_resolution:
range: Resolution

View file

@ -12,7 +12,7 @@ slots:
allocates_or_allocated:
description: >-
Resources or identifiers allocated by this entity.
range: string
range: uriorcurie # Broadened from string per Rule 55 (2026-01-25)
multivalued: true
slot_uri: prov:generated
close_mappings:

Some files were not shown because too many files have changed in this diff Show more