feat(schema): complete multiple slot_fixes.yaml migrations
All checks were successful
Deploy Frontend / build-and-deploy (push) Successful in 2m4s

Session 2026-01-19: Completed remaining migrations per Rules 53/56/60.

Major migrations:
1. claim_type → has_or_had_type + ClaimType/ClaimTypes (60+ concrete types in 11 categories)
2. circumstances_of_death → is_deceased + DeceasedStatus + CauseOfDeath
3. claims_count → has_or_had_quantity + Quantity (with based_on_claim for provenance)
4. classification_status → has_or_had_type + ClassificationStatusType

Created files:
- ClaimType.yaml, ClaimTypes.yaml (abstract base + 60+ concrete subclasses)
- DeceasedStatus.yaml, CauseOfDeath.yaml, CauseOfDeathTypeEnum.yaml
- ClassificationStatus.yaml, ClassificationStatusType.yaml, ClassificationStatusTypes.yaml
- CITESAppendix.yaml, City.yaml, CertaintyLevel.yaml
- is_deceased.yaml, is_or_was_caused_by.yaml, based_on_claim.yaml

Archived slots:
- claim_type, circumstances_of_death, claims_count, classification_status

Added Rule 60 to AGENTS.md: No Migration Deferral - agents MUST execute all migrations.

All 527 slot_fixes.yaml entries now complete (100%).
This commit is contained in:
kempersc 2026-01-19 13:05:23 +01:00
parent 4a277d7d42
commit 3da90b940e
123 changed files with 5794 additions and 682 deletions

View file

@ -0,0 +1,164 @@
# Rule 60: No Migration Deferral - Execute All slot_fixes.yaml Revisions
## Status: MANDATORY
## Summary
**AI agents MUST execute ALL migrations specified in `slot_fixes.yaml`.** The pattern of marking migrations as "WELL_STRUCTURED_NO_MIGRATION_NEEDED" or similar deferral notes is **STRICTLY PROHIBITED** except in the rarest cases of genuine semantic conflict.
## The Problem
Previous AI agents incorrectly deferred >95% of slot_fixes.yaml migrations with notes like:
- "WELL_STRUCTURED_NO_MIGRATION_NEEDED"
- "Already has proper slot_uri"
- "Simple enum is appropriate"
- "Would add unnecessary indirection"
- "Current structure is adequate"
**These deferrals were WRONG.** The slot_fixes.yaml revisions were carefully curated based on:
- Ontology analysis (CIDOC-CRM, RiC-O, PROV-O, Schema.org alignment)
- Semantic correctness and consistency
- Pattern adherence (Rule 39: RiC-O naming, Rule 43: singular nouns)
- Type/Types class hierarchy design (Rule 0b)
## The Rule
### MANDATORY: Execute ALL Migrations
When encountering a slot_fixes.yaml entry with `status: false`:
1. **READ the `revision` field** - This specifies EXACTLY what to do
2. **EXECUTE the migration** - Create/update slots, classes, imports as specified
3. **UPDATE status to `true`** - Document what was done in `notes`
### PROHIBITED: Deferral Reasoning
The following justifications are **INVALID** and **NEVER acceptable**:
| Invalid Justification | Why It's Wrong |
|-----------------------|----------------|
| "Already has proper slot_uri" | slot_uri handles external mapping; internal structure is separate concern |
| "Simple string/enum is sufficient" | Consistency and extensibility trump local simplicity |
| "Would add unnecessary indirection" | Indirection enables reuse and future extension |
| "Creating a class would over-engineer" | Ontology design favors class-based modeling |
| "Current structure is well-designed" | Individual optimization conflicts with schema-wide patterns |
| "No semantic benefit" | Agent lacks context to make this judgment |
### VALID: Reasons to Pause (Not Defer)
The ONLY valid reasons to pause a migration (NOT defer indefinitely) are:
1. **Semantic Conflict**: The proposed revision contradicts the slot's documented semantic intent
2. **Circular Dependency**: Migration would create import cycle
3. **External Consumer Impact**: Breaking change affecting downstream systems
4. **Class Already Exists**: Target class exists under different name (document and merge)
**When pausing**: Add a `feedback` entry explaining the specific conflict and request human review. Do NOT mark as "NO_MIGRATION_NEEDED".
## Decision Tree
```
Is there a slot_fixes.yaml entry with status: false?
├─ YES → Read the revision field
│ ├─ Does revision specify slots/classes to create?
│ │ └─ YES → EXECUTE THE MIGRATION (mandatory)
│ └─ Is there a genuine semantic conflict?
│ ├─ NO → EXECUTE THE MIGRATION (mandatory)
│ └─ YES → Document conflict in feedback, request human review
│ (Do NOT mark as "no migration needed")
└─ NO → Nothing to do
```
## Examples
### WRONG: Deferral Note
```yaml
- original_slot_id: https://nde.nl/ontology/hc/slot/example_slot
revision:
- label: has_or_had_example
type: slot
- label: Example
type: class
processed:
status: true # WRONG - marked true without doing work
notes: "WELL_STRUCTURED_NO_MIGRATION_NEEDED - slot already has proper
slot_uri and the current structure is adequate" # INVALID
```
### CORRECT: Execute Migration
```yaml
- original_slot_id: https://nde.nl/ontology/hc/slot/example_slot
revision:
- label: has_or_had_example
type: slot
- label: Example
type: class
processed:
status: true
timestamp: '2026-01-19T12:00:00Z'
notes: 'Migrated 2026-01-19 per Rule 53/56.
- Created has_or_had_example.yaml slot file
- Created Example.yaml class file
- Updated ClassA.yaml, ClassB.yaml to use new slot
- Archived: modules/slots/archive/example_slot_archived_20260119.yaml'
```
### CORRECT: Pause with Genuine Conflict
```yaml
- original_slot_id: https://nde.nl/ontology/hc/slot/conflicting_slot
revision:
- label: has_or_had_foo
type: slot
processed:
status: false # Correctly left false
notes: ''
feedback:
- timestamp: '2026-01-19T12:00:00Z'
user: opencode-claude
done: false
comment: |
PAUSED FOR HUMAN REVIEW - Genuine semantic conflict detected:
- Revision specifies has_or_had_foo (temporal relationship)
- But slot is used for immutable birth dates (should be has_*)
- Request clarification on intended temporal semantics
```
## Statistics Context
The slot_fixes.yaml file contains 527 migration entries. Analysis of previous agent behavior:
- **Incorrectly deferred**: >95% of entries marked "NO_MIGRATION_NEEDED"
- **Actually needing deferral**: <5% (genuine semantic conflicts)
- **Required action**: Execute ALL migrations except those with documented semantic conflicts
## Related Rules
- **Rule 53**: Full Slot Migration - slot_fixes.yaml is AUTHORITATIVE
- **Rule 56**: Semantic Consistency Over Simplicity - Always Execute Revisions
- **Rule 57**: slot_fixes.yaml Revision Key is IMMUTABLE
- **Rule 58**: Feedback vs Revision Distinction
## Anti-Patterns Checklist
Before marking ANY migration as complete without execution, verify:
- [ ] Did I actually create the specified slots?
- [ ] Did I actually create the specified classes?
- [ ] Did I update all class files that use this slot?
- [ ] Did I archive the old slot file?
- [ ] Is my "notes" field documenting actual work done, not a deferral excuse?
If any answer is "no", the migration is NOT complete.
## Consequences
Agents that defer migrations without genuine semantic conflict:
1. Create technical debt requiring human cleanup
2. Delay schema consistency improvements
3. Waste curator time reviewing false "completions"
4. Undermine trust in AI-assisted schema work
**Execute the migrations. Do not defer.**

View file

@ -1,22 +1,146 @@
# Rule 56: Semantic Consistency Over Simplicity - Always Execute slot_fixes.yaml Revisions
**CRITICAL**: When `slot_fixes.yaml` specifies a revision, agents MUST execute it. Perceived simplicity of the existing slot is NOT a valid reason to reject a migration.
🚨 **CRITICAL**: When `slot_fixes.yaml` specifies a revision, agents MUST execute it. Perceived simplicity of the existing slot is NOT a valid reason to reject a migration.
## The Core Problem
Previous agents marked migrations as "NO MIGRATION NEEDED" citing reasons like:
- "Simple enum appropriate"
- "Would add unnecessary indirection"
- "Already has proper slot_uri"
- "String range is sufficient"
Previous agents marked migrations as "NO MIGRATION NEEDED" or "WELL_STRUCTURED_NO_MIGRATION_NEEDED" citing reasons like:
- "simple enum appropriate"
- "would add unnecessary indirection"
- "already has proper slot_uri"
- "string range is sufficient for this use case"
- "well-structured, no migration needed"
- "current implementation is adequate"
These judgments were **INCORRECT**. The `slot_fixes.yaml` revisions exist for specific architectural reasons that transcend local optimization.
**These judgments were INCORRECT.**
**Over 95% of entries in `slot_fixes.yaml` represent carefully curated migrations that MUST be executed.**
The revisions were manually designed based on:
- Ontology analysis (CIDOC-CRM, RiC-O, PROV-O, Schema.org alignment)
- Semantic correctness
- Pattern consistency (Rule 39: RiC-O style naming)
- Type/Types class hierarchy design (Rule 0b)
## Why Revisions MUST Be Executed
### 1. Schema Consistency Principle
| Principle | Explanation |
|-----------|-------------|
| **Schema Consistency** | Ontology achieves semantic power through consistent patterns, not local optimizations |
| **LinkML Mapping Separation** | `slot_uri` handles external ontology alignment; slot structure handles internal consistency |
| **Single Responsibility Principle** | Predicates should have single, focused purposes |
| **Extensibility First** | Structured classes enable future extension even if current use is simple |
| **Curated Quality** | Revisions were manually designed with ontology expertise - trust them |
The ontology achieves semantic power through **consistent patterns**, not local optimizations:
## Invalid Reasons to Reject Migrations
| Rejected Reason | Why It's Invalid |
|-----------------|------------------|
| "Already has proper slot_uri" | slot_uri is for external mapping; internal structure is separate concern |
| "Simple string/enum is sufficient" | Consistency and extensibility trump local simplicity |
| "Would add unnecessary indirection" | Indirection enables reuse and future extension |
| "Creating a class would over-engineer" | Ontology design favors class-based modeling |
| "Well-structured, no migration needed" | **If revision exists, migration IS needed** |
| "Current implementation is adequate" | Adequacy is not the standard; consistency is |
| "WELL_STRUCTURED_NO_MIGRATION_NEEDED" | **This note type is PROHIBITED** |
## Valid Reasons to PAUSE Migrations (Not Reject)
These warrant discussion with the user, NOT unilateral rejection:
1. **Semantic Conflict**: Proposed slot_uri contradicts the semantic intent of the slot
2. **Class Already Exists**: The target class exists under a different name (propose merge)
3. **Circular Dependency**: Migration would create import cycles
4. **Breaking External API**: Change would break published external consumers
**Even these reasons require escalation to the user** - agents should NOT mark as "NO MIGRATION NEEDED".
## The Key Insight
Agents confused "has good external mapping" with "needs no migration". These are **independent concerns**:
- **External mapping** (slot_uri, exact_mappings): How this slot relates to external ontologies
- **Internal structure** (range, class design): How this slot fits within the LinkML schema
A slot can have perfect external mappings AND still need structural migration for internal consistency.
## Correct Agent Behavior
```yaml
# When encountering a slot_fixes.yaml entry:
1. READ the revision specification completely
2. DO NOT evaluate whether migration is "necessary" - it IS necessary
3. CREATE the specified slots and classes
4. UPDATE the consuming class(es)
5. ARCHIVE the old slot
6. ADD processed section with status: true
# NEVER add notes like:
# - "NO MIGRATION NEEDED"
# - "WELL_STRUCTURED_NO_MIGRATION_NEEDED"
# - "Current implementation is sufficient"
# - "Would add unnecessary complexity"
# - "Simple enum appropriate"
```
## Handling Previous "NO MIGRATION NEEDED" Entries
Entries previously marked with notes like "WELL_STRUCTURED_NO_MIGRATION_NEEDED" should be:
1. **Re-processed**: The migration should be executed as specified in `revision`
2. **Notes replaced**: Replace the incorrect notes with actual migration documentation
3. **Status verified**: Ensure `status: true` reflects ACTUAL migration, not skipped migration
## Example - WRONG Agent Behavior
```yaml
# WRONG - Agent decided migration wasn't needed
- original_slot_id: https://nde.nl/ontology/hc/slot/cites_appendix
revision:
- label: is_or_was_listed_in
type: slot
- label: CITESAppendix
type: class
processed:
status: true # ← Marked complete but NOT actually migrated!
notes: "WELL_STRUCTURED_NO_MIGRATION_NEEDED: Already has proper slot_uri
and string range is sufficient for CITES appendix values."
```
## Example - CORRECT Agent Behavior
```yaml
# CORRECT - Agent executed the migration as specified
- original_slot_id: https://nde.nl/ontology/hc/slot/cites_appendix
revision:
- label: is_or_was_listed_in
type: slot
- label: CITESAppendix
type: class
processed:
status: true
timestamp: '2026-01-19T00:00:00Z'
session: session-2026-01-19-cites-appendix-migration
notes: 'Migrated 2026-01-19 per Rule 53/56. Created is_or_was_listed_in.yaml.
Created CITESAppendix.yaml class. Updated BiologicalObject.yaml.
Archived: modules/slots/archive/cites_appendix_archived_20260119.yaml.'
```
## Feedback Field
The `feedback` field in slot_fixes.yaml entries contains user corrections to agent mistakes. When feedback says things like:
- "I reject this!"
- "Conduct the migration"
- "Please conduct accordingly"
- "I altered the revision"
This means a previous agent incorrectly deferred the migration, and it MUST now be executed.
## Schema Consistency Examples
### Why "Simple URI is fine" is WRONG
```yaml
# WRONG - Agent judgment: "Simple URI is fine"
@ -29,132 +153,38 @@ has_or_had_thumbnail:
range: Thumbnail # Thumbnail class with has_or_had_url → URL
```
**Rationale**: All media references (images, thumbnails, videos, documents) should use the same structural pattern. Inconsistency creates cognitive load and maintenance burden.
**Rationale**: All media references (images, thumbnails, videos, documents) should use the same structural pattern.
### 2. LinkML Ontology Mapping Separation
The `slot_uri` property handles external ontology alignment. Slot structure handles internal consistency:
### Why "Simple enum is appropriate" is WRONG
```yaml
# slot_uri handles: schema:thumbnailUrl, foaf:thumbnail, etc.
# Slot structure handles: consistent pattern within our ontology
has_or_had_thumbnail:
slot_uri: schema:thumbnailUrl
exact_mappings:
- foaf:thumbnail
range: Thumbnail # Internal consistency
```
**Key Insight**: Agents confused "has good external mapping" with "needs no migration". These are independent concerns.
### 3. Single Responsibility Principle (SRP)
Predicates should have single, focused purposes:
```yaml
# WRONG - Overloaded predicate
applies_or_applied_to_call:
description: "Used for both funding calls and application requirements"
# CORRECT - Single responsibility per predicate
applies_or_applied_to:
description: "Expresses application relationship"
is_or_was_required_for:
description: "Expresses requirement relationship"
```
### 4. Extensibility First
Even if current use is simple, structured classes enable future extension:
```yaml
# "Simple enum is fine" - Agent judgment
# WRONG - "Simple enum is fine"
thinking_mode:
range: ThinkingModeEnum # enabled, disabled, interleaved
# But this blocks: confidence scores, provenance, timestamps
# With class:
# CORRECT - Enables extension
has_or_had_mode:
range: ThinkingMode
# ThinkingMode can have: mode_type, confidence, effective_date, etc.
```
## Decision Rules for Agents
**Rationale**: Even if current use is simple, structured classes enable future extension without breaking changes.
### When slot_fixes.yaml Specifies a Revision
## Summary
| Agent Action | Status |
|--------------|--------|
| Execute the revision exactly | CORRECT |
| Mark as "NO MIGRATION NEEDED" | WRONG |
| Substitute different slot/class | WRONG |
| Partially execute revision | WRONG |
**Trust the revision. Execute the migration. Document the work.**
### Invalid Reasons to Reject Migrations
These are NOT valid reasons to mark "NO MIGRATION NEEDED":
1. **"Already has proper slot_uri"** - slot_uri is for external mapping; internal structure is separate
2. **"Simple string/enum is sufficient"** - consistency and extensibility trump local simplicity
3. **"Would add unnecessary indirection"** - indirection enables reuse and future extension
4. **"Range X is appropriate"** - slot_fixes.yaml revision takes precedence
5. **"Creating a class would over-engineer"** - ontology design favors class-based modeling
### Valid Reasons to Pause Migrations
These warrant discussion (not unilateral rejection):
1. **Semantic conflict** - Proposed slot_uri contradicts the semantic intent (e.g., ownership vs. physical movement)
2. **Class already exists** - Revision proposes class that already exists under different name
3. **Circular dependency** - Migration would create import cycle
4. **Breaking change** - Migration would break external consumers (document and discuss)
**When in doubt**: Execute the revision and document concerns for future discussion.
## Feedback Patterns and Lessons
### Pattern 1: "LinkML ontology mapping takes care of related semantics"
**Meaning**: Don't conflate `slot_uri` (external alignment) with slot structure (internal consistency). Both are needed.
```yaml
# slot_uri handles external semantics
# Range and class structure handle internal consistency
has_or_had_code:
slot_uri: schema:identifier # External mapping
range: Alpha2Code # Internal structure
```
### Pattern 2: "Follow the revision as is"
**Meaning**: Execute exactly what slot_fixes.yaml specifies. No substitutions.
### Pattern 3: "Predicates should follow the Single Responsibility Principle (SRP)"
**Meaning**: Don't create multi-purpose predicates. Split into focused slots.
### Pattern 4: "Provides consistency with other X in the ontology"
**Meaning**: Pattern consistency across the schema is more valuable than local optimization.
## Implementation Checklist
Before marking any slot as "NO MIGRATION NEEDED", verify:
- [ ] Did you execute the revision from slot_fixes.yaml?
- [ ] Is your justification one of the "Invalid Reasons" listed above?
- [ ] Does your decision maintain consistency with similar slots?
- [ ] Have you considered extensibility implications?
- [ ] Is there a genuine semantic conflict (not just preference)?
The `revision` key in `slot_fixes.yaml` represents carefully curated ontology decisions. Agents are **executors** of these decisions, **not evaluators**. The only acceptable output is a completed migration with proper documentation.
## Related Rules
- **Rule 53**: slot_fixes.yaml is AUTHORITATIVE - Full Slot Migration
- **Rule 55**: Broaden Generic Predicate Ranges Instead of Creating Bespoke Predicates
- **Rule 57**: The revision key in slot_fixes.yaml is IMMUTABLE
- **Rule 39**: RiC-O Temporal Naming Conventions
- **Rule 38**: Slot Centralization and Semantic URI Requirements
## Revision History
- 2026-01-19: Strengthened with explicit prohibition of "WELL_STRUCTURED_NO_MIGRATION_NEEDED" notes
- 2026-01-16: Created based on analysis of 51 feedback entries in slot_fixes.yaml

View file

@ -47,7 +47,7 @@ This is NOT a simple data extraction project. This is an **ontology engineering
---
This section summarizes 55 critical rules. Each rule has complete documentation in `.opencode/` files.
This section summarizes 60 critical rules. Each rule has complete documentation in `.opencode/` files.
### Rule 0: LinkML Schemas Are the Single Source of Truth
@ -1994,6 +1994,39 @@ slots:
---
### Rule 60: No Migration Deferral - Execute All slot_fixes.yaml Revisions
🚨 **CRITICAL**: AI agents MUST execute ALL migrations specified in `slot_fixes.yaml`. The pattern of marking migrations as "WELL_STRUCTURED_NO_MIGRATION_NEEDED" or similar deferral notes is **STRICTLY PROHIBITED**.
**The Problem**: Previous agents marked 95%+ of slot_fixes.yaml entries with notes like "Already well-structured" without executing migrations. This violated the curated intent of slot_fixes.yaml revisions.
**Invalid Justifications** (NEVER acceptable for skipping migration):
| Rejected Reason | Why It's Invalid |
|-----------------|------------------|
| "Already has proper slot_uri" | slot_uri is for external mapping; internal structure is separate concern |
| "Simple string/enum is sufficient" | Consistency and extensibility trump local simplicity |
| "Would add unnecessary indirection" | Indirection enables reuse and future extension |
| "Current structure is well-designed" | Revisions were curated with full ontology context |
| "WELL_STRUCTURED_NO_MIGRATION_NEEDED" | This exact phrase is now a red flag |
**Valid Pause Reasons** (require `feedback` entry, NOT deferral via notes):
- Genuine semantic conflict between revision and documented intent
- Circular dependency would be created
- Breaking change affecting known external consumers
**Statistics**: >95% of slot_fixes.yaml entries MUST be executed. <5% may have genuine conflicts requiring human review via `feedback` mechanism.
**Workflow**:
1. Read the `revision` section completely
2. Execute the migration exactly as specified
3. Mark `processed.status: true`
4. If genuine conflict exists, add `feedback` entry (NOT a deferral note)
**See**: `.opencode/rules/no-migration-deferral-rule.md` for complete documentation
---
## Appendix: Full Rule Content (No .opencode Equivalent)
The following rules have no separate .opencode file and are preserved in full:

View file

