- 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.
285 lines
14 KiB
YAML
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
|