glam/schemas/20251121/linkml/modules/classes/CustodianTimelineEvent.yaml
kempersc 7cf10084b4 Implement scripts for schema modifications and ontology verification
- Added `fix_dual_class_link.py` to remove dual class link references from specified YAML files.
- Created `fix_specific_ghosts.py` to apply specific replacements in YAML files based on defined mappings.
- Introduced `migrate_staff_count.py` to migrate staff count references to a new structure in specified YAML files.
- Developed `migrate_type_slots.py` to replace type-related slots with new identifiers across YAML files.
- Implemented `scan_ghost_references.py` to identify and report ghost references to archived slots and classes in YAML files.
- Added `verify_ontology_terms.py` to verify the presence of ontology terms in specified ontology files against schema definitions.
2026-01-29 17:10:25 +01:00

285 lines
14 KiB
YAML

id: https://nde.nl/ontology/hc/class/CustodianTimelineEvent
name: CustodianTimelineEvent
title: Custodian Timeline Event Class - Organizational Change Events
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
dcterms: http://purl.org/dc/terms/
prov: http://www.w3.org/ns/prov#
xsd: http://www.w3.org/2001/XMLSchema#
crm: http://www.cidoc-crm.org/cidoc-crm/
tooi: https://identifier.overheid.nl/tooi/def/ont/
skos: http://www.w3.org/2004/02/skos/core#
rdfs: http://www.w3.org/2000/01/rdf-schema#
org: http://www.w3.org/ns/org#
imports:
- linkml:types
- ./SpecificityAnnotation
- ./TemplateSpecificityScore
- ./TemplateSpecificityType
- ./TemplateSpecificityTypes
- ../slots/is_or_was_approximate
- ./ApproximationStatus
- ../slots/has_or_had_file_path
- ../slots/has_or_had_level
- ./DataTierLevel
- ./DatePrecision
- ../slots/has_or_had_description
- ../slots/temporal_extent
- ./TimeSpan
- ./Timestamp
- ../slots/has_or_had_type
- ../slots/has_or_had_method
- ../slots/has_or_had_note
- ../slots/is_or_was_retrieved_through
- ./RetrievalEvent
- ../slots/observation_ref
- ../slots/source_url
- ../slots/specificity_annotation
- ../slots/has_or_had_score
default_prefix: hc
classes:
CustodianTimelineEvent:
class_uri: prov:Entity
description: "An organizational change event for a heritage custodian.\n\n**PURPOSE**\n\nCaptures organizational change events (founding, mergers, name changes, etc.)\nas domain entities, independent of how they were discovered.\n\n**SOURCE-AGNOSTIC DESIGN**\n\nThis class models WHAT happened, not HOW we know. For source-specific\nprovenance, use observation classes:\n\n- `WebObservation` - For web-scraped data with XPath or API provenance\n- `CustodianObservation` - For institutional source documents\n\nThe optional `observation_ref` slot links events to their source observations\nwhen detailed provenance is needed.\n\n**DATA QUALITY**\n\nUse `has_or_had_level` (DataTierLevel) to indicate trustworthiness:\n- TIER_4_INFERRED: Initial extraction (LLM-generated, unverified)\n- TIER_3_CROWD_SOURCED: Verified against Wikipedia/Wikidata\n- TIER_2_VERIFIED: Verified against institutional website\n- TIER_1_AUTHORITATIVE: Verified against official registry\n\nUse `extraction_notes` to capture\
\ source-specific details:\n- API queries and responses\n- XPath locations in archived HTML\n- Wikidata property references\n- Manual research notes\n\n**EVENT TYPE MAPPING**\n\nEvents are classified using OrganizationalChangeEventTypeEnum:\n- FOUNDING: Institution creation (opgericht, gesticht)\n- MERGER: Multiple institutions combining (fusie, samenvoeging)\n- DISSOLUTION: Institution closure (opgeheven, gesloten)\n- RENAMING: Name change only (hernoemd, naamswijziging)\n- TRANSFER: Physical relocation (verhuisd, verplaatst)\n- EXPANSION: Absorbing other units (uitgebreid, geabsorbeerd)\n- SPLIT: Division into multiple units (opgesplitst)\n- SPIN_OFF: Parts becoming independent (afgesplitst)\n- REDUCTION: Scope decrease (ingekrompen)\n- REORGANIZATION: Complex restructuring (herstructurering)\n\n**EXCLUDED EVENT TYPES**\n\nSome patterns are NOT mapped to events:\n- predecessor: This is a relationship, not an event\n- friends_org: Separate organization (Vrienden van...)\n- reopening:\
\ Not in OrganizationalChangeEventTypeEnum\n\n**EXAMPLE USAGE**\n\n```yaml\ntimeline_events:\n - event_type: FOUNDING\n event_date: \"2005-04-30\"\n degree_of_certainty:\n has_or_had_code: DAY\n is_or_was_approximate:\n approximation_level: EXACT\n description: >-\n Het RHC Drents Archief werd opgericht op 30 april 2005.\n Het is de voortzetting van het Rijksarchief in Drenthe (sinds 2000).\n source_url:\n - \"https://nl.wikipedia.org/wiki/Drents_Archief\"\n - \"https://bizzy.ai/nl/nl/52454037/regionaal-historisch-centrum-rhc-drents-archief\"\n extraction_method: api_response_regex\n extraction_timestamp: \"2025-12-16T10:00:00Z\"\n extraction_notes: >-\n Query: \"Regionaal Historisch Centrum (RHC) Drents Archief\" Assen opgericht\n Answer archived at: web/0002/linkup/linkup_founding_20251215T160438Z.json\n archive_path: web/0002/linkup/linkup_founding_20251215T160438Z.json\n has_or_had_level:\n has_or_had_code:\
\ TIER_4_INFERRED\n```\n"
exact_mappings:
- prov:Entity
close_mappings:
- crm:E5_Event
- tooi:Wijzigingsgebeurtenis
- schema:Event
slots:
- is_or_was_approximate
- archive_path
- has_or_had_level
- degree_of_certainty
- has_or_had_description
- temporal_extent
- has_or_had_type
- has_or_had_method
- has_or_had_note
- is_or_was_retrieved_through
- observation_ref
- source_url
- specificity_annotation
- has_or_had_score
slot_usage:
has_or_had_type:
required: true
range: OrganizationalChangeEventTypeEnum
description: Type of event. MIGRATED from event_type (2026-01-26).
temporal_extent:
range: TimeSpan
inlined: true
description: Time period of the event. MIGRATED from event_date per slot_fixes.yaml (Rule 53). Use begin_of_the_begin for single point in time events.
examples:
- value:
begin_of_the_begin: '2005-04-30'
end_of_the_end: '2005-04-30'
description: Event date
degree_of_certainty:
range: DatePrecision
inlined: true
required: true
description: 'Precision level of the event date. Standard codes: DAY, MONTH, YEAR, DECADE, CENTURY, UNKNOWN'
examples:
- value:
has_or_had_code: DAY
has_or_had_description: Full date with day precision
description: Day precision
- value:
has_or_had_code: YEAR
has_or_had_description: Year-only precision
description: Year precision
is_or_was_approximate:
range: ApproximationStatus
inlined: true
required: true
description: Whether the event date is approximate or uncertain. MIGRATED from approximate (Rule 53) - changed from boolean to ApproximationStatus class for structured uncertainty modeling.
examples:
- value:
has_or_had_status: EXACT
description: Exact date known
- value:
has_or_had_status: APPROXIMATE
has_or_had_label: circa 1880
has_or_had_description: Founding date known only to year
description: Approximate date with explanation
description:
required: true
source_url:
required: false
has_or_had_method:
required: true
range: TimelineExtractionMethodEnum
is_or_was_retrieved_through:
description: 'Retrieval event containing extraction timestamp.
MIGRATED from extraction_timestamp per Rule 53 (2026-01-26).
'
range: RetrievalEvent
inlined: true
required: true
has_or_had_note:
required: false
has_archive_path:
required: false
has_or_had_level:
range: DataTierLevel
inlined: true
required: true
description: 'Data quality tier indicating trustworthiness of this event data. Standard codes: TIER_1_AUTHORITATIVE, TIER_2_VERIFIED, TIER_3_CROWD_SOURCED, TIER_4_INFERRED'
examples:
- value:
has_or_had_code: TIER_4_INFERRED
has_or_had_description: Extracted via LLM - pending verification
description: Initial extraction tier
- value:
has_or_had_code: TIER_2_VERIFIED
has_or_had_description: Verified against institutional website
description: Verified tier
observation_ref:
required: false
rules:
- preconditions:
slot_conditions:
temporal_extent:
value_presence: PRESENT
postconditions:
slot_conditions:
degree_of_certainty:
value_presence: PRESENT
description: If temporal_extent is provided, degree_of_certainty (precision) must be specified
comments:
- 'Source-agnostic design - see Rule 37: Provenance Separation'
- Use observation_ref to link to detailed source provenance
- Use extraction_notes for source-specific details (API queries, XPaths)
- Event types constrained to OrganizationalChangeEventTypeEnum
- Use CIDOC-CRM TimeSpan for fuzzy dates if needed
see_also:
- schemas/20251121/linkml/modules/classes/WebObservation.yaml
- schemas/20251121/linkml/modules/classes/CustodianObservation.yaml
- schemas/20251121/linkml/modules/classes/TimeSpan.yaml
- .opencode/PROVENANCE_SEPARATION_RULE.md
examples:
- value:
event_type: FOUNDING
temporal_extent:
begin_of_the_begin: '2005-04-30'
end_of_the_end: '2005-04-30'
degree_of_certainty:
has_or_had_code: DAY
has_or_had_description: Full date with day precision
is_or_was_approximate:
has_or_had_status: EXACT
description: Het RHC Drents Archief werd opgericht op 30 april 2005.
source_url:
- https://nl.wikipedia.org/wiki/Drents_Archief
has_or_had_method: api_response_regex
extraction_timestamp: '2025-12-16T10:00:00Z'
extraction_notes: 'Query: "Drents Archief" Assen opgericht OR gesticht API: Linkup. Archived at: web/0002/linkup/linkup_founding_20251215T160438Z.json'
archive_path: web/0002/linkup/linkup_founding_20251215T160438Z.json
has_or_had_level:
has_or_had_code: TIER_4_INFERRED
has_or_had_description: Extracted via API response - pending verification
description: Founding event extracted from API response
- value:
has_or_had_type: MERGER
temporal_extent:
begin_of_the_begin: '2005'
end_of_the_end: '2005'
degree_of_certainty:
has_or_had_code: YEAR
has_or_had_description: Year-only precision
is_or_was_approximate:
has_or_had_status: EXACT
description: In 2005 ging het Gemeentearchief Assen op in het Drents Archief.
source_url:
- https://nl.wikipedia.org/wiki/Drents_Archief
has_or_had_method: api_response_regex
is_or_was_retrieved_through:
temporal_extent:
begin_of_the_begin: '2025-12-16T10:05:00Z'
end_of_the_end: '2025-12-16T10:05:00Z'
has_or_had_level:
has_or_had_code: TIER_4_INFERRED
has_or_had_description: Extracted via API - pending verification
description: Merger event with year-only precision
- value:
has_or_had_type: FOUNDING
temporal_extent:
begin_of_the_begin: '1810'
end_of_the_end: '1810'
degree_of_certainty:
has_or_had_code: YEAR
has_or_had_description: Year-only precision
is_or_was_approximate:
has_or_had_status: EXACT
description: The Rijksmuseum was founded in 1810 as the Royal Museum.
source_url:
- https://www.wikidata.org/wiki/Q190804
has_or_had_method: wikidata_sparql
is_or_was_retrieved_through:
temporal_extent:
begin_of_the_begin: '2025-12-20T14:30:00Z'
end_of_the_end: '2025-12-20T14:30:00Z'
extraction_notes: Wikidata P571 (inception date) query
has_or_had_level:
has_or_had_code: TIER_3_CROWD_SOURCED
has_or_had_description: Verified against Wikidata
description: Founding event from Wikidata
- value:
has_or_had_type: TRANSFER
temporal_extent:
begin_of_the_begin: '1885'
end_of_the_end: '1885'
degree_of_certainty:
has_or_had_code: YEAR
has_or_had_description: Year-only precision
is_or_was_approximate:
has_or_had_status: EXACT
description: The Rijksmuseum moved to its current building designed by Cuypers.
source_url:
has_or_had_method: web_scrape_xpath
is_or_was_retrieved_through:
temporal_extent:
begin_of_the_begin: '2025-12-20T15:00:00Z'
end_of_the_end: '2025-12-20T15:00:00Z'
extraction_notes: 'XPath: /html/body/main/section[2]/div/p[3]'
archive_path: web/0001/rijksmuseum.nl/about-us/rendered.html
has_or_had_level:
has_or_had_code: TIER_2_VERIFIED
has_or_had_description: Verified against institutional website
description: Relocation event from institutional website
- value:
has_or_had_type: FOUNDING
temporal_extent:
begin_of_the_begin: '1880'
end_of_the_end: '1880'
degree_of_certainty:
has_or_had_code: YEAR
has_or_had_description: Year-only precision
is_or_was_approximate:
has_or_had_status: APPROXIMATE
has_or_had_label: circa 1880
has_or_had_description: Founding date derived from secondary sources, exact year uncertain
description: Museum founded around 1880, exact date unknown.
has_or_had_method: manual_research
is_or_was_retrieved_through:
temporal_extent:
begin_of_the_begin: '2025-12-20T16:00:00Z'
end_of_the_end: '2025-12-20T16:00:00Z'
has_or_had_level:
has_or_had_code: TIER_4_INFERRED
has_or_had_description: Manual research - pending verification
description: Founding event with approximate date
annotations:
specificity_score: 0.1
specificity_rationale: Generic utility class/slot created during migration
custodian_types: "['*']"
custodian_types_rationale: Universal utility concept