@ -1,5 +1,5 @@
{
"generated": "2026-01-18T17:22:04.718Z",
"generated": "2026-01-19T12:05:24.104Z",
"schemaRoot": "/schemas/20251121/linkml",
"totalFiles": 2969,
"categoryCounts": {

View file

@ -43,12 +43,15 @@ imports:
- modules/slots/has_appellation_type
- modules/slots/has_appellation_value
- modules/slots/has_or_had_arrangement_system
- modules/slots/collection_description
- modules/slots/collection_name
- modules/slots/has_or_had_description
- modules/slots/has_or_had_label
# collection_description ARCHIVED (2026-01-18) - migrated to has_or_had_description (Rule 53)
# collection_name ARCHIVED (2026-01-18) - migrated to has_or_had_label (Rule 53)
# collection_scope ARCHIVED (2026-01-18) - migrated to has_or_had_scope + CollectionScope (Rule 53)
- modules/slots/has_or_had_scope
- modules/slots/collection_type
- modules/slots/collections_under_responsibility
# collections_under_responsibility ARCHIVED (2026-01-19) - migrated to is_or_was_responsible_for (Rule 53)
- modules/slots/is_or_was_responsible_for
- modules/slots/confidence_method
- modules/slots/confidence_score
- modules/slots/confidence_value
@ -599,7 +602,7 @@ imports:
- modules/slots/has_or_had_area_served
- modules/slots/has_or_had_member_custodian
- modules/slots/membership_criteria
- modules/slots/community_engagement
# community_engagement ARCHIVED 2026-01-19 - migrated to has_or_had_activity (imported above)
- modules/slots/service_offering
- modules/slots/record_type
- modules/slots/society_focus

View file

@ -1,5 +1,5 @@
{
"generated": "2026-01-18T23:09:29.147Z",
"generated": "2026-01-19T12:05:53.461Z",
"schemaRoot": "/schemas/20251121/linkml",
"totalFiles": 2969,
"categoryCounts": {

View file

@ -373,3 +373,50 @@ classes:
annotations:
activity_category: LOAN
spectrum_procedures: "loans-out, loans-in"
# ===========================================================================
# COMMUNITY ENGAGEMENT ACTIVITY TYPES
# ===========================================================================
CommunityEngagementActivityType:
is_a: ActivityType
class_uri: schema:InteractAction
description: |
Activity type for community outreach, public programming, and engagement activities.
**Definition**:
Activities that connect heritage custodians with broader communities through
advocacy, public programs, and participatory engagement.
**Subtypes**:
- Membership Meetings: Monthly, quarterly, annual gatherings
- Lecture Series: Guest speakers on heritage topics
- Field Trips: Site visits, museum tours, heritage walks
- Workshops: Skill-building sessions (genealogy, conservation, identification)
- Public Events: Open houses, exhibitions, school programs
- Community Events: Heritage days, festivals, memorial events
- Digital Engagement: Websites, social media, online forums, virtual meetings
- Advocacy: Historic preservation, heritage education, policy engagement
- Partnerships: Collaborations with local government, museums, libraries, universities
**Typical Use Cases**:
- Heritage societies (heemkundekringen) connecting with local communities
- Archive associations conducting public outreach
- Museums hosting community events
**Schema.org**: Maps to InteractAction for community interaction activities
**Migration Note**: Created 2026-01-19 per slot_fixes.yaml revision.
Replaces community_engagement slot (string) with structured Activity class.
exact_mappings:
- schema:InteractAction
- wd:Q1069284 # Wikidata: community engagement
close_mappings:
- schema:CommunicateAction
- aat:300054552 # education (activity) - overlaps with educational engagement
related_mappings:
- schema:Event
annotations:
activity_category: COMMUNITY_ENGAGEMENT
migration_date: "2026-01-19"
replaces_slot: "community_engagement"

View file

@ -29,7 +29,8 @@ imports:
# street_address was a redundant string slot; full Address class captures street data via components
- ../slots/postal_code
- ../slots/locality
- ../slots/city
# REMOVED: ../slots/city - migrated to is_or_was_located_in + City (2026-01-18, Rule 53)
- ../slots/is_or_was_located_in
- ../slots/region
- ../slots/country_name
# Shared slots (replacing address_formatted, address_type)
@ -46,6 +47,7 @@ imports:
- ./Country
- ./Subregion
- ./Settlement
- ./City # Added for is_or_was_located_in range (2026-01-18, Rule 53)
- ./CustodianObservation
- ./ReconstructionActivity
- ./AddressType
@ -154,7 +156,8 @@ classes:
- postal_code
# Locality/geographic hierarchy
- locality
- city
# REMOVED: city - migrated to is_or_was_located_in + City (2026-01-18, Rule 53)
- is_or_was_located_in
- region
- country_name
# Formatted representation (MIGRATED: address_formatted → has_or_had_label)
@ -196,10 +199,25 @@ classes:
examples:
- value: "Amsterdam"
description: City name
city:
range: string
# REMOVED: city slot_usage - migrated to is_or_was_located_in + City (2026-01-18, Rule 53)
# city:
# range: string
# required: false
# description: Alternative slot for locality (schema:addressLocality)
is_or_was_located_in:
range: City
required: false
description: Alternative slot for locality (schema:addressLocality)
inlined: true
description: |
The city where this address is located, as a structured City entity.
MIGRATED from city (string) slot (2026-01-18, Rule 53).
Provides GeoNames ID, coordinates, and subregion linkage.
examples:
- value:
settlement_name: "Amsterdam"
geonames_id: 2759794
country: "NL"
description: Address located in Amsterdam
region:
range: string
required: false

View file

@ -33,7 +33,7 @@ classes:
- Publication of newsletters and journals\n- Support for acquisitions and preservation\n\n**Organizational Role**:\n\
These are typically:\n- \"Friends of the Archives\" organizations\n- Historical societies supporting local archives\n\
- Professional associations for archivists\n- Advocacy groups for archival funding\n\n**Heritage Society Focus**:\n\
Use `society_focus` slot to describe the archive(s) supported.\nUse `community_engagement` to document advocacy and\
Use `society_focus` slot to describe the archive(s) supported.\nUse `has_or_had_activity` to document advocacy and\
\ outreach activities.\n\n**Related Types**:\n- HeritageSocietyType - Parent class for heritage support organizations\n\
- Archive (Q166118) - The institutions they support (NOT the same thing)\n\n**Primary Type**: \nMaps to 'S' (COLLECTING_SOCIETY)\
\ in GLAMORCUBESFIXPHDNT taxonomy,\nNOT 'A' (ARCHIVE) - these are support organizations, not archives themselves.\n\n\

View file

@ -21,7 +21,7 @@ imports:
- ../slots/has_articles_archival_stage
- ../slots/has_articles_document_format
- ../slots/has_articles_document_url
- ../slots/collected_in
- ../slots/is_or_was_included_in # was: collected_in - migrated per Rule 53 (2026-01-19)
- ../slots/document_description
- ../slots/document_title
- ../slots/document_type
@ -129,7 +129,7 @@ classes:
- has_articles_archival_stage
- has_articles_document_format
- has_articles_document_url
- collected_in
- is_or_was_included_in # was: collected_in - migrated per Rule 53 (2026-01-19)
- document_description
- document_title
- document_type
@ -271,9 +271,16 @@ classes:
is_or_was_archived_in:
range: CustodianArchive
required: false
collected_in:
is_or_was_included_in: # was: collected_in - migrated per Rule 53 (2026-01-19)
description: |
CustodianCollection where heritage articles are preserved.
Only applicable when has_articles_archival_stage = HERITAGE.
MIGRATED from collected_in per slot_fixes.yaml (Rule 53).
range: CustodianCollection
required: false
examples:
- value: https://nde.nl/ontology/hc/collection/rm/institutional-archive
description: Rijksmuseum institutional archive collection
requires_articles_at_registration:
range: boolean
required: false
@ -346,7 +353,7 @@ classes:
registered_office_clause: De stichting heeft haar zetel in de gemeente Amsterdam.
language: nl
articles_archival_stage: HERITAGE
collected_in: https://nde.nl/ontology/hc/collection/rm/institutional-archive
is_or_was_included_in: https://nde.nl/ontology/hc/collection/rm/institutional-archive # was: collected_in
requires_articles_at_registration: true
refers_to_legal_status: https://nde.nl/ontology/hc/legal-status/rm
refers_to_custodian: https://nde.nl/ontology/hc/nl-nh-ams-m-rm-q190804

View file

@ -11,6 +11,7 @@ imports:
- ./GeoSpatialPlace
- ./Country
- ./Subregion
- ./City # Added for is_or_was_located_in range (2026-01-18, Rule 53)
- ./Settlement
- ./TimeSpan
- ./Address # Added for has_or_had_address range (2026-01-17, Rule 53/56 migration)
@ -39,7 +40,8 @@ imports:
- ../slots/longitude
- ../slots/has_or_had_address # was: street_address - migrated to Address class per Rule 53/56 (2026-01-17)
- ../slots/postal_code
- ../slots/city
# REMOVED: ../slots/city - migrated to is_or_was_located_in + City (2026-01-18, Rule 53)
- ../slots/is_or_was_located_in
- ../slots/has_or_had_identifier
- ../slots/has_auxiliary_place_type
- ../slots/country
@ -124,7 +126,8 @@ classes:
slots:
- has_or_had_identifier
- has_auxiliary_place_type
- city
# REMOVED: city - migrated to is_or_was_located_in + City (2026-01-18, Rule 53)
- is_or_was_located_in
- country
- geonames_id
- has_feature_type
@ -227,11 +230,26 @@ classes:
examples:
- value: 3824 BK
description: Dutch postal code
city:
range: string
# REMOVED: city slot_usage - migrated to is_or_was_located_in + City (2026-01-18, Rule 53)
# city:
# range: string
# examples:
# - value: Amersfoort
# description: City name
is_or_was_located_in:
range: City
required: false
inlined: true
description: |
The city where this auxiliary place is located, as a structured City entity.
MIGRATED from city (string) slot (2026-01-18, Rule 53).
Provides GeoNames ID, coordinates, and subregion linkage.
examples:
- value: Amersfoort
description: City name
- value:
settlement_name: "Amersfoort"
geonames_id: 2759633
country: "NL"
description: Auxiliary place located in Amersfoort
country:
range: Country
examples:
@ -383,7 +401,10 @@ classes:
language: "en"
locality: "Schiphol"
country_name: "NL"
city: Schiphol
is_or_was_located_in: # was: city - migrated per Rule 53/56 (2026-01-18)
settlement_name: Hoofddorp # Schiphol Airport is located in Hoofddorp municipality
geonames_id: 2753801
country: NL
country: https://nde.nl/ontology/hc/country/NL
valid_from: '2002-10-01'
hosts_branch:
@ -410,7 +431,10 @@ classes:
postal_code: "2012 CH"
locality: "Haarlem"
country_name: "NL"
city: Haarlem
is_or_was_located_in: # was: city - migrated per Rule 53/56 (2026-01-18)
settlement_name: Haarlem
geonames_id: 2755003
country: NL
valid_from: '2010-01-15'
valid_to: '2018-06-30'
is_auxiliary_of_place: https://nde.nl/ontology/hc/place/noord-hollands-archief-main

View file

@ -4,7 +4,10 @@ title: Biological and Zoological Custodian Type Classification
imports:
- linkml:types
- ./CustodianType
- ../slots/collection_size
# REMOVED 2026-01-19: ../slots/collection_size - migrated to has_or_had_quantity + Quantity (Rule 53)
- ../slots/has_or_had_quantity
- ./Quantity
- ./Unit
- ./BioCustodianSubtype # Type/Types class hierarchy (was BioCustodianTypeEnum)
- ./BioCustodianSubtypes # 20 concrete subclasses
- ../slots/has_or_had_hyponym # was: bio_custodian_subtype - migrated per Rule 53/56 (2026-01-17)
@ -245,7 +248,8 @@ classes:
- Schema.org Garden: `schema:Garden`\n- Darwin Core: `dwc:PreservedSpecimen`\n- TDWG Standards: https://www.tdwg.org/standards/\n"
slots:
- has_or_had_hyponym # was: bio_custodian_subtype - migrated per Rule 53/56 (2026-01-17)
- collection_size
# REMOVED 2026-01-19: collection_size - migrated to has_or_had_quantity + Quantity (Rule 53)
- has_or_had_quantity
- conservation_breeding
- has_or_had_custodian_type
- living_collection
@ -259,9 +263,30 @@ classes:
range: string
multivalued: true
required: false
collection_size:
range: string
has_or_had_quantity: # was: collection_size - migrated per Rule 53 (2026-01-19)
description: |
MIGRATED from collection_size per slot_fixes.yaml (Rule 53, 2026-01-19).
Quantitative description of the living collection size using Quantity class.
Can express species count, individual organisms, or both.
Default unit is "item" (species count) or "specimen" (individual count).
range: Quantity
inlined: true
multivalued: true
required: false
examples:
- value:
quantity_value: 900
quantity_type: COLLECTION_SIZE
has_or_had_unit:
unit_value: "species"
description: Zoo species count
- value:
quantity_value: 50000
quantity_type: COLLECTION_SIZE
has_or_had_unit:
unit_value: "specimen"
is_estimate: true
description: Botanical garden specimen count
living_collection:
range: boolean
required: true

View file

@ -25,7 +25,9 @@ imports:
# bold_id REMOVED - migrated to has_or_had_identifier with BOLDIdentifier class (Rule 53)
- ../slots/has_or_had_identifier
- ./BOLDIdentifier
- ../slots/cites_appendix
# cites_appendix REMOVED - migrated to is_or_was_listed_in with CITESAppendix class (Rule 53, 2026-01-19)
- ../slots/is_or_was_listed_in
- ./CITESAppendix
- ../slots/collection_date
- ../slots/collection_locality_text
- ../slots/collection_location
@ -118,7 +120,8 @@ classes:
- is_or_was_associated_with
# bold_id REMOVED - migrated to has_or_had_identifier with BOLDIdentifier (Rule 53)
- has_or_had_identifier
- cites_appendix
# cites_appendix REMOVED - migrated to is_or_was_listed_in with CITESAppendix (Rule 53, 2026-01-19)
- is_or_was_listed_in
- collection_date
- collection_locality_text
- collection_location
@ -431,12 +434,32 @@ classes:
description: Extinct (e.g., Dodo)
- value: CR
description: Critically Endangered
cites_appendix:
# cites_appendix REMOVED - migrated to is_or_was_listed_in with CITESAppendix (Rule 53, 2026-01-19)
is_or_was_listed_in:
description: >-
CITES (Convention on International Trade in Endangered Species) listing.
MIGRATED from cites_appendix per slot_fixes.yaml (Rule 53, 2026-01-19).
Uses CITESAppendix class for structured representation including
appendix level, listing date, and exemption notes.
Important for legal compliance in specimen transfers between institutions.
range: CITESAppendix
inlined: true
required: false
range: string
examples:
- value: APPENDIX_I
description: Most endangered, trade prohibited
- value:
has_or_had_type: APPENDIX_I
has_or_had_label: "CITES Appendix I - Most Endangered"
listing_effective_date: "1975-07-01"
species_covered: "Loxodonta africana"
description: African elephant - highest CITES protection
- value:
has_or_had_type: NOT_LISTED
has_or_had_label: "Not regulated under CITES"
species_covered: "Raphus cucullatus"
exemption_note: "Extinct species - historical specimens pre-date CITES"
description: Dodo - extinct, not subject to CITES restrictions
legal_provenance_note:
required: false
range: string

View file

@ -0,0 +1,159 @@
id: https://nde.nl/ontology/hc/class/CITESAppendix
name: CITESAppendix
title: CITES Appendix 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#
dcterms: http://purl.org/dc/terms/
imports:
- linkml:types
- ../metadata
- ../slots/has_or_had_type
- ../slots/has_or_had_label
default_prefix: hc
classes:
CITESAppendix:
class_uri: hc:CITESAppendix
description: >-
CITES (Convention on International Trade in Endangered Species) appendix listing
for biological specimens.
CITES regulates international trade in specimens of wild animals and plants to
ensure their survival. Species are listed in one of three appendices based on
the degree of protection needed.
**Appendix Levels**:
| Appendix | Protection Level | Trade Status |
|----------|------------------|--------------|
| APPENDIX_I | Highest | Trade prohibited (except non-commercial) |
| APPENDIX_II | Moderate | Trade regulated with permits |
| APPENDIX_III | Lowest | Trade monitored by request of a Party |
| NOT_LISTED | None | Not regulated under CITES |
**Temporal Considerations**:
Species may move between appendices as their conservation status changes.
The listing date is important for determining legal status at time of
specimen acquisition.
**Legal Significance**:
For heritage collections, CITES status affects:
- Loan agreements between institutions
- Specimen transfers and acquisitions
- Import/export permit requirements
- Documentation and provenance requirements
**Example**:
```yaml
is_or_was_listed_in:
has_or_had_type: APPENDIX_I
has_or_had_label: "CITES Appendix I - Most Endangered"
listing_effective_date: "1975-07-01"
listing_authority: "CITES Secretariat"
species_covered: "Raphus cucullatus"
```
slots:
- has_or_had_type
- has_or_had_label
slot_usage:
has_or_had_type:
description: >-
The CITES appendix level (APPENDIX_I, APPENDIX_II, APPENDIX_III, or NOT_LISTED).
range: string
required: true
pattern: "^(APPENDIX_I|APPENDIX_II|APPENDIX_III|NOT_LISTED)$"
examples:
- value: APPENDIX_I
description: Highest protection - species threatened with extinction
- value: APPENDIX_II
description: Moderate protection - trade must be controlled
- value: APPENDIX_III
description: Protected in at least one country requesting cooperation
- value: NOT_LISTED
description: Species not regulated under CITES
has_or_had_label:
description: >-
Human-readable description of the CITES listing status.
range: string
required: false
examples:
- value: "CITES Appendix I - Trade Prohibited"
- value: "CITES Appendix II - Trade Regulated"
attributes:
listing_effective_date:
description: >-
Date when the species was added to this CITES appendix.
Important for determining legal status at time of specimen acquisition.
range: date
required: false
examples:
- value: "1975-07-01"
description: Original CITES listing (Convention entered into force)
- value: "2019-08-28"
description: Added at CoP18 (Geneva)
listing_authority:
description: >-
Authority responsible for the listing (typically CITES Secretariat or
a specific Conference of the Parties decision).
range: string
required: false
examples:
- value: "CITES Secretariat"
- value: "CoP18 Decision 18.219"
species_covered:
description: >-
Scientific name of the species covered by this listing.
May be at species, genus, or family level.
range: string
required: false
examples:
- value: "Raphus cucullatus"
description: Extinct dodo (historical listing)
- value: "Elephantidae"
description: All elephant species (family-level listing)
population_specific:
description: >-
Indicates if the listing applies to a specific population rather than
the entire species. Some CITES listings are population-specific.
range: boolean
required: false
examples:
- value: true
description: Population-specific listing (e.g., African elephant populations)
- value: false
description: Applies to all populations of the species
exemption_note:
description: >-
Notes on any exemptions or special provisions that apply.
range: string
required: false
examples:
- value: "Pre-Convention specimens exempt with documentation"
- value: "Captive-bred specimens listed as Appendix II"
exact_mappings:
- hc:CITESAppendix
close_mappings:
- schema:PropertyValue
see_also:
- https://cites.org/eng/app/appendices.php
- https://speciesplus.net/
examples:
- value:
has_or_had_type: APPENDIX_I
has_or_had_label: "CITES Appendix I - Most Endangered"
listing_effective_date: "1975-07-01"
listing_authority: "CITES Secretariat"
species_covered: "Loxodonta africana"
population_specific: true
exemption_note: "Some populations listed in Appendix II"
description: African elephant CITES listing
- value:
has_or_had_type: NOT_LISTED
has_or_had_label: "Not regulated under CITES"
species_covered: "Raphus cucullatus"
exemption_note: "Extinct species - historical specimens pre-date CITES"
description: Dodo - extinct, not subject to CITES trade restrictions

View file

@ -0,0 +1,110 @@
# CauseOfDeath class
# Structured representation of the cause and circumstances of death
#
# Migration: Created per slot_fixes.yaml revision for circumstances_of_death (line 9369)
#
# Generation date: 2026-01-19
# Rule compliance: 38 (slot centralization), 39 (RiC-O naming), 53 (slot_fixes.yaml)
id: https://nde.nl/ontology/hc/class/CauseOfDeath
name: cause_of_death_class
title: Cause Of Death Class
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
wd: http://www.wikidata.org/entity/
default_prefix: hc
imports:
- linkml:types
- ../metadata
- ../slots/has_or_had_type
- ../slots/has_or_had_description
- ../slots/has_or_had_location
- ./Location
- ../enums/CauseOfDeathTypeEnum
classes:
CauseOfDeath:
class_uri: hc:CauseOfDeath
description: |
Structured representation of the cause and circumstances of a person's death.
**Purpose**:
Captures structured information about how and why a person died:
- **Type**: Category of death (natural, conflict, accident, etc.)
- **Location**: Where the death occurred
- **Description**: Narrative details and context
**Ontological Alignment**:
- **Primary** (`class_uri`): `hc:CauseOfDeath` - Heritage Custodian class
- **Related**: Wikidata P1196 (manner of death) - semantic equivalent
- **Related**: `schema:causeOfDeath` - Schema.org (MedicalCause context)
**Heritage Sector Context**:
Particularly important for documenting deaths of heritage workers due to:
- **CONFLICT**: Armed conflict, airstrikes, military operations
- **TARGETED_ATTACK**: Violence specifically targeting cultural workers
- **OCCUPATIONAL**: Hazards from heritage work (conservation chemicals, etc.)
- **NATURAL**: Age, illness, medical conditions
- **ACCIDENT**: Non-occupational accidents
- **PERSECUTION**: Targeting due to identity or beliefs
**Example - Conflict Death**:
```yaml
is_or_was_caused_by:
cause_type: CONFLICT
has_or_had_description: |
Killed in Israeli airstrike on residential building in Gaza City.
The attack occurred during the 2023-2024 Israeli military operations.
has_or_had_location:
city: Gaza City
country: PS
```
**Sensitivity Guidelines**:
- Handle with respect and dignity
- Verify facts from authoritative sources before documenting
- Consult with family or institution when possible
- Follow journalistic standards for reporting deaths
- Link to source documentation (news reports, institutional records)
exact_mappings:
- wd:P1196 # Wikidata: manner of death
slots:
- has_or_had_type
- has_or_had_description
- has_or_had_location
slot_usage:
has_or_had_type:
range: CauseOfDeathTypeEnum
description: |
The category/type of death cause. Uses CauseOfDeathTypeEnum values:
NATURAL, CONFLICT, TARGETED_ATTACK, OCCUPATIONAL, ACCIDENT, PERSECUTION, UNKNOWN.
has_or_had_description:
range: string
description: |
Detailed narrative description of the death circumstances.
Include source documentation and context.
Handle with respect and verify facts before documenting.
has_or_had_location:
range: Location
inlined: true
description: |
The location where the death occurred.
Important for conflict deaths to document the specific location.
comments:
- "Structured cause of death for heritage workers"
- "Wikidata P1196 (manner of death) is semantically equivalent"
- "Important for documenting conflict-related deaths"
- "Handle with respect and verify facts before documenting"
- "Include source documentation for verification"
see_also:
- https://www.wikidata.org/wiki/Property:P1196

View file

@ -0,0 +1,150 @@
# CertaintyLevel class
# Structured class for expressing certainty/confidence levels with notes
#
# Generation date: 2026-01-18
# Rule compliance: 0 (LinkML single source of truth), 38 (slot centralization), 53 (slot_fixes.yaml)
# Migration: Replaces certainty_level + certainty_note bespoke slots
#
# Created per slot_fixes.yaml revisions:
# - certainty_level → has_or_had_level + CertaintyLevel
# - certainty_note → has_or_had_note + Note (within CertaintyLevel)
id: https://nde.nl/ontology/hc/class/CertaintyLevel
name: certainty_level_class
title: Certainty Level Class
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
crm: http://www.cidoc-crm.org/cidoc-crm/
rico: https://www.ica.org/standards/RiC/ontology#
skos: http://www.w3.org/2004/02/skos/core#
prov: http://www.w3.org/ns/prov#
default_prefix: hc
imports:
- linkml:types
- ../metadata
- ../slots/level_value
- ../slots/has_or_had_note
- ./Note
- ../slots/specificity_annotation
- ../slots/has_or_had_score
- ./SpecificityAnnotation
- ./TemplateSpecificityScore
- ./TemplateSpecificityType
- ./TemplateSpecificityTypes
classes:
CertaintyLevel:
class_uri: rico:ConfidenceLevel
description: |
A structured representation of certainty/confidence level with explanatory notes.
**Purpose**:
CertaintyLevel encapsulates both the level of certainty (CERTAIN, PROBABLE,
POSSIBLE, UNCERTAIN) and any notes explaining the certainty assessment.
Used primarily in provenance research to document confidence in ownership
transfer claims.
**Ontological Alignment**:
- **Primary**: `rico:ConfidenceLevel` - RiC-O confidence level
- **Close**: `crm:P141_assigned` - CIDOC-CRM attribute assignment
**Standard Values for level_value**:
- CERTAIN: Documentary evidence confirms the claim
- PROBABLE: Strong circumstantial evidence supports the claim
- POSSIBLE: Reasonable inference from available context
- UNCERTAIN: Speculative or unverified claim
**Use Cases**:
- Provenance event certainty (ProvenanceEvent)
- Attribution confidence (artwork authorship)
- Dating confidence (temporal assertions)
- Identification confidence (person/place identification)
**Replaces** (per slot_fixes.yaml):
- `certainty_level` (string) → has_or_had_level with CertaintyLevel class
- `certainty_note` (string) → has_or_had_note with Note class (within CertaintyLevel)
exact_mappings:
- rico:ConfidenceLevel
close_mappings:
- crm:P141_assigned
- prov:qualifiedAssociation
slots:
- level_value
- has_or_had_note
- specificity_annotation
- has_or_had_score
slot_usage:
level_value:
description: |
The certainty/confidence level value.
Standard values: CERTAIN, PROBABLE, POSSIBLE, UNCERTAIN.
range: string
required: true
examples:
- value: CERTAIN
description: Documentary evidence confirms claim
- value: PROBABLE
description: Strong circumstantial evidence
- value: POSSIBLE
description: Reasonable inference
- value: UNCERTAIN
description: Speculative/unverified
has_or_had_note:
description: |
Notes explaining the certainty assessment.
Use Note class with note_type: "certainty" for certainty-specific notes.
range: Note
multivalued: true
inlined: true
required: false
examples:
- value:
note_type: certainty
note_content: "Confirmed by sale catalogue and receipt"
description: Documentary evidence note
- value:
note_type: certainty
note_content: "Inferred from stylistic analysis and collection history"
description: Circumstantial evidence note
- value:
note_type: certainty
note_content: "Provenance gap 1933-1945 requires further research"
description: Research gap note
annotations:
custodian_types: '["*"]'
custodian_types_rationale: Certainty documentation applicable to all custodian types.
custodian_types_primary: null
specificity_score: 0.4
specificity_rationale: Moderately specific class for provenance and attribution certainty.
examples:
- value: |
level_value: CERTAIN
has_or_had_note:
- note_type: certainty
note_content: "Confirmed by sale catalogue and receipt"
note_date: "2025-06-15"
description: "Certain provenance event with documentary evidence"
- value: |
level_value: PROBABLE
has_or_had_note:
- note_type: certainty
note_content: "Van Ruijven was Vermeer's patron; likely acquired directly from artist"
description: "Probable ownership based on historical relationship"
- value: |
level_value: UNCERTAIN
has_or_had_note:
- note_type: certainty
note_content: "Provenance gap 1933-1945 requires further research"
- note_type: certainty
note_content: "Documentation incomplete; collector fled Vienna 1938"
description: "Uncertain Nazi-era provenance requiring research"

View file

@ -1,6 +1,7 @@
# ChAnnotatorEntityClaim - Individual claim about an entity
# Extracted from custodian_source.yaml per Rule 38 (modular schema files)
# Extraction date: 2026-01-08
# MIGRATION 2026-01-19: claim_type → has_or_had_type + ClaimType (Rule 53/56)
id: https://nde.nl/ontology/hc/classes/ChAnnotatorEntityClaim
name: ChAnnotatorEntityClaim
@ -17,10 +18,12 @@ prefixes:
imports:
- linkml:types
- ./ChAnnotatorProvenance
- ./ExtractionSourceInfo
# ADDED 2026-01-19: claim_type migration (Rule 53/56)
- ../slots/has_or_had_type
- ./ClaimType
- ./ClaimTypes
default_range: string
classes:
@ -43,11 +46,19 @@ classes:
related_mappings:
- prov:Entity
- schema:PropertyValue
attributes:
claim_type:
range: string
slots:
- has_or_had_type
slot_usage:
has_or_had_type:
range: ClaimType
inlined: true
required: true
description: Type of claim (full_name, institution_type, etc.)
description: |
MIGRATED from claim_type per slot_fixes.yaml (Rule 53/56, 2026-01-19).
Type of claim (full_name, institution_type, etc.).
Uses ClaimType class hierarchy with 507 concrete subtypes.
attributes:
# REMOVED 2026-01-19: claim_type - migrated to has_or_had_type slot (Rule 53/56)
claim_value:
range: string
required: true

View file

@ -0,0 +1,122 @@
# City - A city/town settlement entity
# Created: 2026-01-18
# Migration from city (string) slot per slot_fixes.yaml revision
# City is_a Settlement per established pattern
id: https://nde.nl/ontology/hc/class/City
name: city_class
title: City Class
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
gn: http://www.geonames.org/ontology#
wikidata: http://www.wikidata.org/entity/
crm: http://www.cidoc-crm.org/cidoc-crm/
imports:
- linkml:types
- ./Settlement
default_prefix: hc
classes:
City:
is_a: Settlement
class_uri: schema:City
description: |
A city or large town settlement.
**RELATIONSHIP TO SETTLEMENT**:
City is a subclass of Settlement representing urban areas that are
typically larger and more administratively significant than villages
or small towns.
**GeoNames Feature Codes**:
Cities typically correspond to GeoNames feature codes:
- PPL: Populated place (general)
- PPLA: Seat of first-order administrative division
- PPLA2: Seat of second-order administrative division
- PPLC: Capital of a political entity
- PPLS: Populated places (urban agglomerations)
**USAGE**:
Use City class when:
- The settlement is known to be a city (not village/hamlet)
- You need to express city-specific semantics
- Schema.org City alignment is important
Use Settlement class when:
- The settlement type is unknown or mixed
- You want the most general geographic entity
**EXAMPLES**:
```yaml
is_or_was_located_in:
- settlement_name: "Amsterdam"
geonames_id: 2759794
country: "NL"
```
exact_mappings:
- schema:City
close_mappings:
- gn:P.PPLA
- gn:P.PPLC
- wikidata:Q515
related_mappings:
- crm:E53_Place
# Inherits all slots from Settlement:
# - settlement_name
# - geonames_id
# - latitude
# - longitude
# - country
# - has_or_had_geographic_subdivision (subregion)
# - specificity_annotation
# - has_or_had_score
annotations:
specificity_score: 0.35
specificity_rationale: |
Slightly more specific than Settlement (0.30) as it indicates
urban status, but still broadly applicable across heritage contexts.
custodian_types: '["*"]'
custodian_types_rationale: |
All heritage custodians are located in cities or settlements.
custodian_types_primary: "*"
examples:
- value:
settlement_name: "Amsterdam"
geonames_id: 2759794
country: "NL"
has_or_had_geographic_subdivision:
subregion_code: "NL-NH"
description: Amsterdam - capital and largest city of the Netherlands
- value:
settlement_name: "Haarlem"
geonames_id: 2755420
country: "NL"
latitude: 52.3873
longitude: 4.6462
description: Haarlem - city in Noord-Holland province
- value:
settlement_name: "Tokyo"
geonames_id: 1850147
country: "JP"
description: Tokyo - capital of Japan
comments:
- City is_a Settlement following semantic hierarchy
- Inherits all Settlement slots including GeoNames ID
- Use for explicit urban classification
- Created per slot_fixes.yaml migration for city slot (2026-01-18)

View file

@ -0,0 +1,51 @@
id: https://nde.nl/ontology/hc/class/Claim
name: Claim
title: Claim Class - Base Class for Assertions
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
prov: http://www.w3.org/ns/prov#
arg: http://www.w3.org/ns/argument#
imports:
- linkml:types
default_prefix: hc
classes:
Claim:
class_uri: prov:Entity
description: |
Base class for assertions or claims made about heritage entities.
A claim represents a statement that warrants (supports or justifies)
other statements or conclusions. Claims can come from various sources:
- Web pages (WebClaim subclass)
- Wikidata (WikidataClaim)
- Research sources
- Human annotations
**Argumentation Semantics**:
The term "warrants" comes from argumentation theory (Toulmin model):
- Claims provide evidence that WARRANTS (justifies) conclusions
- A claim can be warranted BY other supporting claims
This bidirectional relationship is captured by the `warrants_or_warranted` slot.
**Subclasses**:
- WebClaim: Claims extracted from web pages with XPath provenance
- WikidataClaim: Claims from Wikidata with property/value structure
- PersonWebClaim: Claims about persons from web sources
- CustodianLegalNameClaim: Claims about custodian legal names
**MIGRATION NOTE (2026-01-19)**:
Created as base class for claim type hierarchy per slot_fixes.yaml (Rule 53/56).
Replaces generic `claim` slot with `warrants_or_warranted` slot.
exact_mappings:
- prov:Entity
close_mappings:
- schema:Claim
- schema:PropertyValue
slots: [] # Base class - slots defined in subclasses
comments:
- Base class for claim type hierarchy
- Subclasses add specific provenance mechanisms
- 'CREATED 2026-01-19: Per slot_fixes.yaml revision (Rule 53/56)'

View file

@ -0,0 +1,80 @@
id: https://nde.nl/ontology/hc/class/ClaimType
name: ClaimType
title: ClaimType Class - Base class for web claim types
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
dcterms: http://purl.org/dc/terms/
skos: http://www.w3.org/2004/02/skos/core#
imports:
- linkml:types
- ../slots/has_or_had_label
- ../slots/has_or_had_description
default_prefix: hc
classes:
ClaimType:
class_uri: skos:Concept
description: |
Abstract base class for types of claims that can be extracted from web pages.
Each claim type has expected source locations in HTML:
- full_name: <title>, <h1>, logo text, meta og:title
- description: <meta name='description'>, about section
- email: <a href='mailto:...'>, contact page, footer
- phone: <a href='tel:...'>, contact page
- address: footer, contact page, JSON-LD structured data
**Type Hierarchy**:
- ClaimType (abstract base)
- IdentityClaim (names, descriptions)
- ContactClaim (email, phone, address)
- SocialMediaClaim (facebook, twitter, linkedin, etc.)
- MediaClaim (logo, favicon, images)
- OperationalClaim (hours, admission, accessibility)
- CollectionClaim (counts, statistics)
- OrganizationalClaim (founding, legal form, parent org)
- DocumentClaim (annual reports, policies)
- GeographicClaim (address components)
- ArchivalClaim (archive-specific claims)
**MIGRATION NOTE (2026-01-19)**:
Promoted from ClaimTypeEnum per slot_fixes.yaml (Rule 0b, 53, 56).
Enum archived to: modules/enums/archive/ClaimTypeEnum_archived_20260119.yaml
exact_mappings:
- skos:Concept
- dcterms:type
close_mappings:
- schema:PropertyValueSpecification
slots:
- has_or_had_label
- has_or_had_description
slot_usage:
has_or_had_label:
description: The claim type identifier (e.g., "full_name", "email", "facebook")
required: true
has_or_had_description:
description: Description of what this claim type represents and where to find it
annotations:
specificity_score: "0.65"
specificity_rationale: >-
Claim types are moderately specific - useful for web extraction
workflows but not universally applicable to all heritage queries.
template_specificity: '{"archive_search": 0.40, "museum_search": 0.40, "library_search": 0.40, "collection_discovery": 0.50, "person_research": 0.30, "location_browse": 0.35, "identifier_lookup": 0.45, "organizational_change": 0.25, "digital_platform": 0.85, "general_heritage": 0.50}'
comments:
- "Abstract base class - concrete types are in ClaimTypes.yaml"
- "Follows Type/Types naming pattern per Rule 0b"
- "Migrated from ClaimTypeEnum per Rule 53 (no bespoke slots)"
see_also:
- ClaimTypes.yaml
- WebClaim.yaml
examples:
- value:
has_or_had_label: full_name
has_or_had_description: "Official full name of the organization. Expected in: <title>, <h1>, logo text, og:title"
description: Identity claim for organization name
- value:
has_or_had_label: email
has_or_had_description: "Contact email address. Expected in: <a href='mailto:...'>, contact page, footer"
description: Contact claim for email

View file

@ -0,0 +1,506 @@
id: https://nde.nl/ontology/hc/class/ClaimTypes
name: ClaimTypes
title: ClaimTypes - Concrete claim type subclasses
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#
imports:
- linkml:types
- ./ClaimType
default_prefix: hc
# =============================================================================
# ClaimTypes.yaml - Concrete subclasses of ClaimType
# =============================================================================
#
# MIGRATION NOTE (2026-01-19):
# Converted from ClaimTypeEnum per slot_fixes.yaml revision (Rules 0b, 53, 56).
# Original enum archived to: modules/enums/archive/ClaimTypeEnum_archived_20260119.yaml
#
# PATTERN: Type/Types (Rule 0b)
# - ClaimType.yaml: Abstract base class (skos:Concept)
# - ClaimTypes.yaml: Concrete subclasses organized by category
#
# CATEGORIES:
# 1. IdentityClaimType - names, descriptions
# 2. ContactClaimType - email, phone, address
# 3. SocialMediaClaimType - platform links
# 4. MediaClaimType - logos, images
# 5. OperationalClaimType - hours, admission
# 6. CollectionClaimType - counts, statistics
# 7. OrganizationalClaimType - founding, legal form
# 8. DocumentClaimType - reports, policies
# 9. GeographicClaimType - address components
# 10. ArchivalClaimType - archive-specific
# =============================================================================
classes:
# ===========================================================================
# CATEGORY 1: Identity Claims
# ===========================================================================
IdentityClaimType:
is_a: ClaimType
class_uri: hc:IdentityClaimType
description: |
Claim types for organization identity information.
Includes names, descriptions, and identity verification claims.
comments:
- "Expected locations: <title>, <h1>, logo, meta tags, about sections"
FullNameClaim:
is_a: IdentityClaimType
class_uri: hc:FullNameClaim
description: |
Official full name of the organization.
Expected in: <title>, <h1>, logo text, meta og:title
ShortNameClaim:
is_a: IdentityClaimType
class_uri: hc:ShortNameClaim
description: |
Abbreviated or short name of the organization.
Expected in: <h1>, logo, header
DescriptionClaim:
is_a: IdentityClaimType
class_uri: hc:DescriptionClaim
description: |
Description or about text for the organization.
Expected in: <meta name='description'>, about section
LegalNameClaim:
is_a: IdentityClaimType
class_uri: hc:LegalNameClaim
description: |
Full legal/registered name of the organization.
May differ from display name.
CustodianNameClaim:
is_a: IdentityClaimType
class_uri: hc:CustodianNameClaim
description: |
Official custodian name.
May differ from display name in heritage context.
NameVerifiedClaim:
is_a: IdentityClaimType
class_uri: hc:NameVerifiedClaim
description: |
Flag indicating name has been verified against authoritative source.
# ===========================================================================
# CATEGORY 2: Contact Claims
# ===========================================================================
ContactClaimType:
is_a: ClaimType
class_uri: hc:ContactClaimType
description: |
Claim types for contact information.
Includes email, phone, and general contact methods.
comments:
- "Expected locations: contact page, footer, structured data"
EmailClaim:
is_a: ContactClaimType
class_uri: hc:EmailClaim
description: |
Contact email address.
Expected in: <a href='mailto:...'>, contact page, footer
PhoneClaim:
is_a: ContactClaimType
class_uri: hc:PhoneClaim
description: |
Contact phone number.
Expected in: <a href='tel:...'>, contact page, footer
AddressClaim:
is_a: ContactClaimType
class_uri: hc:AddressClaim
description: |
Physical address (complete).
Expected in: contact page, footer, structured data
WebsiteClaim:
is_a: ContactClaimType
class_uri: hc:WebsiteClaim
description: |
Website URL (may differ from source_url).
Expected in: contact page, links
# ===========================================================================
# CATEGORY 3: Social Media Claims
# ===========================================================================
SocialMediaClaimType:
is_a: ClaimType
class_uri: hc:SocialMediaClaimType
description: |
Claim types for social media presence.
Includes platform-specific and general social links.
comments:
- "Expected locations: footer, header, contact page"
SocialMediaClaim:
is_a: SocialMediaClaimType
class_uri: hc:SocialMediaClaim
description: |
General social media profile links.
Used when platform is not specified or for aggregate.
FacebookClaim:
is_a: SocialMediaClaimType
class_uri: hc:FacebookClaim
description: Facebook page URL.
TwitterClaim:
is_a: SocialMediaClaimType
class_uri: hc:TwitterClaim
description: Twitter/X profile URL.
InstagramClaim:
is_a: SocialMediaClaimType
class_uri: hc:InstagramClaim
description: Instagram profile URL.
LinkedInClaim:
is_a: SocialMediaClaimType
class_uri: hc:LinkedInClaim
description: LinkedIn page URL.
YouTubeClaim:
is_a: SocialMediaClaimType
class_uri: hc:YouTubeClaim
description: YouTube channel URL.
# ===========================================================================
# CATEGORY 4: Media Claims
# ===========================================================================
MediaClaimType:
is_a: ClaimType
class_uri: hc:MediaClaimType
description: |
Claim types for media assets.
Includes logos, favicons, and social sharing images.
comments:
- "Expected locations: header, <link> tags, meta og: tags"
LogoUrlClaim:
is_a: MediaClaimType
class_uri: hc:LogoUrlClaim
description: |
Organization logo image URL.
Expected in: <img> in header/nav, og:image meta tag.
Look for: logo, brand, emblem, icon in class/id/alt attributes.
Priority: SVG > PNG > JPG for quality.
FaviconUrlClaim:
is_a: MediaClaimType
class_uri: hc:FaviconUrlClaim
description: |
Website favicon URL.
Expected in: <link rel='icon'>, <link rel='shortcut icon'>.
Usually: /favicon.ico, /favicon.png
OgImageUrlClaim:
is_a: MediaClaimType
class_uri: hc:OgImageUrlClaim
description: |
Open Graph image URL (social sharing image).
Expected in: <meta property='og:image'>.
Often the logo or a representative image.
# ===========================================================================
# CATEGORY 5: Operational Claims
# ===========================================================================
OperationalClaimType:
is_a: ClaimType
class_uri: hc:OperationalClaimType
description: |
Claim types for operational information.
Includes hours, admission, and accessibility.
comments:
- "Expected locations: visit page, contact page, structured data"
OpeningHoursClaim:
is_a: OperationalClaimType
class_uri: hc:OpeningHoursClaim
description: |
Opening hours / visiting times.
Expected in: visit page, contact page, structured data
AdmissionInfoClaim:
is_a: OperationalClaimType
class_uri: hc:AdmissionInfoClaim
description: Admission prices or policies.
AccessibilityInfoClaim:
is_a: OperationalClaimType
class_uri: hc:AccessibilityInfoClaim
description: Accessibility information for visitors.
# ===========================================================================
# CATEGORY 6: Collection Claims
# ===========================================================================
CollectionClaimType:
is_a: ClaimType
class_uri: hc:CollectionClaimType
description: |
Claim types for collection statistics and information.
Includes counts and descriptions of holdings.
comments:
- "Expected locations: collection pages, about sections"
CollectionCountClaim:
is_a: CollectionClaimType
class_uri: hc:CollectionCountClaim
description: Number of items in collection.
BeeldbankTotalPhotosClaim:
is_a: CollectionClaimType
class_uri: hc:BeeldbankTotalPhotosClaim
description: Total photos in image bank (beeldbank).
BeeldbankDescribedPhotosClaim:
is_a: CollectionClaimType
class_uri: hc:BeeldbankDescribedPhotosClaim
description: Number of described photos in image bank.
OldestMapClaim:
is_a: CollectionClaimType
class_uri: hc:OldestMapClaim
description: Reference to oldest map in collection.
# ===========================================================================
# CATEGORY 7: Organizational Claims
# ===========================================================================
OrganizationalClaimType:
is_a: ClaimType
class_uri: hc:OrganizationalClaimType
description: |
Claim types for organizational structure and legal information.
Includes founding, identifiers, and legal form.
comments:
- "Expected locations: about page, footer, structured data"
FoundingDateClaim:
is_a: OrganizationalClaimType
class_uri: hc:FoundingDateClaim
description: When organization was founded.
FoundedClaim:
is_a: OrganizationalClaimType
class_uri: hc:FoundedClaim
description: |
Founding year or date.
Alternative format to founding_date.
KvkNumberClaim:
is_a: OrganizationalClaimType
class_uri: hc:KvkNumberClaim
description: Dutch Chamber of Commerce number.
IsilCodeClaim:
is_a: OrganizationalClaimType
class_uri: hc:IsilCodeClaim
description: ISIL identifier.
WikidataIdClaim:
is_a: OrganizationalClaimType
class_uri: hc:WikidataIdClaim
description: Wikidata Q-number.
ParentOrganizationClaim:
is_a: OrganizationalClaimType
class_uri: hc:ParentOrganizationClaim
description: Parent organization reference.
LegalFormClaim:
is_a: OrganizationalClaimType
class_uri: hc:LegalFormClaim
description: |
Legal form/structure of the organization.
Dutch: stichting, vereniging, vof, bv, nv.
English: foundation, association, LLC, corporation.
GeographicScopeClaim:
is_a: OrganizationalClaimType
class_uri: hc:GeographicScopeClaim
description: |
Geographic area served by the organization.
Examples: local, regional, national, international.
Specific areas: gemeente, provincie, regio.
CommitteeClaim:
is_a: OrganizationalClaimType
class_uri: hc:CommitteeClaim
description: Committee or board member information.
# ===========================================================================
# CATEGORY 8: Document Claims
# ===========================================================================
DocumentClaimType:
is_a: ClaimType
class_uri: hc:DocumentClaimType
description: |
Claim types for organizational documents.
Includes reports, policies, and financial statements.
comments:
- "Expected locations: /over-ons/, /organisatie/, /documenten/"
AnnualReportUrlClaim:
is_a: DocumentClaimType
class_uri: hc:AnnualReportUrlClaim
description: |
Link to annual report PDF (jaarverslag).
Expected in: /over-ons/jaarverslagen/, /organisatie/jaarverslagen/.
Dutch: jaarverslag, publieksjaarverslag.
English: annual report.
FinancialStatementUrlClaim:
is_a: DocumentClaimType
class_uri: hc:FinancialStatementUrlClaim
description: |
Link to annual financial statement document (jaarstukken, jaarrekening).
Expected in: /organisatie/jaarverslagen/, /over-ons/documenten/.
Dutch: jaarstukken, jaarrekening.
English: financial statements, annual accounts.
AnbiPublicationUrlClaim:
is_a: DocumentClaimType
class_uri: hc:AnbiPublicationUrlClaim
description: |
ANBI publication link (Dutch charity tax status requirement).
ANBI = Algemeen Nut Beogende Instelling (public benefit institution).
Required for Dutch non-profits to maintain tax-exempt status.
Expected in: footer, /anbi/, /over-ons/.
PolicyDocumentUrlClaim:
is_a: DocumentClaimType
class_uri: hc:PolicyDocumentUrlClaim
description: |
Multi-year policy document link (meerjarenbeleid, beleidsplan).
Dutch: meerjarenbeleid, beleidsplan, strategisch plan.
English: multi-year policy, strategic plan.
FinancialDocumentYearClaim:
is_a: DocumentClaimType
class_uri: hc:FinancialDocumentYearClaim
description: |
Fiscal year for a financial document (extracted from filename/context).
Extracted from PDF filename or link text.
Format: YYYY (e.g., 2024).
PublicationsUrlClaim:
is_a: DocumentClaimType
class_uri: hc:PublicationsUrlClaim
description: URL to publications page.
JournalNameClaim:
is_a: DocumentClaimType
class_uri: hc:JournalNameClaim
description: Name of journal or periodical published.
DonationUrlClaim:
is_a: DocumentClaimType
class_uri: hc:DonationUrlClaim
description: URL for donation/support page.
# ===========================================================================
# CATEGORY 9: Geographic Claims
# ===========================================================================
GeographicClaimType:
is_a: ClaimType
class_uri: hc:GeographicClaimType
description: |
Claim types for geographic/address components.
More granular than AddressClaim.
comments:
- "Expected locations: contact page, footer, structured data"
StreetAddressClaim:
is_a: GeographicClaimType
class_uri: hc:StreetAddressClaim
description: Street address (straatnaam + huisnummer).
PostalCodeClaim:
is_a: GeographicClaimType
class_uri: hc:PostalCodeClaim
description: |
Postal/ZIP code.
Dutch: postcode (e.g., 1234 AB).
CityClaim:
is_a: GeographicClaimType
class_uri: hc:CityClaim
description: City or municipality name.
MunicipalityClaim:
is_a: GeographicClaimType
class_uri: hc:MunicipalityClaim
description: Municipality/gemeente name.
ProvinceClaim:
is_a: GeographicClaimType
class_uri: hc:ProvinceClaim
description: Province or state.
# ===========================================================================
# CATEGORY 10: Archival Claims
# ===========================================================================
ArchivalClaimType:
is_a: ClaimType
class_uri: hc:ArchivalClaimType
description: |
Claim types specific to archival holdings.
Includes archive and image bank (beeldbank) claims.
comments:
- "Dutch-specific archival terminology"
ArchiefDescriptionClaim:
is_a: ArchivalClaimType
class_uri: hc:ArchiefDescriptionClaim
description: Description of archive/archief holdings.
ArchiefUrlClaim:
is_a: ArchivalClaimType
class_uri: hc:ArchiefUrlClaim
description: URL to archive/archief section.
BeeldbankDescriptionClaim:
is_a: ArchivalClaimType
class_uri: hc:BeeldbankDescriptionClaim
description: Description of image bank/beeldbank.
BeeldbankUrlClaim:
is_a: ArchivalClaimType
class_uri: hc:BeeldbankUrlClaim
description: URL to image bank/beeldbank section.
# ===========================================================================
# CATEGORY 11: Event Claims
# ===========================================================================
EventClaimType:
is_a: ClaimType
class_uri: hc:EventClaimType
description: |
Claim types for event information.
Includes upcoming events and activities.
UpcomingEventClaim:
is_a: EventClaimType
class_uri: hc:UpcomingEventClaim
description: Information about upcoming event.

View file

@ -0,0 +1,130 @@
id: https://nde.nl/ontology/hc/class/ClassificationStatus
name: ClassificationStatus
title: Classification Status Class
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
prov: http://www.w3.org/ns/prov#
schema: http://schema.org/
skos: http://www.w3.org/2004/02/skos/core#
imports:
- linkml:types
- ../slots/has_or_had_type
- ../slots/has_or_had_description
- ../slots/temporal_extent
- ./ClassificationStatusType
- ./ClassificationStatusTypes
- ./TimeSpan
default_prefix: hc
classes:
ClassificationStatus:
class_uri: prov:Activity
description: >-
Structured status of a custodian type classification attempt.
Describes why classification is unspecified, including:
- The type of classification issue (indeterminate, ambiguous, etc.)
- Description of the specific situation
- Temporal context of when status was assessed
**CLASSIFICATION STATUS TYPES**:
| Type | Description |
|------|-------------|
| IndeterminateStatus | Cannot determine from available evidence |
| AmbiguousStatus | Conflicting evidence about institutional function |
| TransitionalStatus | Institution changing type, outcome unclear |
| NovelStatus | Doesn't fit existing taxonomy categories |
| UnderReviewStatus | Classification being researched |
| PendingVerificationStatus | Type suspected but needs confirmation |
**EXAMPLE**:
```yaml
ClassificationStatus:
has_or_had_type:
type: AmbiguousStatus
has_or_had_label: "Ambiguous"
has_or_had_description: "Sources conflict: museum (website) vs archive (ISIL registry)"
temporal_extent:
begin_of_the_begin: "2026-01-19T00:00:00Z"
```
**MIGRATION NOTE (2026-01-19)**:
Created per slot_fixes.yaml revision for classification_status migration.
Replaces simple string with structured class.
exact_mappings:
- prov:Activity
close_mappings:
- schema:StatusEnumeration
slots:
- has_or_had_type
- has_or_had_description
- temporal_extent
slot_usage:
has_or_had_type:
range: ClassificationStatusType
required: true
inlined: true
description: >-
The type of classification status.
One of: IndeterminateStatus, AmbiguousStatus, TransitionalStatus,
NovelStatus, UnderReviewStatus, PendingVerificationStatus.
examples:
- value:
type: IndeterminateStatus
has_or_had_label: "Indeterminate"
description: Cannot determine from available evidence
- value:
type: AmbiguousStatus
has_or_had_label: "Ambiguous"
description: Conflicting evidence about function
has_or_had_description:
range: string
required: true
description: >-
Human-readable description of the classification status.
Explains the specific reason for the status.
examples:
- value: "Type indeterminate - insufficient evidence"
description: Defunct organization, minimal records
- value: "Sources conflict: museum (website) vs archive (ISIL registry)"
description: Ambiguous status with conflicting sources
temporal_extent:
range: TimeSpan
required: false
inlined: true
description: >-
When this classification status was assessed.
annotations:
custodian_types: '["U"]'
custodian_types_rationale: >-
Classification status applies to Unspecified (U) custodian type.
custodian_types_primary: "U"
specificity_score: 0.85
specificity_rationale: >-
Highly specific - only applies to unclassified heritage custodians.
examples:
- value: |
ClassificationStatus:
has_or_had_type:
type: IndeterminateStatus
has_or_had_label: "Indeterminate"
has_or_had_description: "Type indeterminate - insufficient evidence. Defunct organization, minimal records."
description: Indeterminate status for defunct organization
- value: |
ClassificationStatus:
has_or_had_type:
type: AmbiguousStatus
has_or_had_label: "Ambiguous"
has_or_had_description: "Sources conflict: museum (website) vs archive (ISIL registry)"
temporal_extent:
begin_of_the_begin: "2026-01-19T00:00:00Z"
description: Ambiguous status with temporal context
- value: |
ClassificationStatus:
has_or_had_type:
type: TransitionalStatus
has_or_had_label: "Transitional"
has_or_had_description: "Merger in progress between museum and archive, final type TBD"
description: Transitional status during organizational change

View file

@ -0,0 +1,56 @@
id: https://nde.nl/ontology/hc/class/ClassificationStatusType
name: ClassificationStatusType
title: Classification Status Type - Abstract Base Class
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
skos: http://www.w3.org/2004/02/skos/core#
crm: http://www.cidoc-crm.org/cidoc-crm/
imports:
- linkml:types
- ../slots/has_or_had_label
- ../slots/has_or_had_description
default_prefix: hc
classes:
ClassificationStatusType:
abstract: true
class_uri: skos:Concept
description: >-
Abstract base class for classification status types.
**TYPE/TYPES PATTERN (Rule 0b)**:
- This file (ClassificationStatusType.yaml) defines the ABSTRACT base class
- ClassificationStatusTypes.yaml defines CONCRETE subclasses
Classification status types describe why a custodian type could not be
determined or is uncertain:
| Type | Description |
|------|-------------|
| INDETERMINATE | Cannot determine from available evidence |
| AMBIGUOUS | Conflicting evidence about institutional function |
| TRANSITIONAL | Institution changing type, outcome unclear |
| NOVEL | Doesn't fit existing taxonomy categories |
| UNDER_REVIEW | Classification being researched |
| PENDING_VERIFICATION | Type suspected but needs confirmation |
**ONTOLOGY MAPPING**:
Uses SKOS concept taxonomy for type classification.
**MIGRATION NOTE (2026-01-19)**:
Created per slot_fixes.yaml revision for classification_status migration.
exact_mappings:
- skos:Concept
close_mappings:
- crm:E55_Type
slots:
- has_or_had_label
- has_or_had_description
annotations:
custodian_types: '["U"]'
custodian_types_rationale: >-
Classification status types are specific to Unspecified (U) custodian type.
custodian_types_primary: "U"
specificity_score: 0.85
specificity_rationale: >-
Highly specific - only applies to unclassified heritage custodians.

View file

@ -0,0 +1,71 @@
id: https://nde.nl/ontology/hc/class/ClassificationStatusTypes
name: ClassificationStatusTypes
title: Classification Status Types - Concrete Subclasses
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
skos: http://www.w3.org/2004/02/skos/core#
imports:
- linkml:types
- ./ClassificationStatusType
default_prefix: hc
classes:
IndeterminateStatus:
is_a: ClassificationStatusType
class_uri: hc:IndeterminateStatus
description: >-
Classification cannot be determined from available evidence.
Used when research has been attempted but evidence is insufficient.
annotations:
skos:prefLabel: Indeterminate
skos:definition: Type cannot be determined from available evidence
AmbiguousStatus:
is_a: ClassificationStatusType
class_uri: hc:AmbiguousStatus
description: >-
Conflicting evidence about institutional function.
Multiple sources describe the institution differently (e.g., museum vs archive).
annotations:
skos:prefLabel: Ambiguous
skos:definition: Conflicting evidence about institutional function
TransitionalStatus:
is_a: ClassificationStatusType
class_uri: hc:TransitionalStatus
description: >-
Institution is changing type, outcome not yet clear.
Used during mergers, reorganizations, or transformations.
annotations:
skos:prefLabel: Transitional
skos:definition: Institution changing type, outcome unclear
NovelStatus:
is_a: ClassificationStatusType
class_uri: hc:NovelStatus
description: >-
Institution doesn't fit existing taxonomy categories.
May represent new forms of heritage custodianship not yet modeled.
annotations:
skos:prefLabel: Novel
skos:definition: Does not fit existing taxonomy categories
UnderReviewStatus:
is_a: ClassificationStatusType
class_uri: hc:UnderReviewStatus
description: >-
Classification is actively being researched.
Expert review or additional research in progress.
annotations:
skos:prefLabel: Under Review
skos:definition: Classification being researched
PendingVerificationStatus:
is_a: ClassificationStatusType
class_uri: hc:PendingVerificationStatus
description: >-
Type is suspected but needs confirmation.
Initial assessment made but awaiting verification.
annotations:
skos:prefLabel: Pending Verification
skos:definition: Type suspected but needs confirmation

View file

@ -31,7 +31,9 @@ imports:
- ../slots/has_arrangement
# REMOVED 2026-01-18: ../slots/collection_description - migrated to has_or_had_description + Description (Rule 53)
- ../slots/has_or_had_description
- ../slots/collection_id
# REMOVED 2026-01-18: ../slots/collection_id - migrated to has_or_had_identifier + Identifier (Rule 53)
- ../slots/has_or_had_identifier
- ./Identifier
# REMOVED 2026-01-18: ../slots/collection_name - migrated to has_or_had_label + Label (Rule 53)
- ../slots/has_or_had_label
- ./Label
@ -116,7 +118,8 @@ classes:
- has_arrangement
# REMOVED 2026-01-18: collection_description - migrated to has_or_had_description + Description (Rule 53)
- has_or_had_description
- collection_id
# REMOVED 2026-01-18: collection_id - migrated to has_or_had_identifier + Identifier (Rule 53)
- has_or_had_identifier
# REMOVED 2026-01-18: collection_name - migrated to has_or_had_label + Label (Rule 53)
- has_or_had_label
# REMOVED 2026-01-18: collection_type_ref - migrated to is_or_was_categorized_as + CollectionType (Rule 53)
@ -141,12 +144,19 @@ classes:
- has_or_had_content # was: temporal_coverage - migrated per Rule 53/56 (2026-01-16)
- temporal_extent # was: valid_from + valid_to - migrated per Rule 53
slot_usage:
collection_id:
range: uriorcurie
has_or_had_identifier: # was: collection_id - migrated per Rule 53 (2026-01-18)
description: |
MIGRATED from collection_id per slot_fixes.yaml (Rule 53, 2026-01-18).
Unique identifier for this collection using Identifier class.
Use identifier_scheme: COLLECTION_URI for collection URI identifiers.
range: Identifier
inlined: true
required: true
identifier: true
examples:
- value: https://nde.nl/ontology/hc/collection/nationaal-archief-voc-fonds
- value:
identifier_scheme: COLLECTION_URI
identifier_value: "https://nde.nl/ontology/hc/collection/nationaal-archief-voc-fonds"
description: VOC fonds at the National Archives
has_or_had_label: # was: collection_name - migrated per Rule 53/56 (2026-01-18)
description: |
@ -405,7 +415,9 @@ classes:
- https://www.wikidata.org/wiki/Q2668072
examples:
- value:
collection_id: https://nde.nl/ontology/hc/collection/nationaal-archief-voc-fonds
has_or_had_identifier: # was: collection_id - migrated per Rule 53 (2026-01-18)
identifier_scheme: COLLECTION_URI
identifier_value: "https://nde.nl/ontology/hc/collection/nationaal-archief-voc-fonds"
has_or_had_label: # was: collection_name (2026-01-18)
has_or_had_label: Records of the Dutch East India Company (VOC)
has_or_had_description: # was: collection_description (2026-01-18)

View file

@ -13,7 +13,9 @@ imports:
- ./ReconstructedEntity
- ../slots/is_or_was_available # MIGRATED: was ../slots/api_available (2026-01-15)
- ../slots/cms_category
- ../slots/cms_id
# REMOVED 2026-01-18: ../slots/cms_id - migrated to has_or_had_identifier + Identifier (Rule 53)
- ../slots/has_or_had_identifier # was: cms_id - migrated per Rule 53 (2026-01-18)
- ./Identifier
# REMOVED 2026-01-18: ../slots/cms_product_name - migrated to has_or_had_label with Label (type: product_name)
- ../slots/cms_product_version
- ../slots/has_or_had_custodian_type
@ -113,7 +115,7 @@ classes:
slots:
- is_or_was_available # MIGRATED: was api_available (2026-01-15)
- cms_category
- cms_id
- has_or_had_identifier # was: cms_id - migrated per Rule 53 (2026-01-18)
# REMOVED 2026-01-18: cms_product_name - migrated to has_or_had_label with Label (type: product_name)
- cms_product_version
- has_or_had_custodian_type
@ -140,15 +142,32 @@ classes:
- is_or_was_derived_from # was: was_derived_from - migrated per Rule 53
- is_or_was_generated_by # was: was_generated_by - migrated per Rule 53
slot_usage:
cms_id:
range: uriorcurie
has_or_had_identifier: # was: cms_id - migrated per Rule 53 (2026-01-18)
description: |
MIGRATED from cms_id per slot_fixes.yaml (Rule 53, 2026-01-18).
Unique identifier for the CMS deployment.
Uses Identifier class for structured representation with scheme and value.
The identifier scheme should be "CMS_URI" and value should be the full URI.
range: Identifier
inlined: true
required: true
identifier: true
examples:
- value: https://nde.nl/ontology/hc/cms/rijksmuseum-adlib
- value:
identifier_scheme: CMS_URI
identifier_value: "https://nde.nl/ontology/hc/cms/rijksmuseum-adlib"
description: Rijksmuseum's Adlib deployment
- value: https://nde.nl/ontology/hc/cms/nationaal-archief-mais
- value:
identifier_scheme: CMS_URI
identifier_value: "https://nde.nl/ontology/hc/cms/nationaal-archief-mais"
description: National Archives MAIS deployment
cms_id:
description: |
DEPRECATED 2026-01-18: Migrated to has_or_had_identifier slot with Identifier class.
This slot_usage entry retained for documentation only.
See has_or_had_identifier slot_usage for current pattern.
deprecated: "Use has_or_had_identifier with Identifier class"
cms_product_name:
description: |
DEPRECATED 2026-01-18: Migrated to has_or_had_label slot with Label class
@ -365,7 +384,10 @@ classes:
examples:
# Examples updated for migrated slots (Rule 53) - 2026-01-14, 2026-01-16, 2026-01-18
- value:
cms_id: https://nde.nl/ontology/hc/cms/rijksmuseum-adlib
# cms_id migrated to has_or_had_identifier with Identifier class (2026-01-18)
has_or_had_identifier:
identifier_scheme: CMS_URI
identifier_value: "https://nde.nl/ontology/hc/cms/rijksmuseum-adlib"
# cms_product_name migrated to has_or_had_label with type: product_name (2026-01-18)
cms_product_version: '7.4'
cms_category: MUSEUM_CMS
@ -398,7 +420,10 @@ classes:
refers_to_custodian: https://nde.nl/ontology/hc/nl-nh-ams-m-rm-q190804
description: Rijksmuseum Adlib CMS deployment
- value:
cms_id: https://nde.nl/ontology/hc/cms/example-museum-collectiveaccess
# cms_id migrated to has_or_had_identifier with Identifier class (2026-01-18)
has_or_had_identifier:
identifier_scheme: CMS_URI
identifier_value: "https://nde.nl/ontology/hc/cms/example-museum-collectiveaccess"
# cms_product_name migrated to has_or_had_label with type: product_name (2026-01-18)
cms_product_version: 1.8.0
cms_category: MUSEUM_CMS
@ -432,7 +457,10 @@ classes:
refers_to_custodian: https://nde.nl/ontology/hc/example-museum
description: Open-source CollectiveAccess deployment
- value:
cms_id: https://nde.nl/ontology/hc/cms/nationaal-archief-mais
# cms_id migrated to has_or_had_identifier with Identifier class (2026-01-18)
has_or_had_identifier:
identifier_scheme: CMS_URI
identifier_value: "https://nde.nl/ontology/hc/cms/nationaal-archief-mais"
# cms_product_name migrated to has_or_had_label with type: product_name (2026-01-18)
cms_product_version: null
cms_category: ARCHIVE_CMS

View file

@ -14,12 +14,16 @@ imports:
- linkml:types
- ../slots/record_equivalent
# REMOVED: ../slots/bibframe_equivalent - Use LinkML close_mappings instead (2026-01-15)
- ../slots/collection_broader_type
# REMOVED 2026-01-19: ../slots/collection_broader_type - migrated to has_or_had_hypernym + Hypernym (Rule 53)
- ../slots/has_or_had_hypernym
- ./Hypernym
- ../slots/has_or_had_collection_narrower_type
# REMOVED 2026-01-18: ../slots/collection_type_description - migrated to has_or_had_description + Description (Rule 53)
- ../slots/has_or_had_description
- ./Description
- ../slots/collection_type_id
# REMOVED 2026-01-18: ../slots/collection_type_id - migrated to has_or_had_identifier + Identifier (Rule 53)
- ../slots/has_or_had_identifier
- ./Identifier
# REMOVED 2026-01-18: ../slots/collection_type_name - migrated to has_or_had_label + Label (Rule 53)
- ../slots/has_or_had_label
- ./Label
@ -71,11 +75,13 @@ classes:
- dcterms:DCMIType
slots:
# REMOVED: bibframe_equivalent - Use LinkML close_mappings instead (2026-01-15)
- collection_broader_type
# REMOVED 2026-01-19: collection_broader_type - migrated to has_or_had_hypernym + Hypernym (Rule 53)
- has_or_had_hypernym
- has_or_had_collection_narrower_type
# REMOVED 2026-01-18: collection_type_description - migrated to has_or_had_description + Description (Rule 53)
- has_or_had_description
- collection_type_id
# REMOVED 2026-01-18: collection_type_id - migrated to has_or_had_identifier + Identifier (Rule 53)
- has_or_had_identifier
# REMOVED 2026-01-18: collection_type_name - migrated to has_or_had_label + Label (Rule 53)
- has_or_had_label
- has_or_had_custodian_type
@ -85,12 +91,19 @@ classes:
- has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17)
- is_or_was_equivalent_to
slot_usage:
collection_type_id:
range: uriorcurie
has_or_had_identifier: # was: collection_type_id - migrated per Rule 53 (2026-01-18)
description: |
MIGRATED from collection_type_id per slot_fixes.yaml (Rule 53, 2026-01-18).
Unique identifier for this collection type using Identifier class.
Use identifier_scheme: COLLECTION_TYPE_URI for collection type URI identifiers.
range: Identifier
inlined: true
required: true
identifier: true
examples:
- value: https://nde.nl/ontology/hc/collection-type/fonds
- value:
identifier_scheme: COLLECTION_TYPE_URI
identifier_value: "https://nde.nl/ontology/hc/collection-type/fonds"
description: Archival fonds type
has_or_had_label: # was: collection_type_name - migrated per Rule 53/56 (2026-01-18)
description: |
@ -143,10 +156,18 @@ classes:
description: 'Wikidata equivalent: fonds'
- value: Q185583
description: 'Wikidata equivalent: archive collection'
collection_broader_type:
range: CollectionType
has_or_had_hypernym: # was: collection_broader_type - migrated per Rule 53 (2026-01-19)
description: |
MIGRATED from collection_broader_type per slot_fixes.yaml (Rule 53, 2026-01-19).
Parent type in hierarchy using Hypernym class.
Maps to skos:broader for hierarchical relationship.
range: Hypernym
inlined: true
examples:
- value: https://nde.nl/ontology/hc/collection-type/archival-record-set-type
- value:
hypernym_uri: "https://nde.nl/ontology/hc/collection-type/archival-record-set-type"
has_or_had_label:
- label_text: "Archival Record Set Type"
description: SERIES broader type is ArchivalRecordSetType
has_or_had_collection_narrower_type:
range: CollectionType
@ -178,7 +199,9 @@ classes:
- https://www.wikidata.org/wiki/Q1643722
examples:
- value:
collection_type_id: https://nde.nl/ontology/hc/collection-type/fonds
has_or_had_identifier: # was: collection_type_id - migrated per Rule 53 (2026-01-18)
identifier_scheme: COLLECTION_TYPE_URI
identifier_value: "https://nde.nl/ontology/hc/collection-type/fonds"
has_or_had_label: # was: collection_type_name (2026-01-18)
has_or_had_label: Fonds
has_or_had_description: # was: collection_type_description (2026-01-18)
@ -192,7 +215,9 @@ classes:
- https://nde.nl/ontology/hc/collection-type/sub-fonds
description: Archival fonds collection type
- value:
collection_type_id: https://nde.nl/ontology/hc/collection-type/special-collection
has_or_had_identifier: # was: collection_type_id - migrated per Rule 53 (2026-01-18)
identifier_scheme: COLLECTION_TYPE_URI
identifier_value: "https://nde.nl/ontology/hc/collection-type/special-collection"
has_or_had_label: # was: collection_type_name (2026-01-18)
has_or_had_label: Special Collection
has_or_had_description: # was: collection_type_description (2026-01-18)

View file

@ -18,7 +18,10 @@ imports:
- ../slots/has_or_had_model # was: business_model - migrated per Rule 53/56/57 (2026-01-17)
- ./BusinessModel
- ../slots/collection_purpose
- ../slots/commercial_activity
- ../slots/has_or_had_service # was: commercial_activity - migrated per Rule 53/56/57 (2026-01-18)
- ./Service
- ./ServiceType
- ./ServiceTypes
- ../slots/commercial_custodian_subtype
- ../slots/corporate_integration
- ../slots/has_or_had_custodian_type
@ -191,8 +194,11 @@ classes:
, \"Corporate identity\" ;\n hc:corporate_integration \"Fully owned by Heineken N.V.\", \"Marketing department\", \"\
Brand management division\" ;\n hc:public_access \"Daily visitor hours 10:30-19:30\", \"Paid admission\", \"Self-guided\
\ tours\", \"Group bookings available\" ;\n hc:heritage_holdings \"Brewing equipment (1867-present)\", \"Advertising\
\ materials archive\", \"Bottle/label collections\", \"Corporate photography\" ;\n hc:commercial_activities \"Admission\
\ tickets (€21)\", \"Beer tasting experiences\", \"Gift shop\", \"Event venue rental\" ;\n schema:name \"Heineken Experience\"\
\ materials archive\", \"Bottle/label collections\", \"Corporate photography\" ;\n hc:has_or_had_service [\n a hc:Service ;\n\
\ hc:service_name \"Admission tickets\" ;\n hc:price \"€21\" ;\n hc:has_or_had_type hc:CommercialService\n ], [\n\
\ a hc:Service ;\n hc:service_name \"Beer tasting experiences\" ;\n hc:has_or_had_type hc:CommercialService\n ], [\n\
\ a hc:Service ;\n hc:service_name \"Gift shop\" ;\n hc:has_or_had_type hc:CommercialService\n ], [\n\
\ a hc:Service ;\n hc:service_name \"Event venue rental\" ;\n hc:has_or_had_type hc:CommercialService\n ] ;\n schema:name \"Heineken Experience\"\
\ ;\n schema:foundingDate \"1991\" ;\n schema:location \"Stadhouderskade 78, Amsterdam\" ;\n schema:description \"\
Corporate brand heritage center in original Heineken brewery building (1867), showcasing brewing history and brand development\
\ through interactive exhibits and heritage collections\" ;\n schema:url <https://www.heinekenexperience.com/> ;\n\
@ -211,7 +217,7 @@ classes:
slots:
- has_or_had_model # was: business_model - migrated per Rule 53/56 (2026-01-17)
- collection_purpose
- commercial_activity
- has_or_had_service # was: commercial_activity - migrated per Rule 53/56/57 (2026-01-18)
- commercial_custodian_subtype
- corporate_integration
- has_or_had_custodian_type
@ -281,16 +287,41 @@ classes:
description: Ford Motor holdings
- value: Perfume formulas, Bottle designs, Fashion sketches
description: Chanel archive holdings
commercial_activity:
range: string
has_or_had_service: # was: commercial_activity - migrated per Rule 53/56/57 (2026-01-18)
range: Service
inlined: true
multivalued: true
required: false
description: >-
Revenue-generating commercial services offered by the organization.
Uses Service class with CommercialService type for structured representation.
examples:
- value: Admission (€21), Beer tasting, Gift shop, Event rental
description: Heineken Experience activities
- value: Reproductions catalog, Image licensing, Research fees
description: Corporate archive activities
- value: Corporate events, Weddings, Conference space
description: Company museum activities
- value:
service_name: "Admission tickets"
service_description: "Paid entry to heritage experience"
price: "€21"
has_or_had_type: CommercialService
description: Heineken Experience admission
- value:
service_name: "Beer tasting experience"
service_description: "Guided tasting of Heineken products"
price: "Included in admission"
has_or_had_type: CommercialService
description: Heineken tasting service
- value:
service_name: "Gift shop"
service_description: "Branded merchandise and reproductions"
has_or_had_type: CommercialService
description: Retail service
- value:
service_name: "Event venue rental"
service_description: "Corporate events, weddings, conferences"
has_or_had_type: CommercialService
description: Event rental service
- value:
service_name: "Image licensing"
service_description: "Rights for reproduction of archival materials"
has_or_had_type: CommercialService
description: Corporate archive licensing service
has_or_had_custodian_type:
equals_expression: '["hc:CommercialOrganizationType"]'

View file

@ -1,4 +1,8 @@
# Condition - Condition class
#
# Migration: condition_description → has_or_had_description (2026-01-18, Rule 53)
# Per slot_fixes.yaml revision for condition_description
#
id: https://nde.nl/ontology/hc/class/Condition
name: Condition
prefixes:
@ -7,8 +11,10 @@ prefixes:
schema: http://schema.org/
imports:
- ./ConditionType
- ./Description
- linkml:types
- ../slots/has_or_had_type
- ../slots/has_or_had_description
classes:
Condition:
class_uri: schema:OfferItemCondition
@ -21,15 +27,27 @@ classes:
Maps to schema:OfferItemCondition for interoperability with general
item condition vocabularies.
**Migration (2026-01-18)**:
- `condition_description` (inline attribute) → `has_or_had_description` slot with `Description` range
- Per slot_fixes.yaml (Rule 53, 56)
slots:
- has_or_had_type
- has_or_had_description # was: condition_description (inline) - migrated per Rule 53 (2026-01-18)
slot_usage:
has_or_had_type:
range: ConditionType
has_or_had_description: # was: condition_description - migrated per Rule 53 (2026-01-18)
range: Description
description: |
Textual description of the condition state.
MIGRATED from inline condition_description attribute per slot_fixes.yaml (Rule 53, 2026-01-18).
examples:
- value:
description_text: "Good physical condition with minor wear"
description_type: condition
description: Condition description using Description class
attributes:
condition_description:
description: Textual description of the condition state
range: string
condition_date:
description: Date when the condition was assessed
range: date

View file

@ -21,7 +21,10 @@ imports:
- ../slots/object_ref
- ../slots/condition_after
- ../slots/condition_before
- ../slots/condition_description
- ../slots/has_or_had_condition # was: condition_description - migrated per Rule 53 (2026-01-18)
- ./Condition
- ./Description
- ../slots/has_or_had_description
- ../slots/conservation_note
- ../slots/conservator
- ../slots/conservator_affiliation
@ -84,7 +87,7 @@ classes:
slots:
- condition_after
- condition_before
- condition_description
- has_or_had_condition # was: condition_description - migrated per Rule 53 (2026-01-18)
- conservation_lab
- conservation_note
- conservator
@ -159,13 +162,28 @@ classes:
examples:
- value: EXCELLENT
description: After cleaning and restoration
condition_description:
has_or_had_condition: # was: condition_description - migrated per Rule 53 (2026-01-18)
required: false
range: string
range: Condition
multivalued: true
inlined_as_list: true
description: |
Structured condition assessment for this conservation record.
MIGRATED from condition_description per slot_fixes.yaml (Rule 53, 2026-01-18).
Uses Condition class with has_or_had_description for textual descriptions.
examples:
- value: "The varnish had yellowed significantly, obscuring the delicate \ntonal gradations. Surface dirt accumulation\
\ in lower quadrant.\nOld retouching visible under UV light in background area.\nCanvas stable with no active\
\ distortions.\n"
- value:
has_or_had_type: FAIR
has_or_had_description:
description_text: "The varnish had yellowed significantly, obscuring the delicate tonal gradations. Surface dirt accumulation in lower quadrant. Old retouching visible under UV light in background area. Canvas stable with no active distortions."
description_type: condition
description: Condition assessment with structured description
- value:
has_or_had_type: GOOD
has_or_had_description:
description_text: "Minor surface dirt, varnish slightly yellowed but acceptable."
description_type: condition
description: Minor condition issues
has_or_had_treatment: # was: treatment_description - migrated per Rule 53
required: false
range: Treatment
@ -359,9 +377,11 @@ classes:
end_of_the_end: '1994-09-30'
condition_before: FAIR
condition_after: EXCELLENT
condition_description: "The painting's varnish had yellowed significantly over time, \nobscuring the delicate tonal\
\ gradations that are characteristic \nof Vermeer's technique. Surface dirt had accumulated, particularly \nin the\
\ lower portion. Previous restorations from the early 20th \ncentury were visible under UV examination.\n"
has_or_had_condition: # was: condition_description - migrated per Rule 53 (2026-01-18)
- has_or_had_type: FAIR
has_or_had_description:
description_text: "The painting's varnish had yellowed significantly over time, obscuring the delicate tonal gradations that are characteristic of Vermeer's technique. Surface dirt had accumulated, particularly in the lower portion. Previous restorations from the early 20th century were visible under UV examination."
description_type: condition
has_or_had_treatment: # was: treatment_description - migrated per Rule 53
- treatment_type: RESTORATION
treatment_description: "Comprehensive restoration including: removal of discolored varnish \nusing carefully calibrated\
@ -412,8 +432,11 @@ classes:
record_type: LOAN_CONDITION_CHECK
record_date: '2023-02-09'
condition_before: EXCELLENT
condition_description: "Pre-loan condition check for Vermeer 2023 exhibition at Rijksmuseum.\nPainting in excellent\
\ stable condition. No changes from previous \nexamination. Surface clean, varnish clear, frame secure.\n"
has_or_had_condition: # was: condition_description - migrated per Rule 53 (2026-01-18)
- has_or_had_type: EXCELLENT
has_or_had_description:
description_text: "Pre-loan condition check for Vermeer 2023 exhibition at Rijksmuseum. Painting in excellent stable condition. No changes from previous examination. Surface clean, varnish clear, frame secure."
description_type: condition
related_loan: https://nde.nl/ontology/hc/loan/mauritshuis-rijksmuseum-2023-001
conservator:
- Abbie Vandivere
@ -431,13 +454,11 @@ classes:
record_type: EXAMINATION
record_date: '2019-07-08'
condition_before: GOOD
condition_description: 'Comprehensive technical examination as part of Operation Night Watch.
Canvas shows historical damage from 1715 trimming and 1911/1975 attacks.
Paint layer stable with localized losses. Varnish slightly yellowed.
'
has_or_had_condition: # was: condition_description - migrated per Rule 53 (2026-01-18)
- has_or_had_type: GOOD
has_or_had_description:
description_text: "Comprehensive technical examination as part of Operation Night Watch. Canvas shows historical damage from 1715 trimming and 1911/1975 attacks. Paint layer stable with localized losses. Varnish slightly yellowed."
description_type: condition
has_or_had_examination_method:
- X-RADIOGRAPHY
- MACRO_XRF_SCANNING

View file

@ -1,6 +1,7 @@
# CustodianLegalNameClaim - Legal name claim with provenance
# Extracted from custodian_source.yaml per Rule 38 (modular schema files)
# Extraction date: 2026-01-08
# MIGRATION 2026-01-19: claim_type → has_or_had_type + ClaimType (Rule 53/56)
id: https://nde.nl/ontology/hc/classes/CustodianLegalNameClaim
name: CustodianLegalNameClaim
@ -16,7 +17,10 @@ prefixes:
imports:
- linkml:types
# ADDED 2026-01-19: claim_type migration (Rule 53/56)
- ../slots/has_or_had_type
- ./ClaimType
- ./ClaimTypes
default_range: string
@ -36,10 +40,19 @@ classes:
- prov:Entity
related_mappings:
- schema:legalName
slots:
- has_or_had_type
slot_usage:
has_or_had_type:
range: ClaimType
inlined: true
required: false
description: |
MIGRATED from claim_type per slot_fixes.yaml (Rule 53/56, 2026-01-19).
Type of claim (always "legal_name" for this class).
Uses ClaimType class hierarchy.
attributes:
claim_type:
range: string
description: Type of claim (legal_name)
# REMOVED 2026-01-19: claim_type - migrated to has_or_had_type slot (Rule 53/56)
claim_value:
range: string
required: true

View file

@ -55,7 +55,7 @@ imports:
- ../slots/is_or_was_generated_by # was: was_generated_by - migrated per Rule 53
- ../slots/is_or_was_revision_of # was: was_revision_of - migrated per Rule 53 (2026-01-15)
- ../slots/identifier
- ../slots/collections_under_responsibility
- ../slots/is_or_was_responsible_for # was: collections_under_responsibility - migrated per Rule 53 (2026-01-19)
- ../slots/has_articles_of_association
- ../slots/registration_date
- ../slots/specificity_annotation
@ -112,7 +112,7 @@ classes:
- bf:Organization
- bibframe:Agent
slots:
- collections_under_responsibility
- is_or_was_responsible_for # was: collections_under_responsibility - migrated per Rule 53 (2026-01-19)
- dissolution_date
- governance_structure
- has_articles_of_association
@ -142,6 +142,20 @@ classes:
examples:
- value: https://nde.nl/ontology/hc/nl-nh-ams-m-rm-q190804
description: References the Rijksmuseum custodian hub
is_or_was_responsible_for: # was: collections_under_responsibility - migrated per Rule 53 (2026-01-19)
range: LegalResponsibilityCollection
multivalued: true
description: |
Collections (informatieobjecten) for which this legal entity bears formal legal responsibility.
MIGRATED from collections_under_responsibility per slot_fixes.yaml (Rule 53, 2026-01-19).
examples:
- value: |
- https://nde.nl/ontology/hc/collection/rm-national-collection
- https://nde.nl/ontology/hc/collection/rm-library
description: Rijksmuseum foundation responsible for National Collection and Library
- value: |
- https://nde.nl/ontology/hc/collection/nha-provincial-archive
description: Noord-Hollands Archief responsible for Provincial Archive
legal_entity_type:
range: LegalEntityType
required: true

View file

@ -1,6 +1,7 @@
# CustodianNameConsensus - Consensus determination of custodian name
# Extracted from custodian_source.yaml per Rule 38 (modular schema files)
# Extraction date: 2026-01-08
# MIGRATION 2026-01-19: claim_type → has_or_had_type + ClaimType (Rule 53/56)
id: https://nde.nl/ontology/hc/classes/CustodianNameConsensus
name: CustodianNameConsensus
@ -16,12 +17,14 @@ prefixes:
imports:
- linkml:types
- ./AlternativeName
- ./FormerName
- ./MatchingSource
- ./MergeNote
# ADDED 2026-01-19: claim_type migration (Rule 53/56)
- ../slots/has_or_had_type
- ./ClaimType
- ./ClaimTypes
default_range: string
classes:
@ -41,10 +44,19 @@ classes:
- skos:Concept
related_mappings:
- schema:name
slots:
- has_or_had_type
slot_usage:
has_or_had_type:
range: ClaimType
inlined: true
required: false
description: |
MIGRATED from claim_type per slot_fixes.yaml (Rule 53/56, 2026-01-19).
Type of claim (always "custodian_name" for this class).
Uses ClaimType class hierarchy.
attributes:
claim_type:
range: string
description: Always "custodian_name"
# REMOVED 2026-01-19: claim_type - migrated to has_or_had_type slot (Rule 53/56)
claim_value:
range: string
description: Determined name

View file

@ -0,0 +1,124 @@
# DeceasedStatus class
# Structured representation of a person's death status and circumstances
#
# Migration: Created per slot_fixes.yaml revision for circumstances_of_death (line 9369)
#
# Generation date: 2026-01-19
# Rule compliance: 38 (slot centralization), 39 (RiC-O naming), 53 (slot_fixes.yaml)
id: https://nde.nl/ontology/hc/class/DeceasedStatus
name: deceased_status_class
title: Deceased Status Class
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
prov: http://www.w3.org/ns/prov#
crm: http://www.cidoc-crm.org/cidoc-crm/
default_prefix: hc
imports:
- linkml:types
- ../metadata
- ../slots/is_or_was_caused_by
- ../slots/temporal_extent
- ../slots/has_or_had_description
- ./CauseOfDeath
- ./TimeSpan
classes:
DeceasedStatus:
class_uri: schema:DeathEvent
description: |
Structured representation of a person's death status and circumstances.
**Purpose**:
Captures comprehensive information about a person's death, replacing the
simple `circumstances_of_death` string with structured data:
- **Cause**: Why/how the person died (CauseOfDeath class)
- **Temporal**: When the death occurred (TimeSpan for fuzzy dates)
- **Narrative**: Detailed description of circumstances
**Ontological Alignment**:
- **Primary** (`class_uri`): `schema:DeathEvent` - Schema.org death event
- **Related**: `crm:E69_Death` - CIDOC-CRM death event
- **Related**: `prov:End` - PROV-O activity end
**Heritage Sector Context**:
Critical for documenting:
- Heritage workers killed during armed conflicts (Gaza, Ukraine, Syria, etc.)
- Targeted attacks on cultural institutions and their staff
- Historical figures in the heritage sector
- Occupational hazards and accidents
**Privacy Considerations**:
- For recently deceased individuals, verify with institution before publishing
- Public figures and historical staff can generally be documented
- Follow local privacy laws and institutional policies
- Handle with respect and dignity
**Example - Conflict Death**:
```yaml
is_deceased:
is_or_was_caused_by:
cause_type: CONFLICT
has_or_had_description: |
Killed in Israeli airstrike on his home in Gaza City.
He was a journalist and information professional at Press House.
has_or_had_location:
city: Gaza City
country: PS
temporal_extent:
begin_of_the_begin: "2023-11-19T00:00:00Z"
end_of_the_end: "2023-11-19T23:59:59Z"
has_or_had_description: |
Additional commemorative information and sources documenting
the death of this heritage worker.
```
exact_mappings:
- schema:DeathEvent
close_mappings:
- crm:E69_Death
related_mappings:
- prov:End
slots:
- is_or_was_caused_by
- temporal_extent
- has_or_had_description
slot_usage:
is_or_was_caused_by:
range: CauseOfDeath
inlined: true
description: |
The cause of death, using the CauseOfDeath class for structured
documentation of cause type, location, and narrative.
temporal_extent:
range: TimeSpan
inlined: true
description: |
The date/time of death. Uses TimeSpan to handle uncertainty,
particularly important for deaths during conflict where exact
dates may be unknown.
has_or_had_description:
range: string
description: |
Additional narrative description of the death circumstances,
commemorative information, or source documentation.
comments:
- "Structured death information for heritage workers"
- "Replaces simple circumstances_of_death string"
- "Uses CauseOfDeath for structured cause documentation"
- "Uses TimeSpan for fuzzy death dates (important for conflict situations)"
- "Handle with respect and verify facts before documenting"
see_also:
- https://schema.org/deathDate
- https://www.cidoc-crm.org/Entity/e69-death/version-7.1.1

View file

@ -0,0 +1,74 @@
id: https://nde.nl/ontology/hc/class/ExtractionMethod
name: ExtractionMethod
title: ExtractionMethod Class - Methods for Data Extraction
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
prov: http://www.w3.org/ns/prov#
nif: http://persistence.uni-leipzig.org/nlp2rdf/ontologies/nif-core#
imports:
- linkml:types
- ../slots/has_or_had_label
- ./Label
default_prefix: hc
classes:
ExtractionMethod:
class_uri: prov:SoftwareAgent
description: |
A method or technique used to extract data from a source.
Extraction methods define HOW data was obtained, providing
transparency and reproducibility for claim provenance.
**Common Extraction Methods**:
- `xpath_exact_match`: XPath query with exact text match
- `xpath_fuzzy_match`: XPath query with fuzzy text matching
- `text_search`: Full-text search within document
- `css_selector`: CSS selector for element location
- `json_ld_parse`: Parsing structured JSON-LD data
- `regex_pattern`: Regular expression pattern matching
- `nlp_ner`: Named Entity Recognition via NLP
- `manual_annotation`: Human annotator extraction
**Ontology Mapping Rationale**:
- class_uri is prov:SoftwareAgent because extraction methods
are typically software-based agents that perform extraction
- close_mappings includes nif:Context as NIF models text
extraction contexts and methods
**MIGRATION NOTE (2026-01-19)**:
Created per slot_fixes.yaml revision for claim_extraction_method
slot migration (Rule 53/56).
exact_mappings:
- prov:SoftwareAgent
close_mappings:
- nif:Context
- schema:HowTo
slots:
- has_or_had_label
slot_usage:
has_or_had_label:
description: |
The name/identifier of the extraction method.
Examples: "xpath_exact_match", "nlp_ner", "json_ld_parse"
range: Label
inlined: true
required: true
comments:
- 'CREATED 2026-01-19: Per slot_fixes.yaml revision (Rule 53/56)'
- Replaces string-valued claim_extraction_method slot
- Enables structured representation of extraction techniques
examples:
- value:
has_or_had_label:
has_or_had_label: xpath_exact_match
description: XPath extraction with exact text matching
- value:
has_or_had_label:
has_or_had_label: nlp_ner
description: Named Entity Recognition extraction
- value:
has_or_had_label:
has_or_had_label: json_ld_parse
description: Structured data extraction from JSON-LD

View file

@ -14,7 +14,8 @@ imports:
- ../slots/temporal_extent # was: valid_from + valid_to - migrated per Rule 53
- ./TimeSpan
# REMOVED 2026-01-14: valid_from + valid_to - migrated to temporal_extent (Rule 53)
- ../slots/classifies_place
# classifies_place REMOVED - migrated to classifies_or_classified (Rule 53, 2026-01-19)
- ../slots/classifies_or_classified
- ../slots/has_or_had_custodian_type
- ../slots/feature_description
- ../slots/feature_language
@ -62,7 +63,8 @@ classes:
- dcterms:Location
- geo:Feature
slots:
- classifies_place
# classifies_place REMOVED - migrated to classifies_or_classified (Rule 53, 2026-01-19)
- classifies_or_classified
- has_or_had_custodian_type
- feature_description
- feature_language
@ -111,7 +113,11 @@ classes:
description: Museum building characteristics
- value: 17th-century canal mansion with ornate gable facade
description: Mansion architectural features
classifies_place:
# classifies_place REMOVED - migrated to classifies_or_classified (Rule 53, 2026-01-19)
classifies_or_classified:
description: >-
Link to the CustodianPlace that this feature type classifies.
MIGRATED from classifies_place per slot_fixes.yaml (Rule 53, 2026-01-19).
range: CustodianPlace
required: true
examples:
@ -168,7 +174,7 @@ classes:
feature_language: nl
feature_description: Neo-Gothic museum building designed by P.J.H. Cuypers, opened 1885
feature_note: Rijksmonument, national heritage building
classifies_place: https://nde.nl/ontology/hc/place/rijksmuseum-ams
classifies_or_classified: https://nde.nl/ontology/hc/place/rijksmuseum-ams # was: classifies_place - migrated per Rule 53
is_or_was_derived_from: # was: was_derived_from - migrated per Rule 53
- https://w3id.org/heritage/observation/heritage-register-entry
is_or_was_generated_by: # was: was_generated_by - migrated per Rule 53 https://w3id.org/heritage/activity/feature-classification-2025
@ -180,7 +186,7 @@ classes:
feature_language: en
feature_description: 17th-century patrician mansion with ornate gable facade
feature_note: Classified as mansion based on architectural survey
classifies_place: https://nde.nl/ontology/hc/place/herenhuis-schilderswijk
classifies_or_classified: https://nde.nl/ontology/hc/place/herenhuis-schilderswijk # was: classifies_place - migrated per Rule 53
is_or_was_derived_from: # was: was_derived_from - migrated per Rule 53
- https://w3id.org/heritage/observation/notarial-deed-1850
valid_from: '1650-01-01'
@ -190,7 +196,7 @@ classes:
feature_name: Medieval parish church
feature_language: en
feature_description: Gothic church building with 14th-century tower
classifies_place: https://nde.nl/ontology/hc/place/oude-kerk-ams
classifies_or_classified: https://nde.nl/ontology/hc/place/oude-kerk-ams # was: classifies_place - migrated per Rule 53
is_or_was_derived_from: # was: was_derived_from - migrated per Rule 53
- https://w3id.org/heritage/observation/church-archive-catalog
valid_from: '1306-01-01'

View file

@ -48,7 +48,7 @@ imports:
# REMOVED 2026-01-18: ../slots/claim_id - migrated to has_or_had_identifier + Identifier (Rule 53)
- ../slots/has_or_had_identifier
- ./Identifier
- ../slots/claim_type
# REMOVED 2026-01-19: ../slots/claim_type - migrated to has_or_had_type + ClaimType (Rule 53)
# REMOVED 2026-01-18: ../slots/claim_value - migrated to has_or_had_content + Content (Rule 53) - import via WebClaim
- ../slots/source_url
- ../slots/has_or_had_label # was: title - migrated per Rule 53
@ -61,6 +61,7 @@ imports:
# - ../slots/publication_date # ARCHIVED 2026-01-17 - migrated per Rule 53/56
- ../slots/is_or_was_published_at # was: publication_date - migrated per Rule 53/56 (2026-01-17)
- ./PublicationEvent # for is_or_was_published_at range
- ./Quantity # for has_or_had_quantity range (was: claims_count) - added 2026-01-19
- ../slots/isbn
- ../slots/has_or_had_access_condition
- ../slots/is_or_was_access_restricted
@ -71,7 +72,7 @@ imports:
- ../slots/card_title
- ../slots/card_title_en
- ../slots/card_url
- ../slots/claims_count
- ../slots/has_or_had_quantity # was: claims_count - migrated per Rule 53 (2026-01-19)
- ../slots/colonial
- ../slots/content_block
- ../slots/crawler_version
@ -801,7 +802,7 @@ classes:
'
slots:
- claims_count
- has_or_had_quantity # was: claims_count - migrated per Rule 53 (2026-01-19)
- crawler_version
- date_retrieved
- extraction_method
@ -822,8 +823,19 @@ classes:
required: true
source_url:
range: uri
claims_count:
range: integer
has_or_had_quantity: # was: claims_count - migrated per Rule 53 (2026-01-19)
range: Quantity
inlined: true
description: |
Number of claims extracted during this retrieval.
MIGRATED 2026-01-19: Replaces claims_count integer with structured Quantity.
Use quantity_type: CLAIM_COUNT for claim counts.
examples:
- value:
quantity_value: 47
quantity_type: CLAIM_COUNT
has_or_had_description: "Web claims extracted from finding aid page"
description: Claim count with structured quantity
has_or_had_status:
range: ValidationStatus
required: false

View file

@ -0,0 +1,90 @@
# GenerationEvent - Event representing the generation/creation of something
#
# Created per slot_fixes.yaml migration for: chapters_generated_at
# Revision specifies: GenerationEvent with has_or_had_provenance + temporal_extent
# Creation date: 2026-01-19
id: https://nde.nl/ontology/hc/class/GenerationEvent
name: generation_event_class
title: Generation Event Class
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
prov: http://www.w3.org/ns/prov#
schema: http://schema.org/
imports:
- linkml:types
- ../slots/has_or_had_provenance
- ./Provenance
- ../slots/temporal_extent
- ./TimeSpan
- ../slots/has_or_had_description
default_prefix: hc
classes:
GenerationEvent:
description: >-
An event representing the generation or creation of an entity.
**USAGE**:
Used for tracking when and how something was generated, including:
- Video chapter generation (manual, AI, imported)
- Content extraction events
- Automated processing activities
**STRUCTURE**:
- temporal_extent: When the generation occurred (TimeSpan)
- has_or_had_provenance: Who/what performed the generation (Provenance)
- has_or_had_description: Details about the generation process
**ONTOLOGY ALIGNMENT**:
- Maps to prov:Generation (PROV-O generation event)
- Also maps to schema:CreateAction (Schema.org action)
class_uri: prov:Generation
exact_mappings:
- prov:Generation
close_mappings:
- schema:CreateAction
slots:
- temporal_extent
- has_or_had_provenance
- has_or_had_description
slot_usage:
temporal_extent:
description: When the generation event occurred
range: TimeSpan
required: false
inlined: true
examples:
- value:
begin_of_the_begin: "2024-01-15T10:30:00Z"
end_of_the_end: "2024-01-15T10:30:00Z"
description: Point-in-time generation event
has_or_had_provenance:
description: Provenance information about who/what generated the entity
range: Provenance
required: false
inlined: true
examples:
- value:
has_or_had_agent:
has_or_had_type: SOFTWARE
has_or_had_name: "YouTube Auto-Chapters"
description: AI-generated chapters
has_or_had_description:
description: Additional details about the generation process
range: string
required: false
examples:
- value: "Generated using Whisper transcript segmentation"
description: Description of generation method

View file

@ -74,10 +74,15 @@ imports:
- ../slots/is_or_was_published_at # was: publication_activity - migrated per Rule 53/56 (2026-01-18)
- ./PublicationEvent # for is_or_was_published_at range
- ./TimeSpan # for PublicationEvent.temporal_extent
- ../slots/collecting_scope
- ../slots/has_or_had_scope # was: collecting_scope - migrated per Rule 53 (2026-01-19)
- ./CollectionScope # for has_or_had_scope range
- ../slots/has_or_had_program # was: volunteer_program - migrated per Rule 53
- ./Program
- ../slots/community_engagement
# - ../slots/community_engagement # ARCHIVED 2026-01-19 - migrated per Rule 53
- ../slots/has_or_had_activity # was: community_engagement - migrated per Rule 53 (2026-01-19)
- ./Activity # for has_or_had_activity range
- ./ActivityType
- ./ActivityTypes # includes CommunityEngagementActivityType
- ../slots/heritage_society_subtype
- ../slots/has_or_had_custodian_type
- ../slots/has_or_had_program
@ -449,64 +454,15 @@ classes:
begin_of_the_end: null
end_of_the_end: null
description: Numismatic society with print journal and digital newsletter
collecting_scope:
description: "Scope and nature of the society's collecting activities and holdings.\n\nCollection Types:\n- Objects:\
\ Physical artifacts relevant to society focus\n - Numismatics: Coins, banknotes, medals, tokens\n - Philately:\
\ Stamps, covers, postal history materials\n - Ephemera: Postcards, trade cards, advertisements, labels\n - Memorabilia:\
\ Historical objects, souvenirs, commemorative items\n- Archival materials: Documents, photographs, manuscripts\n\
\ - Local records: Parish registers, council minutes, maps\n - Family papers: Letters, diaries, genealogical records\n\
\ - Business records: Company archives, ledgers, correspondence\n - Visual materials: Photographs, postcards,\
\ prints, drawings\n- Library materials: Books, journals, reference works\n - Specialized libraries: Numismatic,\
\ philatelic, genealogical reference\n - Local history: Books about the region, town, neighborhood\n - Periodicals:\
\ Runs of heritage journals, newsletters\n\nCollecting Policies:\n- Focused collecting: Narrowly defined scope (e.g.,\
\ Dutch maritime coins 1600-1800)\n- Broad collecting: Wide scope (e.g., all aspects of town history)\n- Passive\
\ collecting: Accepting donations, no active acquisition\n- Active collecting: Targeted purchases, exchanges with\
\ other societies\n\nCollection Size:\n- Small (< 500 items): Typical for local history societies\n- Medium (500-10,000\
\ items): Regional societies, specialized collectors\n- Large (10,000+ items): Major numismatic societies, genealogical\
\ libraries\n\nCollection Management:\n- Cataloging: Inventories, databases, online catalogs\n- Storage: Cabinets,\
\ albums, archival boxes, climate control\n- Conservation: Basic preservation, professional conservation for important\
\ items\n- Access: Members-only, by appointment, exhibitions, digital access\n\nCollection Strengths:\n- Unique\
\ materials: Items not held elsewhere\n- Comprehensive coverage: Complete runs, full series\n- Research value: Supporting\
\ genealogy, numismatics, local history research\n\nExamples:\n- \"5,000 photographs of Leiden 1850-2000; 200 linear\
\ meters local archives\"\n- \"12,000 Dutch coins and medals; 500 reference books on numismatics\"\n- \"Genealogical\
\ library with 3,000 family histories; microfilm of vital records\"\n- \"Small collection of 200 railway memorabilia\
\ items; focus on oral history\"\n\nThis field describes what the society collects and preserves.\n"
range: string
multivalued: true
slot_uri: schema:additionalProperty
community_engagement:
description: "Community outreach, public programs, and engagement activities.\n\nRegular Programs:\n- Membership meetings:\
\ Monthly, quarterly, or annual gatherings\n - Lecture series: Guest speakers on heritage topics\n - Show-and-tell:\
\ Members sharing finds, research, collections\n - Business meetings: Society governance, planning\n- Field trips:\
\ Site visits, museum tours, heritage walks\n - Local heritage walks: Guided tours of historic neighborhoods\n\
\ - Archival visits: Group trips to regional archives\n - Collector conventions: Attending numismatic, philatelic\
\ shows\n- Workshops: Skill-building sessions for members\n - Genealogy workshops: Research techniques, database\
\ training\n - Conservation: Basic preservation for photographs, documents\n - Identification: Coin dating, stamp\
\ identification, artifact analysis\n\nPublic Engagement:\n- Open houses: Public days at society headquarters\n\
- Exhibitions: Displaying society collections\n - Small exhibitions: In society premises or local library\n -\
\ Loan exhibitions: Lending items to museums, libraries\n - Virtual exhibitions: Online galleries, digital showcases\n\
- School programs: Educational outreach to local schools\n - Heritage talks: Visiting classrooms\n - Student projects:\
\ Supporting local history assignments\n - Internships: Hosting students from history programs\n- Community events:\
\ Participating in heritage days, festivals\n - Heritage open days: National/regional heritage weekends\n - Town\
\ anniversaries: Contributing to local celebrations\n - Memorial events: Commemorations, monument dedications\n\
\nDigital Engagement:\n- Websites: Society information, collections databases\n- Social media: Facebook, Twitter,\
\ Instagram presence\n- Online forums: Discussion groups for members\n- Virtual meetings: Zoom lectures during COVID\
\ and beyond\n- Digital collections: Online access to photographs, documents\n\nPartnerships:\n- Local government:\
\ Heritage commissions, historic preservation offices\n- Museums: Collaborations on exhibitions, loans, research\n\
- Libraries: Depositing publications, co-hosting events\n- Universities: Supporting student research, academic partnerships\n\
- Other societies: Regional/national networks, joint conferences\n\nAdvocacy:\n- Historic preservation: Advocating\
\ for building conservation\n- Heritage education: Promoting heritage in schools\n- Policy engagement: Commenting\
\ on heritage legislation\n- Fundraising: Seeking grants, donations for heritage projects\n\nExamples:\n- \"Monthly\
\ lectures (Sept-June); annual heritage walk; semi-annual exhibitions\"\n- \"Active social media (500+ Facebook\
\ followers); monthly newsletter; quarterly journal\"\n- \"Annual open house during heritage weekend; school programs\
\ on local history\"\n- \"Limited public engagement; mostly internal meetings and publications\"\n\nThis field describes\
\ how the society connects with broader communities.\n"
range: string
multivalued: true
slot_uri: schema:event
# collecting_scope attribute ARCHIVED 2026-01-19 - migrated to has_or_had_scope per Rule 53
# See slot_usage.has_or_had_scope for structured CollectionScope-based approach
# community_engagement attribute ARCHIVED 2026-01-19 - migrated to has_or_had_activity per Rule 53
# See slot_usage.has_or_had_activity for structured Activity-based approach
slots:
- has_or_had_custodian_type
- has_or_had_program # was: volunteer_program - migrated per Rule 53
- has_or_had_activity # was: community_engagement - migrated per Rule 53 (2026-01-19)
- has_or_had_scope # was: collecting_scope - migrated per Rule 53 (2026-01-19)
- specificity_annotation
- has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17)
slot_usage:
@ -529,3 +485,94 @@ classes:
program_name: Heritage Volunteer Program
program_type: VOLUNTEER
description: All-volunteer organization managing collections and events
has_or_had_activity:
description: |
Community outreach, public programs, and engagement activities.
MIGRATED from community_engagement (string list) per Rule 53 (2026-01-19).
Each Activity instance captures structured engagement data using:
- has_activity_name: Activity name (e.g., "Monthly Lecture Series")
- has_or_had_activity_type: CommunityEngagementActivityType
- has_timespan: When activities occur (using TimeSpan)
- has_activity_description: Detailed description
Activity Types Covered:
- Membership meetings: Monthly, quarterly, annual gatherings
- Lecture series: Guest speakers on heritage topics
- Field trips: Site visits, museum tours, heritage walks
- Workshops: Genealogy, conservation, identification skills
- Public events: Open houses, exhibitions, school programs
- Digital engagement: Websites, social media, virtual meetings
- Advocacy: Historic preservation, policy engagement
- Partnerships: Collaborations with government, museums, universities
range: Activity
multivalued: true
inlined: true
inlined_as_list: true
examples:
- value:
- has_activity_identifier: https://nde.nl/ontology/hc/activity/oud-leiden-lectures-2025
has_activity_name: "Monthly Lecture Series (Sept-June)"
has_or_had_activity_type:
- CommunityEngagementActivityType
has_activity_description: |
Monthly evening lectures on local history topics, featuring
guest speakers from academia, museums, and member experts.
has_timespan:
start_date: "2024-09-01"
end_date: "2025-06-30"
status: "IN_PROGRESS"
- has_activity_identifier: https://nde.nl/ontology/hc/activity/oud-leiden-walk-2025
has_activity_name: "Annual Heritage Walk"
has_or_had_activity_type:
- CommunityEngagementActivityType
has_activity_description: |
Annual guided heritage walk through historic Leiden neighborhoods.
Open to public, attracts 50-100 participants.
has_timespan:
start_date: "2025-05-15"
end_date: "2025-05-15"
status: "PLANNED"
description: Heritage society with lecture series and annual heritage walk
has_or_had_scope:
description: |
Scope and nature of the society's collecting activities and holdings.
MIGRATED from collecting_scope (string list) per Rule 53 (2026-01-19).
Uses CollectionScope class to capture structured scope information:
- scope_description: Overall description of collecting scope
- scope_type: Type discriminator ("collection_scope", "archival_scope", etc.)
- subject_coverage: Subject areas (numismatics, local history, etc.)
- temporal_coverage_description: Time period covered
- spatial_coverage: Geographic scope
Collection Types:
- Objects: Physical artifacts (coins, stamps, ephemera, memorabilia)
- Archival materials: Documents, photographs, manuscripts
- Library materials: Books, journals, reference works
Collecting Policies:
- Focused collecting: Narrowly defined scope (e.g., Dutch maritime coins 1600-1800)
- Broad collecting: Wide scope (e.g., all aspects of town history)
- Passive collecting: Accepting donations, no active acquisition
- Active collecting: Targeted purchases, exchanges
range: CollectionScope
multivalued: true
inlined: true
inlined_as_list: true
examples:
- value:
- scope_description: "5,000 photographs of Leiden 1850-2000; 200 linear meters local archives"
scope_type: archival_scope
subject_coverage:
- "Local history"
- "Photography"
spatial_coverage: "Leiden"
temporal_coverage_description: "1850-2000"
- scope_description: "12,000 Dutch coins and medals; 500 reference books on numismatics"
scope_type: collection_scope
subject_coverage:
- "Numismatics"
- "Dutch coins"
- "Medals"
description: Heritage society with photo archive and numismatic collection

View file

@ -287,16 +287,22 @@ classes:
examples:
- value:
has_or_had_type: EXCELLENT
condition_description: "Well-maintained historic fabric"
has_or_had_description:
description_text: "Well-maintained historic fabric"
description_type: condition
condition_date: "2024-01-15"
description: Excellent condition with assessment date
- value:
has_or_had_type: GOOD
condition_description: "Minor wear consistent with age"
has_or_had_description:
description_text: "Minor wear consistent with age"
description_type: condition
description: Good condition assessment
- value:
has_or_had_type: UNDER_RESTORATION
condition_description: "Major restoration project 2024-2025"
has_or_had_description:
description_text: "Major restoration project 2024-2025"
description_type: condition
description: Currently being restored
is_or_was_derived_from: # was: was_derived_from - migrated per Rule 53
range: CustodianObservation
@ -332,7 +338,9 @@ classes:
current_use: Administrative offices and events
has_or_had_condition: # was: condition_status (2026-01-18)
has_or_had_type: EXCELLENT
condition_description: "Well-maintained historic fabric"
has_or_had_description:
description_text: "Well-maintained historic fabric"
description_type: condition
has_or_had_area:
- area_value: 450.0
has_or_had_unit:
@ -363,7 +371,9 @@ classes:
current_use: Museum and events
has_or_had_condition: # was: condition_status (2026-01-18)
has_or_had_type: GOOD
condition_description: "Historic castle in good preservation state"
has_or_had_description:
description_text: "Historic castle in good preservation state"
description_type: condition
has_or_had_area:
- area_value: 2500.0
has_or_had_unit:

View file

@ -0,0 +1,130 @@
# Hypernym - Generic class for broader/parent concepts in hierarchies
# Created per slot_fixes.yaml migration for: collection_broader_type
# Creation date: 2026-01-19
#
# Rule compliance:
# - Rule 0b: Type/Types naming - Hypernym is the base type class
# - Rule 38: Slot centralization with semantic URIs
# - Rule 39: RiC-O temporal naming conventions
# - Rule 53: Generic reusable slots
id: https://nde.nl/ontology/hc/classes/Hypernym
name: Hypernym
title: Hypernym
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
skos: http://www.w3.org/2004/02/skos/core#
rdfs: http://www.w3.org/2000/01/rdf-schema#
owl: http://www.w3.org/2002/07/owl#
imports:
- linkml:types
- ../slots/has_or_had_identifier
- ../slots/has_or_had_label
- ../slots/has_or_had_description
default_range: string
default_prefix: hc
classes:
Hypernym:
description: >-
A broader/parent concept in a classification hierarchy.
**SEMANTIC DEFINITION**:
A hypernym (also superordinate or umbrella term) is a concept whose
semantic field is more inclusive than that of another concept.
For example, "vehicle" is a hypernym of "car", "truck", and "bicycle".
**SKOS ALIGNMENT**:
In SKOS vocabulary, hypernym relationships are expressed via:
- `skos:broader` - links a concept to its hypernym
- `skos:narrower` - inverse, links hypernym to hyponyms
- `skos:broaderTransitive` - transitive closure of broader
**HERITAGE DOMAIN USAGE**:
- Collection types: "Archives" is hypernym of "Municipal Archives"
- Institution types: "Museum" is hypernym of "Art Museum"
- Subject classification: "Art" is hypernym of "Painting"
**RELATED CONCEPTS**:
- **Hyponym**: The inverse - a more specific concept (child)
- **Meronym**: Part-of relationship (different from is-a)
- **Holonym**: Whole-of relationship (inverse of meronym)
**ONTOLOGY MAPPING**:
- class_uri: skos:Concept (as hypernym IS a concept)
- exact_mappings: skos:broader target concept
class_uri: skos:Concept
exact_mappings:
- skos:Concept
close_mappings:
- rdfs:Class
- owl:Class
slots:
- has_or_had_identifier
- has_or_had_label
- has_or_had_description
attributes:
hypernym_uri:
range: uriorcurie
description: >-
URI reference to the broader/parent concept.
This is the primary identifier for the hypernym in linked data.
examples:
- value: "hc:collection-type/archives"
description: URI for Archives as hypernym
- value: "rico:Fonds"
description: RiC-O Fonds as hypernym
hypernym_scheme:
range: string
description: >-
The vocabulary or ontology scheme this hypernym belongs to.
examples:
- value: "SKOS"
- value: "RiC-O"
- value: "CIDOC-CRM"
annotations:
custodian_types: '["*"]'
custodian_types_rationale: >-
Hypernym relationships apply to all classification hierarchies
across all custodian types.
custodian_types_primary: "*"
specificity_score: 0.25
specificity_rationale: >-
Low specificity - fundamental concept for any hierarchical classification.
examples:
- value: |
Hypernym:
hypernym_uri: "rico:Fonds"
has_or_had_label:
- label_text: "Fonds"
label_language: "en"
has_or_had_description:
- description_text: "Provenance-based archival unit"
description: RiC-O Fonds as hypernym for archival record sets.
- value: |
Hypernym:
hypernym_uri: "hc:collection-type/museum-collection"
has_or_had_label:
- label_text: "Museum Collection"
has_or_had_description:
- description_text: "Physical heritage objects held by museums"
description: Museum Collection as hypernym for specific collection types.
comments:
- Created from slot_fixes.yaml migration (2026-01-19)
- Replaces collection_broader_type slot range with structured class
- SKOS-aligned for vocabulary interoperability
- Use with has_or_had_hypernym slot

View file

@ -2,6 +2,7 @@
# Extracted from custodian_source.yaml per Rule 38 (modular schema files)
# Extraction date: 2026-01-08
# MIGRATION (2026-01-15): Replaced xpath/xpath_match_score/html_file attributes with has_or_had_provenance_path using XPath class
# MIGRATION 2026-01-19: claim_type → has_or_had_type + ClaimType (Rule 53/56)
id: https://nde.nl/ontology/hc/classes/InvalidWebClaim
name: InvalidWebClaim
@ -19,7 +20,10 @@ prefixes:
imports:
- linkml:types
- ./XPath
# ADDED 2026-01-19: claim_type migration (Rule 53/56)
- ../slots/has_or_had_type
- ./ClaimType
- ./ClaimTypes
default_range: string
@ -45,10 +49,19 @@ classes:
- dqv:QualityAnnotation
related_mappings:
- prov:Entity
slots:
- has_or_had_type
slot_usage:
has_or_had_type:
range: ClaimType
inlined: true
required: false
description: |
MIGRATED from claim_type per slot_fixes.yaml (Rule 53/56, 2026-01-19).
Type of claim that failed validation.
Uses ClaimType class hierarchy.
attributes:
claim_type:
range: string
description: Type of claim
# REMOVED 2026-01-19: claim_type - migrated to has_or_had_type slot (Rule 53/56)
claim_value:
range: string
description: Extracted value

View file

@ -26,7 +26,7 @@ imports:
- ../slots/model
- ../slots/provider
- ../slots/prompt_token
- ../slots/completion_token
# completion_token migrated to has_or_had_token + Token with OutputTokenType per Rule 53 (2026-01-19)
- ../slots/consumes_or_consumed # was: total_token - migrated per Rule 53 (2026-01-15)
- ../slots/has_or_had_token # was: cached_token - migrated per Rule 53/56 (2026-01-17)
- ./Token # for has_or_had_token range
@ -70,9 +70,9 @@ classes:
- schema:Action
- schema:CreativeWork
slots:
- has_or_had_token # was: cached_token - migrated per Rule 53/56 (2026-01-17)
- has_or_had_token # was: cached_token AND completion_token - migrated per Rule 53/56 (2026-01-17, 2026-01-19)
- clear_thinking
- completion_token
# completion_token removed - now use has_or_had_token with OutputTokenType
- content
- cost_usd
- created
@ -131,12 +131,7 @@ classes:
examples:
- value: 150
description: 150 tokens in the input prompt
completion_token:
range: integer
minimum_value: 0
examples:
- value: 450
description: 450 tokens in the completion (content + reasoning)
# completion_token slot_usage removed - now covered by has_or_had_token with OutputTokenType (2026-01-19)
consumes_or_consumed: # was: total_token - migrated per Rule 53 (2026-01-15)
description: |
Total tokens consumed by this LLM response (prompt + completion).
@ -147,31 +142,49 @@ classes:
examples:
- value: 600
description: 600 total tokens (150 prompt + 450 completion)
has_or_had_token: # was: cached_token - migrated per Rule 53/56 (2026-01-17)
description: >-
Token data for this LLM response (typically cached prompt tokens).
From API response: usage.prompt_tokens_details.cached_tokens.
Cached tokens typically have reduced cost and latency.
MIGRATED to use Token class with TokenType taxonomy per Rule 53/56.
has_or_had_token: # was: cached_token AND completion_token - migrated per Rule 53/56 (2026-01-17, 2026-01-19)
description: |
Token data for this LLM response.
Multivalued list capturing different token types (cached, completion, reasoning, etc.).
**Token Types** (from TokenTypes.yaml):
- CachedTokenType: Tokens served from provider cache (reduced cost)
- OutputTokenType: Completion/output tokens (content + reasoning_content)
- ReasoningTokenType: Chain-of-thought reasoning tokens
- InputTokenType: Prompt tokens
**API Mapping**:
- Cached: usage.prompt_tokens_details.cached_tokens
- Completion: usage.completion_tokens
MIGRATED from cached_token (2026-01-17) and completion_token (2026-01-19) per Rule 53/56.
range: Token
multivalued: true
inlined: true
inlined_as_list: true
required: false
examples:
- value:
has_or_had_type:
has_or_had_identifier: hc:TokenType/CACHED
has_or_had_label: Cached Token
has_or_had_quantity:
quantity_value: 50
has_or_had_description: Tokens from provider KV cache
description: 50 cached tokens (structured Token class)
- has_or_had_type:
has_or_had_identifier: hc:TokenType/CACHED
has_or_had_label: Cached Token
has_or_had_quantity:
quantity_value: 50
has_or_had_description: Tokens from provider KV cache
- has_or_had_type:
has_or_had_identifier: hc:TokenType/OUTPUT
has_or_had_label: Output Token
has_or_had_quantity:
quantity_value: 450
has_or_had_description: Completion tokens (content + reasoning)
description: Both cached (50) and completion (450) tokens
- value:
has_or_had_type:
has_or_had_identifier: hc:TokenType/CACHED
has_or_had_label: Cached Token
has_or_had_quantity:
quantity_value: 0
description: No cached tokens (cache miss)
- has_or_had_type:
has_or_had_identifier: hc:TokenType/OUTPUT
has_or_had_label: Output Token
has_or_had_quantity:
quantity_value: 200
description: Simple completion token count (no caching)
finish_reason:
range: FinishReasonEnum
required: false

View file

@ -1,6 +1,7 @@
# LogoClaim - Individual logo or favicon claim from web scraping
# Created for CustodianSourceFile validation compatibility
# Creation date: 2026-01-18
# MIGRATION 2026-01-19: claim_type → has_or_had_type + ClaimType (Rule 53/56)
id: https://nde.nl/ontology/hc/classes/LogoClaim
name: LogoClaim
@ -15,6 +16,10 @@ prefixes:
imports:
- linkml:types
# ADDED 2026-01-19: claim_type migration (Rule 53/56)
- ../slots/has_or_had_type
- ./ClaimType
- ./ClaimTypes
default_range: string
classes:
@ -32,11 +37,19 @@ classes:
- schema:ImageObject
related_mappings:
- prov:Derivation
slots:
- has_or_had_type
slot_usage:
has_or_had_type:
range: ClaimType
inlined: true
required: false
description: |
MIGRATED from claim_type per slot_fixes.yaml (Rule 53/56, 2026-01-19).
Type of logo claim (favicon_url, logo_url, og_image, apple_touch_icon, etc.).
Uses ClaimType class hierarchy.
attributes:
claim_type:
range: string
description: >-
Type of logo claim (favicon_url, logo_url, og_image, apple_touch_icon, etc.)
# REMOVED 2026-01-19: claim_type - migrated to has_or_had_type slot (Rule 53/56)
claim_value:
range: uri
description: URL of the logo/favicon image

View file

@ -88,6 +88,9 @@ classes:
note:
range: string
description: Additional notes about this enrichment
notes:
range: string
description: Additional notes about this enrichment (plural alias)
nan_plaats:
range: string
description: City/place from Nationaal Archief

View file

@ -0,0 +1,149 @@
# Note class (singular)
# Generic class for typed notes with provenance
#
# Generation date: 2026-01-18
# Rule compliance: 0 (LinkML single source of truth), 38 (slot centralization), 43 (singular nouns)
# Migration: Supports has_or_had_note slot (replaces claim_note, category_note, etc.)
#
# NOTE: This is the SINGULAR form per Rule 43. Used with has_or_had_note slot.
# Notes (plural class) exists for historical/backwards compatibility with has_or_had_notes slot.
id: https://nde.nl/ontology/hc/class/Note
name: note_class
title: Note Class
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
skos: http://www.w3.org/2004/02/skos/core#
rdfs: http://www.w3.org/2000/01/rdf-schema#
schema: http://schema.org/
dcterms: http://purl.org/dc/terms/
default_prefix: hc
imports:
- linkml:types
- ../metadata
- ../slots/note_type
- ../slots/note_content
- ../slots/note_date
- ../slots/language
- ../slots/specificity_annotation
- ../slots/has_or_had_score
- ./SpecificityAnnotation
- ./TemplateSpecificityScore
- ./TemplateSpecificityType
- ./TemplateSpecificityTypes
classes:
Note:
class_uri: skos:note
description: |
A typed note with optional provenance metadata.
**Purpose**:
Note provides a reusable class for representing documentation notes
across the heritage custodian schema. Supports typed notes (claim,
appraisal, arrangement, conservation, extraction, etc.) with language
tagging and dates.
**Ontological Alignment**:
- **Primary**: `skos:note` - general note
- **Close**: `rdfs:comment` - comment on resource
**Use Cases**:
- Claim notes documenting extraction details
- Category notes for classification explanations
- Certainty notes for confidence documentation
- Conservation notes documenting treatments
- Extraction notes for pipeline documentation
- General documentation notes
**Replaces** (per slot_fixes.yaml):
- `claim_note` (string) → has_or_had_note with Note class
- `category_note` (string) → has_or_had_note with Note class
- `certainty_note` (string) → has_or_had_note with Note class
- `conservation_note` (string) → has_or_had_note with Note class
- `copy_note` (string) → has_or_had_note with Note class
- `event_note` (string) → has_or_had_note with Note class
- `extraction_note` (string) → has_or_had_note with Note class
- `feature_note` (string) → has_or_had_note with Note class
- Other *_note slots per slot_fixes.yaml
exact_mappings:
- skos:note
close_mappings:
- rdfs:comment
- dcterms:description
slots:
- note_type
- note_content
- note_date
- language
- specificity_annotation
- has_or_had_score
slot_usage:
note_type:
description: |
The type of note (claim, category, certainty, conservation, copy, event, extraction, feature, general).
This allows distinguishing different kinds of notes when multiple
apply to the same entity.
range: string
required: false
examples:
- value: claim
description: Claim extraction documentation
- value: category
description: Category/classification notes
- value: conservation
description: Treatment documentation
- value: extraction
description: Pipeline extraction notes
- value: general
description: General documentation notes
note_content:
description: The textual content of the note.
range: string
required: true
note_date:
description: Date the note was created or last updated.
range: date
required: false
language:
description: |
ISO 639-1 two-letter language code for this note.
Examples: "en", "nl", "de", "fr"
range: string
required: false
pattern: "^[a-z]{2}$"
annotations:
custodian_types: '["*"]'
custodian_types_rationale: Generic note class applicable to all custodian types.
custodian_types_primary: null
specificity_score: 0.2
specificity_rationale: Very broadly applicable generic class for documentation notes.
examples:
- value: |
note_type: claim
note_content: "Additional verification required for this claim. Source webpage may have changed since extraction."
note_date: "2026-01-18"
language: en
description: "Claim note documenting extraction issue"
- value: |
note_type: extraction
note_content: "Biography truncated from longer text on page. Original text exceeded 500 chars."
note_date: "2025-11-29"
language: en
description: "Extraction note documenting processing decision"
- value: |
note_type: conservation
note_content: "Surface cleaning completed. No further treatment recommended at this time."
note_date: "2024-06-15"
language: en
description: "Conservation note documenting treatment"

View file

@ -11,48 +11,28 @@ prefixes:
foaf: http://xmlns.com/foaf/0.1/
imports:
- linkml:types
- ../slots/source_url
- ../slots/retrieved_on
- ../slots/retrieval_agent
# Slots
- ../slots/has_or_had_note # was: person_claim_note - migrated per Rule 53 (2026-01-18)
- ../slots/has_or_had_provenance_path
- ../slots/has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17)
- ../slots/person_claim_id
- ../slots/person_claim_note
- ../slots/person_claim_type
- ../slots/person_claim_value
- ../slots/person_html_file
- ../slots/has_or_had_provenance_path
- ../slots/retrieval_agent
- ../slots/retrieved_on
- ../slots/source_url
- ../slots/specificity_annotation
- ../slots/has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17)
# Classes
- ./Note # for has_or_had_note range
- ./SpecificityAnnotation
- ./TemplateSpecificityScore # was: TemplateSpecificityScores - migrated per Rule 53 (2026-01-17)
- ./TemplateSpecificityType
- ./TemplateSpecificityTypes
- ./XPath
# Enums
- ../enums/PersonClaimTypeEnum
- ../enums/RetrievalAgentEnum
- ../slots/has_or_had_provenance_path
- ../slots/person_claim_id
- ../slots/person_claim_note
- ../slots/person_claim_type
- ../slots/person_claim_value
- ../slots/person_html_file
- ../slots/retrieval_agent
- ../slots/retrieved_on
- ../slots/source_url
- ../slots/specificity_annotation
- ../slots/has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17)
- ../slots/has_or_had_provenance_path
- ../slots/person_claim_id
- ../slots/person_claim_note
- ../slots/person_claim_type
- ../slots/person_claim_value
- ../slots/person_html_file
- ../slots/retrieval_agent
- ../slots/retrieved_on
- ../slots/source_url
- ../slots/specificity_annotation
- ../slots/has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17)
default_prefix: hc
classes:
PersonWebClaim:
@ -85,18 +65,37 @@ classes:
- schema:PropertyValue
- foaf:Document
slots:
- has_or_had_note # was: person_claim_note - migrated per Rule 53 (2026-01-18)
- has_or_had_provenance_path
- has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17)
- person_claim_id
- person_claim_note
- person_claim_type
- person_claim_value
- person_html_file
- has_or_had_provenance_path
- retrieval_agent
- retrieved_on
- source_url
- specificity_annotation
- has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17)
slot_usage:
has_or_had_note: # was: person_claim_note - migrated per Rule 53 (2026-01-18)
description: |
MIGRATED from person_claim_note per Rule 53 (2026-01-18).
Notes about this claim extraction using the Note class.
Document any issues, conflicts, or special circumstances.
Use note_type: "extraction" for extraction-related notes.
range: Note
multivalued: true
inlined: true
inlined_as_list: true
examples:
- value:
- note_type: extraction
note_content: "Biography truncated from longer text on page"
description: Extraction note about truncated content
- value:
- note_type: extraction
note_content: "Profile data stored in person/entity/taco-dibbits_20250115.json. No XPath for API extraction."
description: LinkedIn API extraction note
person_claim_type:
required: true
person_claim_value:
@ -117,6 +116,7 @@ classes:
match score, and matched text.
REQUIRED for web page claims. May be omitted for API-sourced claims (e.g., LinkedIn via Exa).
comments:
- 'MIGRATION (2026-01-18): Replaced person_claim_note with has_or_had_note using Note class per Rule 53'
- 'MIGRATION (2026-01-15): Replaced person_xpath/person_xpath_match_score slots with has_or_had_provenance_path using XPath class per slot_fixes.yaml'
- PersonWebClaim extends WebClaim pattern for person-specific data
- 'XPATH OR REMOVE: Claims without verifiable source must be removed'
@ -160,7 +160,9 @@ classes:
source_document: web/NL-NH-AMS-M-RM/rijksmuseum.nl/organisation.html
person_html_file: web/NL-NH-AMS-M-RM/rijksmuseum.nl/organisation.html
retrieval_agent: firecrawl
person_claim_note: Biography truncated from longer text on page
has_or_had_note: # was: person_claim_note - migrated per Rule 53 (2026-01-18)
- note_type: extraction
note_content: Biography truncated from longer text on page
description: Biography text with partial match score
- value:
person_claim_type: linkedin_url
@ -168,5 +170,7 @@ classes:
source_url: https://www.linkedin.com/in/taco-dibbits
retrieved_on: '2025-01-15T11:00:00Z'
retrieval_agent: exa_crawling_exa
person_claim_note: Profile data stored in person/entity/taco-dibbits_20250115.json. No XPath for API extraction.
has_or_had_note: # was: person_claim_note - migrated per Rule 53 (2026-01-18)
- note_type: extraction
note_content: Profile data stored in person/entity/taco-dibbits_20250115.json. No XPath for API extraction.
description: LinkedIn claim - No XPath for API extraction

