diff --git a/.opencode/rules/no-migration-deferral-rule.md b/.opencode/rules/no-migration-deferral-rule.md new file mode 100644 index 0000000000..cc50631574 --- /dev/null +++ b/.opencode/rules/no-migration-deferral-rule.md @@ -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.** diff --git a/.opencode/rules/semantic-consistency-over-simplicity.md b/.opencode/rules/semantic-consistency-over-simplicity.md index d3add39c21..de80a74858 100644 --- a/.opencode/rules/semantic-consistency-over-simplicity.md +++ b/.opencode/rules/semantic-consistency-over-simplicity.md @@ -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 diff --git a/AGENTS.md b/AGENTS.md index d26a40170e..acc8a11f0b 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -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: diff --git a/frontend/public/schemas/20251121/linkml/manifest.json b/frontend/public/schemas/20251121/linkml/manifest.json index 182c13e8e3..f6dd9fb34f 100644 --- a/frontend/public/schemas/20251121/linkml/manifest.json +++ b/frontend/public/schemas/20251121/linkml/manifest.json @@ -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": { diff --git a/schemas/20251121/linkml/01_custodian_name_modular.yaml b/schemas/20251121/linkml/01_custodian_name_modular.yaml index 2f32910046..9dfc43d308 100644 --- a/schemas/20251121/linkml/01_custodian_name_modular.yaml +++ b/schemas/20251121/linkml/01_custodian_name_modular.yaml @@ -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 diff --git a/schemas/20251121/linkml/manifest.json b/schemas/20251121/linkml/manifest.json index b8b619d175..0b24f7fd3c 100644 --- a/schemas/20251121/linkml/manifest.json +++ b/schemas/20251121/linkml/manifest.json @@ -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": { diff --git a/schemas/20251121/linkml/modules/classes/ActivityTypes.yaml b/schemas/20251121/linkml/modules/classes/ActivityTypes.yaml index e2473114cb..001fdaac13 100644 --- a/schemas/20251121/linkml/modules/classes/ActivityTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/ActivityTypes.yaml @@ -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" diff --git a/schemas/20251121/linkml/modules/classes/Address.yaml b/schemas/20251121/linkml/modules/classes/Address.yaml index 120b355b41..c1b336c508 100644 --- a/schemas/20251121/linkml/modules/classes/Address.yaml +++ b/schemas/20251121/linkml/modules/classes/Address.yaml @@ -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 diff --git a/schemas/20251121/linkml/modules/classes/ArchiveAssociation.yaml b/schemas/20251121/linkml/modules/classes/ArchiveAssociation.yaml index 4eb2a3336e..40951bde71 100644 --- a/schemas/20251121/linkml/modules/classes/ArchiveAssociation.yaml +++ b/schemas/20251121/linkml/modules/classes/ArchiveAssociation.yaml @@ -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\ diff --git a/schemas/20251121/linkml/modules/classes/ArticlesOfAssociation.yaml b/schemas/20251121/linkml/modules/classes/ArticlesOfAssociation.yaml index 0e4c36bbf5..0b45b05a43 100644 --- a/schemas/20251121/linkml/modules/classes/ArticlesOfAssociation.yaml +++ b/schemas/20251121/linkml/modules/classes/ArticlesOfAssociation.yaml @@ -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 diff --git a/schemas/20251121/linkml/modules/classes/AuxiliaryPlace.yaml b/schemas/20251121/linkml/modules/classes/AuxiliaryPlace.yaml index 819b5a5423..73f70ed006 100644 --- a/schemas/20251121/linkml/modules/classes/AuxiliaryPlace.yaml +++ b/schemas/20251121/linkml/modules/classes/AuxiliaryPlace.yaml @@ -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 diff --git a/schemas/20251121/linkml/modules/classes/BioCustodianType.yaml b/schemas/20251121/linkml/modules/classes/BioCustodianType.yaml index af28f267a1..b153891d00 100644 --- a/schemas/20251121/linkml/modules/classes/BioCustodianType.yaml +++ b/schemas/20251121/linkml/modules/classes/BioCustodianType.yaml @@ -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 diff --git a/schemas/20251121/linkml/modules/classes/BiologicalObject.yaml b/schemas/20251121/linkml/modules/classes/BiologicalObject.yaml index ef98e91aea..f6e93ba871 100644 --- a/schemas/20251121/linkml/modules/classes/BiologicalObject.yaml +++ b/schemas/20251121/linkml/modules/classes/BiologicalObject.yaml @@ -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 diff --git a/schemas/20251121/linkml/modules/classes/CITESAppendix.yaml b/schemas/20251121/linkml/modules/classes/CITESAppendix.yaml new file mode 100644 index 0000000000..f895ac57bd --- /dev/null +++ b/schemas/20251121/linkml/modules/classes/CITESAppendix.yaml @@ -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 diff --git a/schemas/20251121/linkml/modules/classes/CauseOfDeath.yaml b/schemas/20251121/linkml/modules/classes/CauseOfDeath.yaml new file mode 100644 index 0000000000..452747a994 --- /dev/null +++ b/schemas/20251121/linkml/modules/classes/CauseOfDeath.yaml @@ -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 diff --git a/schemas/20251121/linkml/modules/classes/CertaintyLevel.yaml b/schemas/20251121/linkml/modules/classes/CertaintyLevel.yaml new file mode 100644 index 0000000000..6f06308f03 --- /dev/null +++ b/schemas/20251121/linkml/modules/classes/CertaintyLevel.yaml @@ -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" diff --git a/schemas/20251121/linkml/modules/classes/ChAnnotatorEntityClaim.yaml b/schemas/20251121/linkml/modules/classes/ChAnnotatorEntityClaim.yaml index fe0bb11980..0e3c25099c 100644 --- a/schemas/20251121/linkml/modules/classes/ChAnnotatorEntityClaim.yaml +++ b/schemas/20251121/linkml/modules/classes/ChAnnotatorEntityClaim.yaml @@ -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 diff --git a/schemas/20251121/linkml/modules/classes/City.yaml b/schemas/20251121/linkml/modules/classes/City.yaml new file mode 100644 index 0000000000..38d7f70634 --- /dev/null +++ b/schemas/20251121/linkml/modules/classes/City.yaml @@ -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) diff --git a/schemas/20251121/linkml/modules/classes/Claim.yaml b/schemas/20251121/linkml/modules/classes/Claim.yaml new file mode 100644 index 0000000000..5c7144907e --- /dev/null +++ b/schemas/20251121/linkml/modules/classes/Claim.yaml @@ -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)' diff --git a/schemas/20251121/linkml/modules/classes/ClaimType.yaml b/schemas/20251121/linkml/modules/classes/ClaimType.yaml new file mode 100644 index 0000000000..f70614783f --- /dev/null +++ b/schemas/20251121/linkml/modules/classes/ClaimType.yaml @@ -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: , <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 diff --git a/schemas/20251121/linkml/modules/classes/ClaimTypes.yaml b/schemas/20251121/linkml/modules/classes/ClaimTypes.yaml new file mode 100644 index 0000000000..3e91fce090 --- /dev/null +++ b/schemas/20251121/linkml/modules/classes/ClaimTypes.yaml @@ -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. diff --git a/schemas/20251121/linkml/modules/classes/ClassificationStatus.yaml b/schemas/20251121/linkml/modules/classes/ClassificationStatus.yaml new file mode 100644 index 0000000000..0aa39cbd3c --- /dev/null +++ b/schemas/20251121/linkml/modules/classes/ClassificationStatus.yaml @@ -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 diff --git a/schemas/20251121/linkml/modules/classes/ClassificationStatusType.yaml b/schemas/20251121/linkml/modules/classes/ClassificationStatusType.yaml new file mode 100644 index 0000000000..17da03b41c --- /dev/null +++ b/schemas/20251121/linkml/modules/classes/ClassificationStatusType.yaml @@ -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. diff --git a/schemas/20251121/linkml/modules/classes/ClassificationStatusTypes.yaml b/schemas/20251121/linkml/modules/classes/ClassificationStatusTypes.yaml new file mode 100644 index 0000000000..1bd77cbf76 --- /dev/null +++ b/schemas/20251121/linkml/modules/classes/ClassificationStatusTypes.yaml @@ -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 diff --git a/schemas/20251121/linkml/modules/classes/Collection.yaml b/schemas/20251121/linkml/modules/classes/Collection.yaml index 3b35b01148..5b0241b4c3 100644 --- a/schemas/20251121/linkml/modules/classes/Collection.yaml +++ b/schemas/20251121/linkml/modules/classes/Collection.yaml @@ -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) diff --git a/schemas/20251121/linkml/modules/classes/CollectionManagementSystem.yaml b/schemas/20251121/linkml/modules/classes/CollectionManagementSystem.yaml index 3ed0690820..b1e670513b 100644 --- a/schemas/20251121/linkml/modules/classes/CollectionManagementSystem.yaml +++ b/schemas/20251121/linkml/modules/classes/CollectionManagementSystem.yaml @@ -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 diff --git a/schemas/20251121/linkml/modules/classes/CollectionType.yaml b/schemas/20251121/linkml/modules/classes/CollectionType.yaml index f26503f583..8005cca2c6 100644 --- a/schemas/20251121/linkml/modules/classes/CollectionType.yaml +++ b/schemas/20251121/linkml/modules/classes/CollectionType.yaml @@ -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) diff --git a/schemas/20251121/linkml/modules/classes/CommercialOrganizationType.yaml b/schemas/20251121/linkml/modules/classes/CommercialOrganizationType.yaml index e78e89f07a..1074844424 100644 --- a/schemas/20251121/linkml/modules/classes/CommercialOrganizationType.yaml +++ b/schemas/20251121/linkml/modules/classes/CommercialOrganizationType.yaml @@ -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"]' diff --git a/schemas/20251121/linkml/modules/classes/Condition.yaml b/schemas/20251121/linkml/modules/classes/Condition.yaml index c8760324b3..b89f512e8c 100644 --- a/schemas/20251121/linkml/modules/classes/Condition.yaml +++ b/schemas/20251121/linkml/modules/classes/Condition.yaml @@ -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 diff --git a/schemas/20251121/linkml/modules/classes/ConservationRecord.yaml b/schemas/20251121/linkml/modules/classes/ConservationRecord.yaml index 4ad38645b5..13b27a443f 100644 --- a/schemas/20251121/linkml/modules/classes/ConservationRecord.yaml +++ b/schemas/20251121/linkml/modules/classes/ConservationRecord.yaml @@ -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 diff --git a/schemas/20251121/linkml/modules/classes/CustodianLegalNameClaim.yaml b/schemas/20251121/linkml/modules/classes/CustodianLegalNameClaim.yaml index 0e36f6fddd..9fce63568f 100644 --- a/schemas/20251121/linkml/modules/classes/CustodianLegalNameClaim.yaml +++ b/schemas/20251121/linkml/modules/classes/CustodianLegalNameClaim.yaml @@ -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 diff --git a/schemas/20251121/linkml/modules/classes/CustodianLegalStatus.yaml b/schemas/20251121/linkml/modules/classes/CustodianLegalStatus.yaml index 39a7da4dab..a1b0ed538a 100644 --- a/schemas/20251121/linkml/modules/classes/CustodianLegalStatus.yaml +++ b/schemas/20251121/linkml/modules/classes/CustodianLegalStatus.yaml @@ -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 diff --git a/schemas/20251121/linkml/modules/classes/CustodianNameConsensus.yaml b/schemas/20251121/linkml/modules/classes/CustodianNameConsensus.yaml index dfe3832eb9..095d3e02a8 100644 --- a/schemas/20251121/linkml/modules/classes/CustodianNameConsensus.yaml +++ b/schemas/20251121/linkml/modules/classes/CustodianNameConsensus.yaml @@ -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 diff --git a/schemas/20251121/linkml/modules/classes/DeceasedStatus.yaml b/schemas/20251121/linkml/modules/classes/DeceasedStatus.yaml new file mode 100644 index 0000000000..4ac558ca25 --- /dev/null +++ b/schemas/20251121/linkml/modules/classes/DeceasedStatus.yaml @@ -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 diff --git a/schemas/20251121/linkml/modules/classes/ExtractionMethod.yaml b/schemas/20251121/linkml/modules/classes/ExtractionMethod.yaml new file mode 100644 index 0000000000..9190d640d8 --- /dev/null +++ b/schemas/20251121/linkml/modules/classes/ExtractionMethod.yaml @@ -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 diff --git a/schemas/20251121/linkml/modules/classes/FeaturePlace.yaml b/schemas/20251121/linkml/modules/classes/FeaturePlace.yaml index 22a6125522..eb6510742f 100644 --- a/schemas/20251121/linkml/modules/classes/FeaturePlace.yaml +++ b/schemas/20251121/linkml/modules/classes/FeaturePlace.yaml @@ -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' diff --git a/schemas/20251121/linkml/modules/classes/FindingAid.yaml b/schemas/20251121/linkml/modules/classes/FindingAid.yaml index 0caeb52f97..cac05465e4 100644 --- a/schemas/20251121/linkml/modules/classes/FindingAid.yaml +++ b/schemas/20251121/linkml/modules/classes/FindingAid.yaml @@ -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 diff --git a/schemas/20251121/linkml/modules/classes/GenerationEvent.yaml b/schemas/20251121/linkml/modules/classes/GenerationEvent.yaml new file mode 100644 index 0000000000..12222170da --- /dev/null +++ b/schemas/20251121/linkml/modules/classes/GenerationEvent.yaml @@ -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 diff --git a/schemas/20251121/linkml/modules/classes/HeritageSocietyType.yaml b/schemas/20251121/linkml/modules/classes/HeritageSocietyType.yaml index 2633567117..c4571a4a2a 100644 --- a/schemas/20251121/linkml/modules/classes/HeritageSocietyType.yaml +++ b/schemas/20251121/linkml/modules/classes/HeritageSocietyType.yaml @@ -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 diff --git a/schemas/20251121/linkml/modules/classes/HistoricBuilding.yaml b/schemas/20251121/linkml/modules/classes/HistoricBuilding.yaml index 703686dade..a1b9a4845a 100644 --- a/schemas/20251121/linkml/modules/classes/HistoricBuilding.yaml +++ b/schemas/20251121/linkml/modules/classes/HistoricBuilding.yaml @@ -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: diff --git a/schemas/20251121/linkml/modules/classes/Hypernym.yaml b/schemas/20251121/linkml/modules/classes/Hypernym.yaml new file mode 100644 index 0000000000..2a21374f9e --- /dev/null +++ b/schemas/20251121/linkml/modules/classes/Hypernym.yaml @@ -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 diff --git a/schemas/20251121/linkml/modules/classes/InvalidWebClaim.yaml b/schemas/20251121/linkml/modules/classes/InvalidWebClaim.yaml index b3a458b60f..02d4d7112e 100644 --- a/schemas/20251121/linkml/modules/classes/InvalidWebClaim.yaml +++ b/schemas/20251121/linkml/modules/classes/InvalidWebClaim.yaml @@ -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 diff --git a/schemas/20251121/linkml/modules/classes/LLMResponse.yaml b/schemas/20251121/linkml/modules/classes/LLMResponse.yaml index 4a9a7090ed..aacf28dced 100644 --- a/schemas/20251121/linkml/modules/classes/LLMResponse.yaml +++ b/schemas/20251121/linkml/modules/classes/LLMResponse.yaml @@ -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 diff --git a/schemas/20251121/linkml/modules/classes/LogoClaim.yaml b/schemas/20251121/linkml/modules/classes/LogoClaim.yaml index 392c6346ca..9f0d46b437 100644 --- a/schemas/20251121/linkml/modules/classes/LogoClaim.yaml +++ b/schemas/20251121/linkml/modules/classes/LogoClaim.yaml @@ -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 diff --git a/schemas/20251121/linkml/modules/classes/NanIsilEnrichment.yaml b/schemas/20251121/linkml/modules/classes/NanIsilEnrichment.yaml index 310ba18148..77a61d468d 100644 --- a/schemas/20251121/linkml/modules/classes/NanIsilEnrichment.yaml +++ b/schemas/20251121/linkml/modules/classes/NanIsilEnrichment.yaml @@ -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 diff --git a/schemas/20251121/linkml/modules/classes/Note.yaml b/schemas/20251121/linkml/modules/classes/Note.yaml new file mode 100644 index 0000000000..c8c18f15a3 --- /dev/null +++ b/schemas/20251121/linkml/modules/classes/Note.yaml @@ -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" diff --git a/schemas/20251121/linkml/modules/classes/PersonWebClaim.yaml b/schemas/20251121/linkml/modules/classes/PersonWebClaim.yaml index c8b4d9f342..2bcda7e19c 100644 --- a/schemas/20251121/linkml/modules/classes/PersonWebClaim.yaml +++ b/schemas/20251121/linkml/modules/classes/PersonWebClaim.yaml @@ -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 diff --git a/schemas/20251121/linkml/modules/classes/PersonalCollectionType.yaml b/schemas/20251121/linkml/modules/classes/PersonalCollectionType.yaml index a40e0c709c..6bbe23db6f 100644 --- a/schemas/20251121/linkml/modules/classes/PersonalCollectionType.yaml +++ b/schemas/20251121/linkml/modules/classes/PersonalCollectionType.yaml @@ -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 diff --git a/schemas/20251121/linkml/modules/classes/ProvenanceEvent.yaml b/schemas/20251121/linkml/modules/classes/ProvenanceEvent.yaml index 177700c692..1eae733c85 100644 --- a/schemas/20251121/linkml/modules/classes/ProvenanceEvent.yaml +++ b/schemas/20251121/linkml/modules/classes/ProvenanceEvent.yaml @@ -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 diff --git a/schemas/20251121/linkml/modules/classes/ServiceTypes.yaml b/schemas/20251121/linkml/modules/classes/ServiceTypes.yaml index 3ab1ea06e6..5a7b949e62 100644 --- a/schemas/20251121/linkml/modules/classes/ServiceTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/ServiceTypes.yaml @@ -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) diff --git a/schemas/20251121/linkml/modules/classes/Source.yaml b/schemas/20251121/linkml/modules/classes/Source.yaml new file mode 100644 index 0000000000..4aad07af97 --- /dev/null +++ b/schemas/20251121/linkml/modules/classes/Source.yaml @@ -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 diff --git a/schemas/20251121/linkml/modules/classes/StaffRole.yaml b/schemas/20251121/linkml/modules/classes/StaffRole.yaml index a6af8b7f04..892849e821 100644 --- a/schemas/20251121/linkml/modules/classes/StaffRole.yaml +++ b/schemas/20251121/linkml/modules/classes/StaffRole.yaml @@ -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 diff --git a/schemas/20251121/linkml/modules/classes/StorageCondition.yaml b/schemas/20251121/linkml/modules/classes/StorageCondition.yaml index e314998220..486c9f4026 100644 --- a/schemas/20251121/linkml/modules/classes/StorageCondition.yaml +++ b/schemas/20251121/linkml/modules/classes/StorageCondition.yaml @@ -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 diff --git a/schemas/20251121/linkml/modules/classes/StorageType.yaml b/schemas/20251121/linkml/modules/classes/StorageType.yaml index df1700b00b..554dca7700 100644 --- a/schemas/20251121/linkml/modules/classes/StorageType.yaml +++ b/schemas/20251121/linkml/modules/classes/StorageType.yaml @@ -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: diff --git a/schemas/20251121/linkml/modules/classes/Thumbnail.yaml b/schemas/20251121/linkml/modules/classes/Thumbnail.yaml index 8dabc5ae89..a84f3fe304 100644 --- a/schemas/20251121/linkml/modules/classes/Thumbnail.yaml +++ b/schemas/20251121/linkml/modules/classes/Thumbnail.yaml @@ -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)" diff --git a/schemas/20251121/linkml/modules/classes/Unit.yaml b/schemas/20251121/linkml/modules/classes/Unit.yaml new file mode 100644 index 0000000000..f37ffaac0c --- /dev/null +++ b/schemas/20251121/linkml/modules/classes/Unit.yaml @@ -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" diff --git a/schemas/20251121/linkml/modules/classes/UnspecifiedType.yaml b/schemas/20251121/linkml/modules/classes/UnspecifiedType.yaml index f476ffeeb6..c115dc74ea 100644 --- a/schemas/20251121/linkml/modules/classes/UnspecifiedType.yaml +++ b/schemas/20251121/linkml/modules/classes/UnspecifiedType.yaml @@ -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 diff --git a/schemas/20251121/linkml/modules/classes/Video.yaml b/schemas/20251121/linkml/modules/classes/Video.yaml new file mode 100644 index 0000000000..265d6fb593 --- /dev/null +++ b/schemas/20251121/linkml/modules/classes/Video.yaml @@ -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" diff --git a/schemas/20251121/linkml/modules/classes/VideoChapter.yaml b/schemas/20251121/linkml/modules/classes/VideoChapter.yaml index 64ab4b18da..d62da4b37f 100644 --- a/schemas/20251121/linkml/modules/classes/VideoChapter.yaml +++ b/schemas/20251121/linkml/modules/classes/VideoChapter.yaml @@ -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 diff --git a/schemas/20251121/linkml/modules/classes/VideoChapterList.yaml b/schemas/20251121/linkml/modules/classes/VideoChapterList.yaml index 9d5c425936..b6dbda7d02 100644 --- a/schemas/20251121/linkml/modules/classes/VideoChapterList.yaml +++ b/schemas/20251121/linkml/modules/classes/VideoChapterList.yaml @@ -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 diff --git a/schemas/20251121/linkml/modules/classes/VideoPost.yaml b/schemas/20251121/linkml/modules/classes/VideoPost.yaml index 3cf62d1c62..7b1780967a 100644 --- a/schemas/20251121/linkml/modules/classes/VideoPost.yaml +++ b/schemas/20251121/linkml/modules/classes/VideoPost.yaml @@ -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 diff --git a/schemas/20251121/linkml/modules/classes/VideoTextContent.yaml b/schemas/20251121/linkml/modules/classes/VideoTextContent.yaml index 8bd86b626a..494530d54a 100644 --- a/schemas/20251121/linkml/modules/classes/VideoTextContent.yaml +++ b/schemas/20251121/linkml/modules/classes/VideoTextContent.yaml @@ -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 diff --git a/schemas/20251121/linkml/modules/classes/WebClaim.yaml b/schemas/20251121/linkml/modules/classes/WebClaim.yaml index 58a6287dfc..150c4bc904 100644 --- a/schemas/20251121/linkml/modules/classes/WebClaim.yaml +++ b/schemas/20251121/linkml/modules/classes/WebClaim.yaml @@ -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 diff --git a/schemas/20251121/linkml/modules/classes/WebClaimsBlock.yaml b/schemas/20251121/linkml/modules/classes/WebClaimsBlock.yaml index 1ae8840792..7a6e2df74f 100644 --- a/schemas/20251121/linkml/modules/classes/WebClaimsBlock.yaml +++ b/schemas/20251121/linkml/modules/classes/WebClaimsBlock.yaml @@ -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 diff --git a/schemas/20251121/linkml/modules/classes/WebEnrichment.yaml b/schemas/20251121/linkml/modules/classes/WebEnrichment.yaml index 5019e984cf..101e7858ee 100644 --- a/schemas/20251121/linkml/modules/classes/WebEnrichment.yaml +++ b/schemas/20251121/linkml/modules/classes/WebEnrichment.yaml @@ -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 diff --git a/schemas/20251121/linkml/modules/classes/WebObservation.yaml b/schemas/20251121/linkml/modules/classes/WebObservation.yaml index 943e5fcbbd..cad2808cbc 100644 --- a/schemas/20251121/linkml/modules/classes/WebObservation.yaml +++ b/schemas/20251121/linkml/modules/classes/WebObservation.yaml @@ -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 diff --git a/schemas/20251121/linkml/modules/classes/WikidataEnrichment.yaml b/schemas/20251121/linkml/modules/classes/WikidataEnrichment.yaml index 26d656f8bd..a496fb7dad 100644 --- a/schemas/20251121/linkml/modules/classes/WikidataEnrichment.yaml +++ b/schemas/20251121/linkml/modules/classes/WikidataEnrichment.yaml @@ -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 diff --git a/schemas/20251121/linkml/modules/classes/YoutubeVideo.yaml b/schemas/20251121/linkml/modules/classes/YoutubeVideo.yaml index 3dd848ec47..07f2ced656 100644 --- a/schemas/20251121/linkml/modules/classes/YoutubeVideo.yaml +++ b/schemas/20251121/linkml/modules/classes/YoutubeVideo.yaml @@ -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: diff --git a/schemas/20251121/linkml/modules/enums/CauseOfDeathTypeEnum.yaml b/schemas/20251121/linkml/modules/enums/CauseOfDeathTypeEnum.yaml new file mode 100644 index 0000000000..0381049c13 --- /dev/null +++ b/schemas/20251121/linkml/modules/enums/CauseOfDeathTypeEnum.yaml @@ -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" diff --git a/schemas/20251121/linkml/modules/enums/MeasureUnitEnum.yaml b/schemas/20251121/linkml/modules/enums/MeasureUnitEnum.yaml index a1144659f2..b32305ed70 100644 --- a/schemas/20251121/linkml/modules/enums/MeasureUnitEnum.yaml +++ b/schemas/20251121/linkml/modules/enums/MeasureUnitEnum.yaml @@ -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: diff --git a/schemas/20251121/linkml/modules/enums/QuantityTypeEnum.yaml b/schemas/20251121/linkml/modules/enums/QuantityTypeEnum.yaml index 04ef0e09d9..70879d41c8 100644 --- a/schemas/20251121/linkml/modules/enums/QuantityTypeEnum.yaml +++ b/schemas/20251121/linkml/modules/enums/QuantityTypeEnum.yaml @@ -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. diff --git a/schemas/20251121/linkml/modules/enums/ClaimTypeEnum.yaml b/schemas/20251121/linkml/modules/enums/archive/ClaimTypeEnum_archived_20260119.yaml similarity index 100% rename from schemas/20251121/linkml/modules/enums/ClaimTypeEnum.yaml rename to schemas/20251121/linkml/modules/enums/archive/ClaimTypeEnum_archived_20260119.yaml diff --git a/schemas/20251121/linkml/modules/slots/category_note.yaml b/schemas/20251121/linkml/modules/slots/archive/category_note_archived_20260118.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/category_note.yaml rename to schemas/20251121/linkml/modules/slots/archive/category_note_archived_20260118.yaml diff --git a/schemas/20251121/linkml/modules/slots/certainty_level.yaml b/schemas/20251121/linkml/modules/slots/archive/certainty_level_archived_20260118.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/certainty_level.yaml rename to schemas/20251121/linkml/modules/slots/archive/certainty_level_archived_20260118.yaml diff --git a/schemas/20251121/linkml/modules/slots/certainty_note.yaml b/schemas/20251121/linkml/modules/slots/archive/certainty_note_archived_20260118.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/certainty_note.yaml rename to schemas/20251121/linkml/modules/slots/archive/certainty_note_archived_20260118.yaml diff --git a/schemas/20251121/linkml/modules/slots/chapter_thumbnail_timestamp.yaml b/schemas/20251121/linkml/modules/slots/archive/chapter_thumbnail_timestamp_archived_20260119.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/chapter_thumbnail_timestamp.yaml rename to schemas/20251121/linkml/modules/slots/archive/chapter_thumbnail_timestamp_archived_20260119.yaml diff --git a/schemas/20251121/linkml/modules/slots/chapter_thumbnail_url.yaml b/schemas/20251121/linkml/modules/slots/archive/chapter_thumbnail_url_archived_20260118.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/chapter_thumbnail_url.yaml rename to schemas/20251121/linkml/modules/slots/archive/chapter_thumbnail_url_archived_20260118.yaml diff --git a/schemas/20251121/linkml/modules/slots/chapters_generated_at.yaml b/schemas/20251121/linkml/modules/slots/archive/chapters_generated_at_archived_20260119.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/chapters_generated_at.yaml rename to schemas/20251121/linkml/modules/slots/archive/chapters_generated_at_archived_20260119.yaml diff --git a/schemas/20251121/linkml/modules/slots/chapters_source.yaml b/schemas/20251121/linkml/modules/slots/archive/chapters_source_archived_20260119.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/chapters_source.yaml rename to schemas/20251121/linkml/modules/slots/archive/chapters_source_archived_20260119.yaml diff --git a/schemas/20251121/linkml/modules/slots/character_count.yaml b/schemas/20251121/linkml/modules/slots/archive/character_count_archived_20260118.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/character_count.yaml rename to schemas/20251121/linkml/modules/slots/archive/character_count_archived_20260118.yaml diff --git a/schemas/20251121/linkml/modules/slots/circumstances_of_death.yaml b/schemas/20251121/linkml/modules/slots/archive/circumstances_of_death_archived_20260119.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/circumstances_of_death.yaml rename to schemas/20251121/linkml/modules/slots/archive/circumstances_of_death_archived_20260119.yaml diff --git a/schemas/20251121/linkml/modules/slots/cites_appendix.yaml b/schemas/20251121/linkml/modules/slots/archive/cites_appendix_archived_20260119.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/cites_appendix.yaml rename to schemas/20251121/linkml/modules/slots/archive/cites_appendix_archived_20260119.yaml diff --git a/schemas/20251121/linkml/modules/slots/city.yaml b/schemas/20251121/linkml/modules/slots/archive/city_archived_20260118.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/city.yaml rename to schemas/20251121/linkml/modules/slots/archive/city_archived_20260118.yaml diff --git a/schemas/20251121/linkml/modules/slots/claim.yaml b/schemas/20251121/linkml/modules/slots/archive/claim_archived_20260119.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/claim.yaml rename to schemas/20251121/linkml/modules/slots/archive/claim_archived_20260119.yaml diff --git a/schemas/20251121/linkml/modules/slots/claim_extraction_method.yaml b/schemas/20251121/linkml/modules/slots/archive/claim_extraction_method_archived_20260119.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/claim_extraction_method.yaml rename to schemas/20251121/linkml/modules/slots/archive/claim_extraction_method_archived_20260119.yaml diff --git a/schemas/20251121/linkml/modules/slots/claim_note.yaml b/schemas/20251121/linkml/modules/slots/archive/claim_note_archived_20260118.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/claim_note.yaml rename to schemas/20251121/linkml/modules/slots/archive/claim_note_archived_20260118.yaml diff --git a/schemas/20251121/linkml/modules/slots/claim_type.yaml b/schemas/20251121/linkml/modules/slots/archive/claim_type_archived_20260119.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/claim_type.yaml rename to schemas/20251121/linkml/modules/slots/archive/claim_type_archived_20260119.yaml diff --git a/schemas/20251121/linkml/modules/slots/claims_count.yaml b/schemas/20251121/linkml/modules/slots/archive/claims_count_archived_20260119.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/claims_count.yaml rename to schemas/20251121/linkml/modules/slots/archive/claims_count_archived_20260119.yaml diff --git a/schemas/20251121/linkml/modules/slots/classification_status.yaml b/schemas/20251121/linkml/modules/slots/archive/classification_status_archived_20260119.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/classification_status.yaml rename to schemas/20251121/linkml/modules/slots/archive/classification_status_archived_20260119.yaml diff --git a/schemas/20251121/linkml/modules/slots/classifies_place.yaml b/schemas/20251121/linkml/modules/slots/archive/classifies_place_archived_20260119.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/classifies_place.yaml rename to schemas/20251121/linkml/modules/slots/archive/classifies_place_archived_20260119.yaml diff --git a/schemas/20251121/linkml/modules/slots/cms_id.yaml b/schemas/20251121/linkml/modules/slots/archive/cms_id_archived_20260118.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/cms_id.yaml rename to schemas/20251121/linkml/modules/slots/archive/cms_id_archived_20260118.yaml diff --git a/schemas/20251121/linkml/modules/slots/collected_in.yaml b/schemas/20251121/linkml/modules/slots/archive/collected_in_archived_20260119.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/collected_in.yaml rename to schemas/20251121/linkml/modules/slots/archive/collected_in_archived_20260119.yaml diff --git a/schemas/20251121/linkml/modules/slots/collecting_scope.yaml b/schemas/20251121/linkml/modules/slots/archive/collecting_scope_archived_20260119.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/collecting_scope.yaml rename to schemas/20251121/linkml/modules/slots/archive/collecting_scope_archived_20260119.yaml diff --git a/schemas/20251121/linkml/modules/slots/collection_broader_type.yaml b/schemas/20251121/linkml/modules/slots/archive/collection_broader_type_archived_20260119.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/collection_broader_type.yaml rename to schemas/20251121/linkml/modules/slots/archive/collection_broader_type_archived_20260119.yaml diff --git a/schemas/20251121/linkml/modules/slots/collection_id.yaml b/schemas/20251121/linkml/modules/slots/archive/collection_id_archived_20260118.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/collection_id.yaml rename to schemas/20251121/linkml/modules/slots/archive/collection_id_archived_20260118.yaml diff --git a/schemas/20251121/linkml/modules/slots/collection_size.yaml b/schemas/20251121/linkml/modules/slots/archive/collection_size_archived_20260119.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/collection_size.yaml rename to schemas/20251121/linkml/modules/slots/archive/collection_size_archived_20260119.yaml diff --git a/schemas/20251121/linkml/modules/slots/collection_type_id.yaml b/schemas/20251121/linkml/modules/slots/archive/collection_type_id_archived_20260118.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/collection_type_id.yaml rename to schemas/20251121/linkml/modules/slots/archive/collection_type_id_archived_20260118.yaml diff --git a/schemas/20251121/linkml/modules/slots/collections_under_responsibility.yaml b/schemas/20251121/linkml/modules/slots/archive/collections_under_responsibility_archived_20260119.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/collections_under_responsibility.yaml rename to schemas/20251121/linkml/modules/slots/archive/collections_under_responsibility_archived_20260119.yaml diff --git a/schemas/20251121/linkml/modules/slots/comment_count.yaml b/schemas/20251121/linkml/modules/slots/archive/comment_count_archived_20260118.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/comment_count.yaml rename to schemas/20251121/linkml/modules/slots/archive/comment_count_archived_20260118.yaml diff --git a/schemas/20251121/linkml/modules/slots/commercial_activity.yaml b/schemas/20251121/linkml/modules/slots/archive/commercial_activity_archived_20260118.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/commercial_activity.yaml rename to schemas/20251121/linkml/modules/slots/archive/commercial_activity_archived_20260118.yaml diff --git a/schemas/20251121/linkml/modules/slots/community_engagement.yaml b/schemas/20251121/linkml/modules/slots/archive/community_engagement_archived_20260119.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/community_engagement.yaml rename to schemas/20251121/linkml/modules/slots/archive/community_engagement_archived_20260119.yaml diff --git a/schemas/20251121/linkml/modules/slots/completion_token.yaml b/schemas/20251121/linkml/modules/slots/archive/completion_token_archived_20260119.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/completion_token.yaml rename to schemas/20251121/linkml/modules/slots/archive/completion_token_archived_20260119.yaml diff --git a/schemas/20251121/linkml/modules/slots/condition_description.yaml b/schemas/20251121/linkml/modules/slots/archive/condition_description_archived_20260118.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/condition_description.yaml rename to schemas/20251121/linkml/modules/slots/archive/condition_description_archived_20260118.yaml diff --git a/schemas/20251121/linkml/modules/slots/condition_id.yaml b/schemas/20251121/linkml/modules/slots/archive/condition_id_archived_20260118.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/condition_id.yaml rename to schemas/20251121/linkml/modules/slots/archive/condition_id_archived_20260118.yaml diff --git a/schemas/20251121/linkml/modules/slots/person_claim_note.yaml b/schemas/20251121/linkml/modules/slots/archive/person_claim_note_archived_20260118.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/person_claim_note.yaml rename to schemas/20251121/linkml/modules/slots/archive/person_claim_note_archived_20260118.yaml diff --git a/schemas/20251121/linkml/modules/slots/based_on_claim.yaml b/schemas/20251121/linkml/modules/slots/based_on_claim.yaml new file mode 100644 index 0000000000..97edd0f897 --- /dev/null +++ b/schemas/20251121/linkml/modules/slots/based_on_claim.yaml @@ -0,0 +1,59 @@ +id: https://nde.nl/ontology/hc/slot/based_on_claim +name: based_on_claim_slot +title: Based On Claim Slot +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + prov: http://www.w3.org/ns/prov# + arg: http://www.w3.org/ns/argument# +imports: + - linkml:types +default_prefix: hc +slots: + based_on_claim: + slot_uri: prov:wasInfluencedBy + description: >- + Links a provenance statement or quantity to the claims that support it. + + **ARGUMENTATION SEMANTICS**: + In argumentation theory (Toulmin model), claims provide evidence that + WARRANTS (justifies) conclusions. This slot captures the reverse relationship: + a conclusion or derived value is BASED ON supporting claims. + + **USE CASES**: + 1. Quantity provenance: A claims_count quantity is based on the actual claims + 2. Assertion support: An assertion about an entity is based on web claims + 3. Derivation tracking: A computed value is based on source claims + + **EXAMPLE**: + ```yaml + has_or_had_quantity: + quantity_value: 47 + quantity_type: CLAIM_COUNT + has_or_had_provenance: + based_on_claim: + - claim_type: STAFF_NAME + claim_value: "Jan de Vries" + - claim_type: STAFF_ROLE + claim_value: "Director" + ``` + + **MIGRATION NOTE (2026-01-19)**: + Created per slot_fixes.yaml revision for claims_count migration. + Enables provenance tracking for claim-based quantities. + range: Claim + multivalued: true + inlined_as_list: true + exact_mappings: + - prov:wasInfluencedBy + close_mappings: + - prov:wasDerivedFrom + - arg:warrant + annotations: + custodian_types: '["*"]' + custodian_types_rationale: >- + Claim-based provenance applies universally across all custodian types. + custodian_types_primary: "*" + specificity_score: 0.20 + specificity_rationale: >- + Low specificity - claim provenance is broadly applicable. diff --git a/schemas/20251121/linkml/modules/slots/classifies_or_classified.yaml b/schemas/20251121/linkml/modules/slots/classifies_or_classified.yaml new file mode 100644 index 0000000000..e2d174280a --- /dev/null +++ b/schemas/20251121/linkml/modules/slots/classifies_or_classified.yaml @@ -0,0 +1,49 @@ +id: https://nde.nl/ontology/hc/slot/classifies_or_classified +name: classifies_or_classified_slot +title: Classifies Or Classified Slot +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + crm: http://www.cidoc-crm.org/cidoc-crm/ + skos: http://www.w3.org/2004/02/skos/core# +imports: + - linkml:types +default_prefix: hc +slots: + classifies_or_classified: + description: >- + Indicates that an entity provides a classification or typing for another entity. + + **Temporal Semantics**: Uses RiC-O-style "classifies_or_classified" to express + that the classification relationship may be current or historical - entities + may be reclassified over time. + + **Common Use Cases**: + - FeaturePlace classifies CustodianPlace (building type classification) + - TypeSpecimen classifies Taxon (nomenclatural classification) + - HeritageDesignation classifies HeritageSite (protection status) + + **CIDOC-CRM Alignment**: + Maps to crm:P2_has_type / crm:P2i_is_type_of pattern where one entity + provides typological information about another. + + **Example**: + ```yaml + FeaturePlace: + feature_type: MUSEUM + classifies_or_classified: + id: https://nde.nl/ontology/hc/place/rijksmuseum-location + place_name: "Rijksmuseum" + ``` + slot_uri: crm:P2i_is_type_of + range: uriorcurie + multivalued: false + exact_mappings: + - crm:P2i_is_type_of + close_mappings: + - skos:broader + related_mappings: + - crm:P2_has_type + annotations: + specificity_score: 0.45 + specificity_rationale: "Generic classification predicate applicable to place typing, taxonomic classification, and heritage designation" diff --git a/schemas/20251121/linkml/modules/slots/derives_or_derived_from.yaml b/schemas/20251121/linkml/modules/slots/derives_or_derived_from.yaml new file mode 100644 index 0000000000..277e3cc1cc --- /dev/null +++ b/schemas/20251121/linkml/modules/slots/derives_or_derived_from.yaml @@ -0,0 +1,81 @@ +# derives_or_derived_from - Provenance derivation relationship +# +# Created per slot_fixes.yaml chapter_thumbnail_timestamp migration (Rule 53/56) +# Creation date: 2026-01-19 +# Rule compliance: 39 (RiC-O temporal naming), 50 (ontology mapping), 53 (no bespoke slots) + +id: https://nde.nl/ontology/hc/slot/derives_or_derived_from +name: derives_or_derived_from_slot +title: Derives or Derived From Slot + +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 + +default_prefix: hc + +slots: + derives_or_derived_from: + description: | + Entity from which this entity was derived. + + **DEFINITION**: + Indicates a derivation relationship where one entity is created based on, + or extracted from, another source entity. This follows PROV-O derivation + semantics for provenance tracking. + + **TEMPORAL SEMANTICS** (Rule 39): + The "derives_or_derived" naming indicates that derivation relationships + can be established at different points in time: + - A thumbnail may be derived from a video at creation time + - A transcription may be derived from audio later + - A derivative work may reference its source + + **USE CASES**: + - Thumbnail derived from Video (specific frame extraction) + - Transcript derived from Audio recording + - Cropped image derived from original photograph + - Summary derived from full document + + **ONTOLOGY ALIGNMENT**: + - **Primary**: `prov:wasDerivedFrom` (W3C PROV-O) + - **Close**: `schema:isBasedOn` (Schema.org) + + range: uriorcurie + multivalued: true + slot_uri: prov:wasDerivedFrom + + exact_mappings: + - prov:wasDerivedFrom + + close_mappings: + - schema:isBasedOn + + annotations: + custodian_types: '["*"]' + custodian_types_rationale: >- + Derivation relationships applicable to all custodian types for + provenance tracking of derived media and content. + custodian_types_primary: "*" + specificity_score: "0.30" + specificity_rationale: >- + Low-medium specificity - derivation is a general provenance concept + applicable across many media and content types. + migration_date: "2026-01-19" + migration_rule: "Rule 53 (no bespoke slots), Rule 56 (semantic consistency)" + + examples: + - value: "https://example.org/video/ABC123" + description: "Thumbnail derived from video ABC123" + - value: "https://example.org/audio/interview-001" + description: "Transcript derived from audio interview" + + comments: + - Created from slot_fixes.yaml migration (2026-01-19) + - Enables structured provenance for derived content + - Uses PROV-O for W3C-compliant derivation semantics diff --git a/schemas/20251121/linkml/modules/slots/has_or_had_condition.yaml b/schemas/20251121/linkml/modules/slots/has_or_had_condition.yaml index a847e5ffe3..9658c55a38 100644 --- a/schemas/20251121/linkml/modules/slots/has_or_had_condition.yaml +++ b/schemas/20251121/linkml/modules/slots/has_or_had_condition.yaml @@ -2,6 +2,7 @@ # # Created per slot_fixes.yaml migration for: typical_condition # Creation date: 2026-01-14 +# Updated: 2026-01-18 - Updated example to use has_or_had_description per condition_description migration id: https://nde.nl/ontology/hc/slot/has_or_had_condition name: has_or_had_condition @@ -30,6 +31,10 @@ slots: - Service conditions/requirements - Access conditions + **Migration (2026-01-18)**: + This slot now replaces `condition_description` per slot_fixes.yaml. + Use with Condition class which has `has_or_had_description` for textual descriptions. + range: Condition multivalued: true @@ -38,6 +43,8 @@ slots: examples: - value: - condition_type: GOOD - condition_description: "Good physical condition" - description: Good condition assessment + has_or_had_type: GOOD + has_or_had_description: + description_text: "Good physical condition with minor surface wear" + description_type: condition + description: Good condition assessment with structured description diff --git a/schemas/20251121/linkml/modules/slots/has_or_had_note.yaml b/schemas/20251121/linkml/modules/slots/has_or_had_note.yaml index abfe242f66..2deedc3005 100644 --- a/schemas/20251121/linkml/modules/slots/has_or_had_note.yaml +++ b/schemas/20251121/linkml/modules/slots/has_or_had_note.yaml @@ -4,6 +4,10 @@ # - has_or_had_* indicates temporal relationship # # ONTOLOGY ALIGNMENT: SKOS skos:note for general notes +# +# MIGRATION (2026-01-18): Updated range from string to Note class +# per slot_fixes.yaml (Rule 53, 56). Now uses structured Note class +# with note_type, note_content, note_date, language fields. id: https://nde.nl/ontology/hc/slot/has_or_had_note name: has_or_had_note_slot @@ -17,16 +21,30 @@ prefixes: imports: - linkml:types + - ../classes/Note default_prefix: hc slots: has_or_had_note: slot_uri: skos:note - range: string + range: Note multivalued: true + inlined: true + inlined_as_list: true description: | - General notes or comments about an entity. + Typed notes associated with an entity. + + **Replaces** (per slot_fixes.yaml): + - `claim_note` (string-valued) → Note with note_type: claim + - `category_note` (string-valued) → Note with note_type: category + - `certainty_note` (string-valued) → Note with note_type: certainty + - `conservation_note` (string-valued) → Note with note_type: conservation + - Other *_note slots per slot_fixes.yaml + + **Purpose**: + Generic slot for attaching typed notes (claim, category, certainty, + conservation, extraction, etc.) with optional language and date metadata. **ONTOLOGY ALIGNMENT**: @@ -35,12 +53,22 @@ slots: | **SKOS** | `skos:note` | Primary - general note | | **RDFS** | `rdfs:comment` | Related - comment | + **MIGRATION (2026-01-18)**: + Range changed from `string` to `Note` class per slot_fixes.yaml. + The Note class provides structured notes with type, content, date, and language. + exact_mappings: - skos:note close_mappings: - rdfs:comment examples: - - value: "Additional verification required for this claim." - description: General note about verification status - - value: "Data migrated from legacy system on 2024-01-15." - description: Migration note + - value: + note_type: claim + note_content: "Additional verification required for this claim." + note_date: "2026-01-18" + description: Claim note about verification status + - value: + note_type: extraction + note_content: "Data migrated from legacy system." + note_date: "2024-01-15" + description: Extraction/migration note diff --git a/schemas/20251121/linkml/modules/slots/has_or_had_source.yaml b/schemas/20251121/linkml/modules/slots/has_or_had_source.yaml new file mode 100644 index 0000000000..153a51d6bf --- /dev/null +++ b/schemas/20251121/linkml/modules/slots/has_or_had_source.yaml @@ -0,0 +1,30 @@ +id: https://nde.nl/ontology/hc/slot/has_or_had_source +name: has_or_had_source_slot +title: has_or_had_source slot +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/ +imports: + - linkml:types +default_prefix: hc +slots: + has_or_had_source: + description: >- + The source or origin from which something was derived, generated, or obtained. + Follows RiC-O temporal naming convention (Rule 39) to indicate that + sources may change over time. + slot_uri: prov:wasDerivedFrom + range: uriorcurie + multivalued: true + exact_mappings: + - prov:wasDerivedFrom + - dcterms:source + close_mappings: + - prov:wasGeneratedBy + annotations: + specificity_score: 0.15 + specificity_rationale: >- + Universal concept - anything can have a source. Broadly applicable + across all heritage domains. diff --git a/schemas/20251121/linkml/modules/slots/has_or_had_token.yaml b/schemas/20251121/linkml/modules/slots/has_or_had_token.yaml index 21ae1c27e7..1a986ec227 100644 --- a/schemas/20251121/linkml/modules/slots/has_or_had_token.yaml +++ b/schemas/20251121/linkml/modules/slots/has_or_had_token.yaml @@ -5,7 +5,7 @@ description: >- Generic slot for token-related data following RiC-O temporal naming convention. Created during slot migration per Rule 53/56 (2026-01-17). - Replaces bespoke slots: cached_token + Replaces bespoke slots: cached_token, completion_token, prompt_token Use slot_usage in classes to specialize range and semantics. version: 1.1.0 @@ -24,12 +24,16 @@ slots: UPDATED v1.1.0: Range changed to Token class per full Rule 53/56 compliance. slot_uri: schema:value range: Token + multivalued: true + inlined: true + inlined_as_list: true exact_mappings: - schema:value annotations: - migrated_from: cached_token - migration_date: '2026-01-17' + migrated_from: cached_token, completion_token + migration_date: '2026-01-19' migration_rule: Rule 53/56 version_history: | v1.0.0 (2026-01-17): Initial migration, range=integer v1.1.0 (2026-01-17): Updated range to Token class per full revision compliance + v1.2.0 (2026-01-19): Made multivalued for completion_token migration diff --git a/schemas/20251121/linkml/modules/slots/is_deceased.yaml b/schemas/20251121/linkml/modules/slots/is_deceased.yaml new file mode 100644 index 0000000000..87bc1eb84d --- /dev/null +++ b/schemas/20251121/linkml/modules/slots/is_deceased.yaml @@ -0,0 +1,108 @@ +# is_deceased slot +# Links an entity to a DeceasedStatus for structured death information +# +# Migration: Replaces circumstances_of_death (string) with structured DeceasedStatus class +# per slot_fixes.yaml revision at line 9369. +# +# Generation date: 2026-01-19 +# Rule compliance: 38 (slot centralization), 39 (RiC-O naming), 42 (no prefix), 53 (slot_fixes.yaml) + +id: https://nde.nl/ontology/hc/slot/is_deceased +name: is_deceased_slot +title: Is Deceased Slot + +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + schema: http://schema.org/ + prov: http://www.w3.org/ns/prov# + +default_prefix: hc + +imports: + - linkml:types + +slots: + is_deceased: + slot_uri: hc:isDeceased + description: | + Links to structured information about a person's death status. + + **Purpose**: + Provides a structured representation of death circumstances, replacing + the simple `circumstances_of_death` string with a `DeceasedStatus` class + that captures: + - Cause of death (via CauseOfDeath class) + - Temporal extent (date of death via TimeSpan) + - Narrative description of circumstances + + **Temporal Semantics**: + Uses "is" prefix (not "has_or_had") because death status is a permanent + state - once deceased, always deceased. + + **Ontological Alignment**: + - **Primary** (`slot_uri`): `hc:isDeceased` - Heritage Custodian property + - **Related**: `schema:deathDate` - Schema.org death date + - **Related**: `prov:wasEndedBy` - PROV-O activity termination + + **Usage in StaffRole**: + Documents the death status of heritage workers, particularly important for: + - Heritage workers killed during conflicts (Gaza, Ukraine, etc.) + - Historical figures in the heritage sector + - Biographical documentation and commemoration + + **Example - Gaza Heritage Worker**: + ```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 on November 19, 2023. + He was a journalist and information professional at Press House - Palestine. + temporal_extent: + begin_of_the_begin: "2023-11-19T00:00:00Z" + end_of_the_end: "2023-11-19T23:59:59Z" + ``` + + range: DeceasedStatus + inlined: true + required: false + + exact_mappings: + - schema:deathDate + + related_mappings: + - prov:wasEndedBy + + annotations: + migration_source: circumstances_of_death + migration_date: "2026-01-19" + migration_rationale: | + Replaced simple string slot with structured DeceasedStatus class + per slot_fixes.yaml revision at line 9369. + Enables structured capture of cause, date, and narrative. + + comments: + - "Replaces: circumstances_of_death (string)" + - "Range: DeceasedStatus class for structured death information" + - "Includes: cause of death, temporal extent, narrative description" + - "Important for documenting heritage workers killed in conflicts" + + examples: + - value: | + is_deceased: + is_or_was_caused_by: + cause_type: NATURAL + temporal_extent: + begin_of_the_begin: "2020-03-15" + end_of_the_end: "2020-03-15" + description: "Natural death with known date" + - value: | + is_deceased: + is_or_was_caused_by: + cause_type: CONFLICT + has_or_had_description: "Killed during airstrike on cultural center" + temporal_extent: + begin_of_the_begin: "2023-10-01" + end_of_the_end: "2023-12-31" + description: "Death during conflict with date range (exact date unknown)" diff --git a/schemas/20251121/linkml/modules/slots/is_or_was_caused_by.yaml b/schemas/20251121/linkml/modules/slots/is_or_was_caused_by.yaml new file mode 100644 index 0000000000..70e6be9992 --- /dev/null +++ b/schemas/20251121/linkml/modules/slots/is_or_was_caused_by.yaml @@ -0,0 +1,89 @@ +# is_or_was_caused_by slot +# Links an event or status to its cause +# +# Following RiC-O naming convention (Rule 39): "isOrWas..." pattern +# for temporal relationships indicating causation. +# +# 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), 42 (no prefix), 53 (slot_fixes.yaml) + +id: https://nde.nl/ontology/hc/slot/is_or_was_caused_by +name: is_or_was_caused_by_slot +title: Is Or Was Caused By Slot + +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + prov: http://www.w3.org/ns/prov# + crm: http://www.cidoc-crm.org/cidoc-crm/ + schema: http://schema.org/ + +default_prefix: hc + +imports: + - linkml:types + +slots: + is_or_was_caused_by: + slot_uri: prov:wasInfluencedBy + description: | + Links an event or status to its cause. + + **Temporal Semantics** (RiC-O Pattern): + The "isOrWas" naming follows RiC-O convention indicating this relationship + may be historical - the cause was identified at some point in time. + + **Ontological Alignment**: + - **Primary** (`slot_uri`): `prov:wasInfluencedBy` - PROV-O influence relationship + - **Exact**: `crm:P17_was_motivated_by` - CIDOC-CRM motivation relationship + - **Related**: `schema:causeOf` - Schema.org cause relationship (inverse) + + **Usage**: + Generic causation slot for linking: + - DeceasedStatus → CauseOfDeath (death circumstances) + - OrganizationalChangeEvent → Cause (why institution changed) + - Any event to its motivating factors + + **Range**: `uriorcurie` (Rule 55) + Broadened range allows classes to narrow via slot_usage to specific + cause classes (CauseOfDeath, ChangeReason, etc.) + + **Example - Death Causation**: + ```yaml + is_or_was_caused_by: + cause_type: CONFLICT + has_or_had_description: "Killed in airstrike during conflict" + ``` + + range: uriorcurie + required: false + + exact_mappings: + - crm:P17_was_motivated_by + + close_mappings: + - prov:wasGeneratedBy + + related_mappings: + - schema:causeOf + + annotations: + rico_naming_convention: | + Follows RiC-O "isOrWas" pattern for temporal predicates. + See Rule 39: Slot Naming Convention (RiC-O Style) + migration_source: circumstances_of_death (partial) + migration_date: "2026-01-19" + + comments: + - "Generic causation slot for events and statuses" + - "Range: uriorcurie - classes narrow to specific cause types" + - "RiC-O naming: isOrWas indicates potentially historical relationship" + - "Primary use: DeceasedStatus → CauseOfDeath" + + examples: + - value: "hc:CauseOfDeath/CONFLICT" + description: "Cause of death: armed conflict" + - value: "hc:ChangeReason/BUDGET_CUTS" + description: "Cause of organizational change: budget cuts" diff --git a/schemas/20251121/linkml/modules/slots/is_or_was_extracted_using.yaml b/schemas/20251121/linkml/modules/slots/is_or_was_extracted_using.yaml new file mode 100644 index 0000000000..924c4eb329 --- /dev/null +++ b/schemas/20251121/linkml/modules/slots/is_or_was_extracted_using.yaml @@ -0,0 +1,41 @@ +id: https://nde.nl/ontology/hc/slot/is_or_was_extracted_using +name: is_or_was_extracted_using_slot +title: Is Or Was Extracted Using Slot +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + prov: http://www.w3.org/ns/prov# +imports: + - linkml:types + - ../classes/ExtractionMethod +default_prefix: hc +slots: + is_or_was_extracted_using: + range: ExtractionMethod + inlined: true + slot_uri: prov:wasGeneratedBy + description: | + The extraction method used to obtain this data. + + Documents HOW a claim or data element was extracted from its source, + providing transparency and reproducibility. + + **Common Methods**: + - xpath_exact_match: XPath query with exact text match + - xpath_fuzzy_match: XPath with fuzzy matching + - text_search: Full-text search + - css_selector: CSS selector extraction + - json_ld_parse: JSON-LD structured data + - nlp_ner: NLP Named Entity Recognition + - manual_annotation: Human extraction + + **MIGRATION NOTE (2026-01-19)**: + Replaces claim_extraction_method slot per slot_fixes.yaml (Rule 53/56). + Uses RiC-O temporal naming convention (is_or_was_*). + exact_mappings: + - prov:wasGeneratedBy + close_mappings: + - prov:wasAssociatedWith + comments: + - 'CREATED 2026-01-19: Replaces claim_extraction_method per Rule 53/56' + - Range is ExtractionMethod class for structured representation diff --git a/schemas/20251121/linkml/modules/slots/is_or_was_included_in.yaml b/schemas/20251121/linkml/modules/slots/is_or_was_included_in.yaml new file mode 100644 index 0000000000..6cdaf16b47 --- /dev/null +++ b/schemas/20251121/linkml/modules/slots/is_or_was_included_in.yaml @@ -0,0 +1,55 @@ +# is_or_was_included_in - Collection/set inclusion relationship slot +# +# Created per slot_fixes.yaml migration for: collected_in +# Creation date: 2026-01-19 + +id: https://nde.nl/ontology/hc/slot/is_or_was_included_in +name: is_or_was_included_in +title: Is or Was Included In + +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + rico: https://www.ica.org/standards/RiC/ontology# + schema: http://schema.org/ + dcterms: http://purl.org/dc/terms/ + +default_prefix: hc + +imports: + - linkml:types + +slots: + is_or_was_included_in: + slot_uri: rico:isOrWasIncludedIn + description: | + Links an entity to a collection, set, or aggregation that includes/included it. + + **RiC-O Alignment**: `rico:isOrWasIncludedIn` + + **USAGE**: + - Heritage items included in collections + - Records included in record sets + - Objects included in holdings + - Documents included in archives + + **Temporal Semantics** (RiC-O style): + - "is included" = currently included + - "was included" = previously included but no longer + - Covers full temporal lifecycle of inclusion relationship + + range: uriorcurie + multivalued: true + + exact_mappings: + - rico:isOrWasIncludedIn + + close_mappings: + - dcterms:isPartOf + - schema:isPartOf + + examples: + - value: https://nde.nl/collection/rijksmuseum/paintings + description: Object is included in Rijksmuseum paintings collection + - value: https://nde.nl/collection/nationaal-archief/colonial-archives + description: Document is included in colonial archives collection diff --git a/schemas/20251121/linkml/modules/slots/is_or_was_listed_in.yaml b/schemas/20251121/linkml/modules/slots/is_or_was_listed_in.yaml new file mode 100644 index 0000000000..95d1c857e1 --- /dev/null +++ b/schemas/20251121/linkml/modules/slots/is_or_was_listed_in.yaml @@ -0,0 +1,45 @@ +id: https://nde.nl/ontology/hc/slot/is_or_was_listed_in +name: is_or_was_listed_in_slot +title: Is Or Was Listed In Slot +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 +default_prefix: hc +slots: + is_or_was_listed_in: + description: >- + Indicates inclusion in a regulatory, classification, or administrative listing. + + **Temporal Semantics**: Uses RiC-O-style "is_or_was" to express that the + listing may be current or historical - specimens may be added to or removed + from regulatory lists over time. + + **Common Use Cases**: + - CITES appendix listings for endangered species specimens + - IUCN Red List categorizations + - National heritage register listings + - UNESCO World Heritage Site designations + - Protected species schedules + + **Example**: + ```yaml + is_or_was_listed_in: + listing_type: CITESAppendix + listing_value: APPENDIX_I + listing_date: "1975-07-01" + listing_authority: "CITES Secretariat" + ``` + slot_uri: schema:isPartOf + range: string + multivalued: true + exact_mappings: + - schema:isPartOf + close_mappings: + - skos:inScheme + annotations: + specificity_score: 0.50 + specificity_rationale: "Generic regulatory listing predicate applicable to biological specimens, cultural heritage objects, and protected sites" diff --git a/schemas/20251121/linkml/modules/slots/is_or_was_located_in.yaml b/schemas/20251121/linkml/modules/slots/is_or_was_located_in.yaml new file mode 100644 index 0000000000..8cbc7f56e3 --- /dev/null +++ b/schemas/20251121/linkml/modules/slots/is_or_was_located_in.yaml @@ -0,0 +1,102 @@ +# is_or_was_located_in - Links an entity to a place where it is/was located +# Created: 2026-01-18 +# Migration from city slot per slot_fixes.yaml revision +# Follows RiC-O temporal naming convention (Rule 39) + +id: https://nde.nl/ontology/hc/slot/is_or_was_located_in +name: is_or_was_located_in_slot +title: Is Or Was Located In Slot + +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + schema: http://schema.org/ + gn: http://www.geonames.org/ontology# + rico: https://www.ica.org/standards/RiC/ontology# + locn: http://www.w3.org/ns/locn# + +imports: + - linkml:types + - ../classes/City + +default_prefix: hc + +slots: + is_or_was_located_in: + description: | + Links an entity to a city or settlement where it is or was located. + + **TEMPORAL SEMANTICS** (RiC-O style): + + The "is_or_was" naming indicates that location can change over time: + - Heritage institutions may relocate to different cities + - Historical locations preserved for provenance + - Administrative boundaries may be redrawn + + **DISTINCTION FROM is_or_was_located_within**: + + - `is_or_was_located_in`: Entity is AT a place (city/settlement level) + - `is_or_was_located_within`: Entity is CONTAINED IN a larger place (hierarchical) + + **REPLACES**: + + - `city` (string slot) - Migrated to structured City class + + **USE CASES**: + + - Address city component (structured) + - Auxiliary place city location + - Any entity requiring city-level location + + range: City + slot_uri: schema:addressLocality + inlined: true + multivalued: false + required: false + + exact_mappings: + - schema:addressLocality + - locn:postName + + close_mappings: + - gn:locatedIn + - rico:isOrWasLocatedAt + + annotations: + custodian_types: '["*"]' + custodian_types_rationale: | + City location applicable to all custodian types. + custodian_types_primary: "*" + specificity_score: 0.2 + specificity_rationale: | + Low specificity - universal geographic relationship for all entities. + + examples: + - value: | + is_or_was_located_in: + settlement_name: "Amsterdam" + geonames_id: 2759794 + country: "NL" + description: Entity located in Amsterdam. + + - value: | + is_or_was_located_in: + settlement_name: "Haarlem" + geonames_id: 2755420 + country: "NL" + has_or_had_geographic_subdivision: + subregion_code: "NL-NH" + description: Entity located in Haarlem, Noord-Holland. + + - value: | + is_or_was_located_in: + settlement_name: "Rio de Janeiro" + geonames_id: 3451190 + country: "BR" + description: Entity located in Rio de Janeiro, Brazil. + + comments: + - Created from slot_fixes.yaml migration for city slot (2026-01-18) + - Replaces string-valued city slot with structured City class + - City is_a Settlement, so inherits GeoNames ID, coordinates, etc. + - Follows RiC-O naming convention (is_or_was_*) for temporal semantics diff --git a/schemas/20251121/linkml/modules/slots/is_or_was_responsible_for.yaml b/schemas/20251121/linkml/modules/slots/is_or_was_responsible_for.yaml new file mode 100644 index 0000000000..e24592546c --- /dev/null +++ b/schemas/20251121/linkml/modules/slots/is_or_was_responsible_for.yaml @@ -0,0 +1,68 @@ +# is_or_was_responsible_for - Legal/custodial responsibility relationship slot +# +# Created per slot_fixes.yaml migration for: collections_under_responsibility +# Creation date: 2026-01-19 +# Rule 53/39: RiC-O temporal naming convention + +id: https://nde.nl/ontology/hc/slot/is_or_was_responsible_for +name: is_or_was_responsible_for +title: Is or Was Responsible For + +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + rico: https://www.ica.org/standards/RiC/ontology# + tooi: https://identifier.overheid.nl/tooi/def/ont/ + schema: http://schema.org/ + prov: http://www.w3.org/ns/prov# + +default_prefix: hc + +imports: + - linkml:types + +slots: + is_or_was_responsible_for: + slot_uri: rico:hasOrHadHolder + description: | + Links a legal entity to collections or resources for which it bears formal legal responsibility. + + **TEMPORAL SEMANTICS**: + Per RiC-O and Rule 39, the "is_or_was" prefix indicates that: + - The relationship may be current (active responsibility) + - The relationship may be historical (past responsibility, now transferred) + - Temporal validity is tracked via the range class (e.g., Collection.temporal_extent) + + **USAGE**: + Used for: + - Legal responsibility for heritage collections + - Custodial responsibility for archival holdings + - Formal accountability for cultural property + + **RELATIONSHIP TO TOOI**: + - Forward direction from legal entity to collection + - Replaces collections_under_responsibility slot + - Maps to tooi:heeft_informatieobject semantics + + **BIDIRECTIONAL PATTERN**: + - Forward: CustodianLegalStatus → Collection (is_or_was_responsible_for) + - Inverse: Collection → CustodianLegalStatus (is_or_was_held_by or has_or_had_holder) + + range: uriorcurie + multivalued: true + + exact_mappings: + - rico:hasOrHadHolder + + close_mappings: + - tooi:heeft_informatieobject + - prov:hadMember + + related_mappings: + - schema:collection + + examples: + - value: https://nde.nl/ontology/hc/collection/rm-national-collection + description: Rijksmuseum foundation responsible for National Collection + - value: https://nde.nl/ontology/hc/collection/nha-provincial-archive + description: Noord-Hollands Archief responsible for Provincial Archive diff --git a/schemas/20251121/linkml/modules/slots/level_value.yaml b/schemas/20251121/linkml/modules/slots/level_value.yaml new file mode 100644 index 0000000000..a59fd4a8e8 --- /dev/null +++ b/schemas/20251121/linkml/modules/slots/level_value.yaml @@ -0,0 +1,42 @@ +# level_value slot +# String value for levels (certainty, confidence, severity, etc.) +# +# Generation date: 2026-01-18 +# Rule compliance: 38 (slot centralization), 43 (singular nouns) +# Usage: CertaintyLevel class - stores CERTAIN, PROBABLE, POSSIBLE, UNCERTAIN values + +id: https://nde.nl/ontology/hc/slot/level_value +name: level_value_slot +title: Level Value Slot + +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns# + +imports: + - linkml:types + +default_prefix: hc + +slots: + level_value: + description: >- + The value of a level (certainty, confidence, severity, arrangement, etc.). + + For certainty levels, standard values are: + - CERTAIN: Documentary evidence confirms + - PROBABLE: Strong circumstantial evidence + - POSSIBLE: Reasonable inference + - UNCERTAIN: Speculative/unverified + + Class-specific slot_usage should document applicable values. + range: string + slot_uri: rdf:value + annotations: + specificity_score: 0.25 + specificity_rationale: >- + Generic value slot applicable to various level types. + custodian_types: '["*"]' + custodian_types_rationale: >- + Level values are universal concepts applicable to all custodian types. diff --git a/schemas/20251121/linkml/modules/slots/manifest.json b/schemas/20251121/linkml/modules/slots/manifest.json index 3f2af8ba39..525a26de3f 100644 --- a/schemas/20251121/linkml/modules/slots/manifest.json +++ b/schemas/20251121/linkml/modules/slots/manifest.json @@ -50,12 +50,9 @@ "catalog_url.yaml", "cataloging_standard.yaml", "category_measurement.yaml", - "category_note.yaml", "category_status.yaml", "catering_price_range.yaml", "catering_type.yaml", - "certainty_level.yaml", - "certainty_note.yaml", "cessation_observed_in.yaml", "change_in_net_asset.yaml", "change_rationale.yaml", @@ -69,25 +66,16 @@ "chapter_source.yaml", "chapter_start_seconds.yaml", "chapter_start_time.yaml", - "chapter_thumbnail_timestamp.yaml", "chapter_thumbnail_url.yaml", "chapter_title.yaml", - "chapters_generated_at.yaml", - "chapters_source.yaml", - "character_count.yaml", - "circumstances_of_death.yaml", - "cites_appendix.yaml", - "city.yaml", - "claim.yaml", - "claim_extraction_method.yaml", + "is_deceased.yaml", + "is_or_was_caused_by.yaml", + "is_or_was_listed_in.yaml", "claim_id.yaml", - "claim_note.yaml", "claim_source_url.yaml", - "claim_type.yaml", "claim_value.yaml", - "claims_count.yaml", - "classification_status.yaml", - "classifies_place.yaml", + "based_on_claim.yaml", + "classifies_or_classified.yaml", "classroom_count.yaml", "clear_thinking.yaml", "climate_control_type.yaml", @@ -99,10 +87,7 @@ "cms_product_version.yaml", "co_funding_required.yaml", "co_organized_by.yaml", - "collected_in.yaml", - "collecting_scope.yaml", "collection_access.yaml", - "collection_broader_type.yaml", "collection_date.yaml", "collection_description.yaml", "collection_discovery_score.yaml", @@ -113,14 +98,13 @@ "collection_name.yaml", "collection_purpose.yaml", "collection_scope.yaml", - "collection_size.yaml", + "collection_type.yaml", "collection_type_description.yaml", "collection_type_id.yaml", "collection_type_name.yaml", "collection_type_ref.yaml", "collection_web_address.yaml", - "collections_under_responsibility.yaml", "collector.yaml", "colonial.yaml", "comment_author.yaml", @@ -133,23 +117,19 @@ "comment_text.yaml", "comment_updated_at.yaml", "comments_fetched.yaml", - "commercial_activity.yaml", "commercial_custodian_subtype.yaml", "commercial_operation.yaml", "commission_rate.yaml", "common_name.yaml", "common_name_language.yaml", "common_variant.yaml", - "community_engagement.yaml", "community_significance.yaml", - "completion_token.yaml", "complex_name.yaml", "compliance_status.yaml", "component_type.yaml", "condition.yaml", "condition_after.yaml", "condition_before.yaml", - "condition_description.yaml", "condition_id.yaml", "condition_of_access.yaml", "condition_on_return.yaml", @@ -312,6 +292,7 @@ "deployment_date.yaml", "derived_from_entity.yaml", "derived_from_observation.yaml", + "derives_or_derived_from.yaml", "description.yaml", "description_section.yaml", "description_text.yaml", @@ -941,6 +922,7 @@ "has_or_had_silence_segment.yaml", "has_or_had_social_media_profile.yaml", "has_or_had_sound_event_type.yaml", + "has_or_had_source.yaml", "has_or_had_specification.yaml", "has_or_had_speech_segment.yaml", "has_or_had_staff_member.yaml", @@ -1139,9 +1121,11 @@ "is_or_was_derived_from.yaml", "is_or_was_encompassed_by.yaml", "is_or_was_equivalent_to.yaml", + "is_or_was_extracted_using.yaml", "is_or_was_generated_by.yaml", "is_or_was_indexed.yaml", "is_or_was_instance_of.yaml", + "is_or_was_located_in.yaml", "is_or_was_located_within.yaml", "is_or_was_managed_by.yaml", "is_or_was_member_of.yaml", @@ -1149,6 +1133,7 @@ "is_or_was_platform_of.yaml", "is_or_was_related_to.yaml", "is_or_was_required.yaml", + "is_or_was_responsible_for.yaml", "is_or_was_revision_of.yaml", "is_or_was_stored_at.yaml", "is_or_was_sub_collection_of.yaml", @@ -1235,6 +1220,7 @@ "legal_responsibility_start_date.yaml", "legal_status.yaml", "legal_system_type.yaml", + "level_value.yaml", "lender.yaml", "lender_contact.yaml", "lending_policy.yaml", @@ -1509,7 +1495,7 @@ "permanent_location.yaml", "permission_required.yaml", "person_claim_id.yaml", - "person_claim_note.yaml", + "person_claim_type.yaml", "person_claim_value.yaml", "person_html_file.yaml", @@ -1952,6 +1938,7 @@ "was_derived_from.yaml", "was_generated_by.yaml", "was_last_updated_at.yaml", + "warrants_or_warranted.yaml", "wikidata_entity.yaml", "wikidata_equivalent.yaml", "wikidata_id.yaml" diff --git a/schemas/20251121/linkml/modules/slots/slot_fixes.yaml b/schemas/20251121/linkml/modules/slots/slot_fixes.yaml index eb5b8feaf1..8f5d18c400 100644 --- a/schemas/20251121/linkml/modules/slots/slot_fixes.yaml +++ b/schemas/20251121/linkml/modules/slots/slot_fixes.yaml @@ -49,6 +49,11 @@ fixes: timestamp: '2026-01-13T00:00:00Z' session: session-2026-01-13-type-migration notes: AddressType/AddressTypes created in previous session + feedback: + - timestamp: '2026-01-19T12:00:00Z' + user: Simon C. Kemper + done: false + comment: The address_formatted slot should be replaced with has_or_had_label slot. This did not yet happen revision: - label: has_or_had_label type: slot @@ -776,6 +781,11 @@ fixes: session: session-2026-01-15-slot-migrations notes: 'NO MIGRATION NEEDED: Slot was never created - only existed as a planned slot_fix entry. No classes reference this slot. If functionality is needed in future, create has_or_had_benefit slot with appropriate range.' + feedback: + - timestamp: '2026-01-17T00:32:00Z' + user: Simon C. Kemper + done: false + comment: conduct the migration or remove the slot. revision: - label: benefits_provided type: slot @@ -6120,6 +6130,11 @@ fixes: field combined with `currency` to form a coherent monetary value. Similar to how `area_value` is internal to `Area` class. The Quantity pattern (with units, methodology, temporal extent) is overkill for simple financial amounts where currency already provides unit context. Fixed broken import in Expenses.yaml (removed non-existent has_or_had_amount).' + feedback: + - timestamp: '2026-01-17T00:00:00Z' + agent: Simon C. Kemper + done: false + comment: DO conduct the migration as per the revision! Keep the semantics aligned. revision: - label: has_or_had_quantity type: slot @@ -6170,6 +6185,11 @@ fixes: notes: 'ALREADY_COMPLETE: area_value is an internal numeric field of the Area class. Classes use has_or_had_area slot with Area class range. The migration (area_hectares, building_floor_area_sqm → has_or_had_area + Area) was completed in earlier sessions. area_value.yaml retained as internal slot for Area class.' + feedback: + - timestamp: '2026-01-17T00:00:00Z' + agent: Simon C. Kemper + done: false + comment: DO conduct the migration as per the revision! Keep the semantics aligned. revision: - label: has_or_had_area type: slot @@ -6420,6 +6440,11 @@ fixes: notes: 'NO_MIGRATION_NEEDED: base_surname is a PNV (Person Name Vocabulary) standard property with slot_uri: pnv:baseSurname. It is used within PersonName class which follows PNV ontology. The slot has proper ontology alignment and domain-specific semantics for Dutch heritage name sorting conventions. Keeping as-is for PNV compliance.' + feedback: + - timestamp: '2026-01-17T00:00:00Z' + agent: Simon C. Kemper + done: false + comment: DO conduct the migration as per the revision! Keep the semantics aligned. revision: - label: has_or_had_last_name type: slot @@ -7535,6 +7560,19 @@ fixes: Retaining with existing structure. ' + feedback: + - timestamp: '2026-01-19T14:30:00Z' + reviewer: Simon C. Kemper + comment: 'THE REVISION SHOULD BE CONDUCTED AS PLANNED! + + While EDTF is a string format, the underlying temporal concept can be modeled using TimeSpan. + + Consider implementing a mapping layer that translates EDTF strings into TimeSpan representations + + where possible, while retaining the original EDTF string for fidelity. + + This would enhance semantic interoperability without losing the original data.' + done: false - original_slot_id: https://nde.nl/ontology/hc/slot/birth_iso_date revision: - label: temporal_extent @@ -7561,6 +7599,17 @@ fixes: Retaining with existing structure. ' + feedback: + - timestamp: '2026-01-19T14:35:00Z' + reviewer: Simon C. Kemper + comment: 'CONSIDER MIGRATING TO TimeSpan! + + While a single date can be represented as a date type, using TimeSpan would provide greater flexibility + + for representing uncertain or approximate dates in the future. + + This would align with best practices for temporal data modeling.' + done: false - original_slot_id: https://nde.nl/ontology/hc/slot/birth_source_text revision: - label: has_or_had_provenance @@ -7591,6 +7640,17 @@ fixes: Retaining with existing structure. ' + feedback: + - timestamp: '2026-01-19T14:40:00Z' + reviewer: Simon C. Kemper + comment: 'CONSIDER STRUCTURING PROVENANCE! + + While a simple string may suffice for basic citations, structuring provenance information + + using dedicated classes would enhance data quality and traceability. + + This would facilitate better integration with provenance tracking systems.' + done: false - original_slot_id: https://nde.nl/ontology/hc/slot/bold_id revision: - label: has_or_had_identifier @@ -7617,6 +7677,15 @@ fixes: Retaining with existing structure. ' + feedback: + - timestamp: '2026-01-19T14:45:00Z' + reviewer: Simon C. Kemper + comment: 'RECOMMEND MIGRATING TO has_or_had_identifier! + + Standardizing on has_or_had_identifier would improve consistency across the schema. + + This would facilitate better integration with other identifier systems and enhance data interoperability.' + done: false - original_slot_id: https://nde.nl/ontology/hc/slot/calendar_system revision: - label: complies_or_complied_with @@ -7641,6 +7710,17 @@ fixes: Retaining with existing structure. ' + feedback: + - timestamp: '2026-01-19T14:50:00Z' + reviewer: Simon C. Kemper + comment: 'CONSIDER CREATING CalendarSystem CLASS! + + While the current string representation is functional, creating a CalendarSystem class + + would enhance semantic clarity and allow for richer metadata about each calendar system. + + This would align with best practices for temporal data modeling.' + done: false - original_slot_id: https://nde.nl/ontology/hc/slot/call_description revision: - label: has_or_had_description @@ -7794,6 +7874,17 @@ fixes: Retaining with existing structure. ' + feedback: + - timestamp: '2026-01-19T14:55:00Z' + reviewer: Simon C. Kemper + comment: 'RECOMMEND MIGRATING TO Permission CLASS! + + While the current boolean representation is simple, migrating to a Permission class + + would enhance semantic clarity and allow for richer metadata about access rules. + + This would align with best practices for modeling access conditions.' + done: false - original_slot_id: https://nde.nl/ontology/hc/slot/canonical_value revision: - label: has_or_had_canonical_form @@ -7824,6 +7915,17 @@ fixes: Retaining with existing structure. ' + feedback: + - timestamp: '2026-01-19T15:00:00Z' + reviewer: Simon C. Kemper + comment: 'CONSIDER CREATING CanonicalForm CLASS! + + While the current string representation is functional, creating a CanonicalForm class + + would enhance semantic clarity and allow for richer metadata about each canonical value. + + This would align with best practices for data normalization.' + done: false - original_slot_id: https://nde.nl/ontology/hc/slot/capacity revision: - label: has_or_had_capacity @@ -7848,6 +7950,17 @@ fixes: Retaining with existing structure. ' + feedback: + - timestamp: '2026-01-19T15:05:00Z' + reviewer: Simon C. Kemper + comment: 'RECOMMEND MIGRATING TO Capacity CLASS! + + Standardizing on has_or_had_capacity with a Capacity class would improve semantic clarity + + and align with best practices for modeling dimensional data. + + This would facilitate better integration with other dimension-related data.' + done: false - original_slot_id: https://nde.nl/ontology/hc/slot/capacity_cubic_meters revision: - label: has_or_had_capacity @@ -7940,6 +8053,17 @@ fixes: Retaining with existing structure. ' + feedback: + - timestamp: '2026-01-19T15:10:00Z' + reviewer: Simon C. Kemper + comment: 'CONSIDER CREATING FinancialAmount CLASS! + + While the current decimal representation is functional, creating a FinancialAmount class + + would enhance semantic clarity and allow for richer metadata about each budget amount. + + This would align with best practices for financial data modeling.' + done: false - original_slot_id: https://nde.nl/ontology/hc/slot/caption_available revision: - label: has_or_had_caption @@ -7966,6 +8090,17 @@ fixes: Retaining with existing structure. ' + feedback: + - timestamp: '2026-01-19T15:15:00Z' + reviewer: Simon C. Kemper + comment: 'RECOMMEND MIGRATING TO Caption CLASS! + + While the current string representation is simple, migrating to a Caption class + + would enhance semantic clarity and allow for richer metadata about caption availability. + + This would align with best practices for accessibility data modeling.' + done: false - original_slot_id: https://nde.nl/ontology/hc/slot/card_description revision: - label: has_or_had_description @@ -7990,6 +8125,17 @@ fixes: Retaining with existing structure. ' + feedback: + - timestamp: '2026-01-19T15:20:00Z' + reviewer: Simon C. Kemper + comment: 'CONSIDER CREATING Description CLASS! + + While the current string representation is functional, creating a Description class + + would enhance semantic clarity and allow for richer metadata about each description. + + This would align with best practices for descriptive data modeling.' + done: false - original_slot_id: https://nde.nl/ontology/hc/slot/card_description_en revision: - label: has_or_had_description @@ -8023,6 +8169,16 @@ fixes: Retaining with existing structure. ' + feedback: + - timestamp: '2026-01-19T15:25:00Z' + reviewer: Simon C. Kemper + comment: 'CONSIDER CREATING Description CLASS! + While the current string representation is functional, creating a Description class + + would enhance semantic clarity and allow for richer metadata about each description. + + This would align with best practices for multilingual data modeling.' + done: false - original_slot_id: https://nde.nl/ontology/hc/slot/card_image_url revision: - label: has_or_had_image @@ -8049,6 +8205,16 @@ fixes: for a simple image URL field. Retaining with existing structure. ' + feedback: + - timestamp: '2026-01-19T15:30:00Z' + reviewer: Simon C. Kemper + comment: 'RECOMMEND MIGRATING TO Image CLASS! + While the current URI representation is functional, migrating to an Image class + + would enhance semantic clarity and allow for richer metadata about each image. + + This would align with best practices for media data modeling.' + done: false - original_slot_id: https://nde.nl/ontology/hc/slot/card_title revision: - label: has_or_had_label @@ -8071,6 +8237,16 @@ fixes: Retaining with existing structure. ' + feedback: + - timestamp: '2026-01-19T15:35:00Z' + reviewer: Simon C. Kemper + comment: 'CONSIDER CREATING Label CLASS! + While the current string representation is functional, creating a Label class + + would enhance semantic clarity and allow for richer metadata about each title. + + This would align with best practices for title data modeling.' + done: false - original_slot_id: https://nde.nl/ontology/hc/slot/card_title_en revision: - label: has_or_had_label @@ -8100,6 +8276,14 @@ fixes: Retaining with existing structure. ' + feedback: + - timestamp: '2026-01-19T15:40:00Z' + reviewer: Simon C. Kemper + comment: 'CONSIDER CREATING Label CLASS! + While the current string representation is functional, creating a Label class + would enhance semantic clarity and allow for richer metadata about each title. + This would align with best practices for multilingual data modeling.' + done: false - original_slot_id: https://nde.nl/ontology/hc/slot/card_url revision: - label: has_or_had_url @@ -8122,6 +8306,14 @@ fixes: Retaining with existing structure. ' + feedback: + - timestamp: '2026-01-19T15:45:00Z' + reviewer: Simon C. Kemper + comment: 'CONSIDER CREATING URL CLASS! + While the current URI representation is functional, creating a URL class + would enhance semantic clarity and allow for richer metadata about each URL. + This would align with best practices for web resource data modeling.' + done: false - original_slot_id: https://nde.nl/ontology/hc/slot/carrier_type revision: - label: has_or_had_carrier @@ -8157,6 +8349,14 @@ fixes: Retaining with existing structure. ' + feedback: + - timestamp: '2026-01-19T15:50:00Z' + reviewer: Simon C. Kemper + comment: 'THE REVISION SHOULD BE CONDUCTED AS PLANNED! + While an enum is used, migrating to a full CarrierType class would enhance semantic clarity + and allow for richer metadata about each carrier type. + This would align with best practices for data typing and classification.' + done: false - original_slot_id: https://nde.nl/ontology/hc/slot/carries_information revision: - label: has_or_had_content @@ -8191,6 +8391,14 @@ fixes: Retaining with existing structure. ' + feedback: + - timestamp: '2026-01-19T15:55:00Z' + reviewer: Simon C. Kemper + comment: 'CONSIDER CREATING Content CLASS! + While the current string representation is functional, creating a Content class + would enhance semantic clarity and allow for richer metadata about each content item. + This would align with best practices for content data modeling.' + done: false - original_slot_id: https://nde.nl/ontology/hc/slot/catalog_description revision: - label: has_or_had_description @@ -8268,6 +8476,13 @@ fixes: Retaining with existing structure. ' + feedback: + - timestamp: '2026-01-19T16:00:00Z' + reviewer: Simon C. Kemper + comment: 'RECOMMEND MIGRATING TO has_or_had_identifier! + Standardizing on has_or_had_identifier would improve consistency across the schema. + This would facilitate better integration with other identifier systems and enhance data interoperability.' + done: false - original_slot_id: https://nde.nl/ontology/hc/slot/catalog_subtitle revision: - label: has_or_had_label @@ -8318,6 +8533,14 @@ fixes: Retaining with existing structure. ' + feedback: + - timestamp: '2026-01-19T16:05:00Z' + reviewer: Simon C. Kemper + comment: 'RECOMMEND MIGRATING TO CatalogSystem CLASS! + While the current string representation is functional, migrating to a CatalogSystem class + would enhance semantic clarity and allow for richer metadata about each catalog system. + This would align with best practices for system data modeling.' + done: false - original_slot_id: https://nde.nl/ontology/hc/slot/catalog_title revision: - label: has_or_had_label @@ -8405,6 +8628,14 @@ fixes: Retaining with existing structure. ' + feedback: + - timestamp: '2026-01-19T16:10:00Z' + reviewer: Simon C. Kemper + comment: 'RECOMMEND MIGRATING TO Measurement CLASS! + While the current string representation is functional, migrating to a Measurement class + would enhance semantic clarity and allow for richer metadata about each measurement. + This would align with best practices for measurement data modeling.' + done: false - original_slot_id: https://nde.nl/ontology/hc/slot/category_note revision: - label: has_or_had_note @@ -8413,24 +8644,21 @@ fixes: type: class processed: status: true - timestamp: '2026-01-17T22:03:00Z' - session: session-2026-01-17-slot-migration - notes: 'WELL_STRUCTURED_NO_MIGRATION_NEEDED: category_note has proper ontology alignment: - - - slot_uri: skos:note (SKOS standard) - - - close_mappings: dcterms:description - - - Range: string (appropriate for notes text) - - - skos:note is the standard property for documentation notes. - - Creating a Note class would be OVER-ENGINEERING for simple text. - - Retaining with existing structure. - - ' + timestamp: '2026-01-18T12:00:00Z' + session: session-2026-01-18-slot-migration + notes: "MIGRATION EXECUTED per Rule 56 (Semantic Consistency Over Simplicity).\nPrevious notes incorrectly claimed \"\ + NO MIGRATION NEEDED\" - this violated Rule 56.\n\nChanges made:\n- Archived category_note.yaml → archive/category_note_archived_20260118.yaml\n\ + - Removed from manifest.json\n- Updated StorageCondition.yaml:\n - Added imports for has_or_had_note and Note class\n\ + \ - Updated StorageConditionCategoryAssessment slots list\n - Added slot_usage with Note class range and examples\n\ + \ - Updated all examples to use Note class pattern\n\nThe Note class provides typed notes (note_type: \"category\"\ + ) for consistency\nwith other *_note migrations (claim_note, person_claim_note, etc.).\n" + feedback: + - timestamp: '2026-01-19T16:15:00Z' + reviewer: Simon C. Kemper + comment: 'THE REVISION SHOULD BE CONDUCTED AS PLANNED! + Migrating to a Note class enhances semantic clarity and aligns with best practices for note data modeling. + This change improves consistency across the schema and facilitates richer metadata for notes.' + done: false - original_slot_id: https://nde.nl/ontology/hc/slot/category_status revision: - label: has_or_had_status @@ -8455,6 +8683,14 @@ fixes: Retaining with existing structure. ' + feedback: + - timestamp: '2026-01-19T16:20:00Z' + reviewer: Simon C. Kemper + comment: 'THE REVISION SHOULD BE CONDUCTED AS PLANNED! + While an enum is used, migrating to a full CategoryStatus class would enhance semantic clarity + and allow for richer metadata about each status. + This would align with best practices for data typing and classification.' + done: false - original_slot_id: https://nde.nl/ontology/hc/slot/catering_price_range revision: - label: has_or_had_price @@ -8493,6 +8729,14 @@ fixes: Retaining with existing structure. ' + feedback: + - timestamp: '2026-01-19T16:25:00Z' + reviewer: Simon C. Kemper + comment: 'CONSIDER CREATING Price CLASS! + While the current string representation is functional, creating a Price class + would enhance semantic clarity and allow for richer metadata about each price range. + This would align with best practices for financial data modeling.' + done: false - original_slot_id: https://nde.nl/ontology/hc/slot/catering_type revision: - label: has_or_had_type @@ -8521,6 +8765,14 @@ fixes: Retaining with existing structure. ' + feedback: + - timestamp: '2026-01-19T16:30:00Z' + reviewer: Simon C. Kemper + comment: 'THE REVISION SHOULD BE CONDUCTED AS PLANNED! + While an enum is used, migrating to a full CateringType class would enhance semantic clarity + and allow for richer metadata about each catering type. + This would align with best practices for data typing and classification.' + done: false - original_slot_id: https://nde.nl/ontology/hc/slot/certainty_level revision: - label: has_or_had_level @@ -8529,24 +8781,40 @@ fixes: type: class processed: status: true - timestamp: '2026-01-17T22:04:00Z' - session: session-2026-01-17-slot-migration - notes: 'WELL_STRUCTURED_NO_MIGRATION_NEEDED: certainty_level has proper ontology alignment: + timestamp: '2026-01-18T12:00:00Z' + session: session-2026-01-18-slot-migration + notes: 'MIGRATED per Rule 56 (semantic consistency over simplicity). - - slot_uri: crm:P141_assigned (CIDOC-CRM standard) - - - Range: string (values: CERTAIN, PROBABLE, POSSIBLE, UNCERTAIN) + Previous notes incorrectly claimed "WELL_STRUCTURED_NO_MIGRATION_NEEDED". - The CIDOC-CRM predicate is appropriate for assigning certainty levels. + Migration completed 2026-01-18: - Values are documented in description. Could be promoted to enum if needed, + - Created CertaintyLevel class (modules/classes/CertaintyLevel.yaml) - but current string with documented values is adequate. + - Created level_value slot for the level value - Retaining with existing structure. + - Updated ProvenanceEvent.yaml to use has_or_had_level with CertaintyLevel range + + - Archived certainty_level.yaml to archive/certainty_level_archived_20260118.yaml + + - Updated manifest.json + + + CertaintyLevel class provides structured representation with: + + - level_value: CERTAIN, PROBABLE, POSSIBLE, UNCERTAIN + + - has_or_had_note: Note class for explanatory notes ' + feedback: + - timestamp: '2026-01-19T16:35:00Z' + reviewer: Simon C. Kemper + comment: 'THE REVISION SHOULD BE CONDUCTED AS PLANNED! + Migrating to a CertaintyLevel class enhances semantic clarity and aligns with best practices for data modeling. + This change improves consistency across the schema and facilitates richer metadata for certainty levels.' + done: false - original_slot_id: https://nde.nl/ontology/hc/slot/certainty_note revision: - label: has_or_had_level @@ -8559,24 +8827,42 @@ fixes: type: class processed: status: true - timestamp: '2026-01-17T22:04:00Z' - session: session-2026-01-17-slot-migration - notes: 'WELL_STRUCTURED_NO_MIGRATION_NEEDED: certainty_note has proper ontology alignment: + timestamp: '2026-01-18T12:00:00Z' + session: session-2026-01-18-slot-migration + notes: 'MIGRATED per Rule 56 (semantic consistency over simplicity). - - slot_uri: skos:note (SKOS standard) + Previous notes incorrectly claimed "WELL_STRUCTURED_NO_MIGRATION_NEEDED" and - - close_mappings: dcterms:description - - - Range: string (appropriate for explanatory text) + dismissed class-based modeling as "OVER-ENGINEERING". - skos:note is the standard property for documentation notes. + Migration completed 2026-01-18 (combined with certainty_level migration): - Creating CertaintyLevel+Note classes would be OVER-ENGINEERING. + - CertaintyLevel class includes has_or_had_note slot with Note range - Retaining with existing structure. + - Updated ProvenanceEvent.yaml examples to use Note with note_type: "certainty" + + - Archived certainty_note.yaml to archive/certainty_note_archived_20260118.yaml + + - Updated manifest.json + + + The Note class pattern provides: + + - Typed notes (note_type: "certainty", "claim", "extraction", etc.) + + - Structured content with optional date and language + + - Consistent pattern across all *_note slots per slot_fixes.yaml ' + feedback: + - timestamp: '2026-01-19T16:40:00Z' + reviewer: Simon C. Kemper + comment: 'THE REVISION SHOULD BE CONDUCTED AS PLANNED! + Migrating to a Note class enhances semantic clarity and aligns with best practices for note data modeling. + This change improves consistency across the schema and facilitates richer metadata for notes.' + done: false - original_slot_id: https://nde.nl/ontology/hc/slot/cessation_observed_in revision: - label: temporal_extent @@ -8617,6 +8903,14 @@ fixes: Retaining with existing structure. ' + feedback: + - timestamp: '2026-01-19T16:45:00Z' + reviewer: Simon C. Kemper + comment: 'RECOMMEND MIGRATING TO TimeSpan CLASS! + While the current class representation is functional, migrating to a TimeSpan class + would enhance semantic clarity and allow for richer metadata about the temporal extent of cessation observations. + This would align with best practices for temporal data modeling.' + done: false - original_slot_id: https://nde.nl/ontology/hc/slot/cessation_observed_in revision: - label: temporal_extent @@ -8702,6 +8996,14 @@ fixes: Retaining with existing structure. ' + feedback: + - timestamp: '2026-01-19T16:50:00Z' + reviewer: Simon C. Kemper + comment: 'CONSIDER CREATING NetAsset CLASS! + While the current decimal representation is functional, creating a NetAsset class + would enhance semantic clarity and allow for richer metadata about net asset changes. + This would align with best practices for financial data modeling.' + done: false - original_slot_id: https://nde.nl/ontology/hc/slot/change_rationale revision: - label: has_or_had_rationale @@ -8957,6 +9259,15 @@ fixes: ' - original_slot_id: https://nde.nl/ontology/hc/slot/chapter_thumbnail_timestamp + processed: + status: true + timestamp: '2026-01-19T14:30:00Z' + session: session-2026-01-19-slot-migration + notes: 'FULLY MIGRATED: chapter_thumbnail_timestamp → Thumbnail with derives_or_derived_from + + has_or_had_time_interval. Created derives_or_derived_from.yaml slot, Video.yaml + class. Updated Thumbnail.yaml (added slots). Updated VideoChapter.yaml (removed + slot from imports/slots/slot_usage, updated has_or_had_thumbnail example with + structured timestamp). Slot archived to archive/chapter_thumbnail_timestamp_archived_20260119.yaml.' revision: - label: has_or_had_thumbnail type: slot @@ -8971,6 +9282,12 @@ fixes: - label: TimeInterval type: class - original_slot_id: https://nde.nl/ontology/hc/slot/chapter_thumbnail_url + processed: + status: true + timestamp: '2026-01-18T12:00:00Z' + session: session-2026-01-18-slot-migration + notes: 'FULLY MIGRATED: chapter_thumbnail_url → has_or_had_thumbnail + Thumbnail class. Updated VideoChapter.yaml (imports, + slots, slot_usage with structured Thumbnail example). Slot archived to archive/chapter_thumbnail_url_archived_20260118.yaml.' revision: - label: has_or_had_thumbnail type: slot @@ -9010,12 +9327,29 @@ fixes: - label: TimeSpan type: class link_branch: 2 + processed: + status: true + timestamp: '2026-01-19T15:00:00Z' + session: session-2026-01-19-slot-migration + notes: 'FULLY MIGRATED: chapters_generated_at → is_or_was_generated_by + GenerationEvent. + Created GenerationEvent.yaml class (prov:Generation with temporal_extent, has_or_had_provenance, + has_or_had_description slots). Updated VideoChapterList.yaml (imports, slots list, + slot_usage with structured GenerationEvent example showing temporal_extent and provenance). + Archived: modules/slots/archive/chapters_generated_at_archived_20260119.yaml.' - original_slot_id: https://nde.nl/ontology/hc/slot/chapters_source revision: - label: has_or_had_source type: slot - label: Source type: class + processed: + status: true + timestamp: '2026-01-19T00:00:00Z' + session: session-2026-01-19-chapters-source-migration + notes: 'Migrated 2026-01-19 per Rule 53/56. Created has_or_had_source.yaml (prov:wasDerivedFrom). + Created Source.yaml (prov:Entity with ChapterSource subclass). Updated VideoChapterList.yaml + (imports, slots, slot_usage with Source range and examples). Archived: modules/slots/archive/chapters_source_archived_20260119.yaml. + ChapterSourceEnum values preserved as has_or_had_type values in Source class.' - original_slot_id: https://nde.nl/ontology/hc/slot/character_count revision: - label: has_or_had_quantity @@ -9027,6 +9361,11 @@ fixes: - label: Unit type: class value: character + processed: + status: true + notes: "Migrated 2026-01-18 per Rule 53.\n- VideoTextContent.yaml: Consolidated with word_count migration to use \n multivalued\ + \ has_or_had_quantity with Quantity class. Each quantity\n has quantity_type (WORD_COUNT, CHARACTER_COUNT) and measurement\ + \ unit.\n- Archived: modules/slots/archive/character_count_archived_20260118.yaml\n" - original_slot_id: https://nde.nl/ontology/hc/slot/circumstances_of_death revision: - label: is_deceased @@ -9037,19 +9376,84 @@ fixes: type: slot - label: CauseOfDeath type: class + processed: + status: true + timestamp: '2026-01-19T16:00:00Z' + session: session-2026-01-19-circumstances-of-death-migration + notes: "FULLY MIGRATED: circumstances_of_death → is_deceased + DeceasedStatus.\n\ + Created is_deceased.yaml slot (range: DeceasedStatus).\n\ + Created DeceasedStatus.yaml class (schema:DeathEvent) with is_or_was_caused_by, temporal_extent, has_or_had_description.\n\ + Created is_or_was_caused_by.yaml slot (prov:wasInfluencedBy).\n\ + Created CauseOfDeath.yaml class with has_or_had_type (CauseOfDeathTypeEnum), has_or_had_description, has_or_had_location.\n\ + Created CauseOfDeathTypeEnum.yaml (NATURAL, CONFLICT, TARGETED_ATTACK, OCCUPATIONAL, ACCIDENT, PERSECUTION, UNKNOWN).\n\ + Updated StaffRole.yaml (imports, slots, slot_usage with structured example).\n\ + Archived: modules/slots/archive/circumstances_of_death_archived_20260119.yaml." - 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 (schema:isPartOf). + Created CITESAppendix.yaml class with structured CITES appendix listing data. + Updated BiologicalObject.yaml (imports, slots, slot_usage with CITESAppendix range and examples). + Archived: modules/slots/archive/cites_appendix_archived_20260119.yaml. + Original APPENDIX_I/II/III/NOT_LISTED values now use has_or_had_type in CITESAppendix.' - original_slot_id: https://nde.nl/ontology/hc/slot/city + processed: + status: true + timestamp: '2026-01-19T00:00:00Z' + session: session-2026-01-18-city-migration + notes: 'MIGRATION COMPLETE: + + - Created City.yaml class (is_a Settlement, mapped to schema:City) + + - Created is_or_was_located_in.yaml slot (range: City) + + - Updated Address.yaml: imports, slots list, slot_usage migrated + + - Updated AuxiliaryPlace.yaml: imports, slots, slot_usage, examples migrated + + - Examples updated with GeoNames IDs (Hoofddorp: 2753801, Haarlem: 2755003) + + - Archived city.yaml to archive/city_archived_20260118.yaml + + - Updated manifest.json + + ' revision: - label: is_or_was_located_in type: slot - label: City type: class - original_slot_id: https://nde.nl/ontology/hc/slot/claim + processed: + status: true + timestamp: '2026-01-19T00:15:00Z' + session: session-2026-01-19-claim-migration + notes: 'MIGRATION COMPLETE: + + - Created Claim.yaml base class (prov:Entity, base for claim hierarchy) + + - Created warrants_or_warranted.yaml slot (range: Claim, multivalued) + + - Updated WebClaim.yaml to inherit from Claim (is_a: Claim) + + - Updated WebClaimsBlock.yaml: imports, claim → warrants_or_warranted + + - Updated WebEnrichment.yaml: imports, claim → warrants_or_warranted + + - Note: ResearchSource.claim is inline attribute (string), not this slot + + - Archived claim.yaml to archive/claim_archived_20260119.yaml + + - Updated manifest.json + + ' revision: - label: warrants_or_warranted type: slot @@ -9061,6 +9465,23 @@ fixes: type: slot - label: ExtractionMethod type: class + processed: + status: true + timestamp: '2026-01-19T00:30:00Z' + session: session-2026-01-19-claim-extraction-method-migration + notes: 'MIGRATION COMPLETE: + + - Created ExtractionMethod.yaml class (prov:SoftwareAgent) + + - Created is_or_was_extracted_using.yaml slot (prov:wasGeneratedBy) + + - Updated WebClaim.yaml: imports, slots list, slot_usage + + - Archived to: modules/slots/archive/claim_extraction_method_archived_20260119.yaml + + - Updated manifest.json + + ' - original_slot_id: https://nde.nl/ontology/hc/slot/claim_id revision: - label: has_or_had_identifier @@ -9084,6 +9505,13 @@ fixes: type: slot - label: Note type: class + processed: + status: true + notes: '2026-01-18: Migration complete. Created Note class (singular per Rule 43). Updated has_or_had_note slot range + from string to Note class. Updated WebClaim.yaml: removed claim_note import/slot, added has_or_had_note import/slot + with Note class, added slot_usage with description, examples showing note_type: claim pattern. Archived claim_note.yaml + to archive/claim_note_archived_20260118.yaml. Removed from manifest.json. Note class supports typed notes with note_type, + note_content, note_date, language fields.' - original_slot_id: https://nde.nl/ontology/hc/slot/claim_source_url revision: - label: has_or_had_url @@ -9109,6 +9537,33 @@ fixes: type: slot - label: ClaimTypes type: class + processed: + status: true + timestamp: '2026-01-19T00:00:00Z' + session: session-2026-01-19-claimtype-migration + notes: 'Migrated 2026-01-19 per Rule 0b (Type/Types pattern) and Rule 53/56. + + - Created ClaimType.yaml: Abstract base class (skos:Concept). + + - Created ClaimTypes.yaml: 60+ concrete subclasses in 11 categories. + + - WebClaim.yaml: Updated imports, replaced claim_type with has_or_had_type. + + - ChAnnotatorEntityClaim.yaml: Migrated claim_type attribute to has_or_had_type slot. + + - CustodianLegalNameClaim.yaml: Migrated claim_type attribute to has_or_had_type slot. + + - CustodianNameConsensus.yaml: Migrated claim_type attribute to has_or_had_type slot. + + - InvalidWebClaim.yaml: Migrated claim_type attribute to has_or_had_type slot. + + - LogoClaim.yaml: Migrated claim_type attribute to has_or_had_type slot. + + - FindingAid.yaml: Removed stale import of archived claim_type slot. + + - Archived: modules/slots/archive/claim_type_archived_20260119.yaml + + - Archived: modules/enums/archive/ClaimTypeEnum_archived_20260119.yaml' - original_slot_id: https://nde.nl/ontology/hc/slot/claim_value revision: - label: has_or_had_content @@ -9117,12 +9572,9 @@ fixes: type: class processed: status: true - notes: | - Migrated 2026-01-18 per Rule 53/56. - - WebClaim.yaml: Replaced claim_value with has_or_had_content, - range Content class with has_or_had_label holding raw extracted value. - - FindingAid.yaml: Removed unused import. - - Archived: modules/slots/archive/claim_value_archived_20260118.yaml + notes: "Migrated 2026-01-18 per Rule 53/56.\n- WebClaim.yaml: Replaced claim_value with has_or_had_content, \n range\ + \ Content class with has_or_had_label holding raw extracted value.\n- FindingAid.yaml: Removed unused import.\n- Archived:\ + \ modules/slots/archive/claim_value_archived_20260118.yaml\n" - original_slot_id: https://nde.nl/ontology/hc/slot/claims_count revision: - label: has_or_had_provenance @@ -9137,6 +9589,17 @@ fixes: type: slot - label: Quantity type: class + processed: + status: true + timestamp: '2026-01-19T16:30:00Z' + session: session-2026-01-19-claims-count-migration + notes: "FULLY MIGRATED: claims_count → has_or_had_quantity + Quantity.\n\ + Created based_on_claim.yaml slot (prov:wasInfluencedBy) for linking quantity provenance to claims.\n\ + Added CLAIM_COUNT, CHARACTER_COUNT, WORD_COUNT to QuantityTypeEnum.\n\ + Updated FindingAid.yaml (import, slots, slot_usage with structured Quantity example).\n\ + Updated WebClaimsBlock.yaml (imports, slots, slot_usage, removed claims_count attribute).\n\ + Existing slots/classes used: has_or_had_quantity, Quantity, has_or_had_provenance, Provenance, Claim.\n\ + Archived: modules/slots/archive/claims_count_archived_20260119.yaml." - original_slot_id: https://nde.nl/ontology/hc/slot/classification_status revision: - label: has_or_had_status @@ -9151,12 +9614,35 @@ fixes: type: slot - label: ClassificationStatusTypes type: class + processed: + status: true + timestamp: '2026-01-19T17:00:00Z' + session: session-2026-01-19-classification-status-migration + notes: | + FULLY MIGRATED: classification_status → has_or_had_status + ClassificationStatus. + Created ClassificationStatusType.yaml abstract base class (skos:Concept). + Created ClassificationStatusTypes.yaml with concrete subclasses (IndeterminateStatus, AmbiguousStatus, TransitionalStatus, NovelStatus, UnderReviewStatus, PendingVerificationStatus). + Created ClassificationStatus.yaml class (prov:Activity) with has_or_had_type, has_or_had_description, temporal_extent. + Existing slots used: has_or_had_status, has_or_had_type, includes_or_included. + Updated UnspecifiedType.yaml (imports, slots list, slot_usage with structured examples). + Archived: modules/slots/archive/classification_status_archived_20260119.yaml. - original_slot_id: https://nde.nl/ontology/hc/slot/classifies_place revision: - label: classifies_or_classified type: slot - label: CustodianPlace type: class + processed: + status: true + timestamp: '2026-01-19T12:30:00Z' + session: 16 + notes: | + MIGRATION COMPLETE (Rule 53, 2026-01-19): + - Created classifies_or_classified.yaml slot (crm:P2i_is_type_of) + - CustodianPlace already exists - reused + - Updated FeaturePlace.yaml: imports, slots list, slot_usage, examples + - Archived classifies_place.yaml → archive/classifies_place_archived_20260119.yaml + - Updated manifest.json - original_slot_id: https://nde.nl/ontology/hc/slot/classroom_count revision: - label: has_or_had_facility @@ -9235,6 +9721,13 @@ fixes: type: slot - label: Identifier type: class + processed: + status: true + notes: "FULLY_MIGRATED 2026-01-18: cms_id → has_or_had_identifier + Identifier\n\n**Files Modified**:\n- CollectionManagementSystem.yaml:\ + \ Updated imports (removed cms_id, added has_or_had_identifier + Identifier).\n Updated slots list. Added slot_usage\ + \ with Identifier class range.\n Preserved identifier: true for primary ID semantics.\n Updated all 3 examples with\ + \ Identifier structure (identifier_scheme: CMS_URI).\n\n**Archived**: modules/slots/archive/cms_id_archived_20260118.yaml\n\ + \n**Pattern**: CMS identifier URIs now stored as Identifier class with scheme=CMS_URI.\n" - original_slot_id: https://nde.nl/ontology/hc/slot/cms_product_name revision: - label: has_or_had_label @@ -9278,12 +9771,22 @@ fixes: type: slot - label: Collection type: class + processed: + status: true + notes: 'FULLY_MIGRATED 2026-01-19: ArticlesOfAssociation.yaml updated to use is_or_was_included_in (range: CustodianCollection + in slot_usage). Old slot archived to archive/collected_in_archived_20260119.yaml. Note: Uses CustodianCollection range + per existing semantic context for heritage articles.' - original_slot_id: https://nde.nl/ontology/hc/slot/collecting_scope revision: - label: has_or_had_scope type: slot - label: CollectingScope type: class + processed: + status: true + notes: '2026-01-19: Migrated in HeritageSocietyType.yaml. Used existing CollectionScope class (extends Scope) instead + of creating redundant CollectingScope - same semantics. Updated imports, replaced inline attribute with has_or_had_scope slot, + added slot_usage with range CollectionScope. Archived collecting_scope.yaml to archive/collecting_scope_archived_20260119.yaml.' - original_slot_id: https://nde.nl/ontology/hc/slot/collection_access revision: - label: offers_or_offered_access @@ -9296,6 +9799,11 @@ fixes: type: slot - label: Hypernym type: class + processed: + status: true + notes: '2026-01-19: Migrated in CollectionType.yaml. Created Hypernym.yaml class (skos:Concept based). Updated imports, + replaced collection_broader_type with has_or_had_hypernym slot, added slot_usage with range Hypernym. Archived collection_broader_type.yaml + to archive/collection_broader_type_archived_20260119.yaml.' - original_slot_id: https://nde.nl/ontology/hc/slot/collection_date revision: - label: was_acquired_through @@ -9338,10 +9846,12 @@ fixes: - label: Identifier type: class processed: - status: false - notes: 'DEFERRED 2026-01-18: collection_id is used with ''identifier: true'' as LinkML primary key in Collection.yaml. - Requires special handling to migrate PK identifier slots. Consider using generic ''id'' slot + separate has_or_had_identifier - for semantic representation.' + status: true + notes: "FULLY_MIGRATED 2026-01-18: collection_id → has_or_had_identifier + Identifier\n\n**Files Modified**:\n- Collection.yaml:\ + \ Updated imports (removed collection_id, added has_or_had_identifier + Identifier).\n Updated slots list. Added slot_usage\ + \ with Identifier class range.\n Preserved identifier: true for primary ID semantics.\n Updated example with Identifier\ + \ structure (identifier_scheme: COLLECTION_URI).\n\n**Archived**: modules/slots/archive/collection_id_archived_20260118.yaml\n\ + \n**Pattern**: Collection URIs now stored as Identifier class with scheme=COLLECTION_URI.\n" - original_slot_id: https://nde.nl/ontology/hc/slot/collection_locality_text revision: - label: has_or_had_provenance @@ -9438,10 +9948,10 @@ fixes: - label: Identifier type: class processed: - status: false - notes: 'DEFERRED 2026-01-18: collection_type_id is used as LinkML primary key (identifier: true) in CollectionType.yaml. - Requires special handling - use generic ''id'' for PK and has_or_had_identifier for semantic representation. Same pattern - as collection_id.' + status: true + notes: 'FULLY_MIGRATED 2026-01-18: collection_type_id → has_or_had_identifier + Identifier in CollectionType.yaml. Preserved + identifier: true for LinkML primary key semantics. Uses identifier_scheme: COLLECTION_TYPE_URI. Old slot archived to + archive/collection_type_id_archived_20260118.yaml' - original_slot_id: https://nde.nl/ontology/hc/slot/collection_type_name revision: - label: has_or_had_label @@ -9487,6 +9997,10 @@ fixes: type: slot - label: Collection type: class + processed: + status: true + notes: 'FULLY_MIGRATED 2026-01-19: CustodianLegalStatus.yaml now uses is_or_was_responsible_for slot with range LegalResponsibilityCollection. + Created is_or_was_responsible_for.yaml slot. Old slot archived to archive/collections_under_responsibility_archived_20260119.yaml' - original_slot_id: https://nde.nl/ontology/hc/slot/collector revision: - label: is_or_was_acquired_by @@ -9538,6 +10052,13 @@ fixes: type: slot - label: Quantity type: class + processed: + status: true + notes: "2026-01-18: MIGRATION COMPLETE\n- Used has_or_had_quantity + Quantity pattern (not has_or_had_comment + Comment)\n\ + \ since comment_count is an integer count, not comment objects.\n- VideoPost.yaml: Import removed, slots list updated,\ + \ slot_usage updated with\n multivalued: true and comment_count example added.\n- YoutubeVideo.yaml: Import added (Quantity),\ + \ attribute migrated to has_or_had_quantity.\n- Added COMMENT, LIKE, DISLIKE, FAVORITE to MeasureUnitEnum.\n- Added\ + \ ENGAGEMENT_COUNT, VIEW_COUNT, OBJECT_COUNT to QuantityTypeEnum.\n- Archived to: modules/slots/archive/comment_count_archived_20260118.yaml\n" - original_slot_id: https://nde.nl/ontology/hc/slot/comment_id revision: - label: has_or_had_identifier @@ -9655,6 +10176,21 @@ fixes: - label: ServiceTypes type: class note: this includes CommercialService which in itself can bt tied to has_or_had_type etc. + processed: + status: true + notes: 'Migration completed 2026-01-18: + + - Added CommercialService to ServiceTypes.yaml + + - Updated CommercialOrganizationType.yaml: imports, slots, slot_usage, examples + + - Updated RDF example in description to use Service class pattern + + - Archived: commercial_activity_archived_20260118.yaml + + - Removed from manifest.json + + ' - original_slot_id: https://nde.nl/ontology/hc/slot/commercial_custodian_subtype revision: - label: includes_or_included @@ -9740,6 +10276,21 @@ fixes: - label: ActivityTypes type: class note: this includes CommunityEngagementActivity + processed: + status: true + notes: '2026-01-19: Migrated community_engagement → has_or_had_activity + Activity class. + + - Added CommunityEngagementActivityType to ActivityTypes.yaml + + - Updated HeritageSocietyType.yaml: replaced inline attribute with slot_usage for has_or_had_activity + + - Updated ArchiveAssociation.yaml: updated description to reference has_or_had_activity + + - Archived: community_engagement.yaml → archive/community_engagement_archived_20260119.yaml + + - Removed from manifest.json + + ' - original_slot_id: https://nde.nl/ontology/hc/slot/community_significance revision: - label: has_or_had_significance @@ -9773,6 +10324,15 @@ fixes: type: slot - label: Quantity type: class + processed: + status: true + notes: "FULLY_MIGRATED 2026-01-19: completion_token → has_or_had_token + Token + OutputTokenType\n\nChanges made:\n1.\ + \ Updated has_or_had_token.yaml to be multivalued (v1.2.0)\n2. LLMResponse.yaml: Removed completion_token from imports/slots\n\ + 3. LLMResponse.yaml: Updated slot_usage for has_or_had_token to include both\n cached tokens (CachedTokenType) and\ + \ completion tokens (OutputTokenType)\n4. OutputTokenType already existed in TokenTypes.yaml (created 2026-01-17)\n\n\ + Old slot archived to: modules/slots/archive/completion_token_archived_20260119.yaml\n\nPattern: Use has_or_had_token\ + \ (multivalued) with Token class containing\nhas_or_had_type → TokenType taxonomy (InputTokenType, OutputTokenType,\n\ + CachedTokenType, ReasoningTokenType, TotalTokenType)\n" - original_slot_id: https://nde.nl/ontology/hc/slot/complex_name revision: - label: has_or_had_label @@ -9830,12 +10390,22 @@ fixes: type: slot - label: Description type: class + processed: + status: true + notes: 'FULLY_MIGRATED 2026-01-18: condition_description → has_or_had_condition + Condition + has_or_had_description + + Description. Updated ConservationRecord.yaml (imports, slots, slot_usage, 3 examples), Condition.yaml (inline attribute + → slot), HistoricBuilding.yaml (5 examples), StorageType.yaml (6 examples), has_or_had_condition.yaml (example). Old + slot archived to archive/condition_description_archived_20260118.yaml' - original_slot_id: https://nde.nl/ontology/hc/slot/condition_id revision: - label: has_or_had_identifier type: slot - label: Identifier type: class + processed: + status: true + notes: 'FULLY_MIGRATED 2026-01-18: condition_id → has_or_had_identifier + Identifier in StorageCondition.yaml. Preserved + identifier: true for LinkML primary key semantics. Uses identifier_scheme: CONDITION_URI. Old slot archived to archive/condition_id_archived_20260118.yaml' - original_slot_id: https://nde.nl/ontology/hc/slot/condition_on_return revision: - label: is_or_was_returned @@ -9968,9 +10538,147 @@ fixes: processed: status: true notes: '2026-01-18: Migration complete. Updated PersonConnection.yaml to use - has_or_had_description + Description instead of connection_headline. + Archived: modules/slots/archive/connection_headline_archived_20260118.yaml' +- original_slot_id: https://nde.nl/ontology/hc/slot/capacity_type + revision: + - label: has_or_had_type + type: slot + - label: CapacityType + type: class + - label: includes_or_included + type: slot + - label: CapacityTypes + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/capacity_value + revision: + - label: has_or_had_quantity + type: slot + - label: Quantity + type: class + - label: has_or_had_unit + type: slot + - label: Unit + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/cut_count + revision: + - label: has_or_had_quantity + type: slot + - label: Quantity + type: class + - label: has_or_had_unit + type: slot + - label: Unit + type: class + value: cut +- original_slot_id: https://nde.nl/ontology/hc/slot/data_format + revision: + - label: has_or_had_output + type: slot + - label: OutputData + type: class + - label: has_or_had_format + type: slot + - label: DataFormat + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/data_license_policy + revision: + - label: has_or_had_policy + type: slot + - label: DataLicensePolicy + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/data_source + revision: + - label: has_or_had_repository + type: slot + - label: DataRepository + type: class + - label: has_or_had_url + type: slot +- original_slot_id: https://nde.nl/ontology/hc/slot/data_sensitivity + revision: + - label: has_or_had_level + type: slot + - label: DataSensitivityLevel + type: Class +- original_slot_id: https://nde.nl/ontology/hc/slot/data_source_whatsapp + revision: + - label: has_or_had_source + type: slot + - label: DataSource + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/data_tier + revision: + - label: has_or_had_level + type: slot + - label: DataTierLevel + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/dataset_description + revision: + - label: has_or_had_description + type: slot + - label: Description + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/dataset_identifier + revision: + - label: has_or_had_identifier + type: slot + - label: Identifier + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/dataset_title + revision: + - label: has_or_had_title + type: slot + - label: Title + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/date_value + revision: + - label: temporal_extent + type: slot + - label: TimeSpan + type: class - Archived: modules/slots/archive/connection_headline_archived_20260118.yaml - - ' +- original_slot_id: https://nde.nl/ontology/hc/slot/date_created + revision: + - label: is_or_was_created_through + type: slot + - label: CreationEvent + type: class + - label: temporal_extent + type: slot + - label: TimeSpan + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/date_identified + revision: + - label: is_or_was_identified_through + type: slot + - label: IdentificationEvent + type: class + - label: temporal_extent + type: slot + - label: TimeSpan + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/date_of_death + revision: + - label: is_deceased + type: slot + - label: DeceasedStatus + type: class + - label: is_or_was_caused_by + type: slot + - label: CauseOfDeath + type: class + - label: temporal_extent + type: slot + - label: TimeSpan + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/date_of_publication + revision: + - label: is_or_was_published + type: slot + - label: Publication + type: class + - label: temporal_extent + type: slot + - label: TimeSpan + type: class diff --git a/schemas/20251121/linkml/modules/slots/warrants_or_warranted.yaml b/schemas/20251121/linkml/modules/slots/warrants_or_warranted.yaml new file mode 100644 index 0000000000..a827684f36 --- /dev/null +++ b/schemas/20251121/linkml/modules/slots/warrants_or_warranted.yaml @@ -0,0 +1,43 @@ +id: https://nde.nl/ontology/hc/slot/warrants_or_warranted +name: warrants_or_warranted_slot +title: Warrants or Warranted Slot +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + prov: http://www.w3.org/ns/prov# +imports: + - linkml:types + - ../classes/Claim +default_prefix: hc +slots: + warrants_or_warranted: + range: Claim + multivalued: true + inlined_as_list: true + slot_uri: hc:warrantsOrWarranted + description: | + Claims that warrant (support/justify) this entity or are warranted by it. + + From argumentation theory (Toulmin model): + - Claims provide evidence that WARRANTS conclusions + - A claim can be WARRANTED BY supporting evidence + + This slot captures the bidirectional relationship between claims + and the entities they support or are supported by. + + **Usage Patterns**: + - WebEnrichment.warrants_or_warranted → WebClaim instances + - ResearchSource.warrants_or_warranted → Claim instances + - PersonProfile.warrants_or_warranted → PersonWebClaim instances + + **MIGRATION NOTE (2026-01-19)**: + Replaces `claim` slot per slot_fixes.yaml (Rule 53/56). + Uses RiC-O temporal naming convention (warrants_or_warranted). + exact_mappings: + - prov:wasQuotedFrom + close_mappings: + - prov:wasDerivedFrom + comments: + - 'CREATED 2026-01-19: Replaces claim slot per Rule 53/56' + - Uses argumentation semantics from Toulmin model + - Range is base Claim class - subclasses narrow as needed