View file

@ -13,7 +13,10 @@ imports:
- linkml:types
- ./CustodianType
- ../slots/collection_focus
- ../slots/collection_size
# REMOVED 2026-01-19: ../slots/collection_size - migrated to has_or_had_quantity + Quantity (Rule 53)
- ../slots/has_or_had_quantity
- ./Quantity
- ./Unit
- ../slots/has_or_had_access_restriction
- ../enums/PersonalCollectionTypeEnum
- ../slots/has_acquisition_history
@ -25,30 +28,8 @@ imports:
- ../slots/has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17)
- ./SpecificityAnnotation
- ./TemplateSpecificityScore # was: TemplateSpecificityScores - migrated per Rule 53 (2026-01-17)
- ./TemplateSpecificityType
- ./TemplateSpecificityTypes
- ../slots/collection_focus
- ../slots/collection_size
- ../slots/has_acquisition_history
- ../slots/has_or_had_access_restriction
- ../slots/has_or_had_custodian_type
- ../slots/legacy_planning
- ../slots/personal_collection_subtype
- ../slots/preservation_approach
- ../slots/specificity_annotation
- ../slots/has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17)
- ../slots/collection_focus
- ../slots/collection_size
- ../slots/has_acquisition_history
- ../slots/has_or_had_access_restriction
- ../slots/has_or_had_custodian_type
- ../slots/legacy_planning
- ../slots/personal_collection_subtype
- ../slots/preservation_approach
- ../slots/specificity_annotation
- ../slots/has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17)
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
@ -203,7 +184,8 @@ classes:
- has_or_had_access_restriction
- has_acquisition_history
- collection_focus
- collection_size
# REMOVED 2026-01-19: collection_size - migrated to has_or_had_quantity + Quantity (Rule 53)
- has_or_had_quantity
- has_or_had_custodian_type
- legacy_planning
- personal_collection_subtype
@ -222,16 +204,30 @@ classes:
description: Bibliophile focus
- value: Roman coins, Medieval numismatics
description: Numismatist focus
collection_size:
range: string
has_or_had_quantity: # was: collection_size - migrated per Rule 53 (2026-01-19)
description: |
MIGRATED from collection_size per slot_fixes.yaml (Rule 53, 2026-01-19).
Quantitative description of the personal collection using Quantity class.
Default unit is "item" for countable objects.
range: Quantity
inlined: true
multivalued: true
required: true
examples:
- value: 50+ paintings, Historical furniture
- value:
quantity_value: 50
quantity_type: COLLECTION_SIZE
has_or_had_unit:
unit_value: "item"
has_or_had_label:
- label_text: "paintings"
description: Art collection size
- value: 5,000 rare books, 18th-19th century
- value:
quantity_value: 5000
quantity_type: COLLECTION_SIZE
has_or_had_unit:
unit_value: "volume"
description: Private library size
- value: 10,000 stamps, Worldwide, 1840-1950
description: Philatelic collection size
has_acquisition_history:
range: string
required: true

View file

@ -27,8 +27,8 @@ imports:
- ./Description
- ../slots/has_auction_house
- ../slots/has_auction_sale_name
- ../slots/certainty_level
- ../slots/certainty_note
- ../slots/has_or_had_level # was: certainty_level, certainty_note - migrated per Rule 53/56 (2026-01-18)
- ./CertaintyLevel
- ../slots/has_or_had_custodian_type
- ../slots/dealer_name
- ../slots/documentation
@ -86,8 +86,7 @@ classes:
slots:
- has_auction_house
- has_auction_sale_name
- certainty_level
- certainty_note
- has_or_had_level # was: certainty_level, certainty_note - migrated per Rule 53/56 (2026-01-18)
- has_or_had_custodian_type
- dealer_name
- documentation
@ -300,20 +299,33 @@ classes:
examples:
- value: https://rkd.nl/explore/provenance/12345
- value: https://www.getty.edu/research/provenance/sales
certainty_level:
has_or_had_level: # was: certainty_level, certainty_note - migrated per Rule 53/56 (2026-01-18)
description: |
Certainty/confidence level for this provenance event.
MIGRATED from certainty_level + certainty_note per slot_fixes.yaml (Rule 53/56, 2026-01-18).
Uses CertaintyLevel class with level_value and has_or_had_note.
required: false
range: string
range: CertaintyLevel
inlined: true
examples:
- value: CERTAIN
- value: PROBABLE
- value: POSSIBLE
certainty_note:
required: false
range: string
examples:
- value: Confirmed by sale catalogue and receipt
- value: Inferred from stylistic analysis and collection history
- value: Provenance gap 1933-1945 requires further research
- value:
level_value: CERTAIN
has_or_had_note:
- note_type: certainty
note_content: "Confirmed by sale catalogue and receipt"
description: Certain with documentary evidence
- value:
level_value: PROBABLE
has_or_had_note:
- note_type: certainty
note_content: "Inferred from stylistic analysis and collection history"
description: Probable based on circumstantial evidence
- value:
level_value: UNCERTAIN
has_or_had_note:
- note_type: certainty
note_content: "Provenance gap 1933-1945 requires further research"
description: Uncertain requiring further research
has_or_had_provenance: # was: provenance_text - migrated per Rule 53/56 (2026-01-18)
description: |
Provenance information for this event in Getty Provenance Index format.
@ -392,7 +404,8 @@ classes:
event_location:
- place_name: Delft
country: NL
certainty_level: CERTAIN
has_or_had_level: # was: certainty_level - migrated per Rule 53/56 (2026-01-18)
level_value: CERTAIN
has_or_had_provenance: # was: provenance_text - migrated per Rule 53/56 (2026-01-18)
has_or_had_description:
- description_text: "Created by Johannes Vermeer, Delft, c. 1665"
@ -409,8 +422,11 @@ classes:
description_type: from_owner
- description_text: Pieter van Ruijven, Delft (c. 1665-1674)
description_type: to_owner
certainty_level: PROBABLE
certainty_notes: Van Ruijven was Vermeer's patron; likely acquired directly from artist
has_or_had_level: # was: certainty_level, certainty_notes - migrated per Rule 53/56 (2026-01-18)
level_value: PROBABLE
has_or_had_note:
- note_type: certainty
note_content: "Van Ruijven was Vermeer's patron; likely acquired directly from artist"
documentation:
- Montias, Vermeer and His Milieu (1989), pp. 247-252
has_or_had_provenance: # was: provenance_text - migrated per Rule 53/56 (2026-01-18)
@ -437,7 +453,8 @@ classes:
auction_sale_name: Dissius sale
lot_number: '36'
price_text: Unknown
certainty_level: CERTAIN
has_or_had_level: # was: certainty_level - migrated per Rule 53/56 (2026-01-18)
level_value: CERTAIN
documentation:
- Dissius sale catalogue, Amsterdam, May 16, 1696, lot 36
footnote:
@ -462,7 +479,8 @@ classes:
price: 30
price_currency: NLG
price_text: 30 guilders
certainty_level: CERTAIN
has_or_had_level: # was: certainty_level - migrated per Rule 53/56 (2026-01-18)
level_value: CERTAIN
has_or_had_provenance: # was: provenance_text - migrated per Rule 53/56 (2026-01-18)
has_or_had_description:
- description_text: "A.A. des Tombe, The Hague (purchased 1881 for 30 guilders)"
@ -484,7 +502,8 @@ classes:
- description_text: Mauritshuis, The Hague
description_type: to_owner
changes_or_changed_ownership_to: https://nde.nl/ontology/hc/custodian/nl/mauritshuis # was: to_owner - migrated per Rule 56 (2026-01-16)
certainty_level: CERTAIN
has_or_had_level: # was: certainty_level - migrated per Rule 53/56 (2026-01-18)
level_value: CERTAIN
documentation:
- Will of A.A. des Tombe
- Mauritshuis accession records
@ -506,8 +525,11 @@ classes:
description_type: to_owner
nazi_era_flag: true
requires_research: true
certainty_level: PROBABLE
certainty_notes: Documentation incomplete; collector fled Vienna 1938
has_or_had_level: # was: certainty_level, certainty_notes - migrated per Rule 53/56 (2026-01-18)
level_value: PROBABLE
has_or_had_note:
- note_type: certainty
note_content: "Documentation incomplete; collector fled Vienna 1938"
event_note:
- Provenance gap requires further research
- Listed on Art Loss Register

View file

@ -45,3 +45,20 @@ classes:
AccessibilityService:
is_a: ServiceType
description: Accessibility services for visitors with disabilities.
CommercialService:
is_a: ServiceType
description: |
Revenue-generating commercial activities offered by heritage institutions.
Includes:
- Admissions: Ticket sales, pricing tiers, group rates, annual passes
- Retail: Gift shop, branded merchandise, reproductions, publications
- Food/beverage: Museum café, beer tasting, product sampling
- Events: Corporate events, weddings, private rentals, conferences
- Experiences: Interactive exhibits, VR experiences, workshops, tastings
- Licensing: Brand licensing, image rights, reproduction fees
- Tourism packages: Combined tickets, city passes, tour group partnerships
- Digital sales: Online shop, virtual experiences, app subscriptions
Created per slot_fixes.yaml migration for: commercial_activity (2026-01-18)

View file

@ -0,0 +1,86 @@
id: https://nde.nl/ontology/hc/class/Source
name: source_class
title: Source class
description: >-
Represents a source or origin from which data, content, or information was
derived. This generic class can be subtyped for specific domains (ChapterSource,
DataSource, etc.).
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
prov: http://www.w3.org/ns/prov#
dcterms: http://purl.org/dc/terms/
schema: http://schema.org/
imports:
- linkml:types
- ../slots/has_or_had_type
- ../slots/has_or_had_label
- ../slots/has_or_had_description
default_prefix: hc
classes:
Source:
class_uri: prov:Entity
description: >-
A source from which something was derived or generated. Can represent
manual creation, automated generation, external services, or imported data.
Subclasses may specialize for specific domains.
exact_mappings:
- prov:Entity
- dcterms:source
close_mappings:
- schema:CreativeWork
slots:
- has_or_had_type
- has_or_had_label
- has_or_had_description
slot_usage:
has_or_had_type:
description: The type or category of this source (e.g., MANUAL, AI_GENERATED, IMPORTED)
range: uriorcurie
required: false
has_or_had_label:
description: Human-readable name for this source
range: string
required: false
has_or_had_description:
description: Detailed description of the source
range: string
required: false
annotations:
specificity_score: 0.20
specificity_rationale: >-
Generic provenance concept. Sources are fundamental to data quality
tracking across all heritage domains.
examples:
- value:
has_or_had_type: MANUAL
has_or_had_label: "Creator-defined chapters"
has_or_had_description: "Chapters manually defined in video description"
description: Manual source for video chapters
- value:
has_or_had_type: YOUTUBE_AI
has_or_had_label: "YouTube Auto-Chapters"
has_or_had_description: "AI-generated chapter markers from YouTube"
description: AI-generated source
- value:
has_or_had_type: WHISPER_CHAPTERS
has_or_had_label: "Whisper Transcript Analysis"
description: Whisper-derived chapters
# Subclass for chapter-specific sources (preserves ChapterSourceEnum semantics)
ChapterSource:
is_a: Source
class_uri: hc:ChapterSource
description: >-
Source or method that created video chapters. Specializes Source
for video chapter generation provenance.
annotations:
specificity_score: 0.75
specificity_rationale: >-
Specific to video chapter generation domain.
examples:
- value:
has_or_had_type: YOUTUBE_AI
has_or_had_label: "YouTube Auto-Chapters"
description: YouTube AI-generated chapters

View file

@ -16,7 +16,11 @@ imports:
- ../slots/martyred
- ../slots/deceased
- ../slots/date_of_death
- ../slots/circumstances_of_death
# REMOVED 2026-01-19: ../slots/circumstances_of_death - migrated to is_deceased with DeceasedStatus
- ../slots/is_deceased
- ./DeceasedStatus
- ./CauseOfDeath
- ../enums/CauseOfDeathTypeEnum
- ../slots/has_or_had_domain # was: typical_domain - migrated per Rule 53 (2026-01-15)
- ./Domain # for has_or_had_domain range
- ../slots/temporal_extent
@ -158,7 +162,8 @@ classes:
- schema:JobPosting
- schema:EmployeeRole
slots:
- circumstances_of_death
# REMOVED 2026-01-19: circumstances_of_death - migrated to is_deceased with DeceasedStatus
- is_deceased
- common_variant
- date_of_death
- deceased
@ -191,8 +196,27 @@ classes:
required: false
date_of_death:
required: false
circumstances_of_death:
# REMOVED 2026-01-19: circumstances_of_death - migrated to is_deceased
is_deceased:
required: false
range: DeceasedStatus
inlined: true
description: |
Structured death information using DeceasedStatus class.
Replaces simple circumstances_of_death string.
Captures cause (CauseOfDeath), date (TimeSpan), and narrative.
**Example - Gaza Heritage Worker**:
```yaml
is_deceased:
is_or_was_caused_by:
has_or_had_type: CONFLICT
has_or_had_description: |
Killed in Israeli airstrike on his home in Gaza City.
temporal_extent:
begin_of_the_begin: "2023-11-19T00:00:00Z"
end_of_the_end: "2023-11-19T23:59:59Z"
```
comments:
- Abstract base class - use specific subclasses (Curator, Archivist, etc.)
- Represents OFFICIAL JOB TITLES, not de facto work performed

View file

@ -24,10 +24,13 @@ imports:
- ../slots/has_assessment_category
- ../slots/has_or_had_category_assessment
- ../slots/category_measurement
- ../slots/category_note
- ../slots/has_or_had_note # was: category_note - migrated per Rule 53/56 (2026-01-18)
- ./Note # for has_or_had_note range
- ../slots/category_status
- ../slots/compliance_status
- ../slots/condition_id
# REMOVED 2026-01-18: ../slots/condition_id - migrated to has_or_had_identifier + Identifier (Rule 53)
- ../slots/has_or_had_identifier # was: condition_id - migrated per Rule 53 (2026-01-18)
- ./Identifier
- ../slots/evidence_documentation
- ../slots/is_official_assessment
- ../slots/measurement_data
@ -88,7 +91,7 @@ classes:
slots:
- has_or_had_category_assessment
- compliance_status
- condition_id
- has_or_had_identifier # was: condition_id - migrated per Rule 53 (2026-01-18)
- confidence_score
- evidence_documentation
- follow_up_date
@ -108,12 +111,20 @@ classes:
- supersede_condition
- has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17)
slot_usage:
condition_id:
range: uriorcurie
has_or_had_identifier: # was: condition_id - migrated per Rule 53 (2026-01-18)
description: |
MIGRATED from condition_id per slot_fixes.yaml (Rule 53, 2026-01-18).
Unique identifier for this condition observation. Uses dcterms:identifier semantics.
Uses Identifier class with identifier_scheme for type discrimination.
Format: URI following NDE Heritage Custodian ontology conventions.
range: Identifier
inlined: true
required: true
identifier: true
examples:
- value: https://nde.nl/ontology/hc/condition/rijksmuseum-depot-2024-q2
- value:
identifier_scheme: CONDITION_URI
identifier_value: "https://nde.nl/ontology/hc/condition/rijksmuseum-depot-2024-q2"
description: Q2 2024 assessment of Rijksmuseum depot
refers_to_storage:
range: Storage
@ -175,7 +186,9 @@ classes:
measurement: 19.5°C
- category: PEST_CONTROL
status: CRITICAL
note: White ants discovered in main depot area
has_or_had_note: # was: note - migrated per Rule 53/56 (2026-01-18)
- note_type: category
note_content: White ants discovered in main depot area
observation_note:
range: string
examples:
@ -237,7 +250,9 @@ classes:
- https://www.loc.gov/premis/rdf/v3/Event
examples:
- value:
condition_id: https://nde.nl/ontology/hc/condition/depot-pest-investigation-2024
has_or_had_identifier: # was: condition_id - migrated per Rule 53 (2026-01-18)
identifier_scheme: CONDITION_URI
identifier_value: "https://nde.nl/ontology/hc/condition/depot-pest-investigation-2024"
refers_to_storage: https://nde.nl/ontology/hc/storage/national-archive-depot-b
observation_date: '2024-09-15'
observer_type: JOURNALIST
@ -248,7 +263,9 @@ classes:
has_or_had_category_assessment:
- category: PEST_CONTROL
status: CRITICAL
note: White ants discovered in main document depot
has_or_had_note: # was: note - migrated per Rule 53/56 (2026-01-18)
- note_type: category
note_content: White ants discovered in main document depot
observation_notes: Investigative visit revealed active termite infestation in south section of Document Depot B. Approximately
50 linear meters of historical documents at risk. Institution was unaware of extent of damage until contacted for
comment.
@ -258,7 +275,9 @@ classes:
confidence_score: 0.85
description: Journalist investigation discovering unreported pest infestation
- value:
condition_id: https://nde.nl/ontology/hc/condition/rijksmuseum-q2-2024
has_or_had_identifier: # was: condition_id - migrated per Rule 53 (2026-01-18)
identifier_scheme: CONDITION_URI
identifier_value: "https://nde.nl/ontology/hc/condition/rijksmuseum-q2-2024"
refers_to_storage: https://nde.nl/ontology/hc/storage/rijksmuseum-depot-amersfoort
observation_date: '2024-06-30'
observation_period:
@ -278,7 +297,9 @@ classes:
measurement: 48% RH average
- category: PEST_CONTROL
status: GOOD
note: No pest activity detected in monitoring traps
has_or_had_note: # was: note - migrated per Rule 53/56 (2026-01-18)
- note_type: category
note_content: No pest activity detected in monitoring traps
- category: SECURITY
status: EXCELLENT
observation_notes: Quarterly facilities review. All parameters within policy ranges.
@ -299,7 +320,7 @@ classes:
slots:
- has_assessment_category
- category_measurement
- category_note
- has_or_had_note # was: category_note - migrated per Rule 53/56 (2026-01-18)
- category_status
- specificity_annotation
- has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17)
@ -312,5 +333,17 @@ classes:
required: true
category_measurement:
range: string
category_note:
range: string
has_or_had_note: # was: category_note - migrated per Rule 53/56 (2026-01-18)
description: |
MIGRATED from category_note per Rule 53/56 (2026-01-18).
Notes specific to this category assessment.
Use note_type: "category" for category-specific notes.
range: Note
multivalued: true
inlined: true
inlined_as_list: true
examples:
- value:
- note_type: category
note_content: "White ants discovered in main depot area"
description: Pest control observation note

View file

@ -268,16 +268,22 @@ classes:
description: |
Typical environmental conditions for this storage type.
MIGRATED 2026-01-15: Replaces typical_condition slot.
Uses Condition class with condition_description for specifications.
Uses Condition class with has_or_had_description for specifications.
examples:
- value:
- condition_description: "18-20°C, 45-55% RH, <50 lux, UV-filtered"
- has_or_had_description:
description_text: "18-20°C, 45-55% RH, <50 lux, UV-filtered"
description_type: condition
description: Archive depot conditions
- value:
- condition_description: "-18°C to 4°C, 30-35% RH, dark"
- has_or_had_description:
description_text: "-18°C to 4°C, 30-35% RH, dark"
description_type: condition
description: Cold storage conditions
- value:
- condition_description: "18-22°C, 45-55% RH, UV-filtered, vibration-free"
- has_or_had_description:
description_text: "18-22°C, 45-55% RH, UV-filtered, vibration-free"
description_type: condition
description: Art storage conditions
# was: target_material - migrated per Rule 53/56 (2026-01-16)
@ -405,7 +411,9 @@ classes:
documents. Prevents acid migration, foxing, and brittleness.
# MIGRATED 2026-01-15: typical_condition → has_or_had_condition
has_or_had_condition:
- condition_description: "18-20°C, 45-55% RH, <50 lux, UV-filtered"
- has_or_had_description:
description_text: "18-20°C, 45-55% RH, <50 lux, UV-filtered"
description_type: condition
# was: target_material - migrated per Rule 53/56 (2026-01-16)
stores_or_stored:
- has_or_had_identifier: https://nde.nl/ontology/hc/material/paper
@ -450,7 +458,9 @@ classes:
Required for color photographs to prevent dye fading.
# MIGRATED 2026-01-15: typical_condition → has_or_had_condition
has_or_had_condition:
- condition_description: "-18°C to 4°C, 30-35% RH, dark"
- has_or_had_description:
description_text: "-18°C to 4°C, 30-35% RH, dark"
description_type: condition
# was: target_material - migrated per Rule 53/56 (2026-01-16)
stores_or_stored:
- has_or_had_material_type:
@ -495,7 +505,9 @@ classes:
property of depositor. Access controlled per deposit agreement.
# MIGRATED 2026-01-15: typical_condition → has_or_had_condition
has_or_had_condition:
- condition_description: "Variable, per material type and agreement"
- has_or_had_description:
description_text: "Variable, per material type and agreement"
description_type: condition
security_level: ENHANCED
has_or_had_access_frequency: REGULAR
example_instance:

View file

@ -2,7 +2,9 @@
#
# Created per slot_fixes.yaml thumbnail_url feedback migration (Rule 56)
# Creation date: 2026-01-16
# Rule compliance: 50 (ontology mapping), 56 (semantic consistency)
# Updated: 2026-01-19 - Added derives_or_derived_from and has_or_had_time_interval
# for chapter_thumbnail_timestamp migration (Rule 53)
# Rule compliance: 50 (ontology mapping), 53 (no bespoke slots), 56 (semantic consistency)
id: https://nde.nl/ontology/hc/class/Thumbnail
name: Thumbnail
@ -13,12 +15,17 @@ prefixes:
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
foaf: http://xmlns.com/foaf/0.1/
prov: http://www.w3.org/ns/prov#
default_prefix: hc
imports:
- linkml:types
- ../slots/has_or_had_url
- ../slots/derives_or_derived_from
- ../slots/has_or_had_time_interval
- ./Video
- ./TimeInterval
classes:
Thumbnail:
@ -31,6 +38,17 @@ classes:
typically used for preview purposes in search results, galleries,
and navigation interfaces.
**DERIVATION FROM VIDEO** (2026-01-19 migration):
When a thumbnail is extracted from a video, use:
- `derives_or_derived_from` → Video (source video reference)
- `has_or_had_time_interval` → TimeInterval (frame timestamp)
This replaces the deprecated `chapter_thumbnail_timestamp` float field
with a structured representation that supports:
- Explicit source video reference (provenance)
- Precise timestamp with ISO 8601 duration format
- Multiple timestamp formats (seconds, HH:MM:SS, ISO duration)
**CONSISTENCY PATTERN** (Rule 56):
Uses structured class rather than simple URL for consistency with
other media reference patterns and extensibility:
@ -48,19 +66,55 @@ classes:
- Alternative text for accessibility
- Format (JPEG, PNG, WebP)
- Generation timestamp
- Source image reference
- Source image/video reference
**ONTOLOGY ALIGNMENT**:
- **Primary**: `schema:ImageObject` (Schema.org)
- **Close**: `foaf:Image` (FOAF)
- **Derivation**: `prov:wasDerivedFrom` (PROV-O)
slots:
- has_or_had_url
- derives_or_derived_from
- has_or_had_time_interval
slot_usage:
has_or_had_url:
required: true
description: URL of the thumbnail image
examples:
- value: "https://i.ytimg.com/vi/ABC123/hq1.jpg"
description: YouTube thumbnail URL
derives_or_derived_from:
description: |
Source video from which this thumbnail was extracted.
Use when the thumbnail represents a specific video frame.
range: Video
inlined: true
required: false
examples:
- value:
has_or_had_url: "https://www.youtube.com/watch?v=ABC123"
description: Thumbnail derived from YouTube video
has_or_had_time_interval:
description: |
Timestamp in the source video from which this thumbnail was extracted.
Captures the frame time as a duration from video start.
**MIGRATION NOTE**: Replaces deprecated `chapter_thumbnail_timestamp` float.
The float value (seconds) should be converted to ISO 8601 duration format.
Example conversions:
- 122.5 seconds → PT2M2.5S (2 minutes, 2.5 seconds)
- 3600 seconds → PT1H (1 hour)
range: TimeInterval
inlined: true
required: false
examples:
- value:
duration_value: "PT2M2.5S"
duration_description: "Thumbnail from 2:02.5 in video"
description: Frame extracted at 122.5 seconds
exact_mappings:
- foaf:Image
@ -69,9 +123,18 @@ classes:
specificity_score: "0.40"
specificity_rationale: "Medium specificity - thumbnails used broadly for media preview."
migration_date: "2026-01-16"
migration_rule: "Rule 56 (semantic consistency over simplicity)"
migration_updated: "2026-01-19"
migration_rule: "Rule 53 (no bespoke slots), Rule 56 (semantic consistency)"
examples:
- value:
has_or_had_url: "https://example.org/thumbnails/rijksmuseum-night-watch-thumb.jpg"
description: "Thumbnail for Night Watch painting"
description: "Simple thumbnail with URL only"
- value:
has_or_had_url: "https://i.ytimg.com/vi/ABC123/hq1.jpg"
derives_or_derived_from:
has_or_had_url: "https://www.youtube.com/watch?v=ABC123"
has_or_had_time_interval:
duration_value: "PT2M2.5S"
duration_description: "Frame at 2:02.5"
description: "Video-derived thumbnail with timestamp (replaces chapter_thumbnail_timestamp: 122.5)"

View file

@ -0,0 +1,140 @@
# Unit - Simple unit class for measurement values
# Created per slot_fixes.yaml migration for: collection_size
# Creation date: 2026-01-19
#
# Rule compliance:
# - Rule 38: Slot centralization with semantic URIs
# - Rule 39: RiC-O temporal naming conventions
# - Rule 53: Generic reusable slots
#
# Note: For complex unit definitions, use MeasureUnit class instead.
# This class is for simple, label-based unit specifications.
id: https://nde.nl/ontology/hc/classes/Unit
name: Unit
title: Unit
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
qudt: http://qudt.org/schema/qudt/
schema: http://schema.org/
imports:
- linkml:types
- ../slots/has_or_had_label
default_range: string
default_prefix: hc
classes:
Unit:
description: >-
A simple unit of measurement for quantities.
**PURPOSE**:
Lightweight unit class for cases where a simple label suffices.
For complex unit definitions with conversion factors, symbols,
and dimensional analysis, use MeasureUnit class instead.
**COMMON UNITS FOR HERITAGE COLLECTIONS**:
| Unit | Description | Example Usage |
|------|-------------|---------------|
| item | Individual objects | "500 items" |
| species | Biological species | "200 species" |
| specimen | Individual specimens | "10,000 specimens" |
| volume | Books/bound volumes | "50,000 volumes" |
| linear_meter | Archival extent | "500 linear meters" |
| hectare | Site area | "32 hectares" |
| square_meter | Floor area | "10,000 m²" |
**QUDT ALIGNMENT**:
Maps to `qudt:Unit` for semantic interoperability.
**RELATIONSHIP TO MeasureUnit**:
Unit is a simplified alternative to MeasureUnit. Use Unit when:
- Only a text label is needed
- No conversion factors required
- Simple quantity expressions
Use MeasureUnit when:
- Need unit symbols and codes
- Require dimensional analysis
- Complex unit conversions needed
class_uri: qudt:Unit
exact_mappings:
- qudt:Unit
close_mappings:
- schema:unitCode
- schema:unitText
slots:
- has_or_had_label
attributes:
unit_value:
range: string
description: >-
The unit identifier or label (e.g., "item", "species", "hectare").
examples:
- value: "item"
description: Countable objects
- value: "species"
description: Biological species count
- value: "linear_meter"
description: Archival extent measurement
- value: "hectare"
description: Land area
unit_uri:
range: uriorcurie
description: >-
Optional URI for the unit in a standard vocabulary (QUDT, OM).
examples:
- value: "qudt:NUM"
description: QUDT number/count unit
- value: "om:hectare"
description: OM hectare unit
annotations:
custodian_types: '["*"]'
custodian_types_rationale: >-
Units apply to all heritage custodian types for measurement.
custodian_types_primary: "*"
specificity_score: 0.2
specificity_rationale: >-
Very low specificity - fundamental measurement concept.
examples:
- value: |
Unit:
unit_value: "item"
has_or_had_label:
- label_text: "Items"
description: Simple item count unit.
- value: |
Unit:
unit_value: "species"
has_or_had_label:
- label_text: "Species"
unit_uri: "dwc:individualCount"
description: Biological species count unit.
- value: |
Unit:
unit_value: "linear_meter"
has_or_had_label:
- label_text: "Linear Meters"
unit_uri: "qudt:M"
description: Archival extent unit.
comments:
- Created from slot_fixes.yaml migration (2026-01-19)
- Lightweight alternative to MeasureUnit class
- Use with has_or_had_unit slot
- For collection_size migration - default unit is "item"

View file

@ -14,7 +14,8 @@ description: 'Specialized CustodianType for heritage custodians where the instit
imports:
- linkml:types
- ./CustodianType
- ../slots/classification_status
- ../slots/has_or_had_status # was: classification_status - migrated per Rule 53 (2026-01-19)
- ./ClassificationStatus # for has_or_had_status range - added 2026-01-19
- ../slots/has_or_had_custodian_type
- ../slots/has_or_had_data_quality_flag
- ../slots/evidence_gap
@ -31,7 +32,6 @@ imports:
- ./TemplateSpecificityTypes
- ./Hypothesis # for asserts_or_asserted range
- ../slots/asserts_or_asserted
- ../slots/classification_status
- ../slots/evidence_gap
- ../slots/has_or_had_custodian_type
- ../slots/has_or_had_data_quality_flag
@ -214,7 +214,7 @@ classes:
- schema:Thing
- prov:Activity
slots:
- classification_status
- has_or_had_status # was: classification_status - migrated per Rule 53 (2026-01-19)
- has_or_had_custodian_type
- has_or_had_data_quality_flag
- evidence_gap
@ -224,15 +224,31 @@ classes:
- has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17)
- asserts_or_asserted # was: type_hypothesis - migrated per Rule 53
slot_usage:
classification_status:
range: string
has_or_had_status: # was: classification_status - migrated per Rule 53 (2026-01-19)
range: ClassificationStatus
required: true
inlined: true
description: |
Current status of type classification attempt.
MIGRATED 2026-01-19: Replaces classification_status string with structured ClassificationStatus.
examples:
- value: Type indeterminate - insufficient evidence
- value:
has_or_had_type:
type: IndeterminateStatus
has_or_had_label: "Indeterminate"
has_or_had_description: "Type indeterminate - insufficient evidence"
description: Defunct organization, minimal records
- value: Type ambiguous - conflicting descriptions
- value:
has_or_had_type:
type: AmbiguousStatus
has_or_had_label: "Ambiguous"
has_or_had_description: "Sources conflict: museum (website) vs archive (ISIL)"
description: Called museum but operates as archive
- value: Type transitional - merger in progress
- value:
has_or_had_type:
type: TransitionalStatus
has_or_had_label: "Transitional"
has_or_had_description: "Type transitional - merger in progress"
description: Reorganization underway
evidence_gap:
range: string

View file

@ -0,0 +1,121 @@
# Video - Video media resource
#
# Created per slot_fixes.yaml chapter_thumbnail_timestamp migration (Rule 53/56)
# Creation date: 2026-01-19
# Rule compliance: 50 (ontology mapping), 53 (no bespoke slots), 56 (semantic consistency)
id: https://nde.nl/ontology/hc/class/Video
name: Video
title: Video Media Resource
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
ma: http://www.w3.org/ns/ma-ont#
dcterms: http://purl.org/dc/terms/
imports:
- linkml:types
- ../slots/has_or_had_url
- ../slots/has_or_had_identifier
- ../slots/has_or_had_label
- ./Label
default_prefix: hc
classes:
Video:
class_uri: schema:VideoObject
description: |
Video media resource.
**DEFINITION**:
Represents a video file or stream that can be referenced as source
material for thumbnails, clips, chapters, and annotations. This class
enables structured representation of video resources with their
identifiers and URLs.
**HERITAGE INSTITUTION USE CASES**:
| Content Type | Examples |
|--------------|----------|
| Virtual tours | Museum walkthrough videos |
| Conservation | Restoration process documentation |
| Interviews | Oral history recordings |
| Lectures | Educational content, curator talks |
| Exhibitions | Exhibition documentation videos |
**PLATFORM SUPPORT**:
| Platform | Identifier | URL Pattern |
|----------|------------|-------------|
| YouTube | Video ID (11 chars) | youtube.com/watch?v={id} |
| Vimeo | Video ID (numeric) | vimeo.com/{id} |
| Wistia | Hashed ID | wistia.com/medias/{id} |
| Self-hosted | Custom | Institution-specific |
**RELATIONSHIP TO Thumbnail**:
Thumbnails are derived from Videos using the `derives_or_derived_from`
relationship, with the specific frame time captured via `has_or_had_time_interval`.
**ONTOLOGY ALIGNMENT**:
- **Primary**: `schema:VideoObject` (Schema.org)
- **Close**: `ma:MediaResource` (W3C Media Ontology)
slots:
- has_or_had_url
- has_or_had_identifier
- has_or_had_label
slot_usage:
has_or_had_url:
required: true
description: URL of the video resource (e.g., YouTube, Vimeo, self-hosted)
examples:
- value: "https://www.youtube.com/watch?v=ABC123def45"
description: YouTube video URL
- value: "https://vimeo.com/123456789"
description: Vimeo video URL
has_or_had_identifier:
description: Platform-specific video identifier
examples:
- value:
identifier_scheme: "YouTube"
identifier_value: "ABC123def45"
description: YouTube video ID
has_or_had_label:
description: Title of the video
range: Label
inlined: true
exact_mappings:
- ma:MediaResource
close_mappings:
- dcterms:MovingImage
annotations:
specificity_score: "0.45"
specificity_rationale: >-
Medium specificity - video resources are common across heritage platforms
but more specialized than generic media.
migration_date: "2026-01-19"
migration_rule: "Rule 53 (no bespoke slots), Rule 56 (semantic consistency)"
examples:
- value:
has_or_had_url: "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
has_or_had_identifier:
identifier_scheme: "YouTube"
identifier_value: "dQw4w9WgXcQ"
has_or_had_label:
has_or_had_label: "Rijksmuseum Virtual Tour 2024"
language: "en"
description: "YouTube video with identifier and title"
- value:
has_or_had_url: "https://vimeo.com/987654321"
has_or_had_label:
has_or_had_label: "Conservation of The Night Watch"
language: "en"
description: "Vimeo video for conservation documentation"

View file

@ -23,8 +23,12 @@ imports:
- ../slots/chapter_source
- ../slots/chapter_start_seconds
- ../slots/chapter_start_time
- ../slots/chapter_thumbnail_timestamp
- ../slots/chapter_thumbnail_url
# REMOVED 2026-01-18: ../slots/chapter_thumbnail_url - migrated to has_or_had_thumbnail + Thumbnail (Rule 53)
# REMOVED 2026-01-19: ../slots/chapter_thumbnail_timestamp - migrated to Thumbnail.has_or_had_time_interval (Rule 53)
- ../slots/has_or_had_thumbnail # was: chapter_thumbnail_url - migrated per Rule 53 (2026-01-18)
- ./Thumbnail # Updated 2026-01-19: now includes derives_or_derived_from and has_or_had_time_interval
- ./Video # Added 2026-01-19: for Thumbnail.derives_or_derived_from
- ./TimeInterval # Added 2026-01-19: for Thumbnail.has_or_had_time_interval
- ../slots/has_or_had_label # was: chapter_title - migrated per Rule 53/56 (2026-01-18)
- ./Label
- ../slots/nesting_level
@ -82,8 +86,8 @@ classes:
- chapter_source
- chapter_start_seconds
- chapter_start_time
- chapter_thumbnail_timestamp
- chapter_thumbnail_url
# REMOVED 2026-01-19: chapter_thumbnail_timestamp - migrated to Thumbnail.has_or_had_time_interval (Rule 53)
- has_or_had_thumbnail # was: chapter_thumbnail_url - migrated per Rule 53 (2026-01-18)
- has_or_had_label # was: chapter_title - migrated per Rule 53/56 (2026-01-18)
- nesting_level
- parent_chapter_id
@ -177,19 +181,36 @@ classes:
examples:
- value: MANUAL
description: Creator manually added chapters
chapter_thumbnail_url:
range: uri
has_or_had_thumbnail: # was: chapter_thumbnail_url - migrated per Rule 53 (2026-01-18)
description: |
MIGRATED from chapter_thumbnail_url per slot_fixes.yaml (Rule 53, 2026-01-18).
UPDATED 2026-01-19: chapter_thumbnail_timestamp now captured via Thumbnail.has_or_had_time_interval.
Thumbnail image for this chapter, used for preview in video players.
Uses Thumbnail class for structured representation with:
- URL of the thumbnail image
- derives_or_derived_from: source Video reference
- has_or_had_time_interval: frame timestamp as TimeInterval
**Platform Behavior**:
- YouTube: Auto-selects keyframe from chapter start
- Vimeo: Allows custom chapter thumbnails
range: Thumbnail
inlined: true
required: false
examples:
- value: https://i.ytimg.com/vi/ABC123/hq1.jpg
description: YouTube chapter thumbnail
chapter_thumbnail_timestamp:
range: float
required: false
minimum_value: 0.0
examples:
- value: 122.5
description: Thumbnail from 2:02.5
- value:
has_or_had_url: "https://i.ytimg.com/vi/ABC123/hq1.jpg"
description: Simple thumbnail with URL only
- value:
has_or_had_url: "https://i.ytimg.com/vi/ABC123/hq1.jpg"
derives_or_derived_from:
has_or_had_url: "https://www.youtube.com/watch?v=ABC123"
has_or_had_time_interval:
duration_value: "PT2M2.5S"
duration_description: "Frame at 2:02.5 (was chapter_thumbnail_timestamp: 122.5)"
description: Thumbnail with source video and timestamp (replaces chapter_thumbnail_timestamp)
# REMOVED 2026-01-19: chapter_thumbnail_timestamp - migrated to Thumbnail.has_or_had_time_interval (Rule 53)
parent_chapter_id:
range: string
required: false

View file

@ -12,7 +12,8 @@ imports:
- ./TemplateSpecificityType
- ./TemplateSpecificityTypes
- ../enums/ChapterSourceEnum
# REMOVED 2026-01-19: ChapterSourceEnum - migrated to Source class (Rule 53)
# - ../enums/ChapterSourceEnum
# REMOVED - migrated to has_or_had_identifier with VideoIdentifier (2026-01-14, Rule 53)
# - ../slots/video_id
- ../slots/has_or_had_identifier
@ -21,8 +22,16 @@ imports:
# REMOVED 2026-01-14: ../slots/total_chapter - migrated to has_or_had_quantity with Quantity
- ../slots/has_or_had_quantity
- ./Quantity
- ../slots/chapters_source
- ../slots/chapters_generated_at
# REMOVED 2026-01-19: chapters_source - migrated to has_or_had_source + Source (Rule 53)
# - ../slots/chapters_source
- ../slots/has_or_had_source
- ./Source
# REMOVED 2026-01-19: chapters_generated_at - migrated to is_or_was_generated_by + GenerationEvent (Rule 53)
# - ../slots/chapters_generated_at
- ../slots/is_or_was_generated_by
- ./GenerationEvent
- ./Provenance
- ./TimeSpan
- ../slots/covers_full_video
prefixes:
linkml: https://w3id.org/linkml/
@ -52,8 +61,12 @@ classes:
- schema:ItemList
slots:
- has_or_had_chapter
- chapters_generated_at
- chapters_source
# REMOVED 2026-01-19: chapters_generated_at - migrated to is_or_was_generated_by + GenerationEvent (Rule 53)
# - chapters_generated_at
- is_or_was_generated_by
# REMOVED 2026-01-19: chapters_source - migrated to has_or_had_source + Source (Rule 53)
# - chapters_source
- has_or_had_source
- covers_full_video
- has_or_had_quantity # ADDED 2026-01-14: replaces total_chapter
- specificity_annotation
@ -100,12 +113,58 @@ classes:
has_or_had_type: CHAPTER
has_or_had_symbol: "chapters"
description: 12 chapters in this video
chapters_source:
range: ChapterSourceEnum
# REMOVED 2026-01-19: chapters_source - migrated to has_or_had_source + Source (Rule 53)
# chapters_source:
# range: ChapterSourceEnum
# required: false
has_or_had_source:
description: >-
Primary source for this chapter list. Uses Source class to capture
how chapters were generated (manual, AI, imported, etc.).
range: Source
required: false
chapters_generated_at:
range: datetime
inlined: true
examples:
- value:
has_or_had_type: MANUAL
has_or_had_label: "Creator-defined chapters"
description: Manually defined chapters
- value:
has_or_had_type: YOUTUBE_AI
has_or_had_label: "YouTube Auto-Chapters"
description: YouTube AI-generated chapters
- value:
has_or_had_type: WHISPER_CHAPTERS
has_or_had_label: "Whisper Analysis"
has_or_had_description: "Generated from transcript topic segmentation"
description: Whisper-derived chapters
# REMOVED 2026-01-19: chapters_generated_at - migrated to is_or_was_generated_by + GenerationEvent (Rule 53)
# chapters_generated_at:
# range: datetime
# required: false
is_or_was_generated_by:
description: >-
Generation event capturing when and how the chapter list was created.
MIGRATED 2026-01-19: Replaces chapters_generated_at slot (Rule 53).
range: GenerationEvent
required: false
inlined: true
examples:
- value:
temporal_extent:
begin_of_the_begin: "2024-01-15T10:30:00Z"
end_of_the_end: "2024-01-15T10:30:00Z"
has_or_had_provenance:
has_or_had_agent:
has_or_had_type: SOFTWARE
has_or_had_name: "YouTube Auto-Chapters"
has_or_had_description: "AI-generated chapters from video analysis"
description: AI chapter generation event with timestamp and provenance
- value:
temporal_extent:
begin_of_the_begin: "2024-03-20T14:00:00Z"
has_or_had_description: "Manually created by content creator"
description: Manual chapter creation event
covers_full_video:
range: boolean
required: false

View file

@ -14,7 +14,7 @@ imports:
- ./Author
- ../slots/comment_author_channel_id
# REMOVED 2026-01-18: ../slots/comment_id - migrated to has_or_had_identifier + Identifier (Rule 53)
- ../slots/comment_count
# REMOVED 2026-01-18: ../slots/comment_count - migrated to has_or_had_quantity + Quantity (Rule 53)
- ../slots/comment_like_count
# REMOVED 2026-01-18: ../slots/comment_published_at - migrated to temporal_extent + TimeSpan (Rule 53)
- ../slots/temporal_extent
@ -214,7 +214,7 @@ classes:
- has_aspect_ratio
- has_available_caption_language
- caption_available
- comment_count
# REMOVED 2026-01-18: comment_count - migrated to has_or_had_quantity + Quantity (Rule 53)
- comments_fetched
- default_audio_language
- default_language
@ -299,17 +299,32 @@ classes:
has_or_had_quantity:
range: Quantity
inlined: true
description: >-
View count for video. RULE 53: Replaces deprecated view_count with
structured Quantity class supporting measurement unit (VIEW) and
temporal extent for point-in-time observation.
multivalued: true
description: |
Quantified metrics for video content. RULE 53: Replaces deprecated
view_count and comment_count with structured Quantity class supporting
measurement unit and temporal extent for point-in-time observation.
MIGRATED SLOTS:
- view_count → Quantity with has_or_had_measurement_unit: VIEW (2026-01-15)
- comment_count → Quantity with has_or_had_measurement_unit: COMMENT (2026-01-18)
examples:
- value:
numeric_value: 132
has_or_had_measurement_unit: VIEW
quantity_value: 132
quantity_type: VIEW_COUNT
has_or_had_measurement_unit:
has_or_had_type: VIEW
temporal_extent:
begin_of_the_begin: "2025-12-01T23:16:22Z"
description: 132 views at observation time
- value:
quantity_value: 42
quantity_type: ENGAGEMENT_COUNT
has_or_had_measurement_unit:
has_or_had_type: COMMENT
temporal_extent:
begin_of_the_begin: "2025-12-01T23:16:22Z"
description: 42 comments at observation time (migrated from comment_count)
like_count:
range: integer
required: false
@ -321,13 +336,14 @@ classes:
range: integer
required: false
minimum_value: 0
comment_count:
range: integer
required: false
minimum_value: 0
examples:
- value: 0
description: No comments at observation time
# REMOVED 2026-01-18: comment_count - migrated to has_or_had_quantity + Quantity (Rule 53)
# comment_count:
# range: integer
# required: false
# minimum_value: 0
# examples:
# - value: 0
# description: No comments at observation time
favorite_count:
range: integer
required: false

View file

@ -4,7 +4,7 @@ title: Video Text Content Class
imports:
- linkml:types
- ./VideoPost
- ../slots/character_count
# REMOVED 2026-01-18: ../slots/character_count - migrated to has_or_had_quantity + Quantity (Rule 53)
- ../slots/content_language
- ../slots/content_title
- ../slots/generated_by
@ -25,9 +25,10 @@ imports:
# REMOVED: ../slots/verified_by - migrated to is_or_was_verified_by with Verifier (2026-01-14, Rule 53)
- ../slots/is_or_was_verified_by
- ./Verifier
# REMOVED: ../slots/word_count - migrated to has_or_had_quantity with WordCount (2026-01-14, Rule 53)
# REMOVED: ../slots/word_count - migrated to has_or_had_quantity with Quantity (2026-01-14, Rule 53)
# REMOVED 2026-01-18: ../slots/character_count - also migrated to has_or_had_quantity + Quantity (Rule 53)
- ../slots/has_or_had_quantity
- ./WordCount
- ./Quantity # was: ./WordCount - updated 2026-01-18 to use generic Quantity class
- ./SpecificityAnnotation
- ./TemplateSpecificityScore # was: TemplateSpecificityScores - migrated per Rule 53 (2026-01-17)
@ -79,7 +80,7 @@ classes:
- schema:CreativeWork
- dcterms:Text
slots:
- character_count
# REMOVED 2026-01-18: character_count - migrated to has_or_had_quantity + Quantity (Rule 53)
- content_language
- content_title
- generated_by
@ -236,26 +237,41 @@ classes:
# examples:
# - value: 1523
# description: 1,523 words in transcript
has_or_had_quantity:
range: WordCount
has_or_had_quantity: # was: word_count + character_count - migrated per Rule 53 (2026-01-14, 2026-01-18)
range: Quantity
required: false
multivalued: true
inlined: true
inlined_as_list: true
description: |
Word count in the transcript.
MIGRATED from word_count slot (2026-01-14) per Rule 53.
Quantitative measurements of the text content.
MIGRATED: word_count (2026-01-14) and character_count (2026-01-18) per Rule 53.
Uses WordCount class for structured quantity with value.
Uses Quantity class for structured quantity with value, type, and unit.
Can represent word count, character count, or other text metrics.
examples:
- value: |
value: 1523
description: 1,523 words in transcript
character_count:
range: integer
required: false
minimum_value: 0
examples:
- value: 8742
description: 8,742 characters
- value:
- quantity_value: 1523
quantity_type: WORD_COUNT
has_or_had_measurement_unit:
has_or_had_type: WORD
has_or_had_symbol: "words"
has_or_had_description: Word count in transcript
- quantity_value: 8742
quantity_type: CHARACTER_COUNT
has_or_had_measurement_unit:
has_or_had_type: CHARACTER
has_or_had_symbol: "chars"
has_or_had_description: Character count including spaces
description: Text metrics (word and character count)
# DEPRECATED 2026-01-18: character_count - migrated to has_or_had_quantity + Quantity (Rule 53)
# character_count:
# range: integer
# required: false
# minimum_value: 0
# examples:
# - value: 8742
# description: 8,742 characters
comments:
- Abstract base for all video-derived text content
- Comprehensive PROV-O provenance tracking

View file

@ -13,6 +13,7 @@ prefixes:
nif: http://persistence.uni-leipzig.org/nlp2rdf/ontologies/nif-core#
imports:
- linkml:types
- ./Claim # Base class - added 2026-01-19 per Rule 53/56
- ../slots/source_url
- ../slots/retrieved_on
- ../slots/has_or_had_provenance_path
@ -20,17 +21,24 @@ imports:
# REMOVED 2026-01-18: ../slots/claim_id - migrated to has_or_had_identifier + Identifier (Rule 53)
- ../slots/has_or_had_identifier
- ./Identifier
- ../slots/claim_type
# REMOVED 2026-01-19: ../slots/claim_type - migrated to has_or_had_type + ClaimType (Rule 53)
- ../slots/has_or_had_type
- ./ClaimType
- ./ClaimTypes
# REMOVED 2026-01-18: ../slots/claim_value - migrated to has_or_had_content + Content (Rule 53)
- ../slots/has_or_had_content
- ./Content
- ../slots/extraction_timestamp
- ../slots/specificity_annotation
- ../slots/has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17)
- ../slots/claim_extraction_method
# REMOVED 2026-01-19: ../slots/claim_extraction_method - migrated to is_or_was_extracted_using + ExtractionMethod (Rule 53)
- ../slots/is_or_was_extracted_using
- ./ExtractionMethod
- ../slots/pipeline_stage
- ../slots/claim_note
- ../enums/ClaimTypeEnum
# REMOVED 2026-01-18: ../slots/claim_note - migrated to has_or_had_note + Note (Rule 53)
- ../slots/has_or_had_note
- ./Note
# REMOVED 2026-01-19: ../enums/ClaimTypeEnum - migrated to ClaimType/ClaimTypes classes (Rule 53)
- ../enums/ExtractionPipelineStageEnum
- ./SpecificityAnnotation
- ./TemplateSpecificityScore # was: TemplateSpecificityScores - migrated per Rule 53 (2026-01-17)
@ -40,6 +48,7 @@ imports:
default_prefix: hc
classes:
WebClaim:
is_a: Claim # Inherits from base Claim class - added 2026-01-19 per Rule 53/56
class_uri: prov:Entity
description: "A single verifiable claim extracted from a web page.\n\n**CORE PRINCIPLE: XPATH OR REMOVE**\n\nEvery claim\
\ extracted from a webpage MUST have:\n1. `has_or_had_provenance_path` - XPath object pointing to exact element in archived HTML\n2. `html_file` - path\
@ -73,11 +82,13 @@ classes:
- schema:PropertyValue
- oa:Annotation
slots:
- claim_extraction_method
- is_or_was_extracted_using # was: claim_extraction_method - migrated per Rule 53/56 (2026-01-19)
# REMOVED 2026-01-18: claim_id - migrated to has_or_had_identifier + Identifier (Rule 53)
- has_or_had_identifier
- claim_note
- claim_type
# REMOVED 2026-01-18: claim_note - migrated to has_or_had_note + Note (Rule 53)
- has_or_had_note
# REMOVED 2026-01-19: claim_type - migrated to has_or_had_type + ClaimType (Rule 53)
- has_or_had_type
# REMOVED 2026-01-18: claim_value - migrated to has_or_had_content + Content (Rule 53)
- has_or_had_content
- extraction_timestamp
@ -103,8 +114,66 @@ classes:
identifier_scheme: web_claim_id
identifier_value: "claim-2025-11-29-001"
description: Web claim identifier
claim_type:
# MIGRATED 2026-01-19: claim_type → has_or_had_type + ClaimType (Rule 53/56)
has_or_had_type:
description: |
MIGRATED from claim_type per slot_fixes.yaml (Rule 53/56, 2026-01-19).
The type of claim being made (e.g., full_name, email, facebook).
Uses ClaimType class hierarchy for structured type representation:
- IdentityClaimType: full_name, short_name, description, legal_name
- ContactClaimType: email, phone, address, website
- SocialMediaClaimType: facebook, twitter, instagram, linkedin, youtube
- MediaClaimType: logo_url, favicon_url, og_image_url
- OperationalClaimType: opening_hours, admission_info, accessibility_info
- CollectionClaimType: collection_count, beeldbank statistics
- OrganizationalClaimType: founding_date, kvk_number, legal_form
- DocumentClaimType: annual_report_url, policy_document_url
- GeographicClaimType: street_address, postal_code, city, province
- ArchivalClaimType: archief_description, beeldbank_description
range: ClaimType
inlined: true
required: true
examples:
- value:
has_or_had_label: full_name
description: Identity claim for organization name
- value:
has_or_had_label: facebook
description: Social media claim for Facebook URL
# MIGRATED 2026-01-18: claim_note → has_or_had_note + Note (Rule 53/56)
has_or_had_note:
description: |
MIGRATED from claim_note per slot_fixes.yaml (Rule 53/56, 2026-01-18).
Notes about this specific claim extraction.
Uses Note class with note_type, note_content, note_date fields.
**Note Type Mapping**:
- `note_type`: "claim" (default for WebClaim notes)
- `note_content`: The actual note text
- `note_date`: When the note was created
**Use Cases**:
- Document extraction issues
- Note special circumstances
- Record conflicts with other sources
range: Note
inlined: true
inlined_as_list: true
multivalued: true
required: false
examples:
- value:
note_type: claim
note_content: "Additional verification required for this claim."
note_date: "2026-01-18"
description: Verification note for claim
- value:
note_type: extraction
note_content: "Biography truncated from longer text on page."
note_date: "2025-11-29"
description: Extraction processing note
# MIGRATED 2026-01-18: claim_value → has_or_had_content + Content (Rule 53/56)
has_or_had_content:
description: |
@ -149,6 +218,31 @@ classes:
Contains expression, matched_text, and match_score.
html_file:
required: true
# MIGRATED 2026-01-19: claim_extraction_method → is_or_was_extracted_using + ExtractionMethod (Rule 53/56)
is_or_was_extracted_using:
description: |
MIGRATED from claim_extraction_method per slot_fixes.yaml (Rule 53/56, 2026-01-19).
Method used to extract this claim from the source document.
Uses ExtractionMethod class to represent structured extraction method information.
**Common Extraction Methods**:
- `xpath_exact_match` - XPath pointed to exact element containing value
- `xpath_fuzzy_match` - XPath with partial/substring match
- `nlp_ner` - Named Entity Recognition extraction
- `json_ld_parse` - Parsed from embedded JSON-LD structured data
- `meta_tag` - Extracted from HTML meta tags
- `manual` - Human-verified extraction
range: ExtractionMethod
inlined: true
required: false
examples:
- value:
has_or_had_label: xpath_exact_match
description: XPath extraction with exact match
- value:
has_or_had_label: nlp_ner
description: NLP Named Entity Recognition extraction
rules:
- preconditions:
slot_conditions:
@ -165,6 +259,9 @@ classes:
- 'Follows 4-stage GLAM-NER pipeline: recognition → layout → resolution → linking'
- 'MIGRATED 2026-01-15: xpath/xpath_match_score/xpath_matched_text → has_or_had_provenance_path (XPath class)'
- 'MIGRATED 2026-01-18: claim_value → has_or_had_content (Content class) per Rule 53/56'
- 'MIGRATED 2026-01-18: claim_note → has_or_had_note (Note class) per Rule 53/56'
- 'MIGRATED 2026-01-19: claim_extraction_method → is_or_was_extracted_using (ExtractionMethod class) per Rule 53/56'
- 'MIGRATED 2026-01-19: claim_type → has_or_had_type (ClaimType/ClaimTypes classes) per Rule 53/56'
see_also:
- rules/WEB_OBSERVATION_PROVENANCE_RULES.md
- scripts/fetch_website_playwright.py
@ -172,7 +269,8 @@ classes:
- docs/convention/schema/20251202/entity_annotation_rules_v1.6.0_unified.yaml
examples:
- value:
claim_type: full_name
has_or_had_type:
has_or_had_label: full_name
has_or_had_content:
has_or_had_label: Historische Vereniging Nijeveen
source_url: https://historischeverenigingnijeveen.nl/
@ -183,9 +281,10 @@ classes:
source_document: web/0021/historischeverenigingnijeveen.nl/rendered.html
html_file: web/0021/historischeverenigingnijeveen.nl/rendered.html
pipeline_stage: layout_analysis
description: Exact match claim for organization name (claim_value migrated to has_or_had_content)
description: Exact match claim for organization name (claim_type migrated to has_or_had_type)
- value:
claim_type: beeldbank_total_photos
has_or_had_type:
has_or_had_label: beeldbank_total_photos
has_or_had_content:
has_or_had_label: '6253'
source_url: https://historischeverenigingnijeveen.nl/nl/hvn
@ -198,7 +297,8 @@ classes:
pipeline_stage: layout_analysis
description: Collection count claim from image bank statistics
- value:
claim_type: facebook
has_or_had_type:
has_or_had_label: facebook
has_or_had_content:
has_or_had_label: https://www.facebook.com/HistorischeVerenigingNijeveen/
source_url: https://historischeverenigingnijeveen.nl/
@ -211,7 +311,8 @@ classes:
pipeline_stage: entity_linking
description: Social media link claim - entity linking stage
- value:
claim_type: website
has_or_had_type:
has_or_had_label: website
has_or_had_content:
has_or_had_label: https://www.historischeverenigingnijeveen.nl/
source_url: https://historischeverenigingnijeveen.nl/nl/hvn

View file

@ -15,10 +15,12 @@ prefixes:
imports:
- linkml:types
- ../slots/warrants_or_warranted # was: claim - migrated per Rule 53/56 (2026-01-19)
- ../slots/has_or_had_quantity # was: claims_count - migrated per Rule 53 (2026-01-19)
- ./Claim # Base class for warrants_or_warranted range
- ./InvalidWebClaim
- ./LayoutMetadata
- ./Quantity # for has_or_had_quantity range - added 2026-01-19
- ./ValidationMetadata
- ./WebClaim
default_range: string
@ -42,18 +44,34 @@ classes:
- schema:Collection
related_mappings:
- prov:Entity
slots:
- has_or_had_quantity # was: claims_count attribute - migrated per Rule 53 (2026-01-19)
slot_usage:
has_or_had_quantity:
range: Quantity
inlined: true
description: |
Number of claims in this block.
MIGRATED 2026-01-19: Replaces claims_count integer attribute with structured Quantity.
Use quantity_type: CLAIM_COUNT for claim counts.
examples:
- value:
quantity_value: 47
quantity_type: CLAIM_COUNT
has_or_had_description: "Web claims extracted from archived website"
description: Claim count with structured quantity
attributes:
extraction_timestamp:
range: datetime
source_archive:
range: string
description: Path to source archive directory
claims_count:
range: integer
claim:
# claims_count removed 2026-01-19 - use has_or_had_quantity slot instead
warrants_or_warranted: # was: claim - migrated per Rule 53/56 (2026-01-19)
range: WebClaim
multivalued: true
inlined_as_list: true
description: Claims that warrant assertions about this entity (migrated from claim slot)
removed_invalid_claims:
range: InvalidWebClaim
multivalued: true

View file

@ -16,8 +16,8 @@ prefixes:
imports:
- linkml:types
- ../slots/warrants_or_warranted # was: claim - migrated per Rule 53/56 (2026-01-19)
- ./Claim # Base class for warrants_or_warranted range
- ./DuplicateEntry
- ./OrganizationalChange
- ./RawSource
@ -91,11 +91,11 @@ classes:
range: string
description: Method used to find source (exa_web_search_manual, google_search,
etc.)
claim:
warrants_or_warranted: # was: claim - migrated per Rule 53/56 (2026-01-19)
range: WebClaim
multivalued: true
inlined_as_list: true
description: Claims extracted from web content
description: Claims that warrant assertions about this entity (migrated from claim slot)
raw_sources:
range: Any
multivalued: true

View file

@ -19,7 +19,8 @@ imports:
- ../slots/source_url
- ../slots/retrieved_on
- ../slots/content_hash
- ../slots/claim
# claim ARCHIVED (2026-01-19) - migrated to warrants_or_warranted (Rule 53)
- ../slots/warrants_or_warranted
- ../slots/content_changed
- ../slots/content_type
- ../slots/etag
@ -35,50 +36,8 @@ imports:
- ../slots/has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17)
- ./SpecificityAnnotation
- ./TemplateSpecificityScore # was: TemplateSpecificityScores - migrated per Rule 53 (2026-01-17)
- ./TemplateSpecificityType
- ./TemplateSpecificityTypes
- ../slots/claim
- ../slots/content_changed
- ../slots/content_hash
- ../slots/content_type
- ../slots/etag
- ../slots/extraction_confidence
- ../slots/extraction_note
- ../slots/http_status_code
- ../slots/is_or_was_archived_at
- ../slots/last_modified
- ../slots/observation_id
- ../slots/observed_entity
- ../slots/page_title
- ../slots/previous_observation
- ../slots/retrieval_method
- ../slots/retrieved_by
- ../slots/retrieved_on
- ../slots/source_url
- ../slots/specificity_annotation
- ../slots/has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17)
- ../slots/claim
- ../slots/content_changed
- ../slots/content_hash
- ../slots/content_type
- ../slots/etag
- ../slots/extraction_confidence
- ../slots/extraction_note
- ../slots/http_status_code
- ../slots/is_or_was_archived_at
- ../slots/last_modified
- ../slots/observation_id
- ../slots/observed_entity
- ../slots/page_title
- ../slots/previous_observation
- ../slots/retrieval_method
- ../slots/retrieved_by
- ../slots/retrieved_on
- ../slots/source_url
- ../slots/specificity_annotation
- ../slots/has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17)
default_prefix: hc
classes:
WebObservation:
@ -120,7 +79,7 @@ classes:
- dcterms:source
slots:
- is_or_was_archived_at
- claim
- warrants_or_warranted # was: claim - migrated per Rule 53 (2026-01-19)
- content_changed
- content_hash
- content_type

View file

@ -345,3 +345,7 @@ classes:
image:
range: uri
description: Image URL from Wikidata (P18 property)
parent_organization:
range: Any
description: Parent organization from Wikidata (P749 property) - can be string, WikidataEntity, or complex structure with identifiers
inlined: true

View file

@ -16,7 +16,7 @@ prefixes:
imports:
- linkml:types
- ./Tag # for tag migration per Rule 53/56 (2026-01-16)
- ./Quantity # for comment_count migration per Rule 53 (2026-01-18)
- ./YoutubeComment
- ./YoutubeTranscript
default_range: string
@ -55,8 +55,17 @@ classes:
range: integer
like_count:
range: integer
comment_count:
range: integer
# MIGRATED 2026-01-18: comment_count → has_or_had_quantity + Quantity (Rule 53)
# comment_count:
# range: integer
has_or_had_quantity:
range: Quantity
multivalued: true
inlined_as_list: true
description: |
MIGRATED from comment_count (2026-01-18, Rule 53).
Quantified metrics for video content using structured Quantity class.
Supports measurement unit and temporal extent for point-in-time observation.
video_description:
range: string
duration:

View file

@ -0,0 +1,105 @@
# CauseOfDeathTypeEnum
# Enumeration of death cause types for heritage workers
#
# Generation date: 2026-01-19
# Rule compliance: 53 (slot_fixes.yaml migration)
id: https://nde.nl/ontology/hc/enum/CauseOfDeathTypeEnum
name: cause_of_death_type_enum
title: Cause Of Death Type Enumeration
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
wd: http://www.wikidata.org/entity/
default_prefix: hc
imports:
- linkml:types
- ../metadata
enums:
CauseOfDeathTypeEnum:
description: |
Categories of death causes for heritage workers and cultural professionals.
**Purpose**:
Provides structured classification of death circumstances, enabling:
- Statistical analysis of heritage worker deaths
- Documentation of conflict-related deaths
- Historical research and commemoration
**Wikidata Alignment**:
Values align with Wikidata P1196 (manner of death) concepts.
permissible_values:
NATURAL:
description: |
Death from natural causes including age, illness, or medical conditions.
Not related to conflict, violence, or occupational hazards.
meaning: wd:Q3739104 # natural causes
CONFLICT:
description: |
Death during armed conflict, including airstrikes, military operations,
shelling, or combat. Includes civilian casualties of war.
**Examples**:
- Heritage workers killed in Gaza 2023-2024
- Cultural workers killed during Syrian civil war
- Museum staff killed during WWII bombing
meaning: wd:Q197821 # killed in action
TARGETED_ATTACK:
description: |
Death from violence specifically targeting the individual due to their
role as a cultural worker, journalist, or heritage professional.
**Examples**:
- Assassination of journalists
- Targeted attacks on cultural institution staff
- Hate crimes against heritage workers
meaning: wd:Q149086 # homicide
OCCUPATIONAL:
description: |
Death from occupational hazards related to heritage work.
**Examples**:
- Exposure to conservation chemicals
- Accidents during archaeological excavation
- Structural collapse during building survey
meaning: wd:Q211429 # occupational accident
ACCIDENT:
description: |
Accidental death not related to occupation or conflict.
**Examples**:
- Traffic accidents
- Domestic accidents
- Recreational accidents
meaning: wd:Q3882219 # accidental death
PERSECUTION:
description: |
Death resulting from persecution based on identity, beliefs, ethnicity,
religion, or political views. Includes executions and ethnic cleansing.
**Examples**:
- Holocaust victims
- Cultural Revolution victims
- Political prisoners
meaning: wd:Q3882218 # murder victim
UNKNOWN:
description: |
Cause of death is unknown or undetermined.
Use when death is confirmed but circumstances are unclear.
meaning: wd:Q21171682 # unknown value
comments:
- "Aligns with Wikidata P1196 (manner of death) concepts"
- "Used by CauseOfDeath class to categorize death circumstances"
- "Important for statistical analysis and historical documentation"

View file

@ -161,6 +161,34 @@ enums:
ucum_code: "1"
unit_type: count
usage_context: digital_metrics
COMMENT:
description: Comment count unit - for social media engagement metrics
meaning: hc:CommentUnit
annotations:
ucum_code: "1"
unit_type: count
usage_context: engagement_metrics
LIKE:
description: Like count unit - for social media engagement metrics
meaning: hc:LikeUnit
annotations:
ucum_code: "1"
unit_type: count
usage_context: engagement_metrics
DISLIKE:
description: Dislike count unit - for social media engagement metrics
meaning: hc:DislikeUnit
annotations:
ucum_code: "1"
unit_type: count
usage_context: engagement_metrics
FAVORITE:
description: Favorite count unit - for social media engagement metrics
meaning: hc:FavoriteUnit
annotations:
ucum_code: "1"
unit_type: count
usage_context: engagement_metrics
# Unknown/unspecified
UNKNOWN:

View file

@ -39,5 +39,23 @@ enums:
CAPACITY:
description: Maximum capacity (seats, storage, etc.).
meaning: schema:maximumAttendeeCapacity
ENGAGEMENT_COUNT:
description: Social media engagement count (comments, likes, shares, etc.).
meaning: schema:interactionStatistic
VIEW_COUNT:
description: Number of views on digital content (video, page, etc.).
meaning: schema:interactionStatistic
OBJECT_COUNT:
description: Number of distinct objects detected or tracked.
meaning: schema:size
CLAIM_COUNT:
description: Number of claims or assertions extracted from sources.
meaning: schema:numberOfItems
CHARACTER_COUNT:
description: Number of characters in text content.
meaning: schema:characterCount
WORD_COUNT:
description: Number of words in text content.
meaning: schema:wordCount
OTHER:
description: Other type of quantity not listed.

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