diff --git a/frontend/public/schemas/20251121/linkml/manifest.json b/frontend/public/schemas/20251121/linkml/manifest.json index f4abe2b89c..ce35dc29de 100644 --- a/frontend/public/schemas/20251121/linkml/manifest.json +++ b/frontend/public/schemas/20251121/linkml/manifest.json @@ -1,12 +1,12 @@ { - "generated": "2026-01-16T23:08:40.251Z", + "generated": "2026-01-17T00:26:58.892Z", "schemaRoot": "/schemas/20251121/linkml", - "totalFiles": 2995, + "totalFiles": 2986, "categoryCounts": { "main": 4, - "class": 844, + "class": 847, "enum": 153, - "slot": 1990, + "slot": 1978, "module": 4 }, "categories": [ @@ -3410,6 +3410,21 @@ "path": "modules/classes/SubsidiaryOrganization.yaml", "category": "class" }, + { + "name": "Supplier", + "path": "modules/classes/Supplier.yaml", + "category": "class" + }, + { + "name": "SupplierType", + "path": "modules/classes/SupplierType.yaml", + "category": "class" + }, + { + "name": "SupplierTypes", + "path": "modules/classes/SupplierTypes.yaml", + "category": "class" + }, { "name": "Tag", "path": "modules/classes/Tag.yaml", @@ -9362,6 +9377,11 @@ "path": "modules/slots/has_or_had_generate.yaml", "category": "slot" }, + { + "name": "has_or_had_geographic_subdivision", + "path": "modules/slots/has_or_had_geographic_subdivision.yaml", + "category": "slot" + }, { "name": "has_or_had_head", "path": "modules/slots/has_or_had_head.yaml", @@ -9922,11 +9942,21 @@ "path": "modules/slots/has_or_had_sub_section.yaml", "category": "slot" }, + { + "name": "has_or_had_subject", + "path": "modules/slots/has_or_had_subject.yaml", + "category": "slot" + }, { "name": "has_or_had_suborganization", "path": "modules/slots/has_or_had_suborganization.yaml", "category": "slot" }, + { + "name": "has_or_had_supplier", + "path": "modules/slots/has_or_had_supplier.yaml", + "category": "slot" + }, { "name": "has_or_had_symbol", "path": "modules/slots/has_or_had_symbol.yaml", @@ -10902,6 +10932,11 @@ "path": "modules/slots/is_or_was_succeeded_by.yaml", "category": "slot" }, + { + "name": "is_or_was_superseded_by", + "path": "modules/slots/is_or_was_superseded_by.yaml", + "category": "slot" + }, { "name": "is_or_was_tax_deductible", "path": "modules/slots/is_or_was_tax_deductible.yaml", @@ -14802,71 +14837,11 @@ "path": "modules/slots/status_name.yaml", "category": "slot" }, - { - "name": "stewardship_model", - "path": "modules/slots/stewardship_model.yaml", - "category": "slot" - }, - { - "name": "stewardship_responsibility", - "path": "modules/slots/stewardship_responsibility.yaml", - "category": "slot" - }, { "name": "stores_or_stored", "path": "modules/slots/stores_or_stored.yaml", "category": "slot" }, - { - "name": "street_address", - "path": "modules/slots/street_address.yaml", - "category": "slot" - }, - { - "name": "street_name", - "path": "modules/slots/street_name.yaml", - "category": "slot" - }, - { - "name": "sub_guide_temporal_coverage", - "path": "modules/slots/sub_guide_temporal_coverage.yaml", - "category": "slot" - }, - { - "name": "subdivision_name", - "path": "modules/slots/subdivision_name.yaml", - "category": "slot" - }, - { - "name": "subject_area", - "path": "modules/slots/subject_area.yaml", - "category": "slot" - }, - { - "name": "subject_depicted", - "path": "modules/slots/subject_depicted.yaml", - "category": "slot" - }, - { - "name": "subregion", - "path": "modules/slots/subregion.yaml", - "category": "slot" - }, - { - "name": "succeeded_by", - "path": "modules/slots/succeeded_by.yaml", - "category": "slot" - }, - { - "name": "successor_portal", - "path": "modules/slots/successor_portal.yaml", - "category": "slot" - }, - { - "name": "supersede", - "path": "modules/slots/supersede.yaml", - "category": "slot" - }, { "name": "supersede_articles", "path": "modules/slots/supersede_articles.yaml", @@ -14883,28 +14858,8 @@ "category": "slot" }, { - "name": "superseded_by", - "path": "modules/slots/superseded_by.yaml", - "category": "slot" - }, - { - "name": "supplier_relationship", - "path": "modules/slots/supplier_relationship.yaml", - "category": "slot" - }, - { - "name": "supported_format", - "path": "modules/slots/supported_format.yaml", - "category": "slot" - }, - { - "name": "supported_metadata_standard", - "path": "modules/slots/supported_metadata_standard.yaml", - "category": "slot" - }, - { - "name": "table_of_content", - "path": "modules/slots/table_of_content.yaml", + "name": "supersedes_or_superseded", + "path": "modules/slots/supersedes_or_superseded.yaml", "category": "slot" }, { diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/AcademicArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/AcademicArchive.yaml index 295626c6fa..4ffd9c25c3 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/AcademicArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/AcademicArchive.yaml @@ -78,9 +78,10 @@ classes: equals_expression: '["hc:UniversityAdministrativeFonds", "hc:StudentRecordSeries", "hc:FacultyPaperCollection", "hc:CampusDocumentationCollection"] ' - wikidata_entity: + has_or_had_identifier: # was: wikidata_entity - migrated per Rule 53 (2026-01-16) pattern: ^Q[0-9]+$ equals_string: Q27032435 + description: Wikidata identifier for Academic Archive concept has_or_had_custodian_type: equals_expression: '["hc:ArchiveOrganizationType"]' is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/AcademicArchiveRecordSetType.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/AcademicArchiveRecordSetType.yaml index b78d3130ed..473e3a5fc9 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/AcademicArchiveRecordSetType.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/AcademicArchiveRecordSetType.yaml @@ -54,8 +54,6 @@ classes: - literal_form: academisch archiefbestand in_language: nl slot_usage: - wikidata_equivalent: - equals_string: Q27032435 has_or_had_custodian_type: equals_expression: '["hc:ArchiveOrganizationType"]' is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) @@ -65,9 +63,10 @@ classes: range: DualClassLink inlined: true exact_mappings: - - rico:RecordSetType + - wd:Q27032435 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) + - rico:RecordSetType broad_mappings: - - wd:Q27032435 + - wd:Q27032435 close_mappings: - skos:Concept see_also: diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/ActivityTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/ActivityTypes.yaml index d3aa8c1066..e2473114cb 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/ActivityTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/ActivityTypes.yaml @@ -6,6 +6,7 @@ # # Generation date: 2026-01-13 # Rule compliance: 0b (Type/Types naming), 37 (specificity scores), 50 (ontology mapping) +# Migration: 2026-01-16 - wikidata_entity → wikidata_equivalent per Rule 53 id: https://nde.nl/ontology/hc/class/ActivityTypes name: ActivityTypes @@ -19,6 +20,7 @@ prefixes: prov: http://www.w3.org/ns/prov# schema: http://schema.org/ aat: http://vocab.getty.edu/aat/ + wd: http://www.wikidata.org/entity/ # Added for Wikidata mappings (2026-01-17) default_prefix: hc @@ -50,12 +52,12 @@ classes: **SPECTRUM Alignment**: Maps to SPECTRUM primary procedures exact_mappings: - crm:E87_Curation_Activity + - wd:Q1348059 # Wikidata: curation (was: annotation wikidata_equivalent - migrated per Rule 53, 2026-01-17) close_mappings: - aat:300054277 # activities (functions) annotations: activity_category: CURATION spectrum_procedures: "inventory, cataloguing, acquisition, deaccession-and-disposal" - wikidata_entity: Q1348059 # =========================================================================== # CONSERVATION ACTIVITY TYPES @@ -81,12 +83,12 @@ classes: **SPECTRUM Alignment**: Maps to SPECTRUM condition checking and collections care exact_mappings: - crm:E11_Modification + - wd:Q217102 # Wikidata: conservation (was: annotation wikidata_equivalent - migrated per Rule 53, 2026-01-17) close_mappings: - aat:300053803 # conservation (activity) annotations: activity_category: CONSERVATION spectrum_procedures: "condition-checking, collections-care, conservation-assessment" - wikidata_entity: Q217102 # =========================================================================== # COMMERCIAL ACTIVITY TYPES @@ -113,11 +115,11 @@ classes: **Note**: Distinct from non-commercial educational or public service activities. exact_mappings: - schema:TradeAction + - wd:Q601401 # Wikidata: commerce (was: annotation wikidata_equivalent - migrated per Rule 53, 2026-01-17) close_mappings: - aat:300055704 # commerce annotations: activity_category: COMMERCIAL - wikidata_entity: Q601401 # =========================================================================== # RESEARCH ACTIVITY TYPES @@ -144,13 +146,13 @@ classes: **CIDOC-CRM**: Maps to E13_Attribute_Assignment for research outcomes exact_mappings: - crm:E7_Activity + - wd:Q42240 # Wikidata: research (was: annotation wikidata_equivalent - migrated per Rule 53, 2026-01-17) close_mappings: - aat:300054608 # research (activity) related_mappings: - crm:E13_Attribute_Assignment annotations: activity_category: RESEARCH - wikidata_entity: Q42240 # =========================================================================== # EDUCATION ACTIVITY TYPES @@ -178,11 +180,11 @@ classes: **Schema.org**: Maps to EducationEvent for structured data exact_mappings: - schema:EducationEvent + - wd:Q8434 # Wikidata: education (was: annotation wikidata_equivalent - migrated per Rule 53, 2026-01-17) close_mappings: - aat:300054552 # education (activity) annotations: activity_category: EDUCATION - wikidata_entity: Q8434 # =========================================================================== # EXHIBITION ACTIVITY TYPES @@ -208,13 +210,13 @@ classes: **Schema.org**: Maps to ExhibitionEvent for structured data exact_mappings: - schema:ExhibitionEvent + - wd:Q464980 # Wikidata: exhibition (was: annotation wikidata_equivalent - migrated per Rule 53, 2026-01-17) close_mappings: - aat:300054766 # exhibitions (events) related_mappings: - crm:E7_Activity annotations: activity_category: EXHIBITION - wikidata_entity: Q464980 # =========================================================================== # DIGITIZATION ACTIVITY TYPES @@ -242,11 +244,11 @@ classes: **CIDOC-CRM**: E65_Creation for creation of digital surrogates exact_mappings: - crm:E65_Creation + - wd:Q1116930 # Wikidata: digitization (was: annotation wikidata_equivalent - migrated per Rule 53, 2026-01-17) close_mappings: - aat:300266022 # digitization annotations: activity_category: DIGITIZATION - wikidata_entity: Q1116930 # =========================================================================== # ADMINISTRATIVE ACTIVITY TYPES @@ -274,12 +276,12 @@ classes: **SPECTRUM Alignment**: Maps to SPECTRUM audit, valuation, loans procedures exact_mappings: - prov:Activity + - wd:Q18643507 # Wikidata: administrative activity (was: annotation wikidata_equivalent - migrated per Rule 53, 2026-01-17) close_mappings: - aat:300055709 # administration annotations: activity_category: ADMINISTRATIVE spectrum_procedures: "audit, valuation, loans-out, loans-in, rights-management" - wikidata_entity: Q18643507 # =========================================================================== # ACQUISITION ACTIVITY TYPES @@ -306,12 +308,12 @@ classes: **SPECTRUM Alignment**: Maps to SPECTRUM acquisition procedure exact_mappings: - crm:E8_Acquisition + - wd:Q17157817 # Wikidata: acquisition (was: annotation wikidata_equivalent - migrated per Rule 53, 2026-01-17) close_mappings: - aat:300055711 # acquisition (activity) annotations: activity_category: ACQUISITION spectrum_procedures: "acquisition" - wikidata_entity: Q17157817 # =========================================================================== # MEMBERSHIP ACTIVITY TYPES @@ -336,11 +338,11 @@ classes: **Schema.org**: Maps to JoinAction for joining organizations exact_mappings: - schema:JoinAction + - wd:Q1141470 # Wikidata: membership (was: annotation wikidata_equivalent - migrated per Rule 53, 2026-01-17) close_mappings: - schema:OrganizationRole annotations: activity_category: MEMBERSHIP - wikidata_entity: Q1141470 # =========================================================================== # LOAN ACTIVITY TYPES @@ -365,9 +367,9 @@ classes: **SPECTRUM Alignment**: Maps to SPECTRUM loans-out and loans-in procedures exact_mappings: - crm:E10_Transfer_of_Custody + - wd:Q1332755 # Wikidata: loan (was: annotation wikidata_equivalent - migrated per Rule 53, 2026-01-17) close_mappings: - aat:300312155 # loaning annotations: activity_category: LOAN spectrum_procedures: "loans-out, loans-in" - wikidata_entity: Q1332755 diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/Address.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/Address.yaml index 701a02f56c..1eeaf8101a 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/Address.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/Address.yaml @@ -24,8 +24,9 @@ imports: - ../slots/address_type # Address component slots - ../slots/house_number - - ../slots/street_name - - ../slots/street_address + # REMOVED: ../slots/street_name - migrated to has_or_had_label + Label (2026-01-17, Rule 53/56) + # REMOVED: ../slots/street_address - migrated to has_or_had_address + Address class (2026-01-17, Rule 53/56) + # street_address was a redundant string slot; full Address class captures street data via components - ../slots/postal_code - ../slots/locality - ../slots/city @@ -74,14 +75,16 @@ classes: ``` Address ├── house_number (e.g., "1", "221B", "25-27") - ├── street_name (e.g., "Museumstraat") - ├── street_address (combined: "Museumstraat 1") + ├── has_or_had_label (street name as Label, e.g., "Museumstraat") ├── postal_code (e.g., "1071 XX") ├── locality (e.g., "Amsterdam") ├── region (e.g., "Noord-Holland", "NL-NH") ├── country_name (e.g., "Netherlands", "NL") - └── address_formatted (full string representation) + └── has_or_had_label (formatted address as Label) ``` + + NOTE: street_name slot migrated to has_or_had_label + Label (2026-01-17, Rule 53/56) + NOTE: street_address slot removed - was redundant string; use house_number + has_or_had_label (2026-01-17, Rule 53/56) **ADDRESS TYPES FOR HERITAGE CUSTODIANS**: @@ -104,7 +107,9 @@ classes: # Structured address with components has_or_had_address: - - street_name: "Museumstraat" + - has_or_had_label: + - has_or_had_label: "Museumstraat" + language: "nl" house_number: "1" postal_code: "1071 XX" locality: "Amsterdam" @@ -143,8 +148,8 @@ classes: slots: # Street-level components - house_number - - street_name - - street_address + # REMOVED: street_name - migrated to has_or_had_label + Label (2026-01-17, Rule 53/56) + # REMOVED: street_address - redundant string slot; use house_number + has_or_had_label (2026-01-17, Rule 53/56) # Postal components - postal_code # Locality/geographic hierarchy @@ -173,20 +178,10 @@ classes: description: Rijksmuseum - value: "221B" description: Baker Street notation - street_name: - range: string - required: false - description: Name of street, road, or thoroughfare - examples: - - value: "Museumstraat" - description: Museum Street in Amsterdam - street_address: - range: string - required: false - description: Combined street address (name + number) - examples: - - value: "Museumstraat 1" - description: Full street address + # REMOVED: street_name slot_usage - migrated to has_or_had_label + Label (2026-01-17, Rule 53/56) + # Street names should now use Label class with language tagging via has_or_had_label + # REMOVED: street_address slot_usage - redundant string slot removed (2026-01-17, Rule 53/56) + # Use house_number + has_or_had_label (street name as Label) instead of combined string postal_code: range: string required: false @@ -235,20 +230,29 @@ classes: - value: "Museumstraat 1, 1071 XX Amsterdam, Netherlands" description: Complete formatted address has_or_had_label: - range: string + range: Label required: false - multivalued: false + multivalued: true + inlined: true description: | - Full formatted address as a single human-readable string. - MIGRATED from address_formatted (2026-01-13). + Labeled representations of address components or the full formatted address. + MIGRATED from address_formatted and street_name (2026-01-17). - Use for: - - Display/presentation purposes - - When structured components are unavailable - - Geocoding input/output addresses + Use Label class with language tagging to support: + - Full formatted address strings + - Street/thoroughfare names (migrated from street_name slot per Rule 53/56) + - Other labeled address components requiring language tagging + + For street names, use Label with appropriate type annotation. examples: - - value: "Museumstraat 1, 1071 XX Amsterdam, Netherlands" + - value: | + has_or_had_label: "Museumstraat 1, 1071 XX Amsterdam, Netherlands" + language: "nl" description: Complete formatted address + - value: | + has_or_had_label: "Museumstraat" + language: "nl" + description: Street name as Label (migrated from street_name) address_type: range: string required: false @@ -321,30 +325,40 @@ classes: examples: - value: house_number: "1" - street_name: "Museumstraat" - street_address: "Museumstraat 1" + has_or_had_label: + - has_or_had_label: "Museumstraat" + language: "nl" + - has_or_had_label: "Museumstraat 1, 1071 XX Amsterdam, Netherlands" + language: "nl" + # REMOVED: street_address - migrated to house_number + has_or_had_label (2026-01-17, Rule 53/56) postal_code: "1071 XX" locality: "Amsterdam" region: "Noord-Holland" country_name: "NL" - address_formatted: "Museumstraat 1, 1071 XX Amsterdam, Netherlands" address_type: "HEADQUARTERS" latitude: 52.3600 longitude: 4.8852 geonames_id: 2759794 - description: Rijksmuseum headquarters - fully structured address + description: Rijksmuseum headquarters - fully structured address (street_name and street_address migrated to has_or_had_label) - value: - street_address: "Jansstraat 40" + house_number: "40" + has_or_had_label: + - has_or_had_label: "Jansstraat" + language: "nl" + - has_or_had_label: "Jansstraat 40, 2011 RX Haarlem, Netherlands" + language: "nl" + # REMOVED: street_address - migrated to house_number + has_or_had_label (2026-01-17, Rule 53/56) postal_code: "2011 RX" locality: "Haarlem" country_name: "NL" - address_formatted: "Jansstraat 40, 2011 RX Haarlem, Netherlands" address_type: "HEADQUARTERS" description: Noord-Hollands Archief address - simplified structure - value: - address_formatted: "1600 Pennsylvania Avenue NW, Washington, DC 20500, USA" + has_or_had_label: + - has_or_had_label: "1600 Pennsylvania Avenue NW, Washington, DC 20500, USA" + language: "en" locality: "Washington" region: "DC" country_name: "US" @@ -352,14 +366,18 @@ classes: description: US address with formatted string primary - value: - street_name: "Euterpelaan" + has_or_had_label: + - has_or_had_label: "Euterpelaan" + language: "nl" + - has_or_had_label: "Euterpelaan 25, 3824 BK Amersfoort, Netherlands" + language: "nl" house_number: "25" postal_code: "3824 BK" locality: "Amersfoort" region: "Utrecht" country_name: "NL" address_type: "STORAGE" - description: Off-site storage depot address + description: Off-site storage depot address (street_name and street_address migrated to has_or_had_label) annotations: specificity_score: 0.25 diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/AdvertisingRadioArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/AdvertisingRadioArchive.yaml index 1258ba6b52..ca14da60da 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/AdvertisingRadioArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/AdvertisingRadioArchive.yaml @@ -18,14 +18,7 @@ imports: - ./WikidataAlignment - ./WikiDataEntry # for is_or_was_related_to range (2026-01-15) - ./AdvertisingRadioArchiveRecordSetType - - ../slots/hold_or_held_record_set_type - - ../slots/specificity_annotation - - ../slots/template_specificity - - ../slots/wikidata_entity - - ../slots/hold_or_held_record_set_type - - ../slots/specificity_annotation - - ../slots/template_specificity - - ../slots/wikidata_entity + # wikidata_entity import REMOVED - inherits has_or_had_identifier from ArchiveOrganizationType (Rule 53, 2026-01-16) classes: AdvertisingRadioArchive: is_a: ArchiveOrganizationType @@ -63,9 +56,10 @@ classes: ' slot_usage: - wikidata_entity: + has_or_had_identifier: # was: wikidata_entity - migrated per Rule 53 (2026-01-16) pattern: ^Q[0-9]+$ equals_string: Q60658673 + description: Wikidata identifier for Advertising Radio Archive concept exact_mappings: - skos:Concept close_mappings: diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/AdvertisingRadioArchiveRecordSetType.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/AdvertisingRadioArchiveRecordSetType.yaml index de68ae8583..2f80564ec1 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/AdvertisingRadioArchiveRecordSetType.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/AdvertisingRadioArchiveRecordSetType.yaml @@ -3,6 +3,7 @@ name: AdvertisingRadioArchiveRecordSetType title: AdvertisingRadioArchive Record Set Type prefixes: linkml: https://w3id.org/linkml/ + wd: http://www.wikidata.org/entity/ imports: - linkml:types - ./CollectionType @@ -15,16 +16,15 @@ imports: - ../slots/is_or_was_related_to - ../slots/specificity_annotation - ../slots/template_specificity - - ../slots/wikidata_equivalent classes: AdvertisingRadioArchiveRecordSetType: description: A rico:RecordSetType for classifying collections of advertising radio productions and commercials within heritage institutions. is_a: CollectionType class_uri: rico:RecordSetType + exact_mappings: + - wd:Q60658673 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) slot_usage: - wikidata_equivalent: - equals_string: Q60658673 has_or_had_custodian_type: equals_expression: '["hc:ArchiveOrganizationType"]' is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/AnimalSoundArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/AnimalSoundArchive.yaml index 08b6b743f7..6e84b64091 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/AnimalSoundArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/AnimalSoundArchive.yaml @@ -18,14 +18,7 @@ imports: - ./WikidataAlignment - ./WikiDataEntry # for is_or_was_related_to range (2026-01-15) - ./AnimalSoundArchiveRecordSetType - - ../slots/hold_or_held_record_set_type - - ../slots/specificity_annotation - - ../slots/template_specificity - - ../slots/wikidata_entity - - ../slots/hold_or_held_record_set_type - - ../slots/specificity_annotation - - ../slots/template_specificity - - ../slots/wikidata_entity + # wikidata_entity import REMOVED - inherits has_or_had_identifier from ArchiveOrganizationType (Rule 53, 2026-01-16) classes: AnimalSoundArchive: is_a: ArchiveOrganizationType @@ -87,9 +80,10 @@ classes: ' slot_usage: - wikidata_entity: + has_or_had_identifier: # was: wikidata_entity - migrated per Rule 53 (2026-01-16) pattern: ^Q[0-9]+$ equals_string: Q18574935 + description: Wikidata identifier for Animal Sound Archive concept exact_mappings: - skos:Concept close_mappings: diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/AnimalSoundArchiveRecordSetType.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/AnimalSoundArchiveRecordSetType.yaml index 90c7f799d3..cdcef1261b 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/AnimalSoundArchiveRecordSetType.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/AnimalSoundArchiveRecordSetType.yaml @@ -3,6 +3,7 @@ name: AnimalSoundArchiveRecordSetType title: AnimalSoundArchive Record Set Type prefixes: linkml: https://w3id.org/linkml/ + wd: http://www.wikidata.org/entity/ imports: - linkml:types - ./CollectionType @@ -15,15 +16,14 @@ imports: - ../slots/is_or_was_related_to - ../slots/specificity_annotation - ../slots/template_specificity - - ../slots/wikidata_equivalent classes: AnimalSoundArchiveRecordSetType: description: A rico:RecordSetType for classifying collections of animal sound archive materials within heritage institutions. is_a: CollectionType class_uri: rico:RecordSetType + exact_mappings: + - wd:Q18574935 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) slot_usage: - wikidata_equivalent: - equals_string: Q18574935 has_or_had_custodian_type: equals_expression: '["hc:ArchiveOrganizationType"]' is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/ArchitecturalArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/ArchitecturalArchive.yaml index 205f9b70d7..9edd118e72 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/ArchitecturalArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/ArchitecturalArchive.yaml @@ -18,16 +18,7 @@ imports: - ./WikidataAlignment - ./WikiDataEntry # for is_or_was_related_to range (2026-01-15) - ./ArchitecturalArchiveRecordSetType - - ../slots/has_or_had_custodian_type - - ../slots/hold_or_held_record_set_type - - ../slots/specificity_annotation - - ../slots/template_specificity - - ../slots/wikidata_entity - - ../slots/has_or_had_custodian_type - - ../slots/hold_or_held_record_set_type - - ../slots/specificity_annotation - - ../slots/template_specificity - - ../slots/wikidata_entity + # wikidata_entity import REMOVED - inherits has_or_had_identifier from ArchiveOrganizationType (Rule 53, 2026-01-16) classes: ArchitecturalArchive: is_a: ArchiveOrganizationType @@ -50,9 +41,10 @@ classes: \ (as agent)\n\n**Multilingual Labels**:\n- de: Architekturarchiv\n- fr: archives architecturales\n- nl: architectonisch\ \ archief\n" slot_usage: - wikidata_entity: + has_or_had_identifier: # was: wikidata_entity - migrated per Rule 53 (2026-01-16) pattern: ^Q[0-9]+$ equals_string: Q121409581 + description: Wikidata identifier for Architectural Archive concept has_or_had_custodian_type: equals_expression: '["hc:ArchiveOrganizationType"]' exact_mappings: diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/ArchitecturalArchiveRecordSetType.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/ArchitecturalArchiveRecordSetType.yaml index d9e62abc77..db709fc897 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/ArchitecturalArchiveRecordSetType.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/ArchitecturalArchiveRecordSetType.yaml @@ -3,6 +3,7 @@ name: ArchitecturalArchiveRecordSetType title: ArchitecturalArchive Record Set Type prefixes: linkml: https://w3id.org/linkml/ + wd: http://www.wikidata.org/entity/ imports: - linkml:types - ./CollectionType @@ -13,15 +14,14 @@ imports: - ../slots/is_or_was_related_to - ../slots/specificity_annotation - ../slots/template_specificity - - ../slots/wikidata_equivalent classes: ArchitecturalArchiveRecordSetType: description: A rico:RecordSetType for classifying collections of architectural archive materials within heritage institutions. is_a: CollectionType class_uri: rico:RecordSetType + exact_mappings: + - wd:Q121409581 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) slot_usage: - wikidata_equivalent: - equals_string: Q121409581 is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) range: WikidataAlignment inlined: true diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/ArchivalLibraryRecordSetType.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/ArchivalLibraryRecordSetType.yaml index 694b5fd4dd..09051ac844 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/ArchivalLibraryRecordSetType.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/ArchivalLibraryRecordSetType.yaml @@ -6,6 +6,7 @@ prefixes: schema: http://schema.org/ skos: http://www.w3.org/2004/02/skos/core# rico: https://www.ica.org/standards/RiC/ontology# + wd: http://www.wikidata.org/entity/ imports: - linkml:types - ./CollectionType @@ -16,15 +17,14 @@ imports: - ../slots/is_or_was_related_to - ../slots/specificity_annotation - ../slots/template_specificity - - ../slots/wikidata_equivalent classes: ArchivalLibraryRecordSetType: description: A rico:RecordSetType for classifying collections of archival library materials within heritage institutions. is_a: CollectionType class_uri: rico:RecordSetType + exact_mappings: + - wd:Q25504402 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) slot_usage: - wikidata_equivalent: - equals_string: Q25504402 is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) range: WikidataAlignment inlined: true diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/ArchiveAssociation.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/ArchiveAssociation.yaml index 1f8f516b3b..61741403a5 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/ArchiveAssociation.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/ArchiveAssociation.yaml @@ -12,16 +12,9 @@ imports: - ./SpecificityAnnotation - ./TemplateSpecificityScores - ../slots/society_focus - - ../slots/has_or_had_custodian_type - - ../slots/society_focus - - ../slots/specificity_annotation - - ../slots/template_specificity - - ../slots/wikidata_entity - - ../slots/has_or_had_custodian_type - - ../slots/society_focus - - ../slots/specificity_annotation - - ../slots/template_specificity - - ../slots/wikidata_entity + # wikidata_entity import REMOVED - migrated to has_or_had_identifier (Rule 53, 2026-01-16) + - ../slots/has_or_had_identifier # was: wikidata_entity - migrated per Rule 53 (2026-01-16) + - ./WikiDataIdentifier # for has_or_had_identifier range classes: ArchiveAssociation: is_a: HeritageSocietyType @@ -46,9 +39,10 @@ classes: slot_usage: society_focus: required: true - wikidata_entity: + has_or_had_identifier: # was: wikidata_entity - migrated per Rule 53 (2026-01-16) pattern: ^Q[0-9]+$ equals_string: Q130427366 + description: Wikidata identifier for Archive Association concept has_or_had_custodian_type: equals_expression: '["hc:ArchiveOrganizationType", "hc:HeritageSocietyType"]' exact_mappings: @@ -69,3 +63,4 @@ classes: - has_or_had_custodian_type - specificity_annotation - template_specificity + - has_or_had_identifier # was: wikidata_entity - migrated per Rule 53 (2026-01-16) diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/AuxiliaryPlace.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/AuxiliaryPlace.yaml index 5e9a9e43f4..bd08eb730d 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/AuxiliaryPlace.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/AuxiliaryPlace.yaml @@ -13,6 +13,7 @@ imports: - ./Subregion - ./Settlement - ./TimeSpan + - ./Address # Added for has_or_had_address range (2026-01-17, Rule 53/56 migration) - ../enums/AuxiliaryPlaceTypeEnum - ./ReconstructedEntity - ./BranchOffice @@ -36,7 +37,7 @@ imports: - ../slots/geonames_id - ../slots/latitude - ../slots/longitude - - ../slots/street_address + - ../slots/has_or_had_address # was: street_address - migrated to Address class per Rule 53/56 (2026-01-17) - ../slots/postal_code - ../slots/city - ../slots/has_or_had_identifier @@ -50,7 +51,7 @@ imports: - ../slots/settlement - ../slots/specialized_place - ../slots/specificity_annotation - - ../slots/subregion + - ../slots/has_or_had_geographic_subdivision # was: subregion - migrated per Rule 53/56 (2026-01-17) - ../slots/template_specificity - ../slots/temporal_extent # consolidated: absorbs valid_from + valid_to per Rule 53 # REMOVED 2026-01-14: valid_from + valid_to - migrated to temporal_extent (Rule 53) @@ -135,8 +136,8 @@ classes: - settlement - specialized_place - specificity_annotation - - street_address - - subregion + - has_or_had_address # was: street_address - migrated to Address class per Rule 53/56 (2026-01-17) + - has_or_had_geographic_subdivision # was: subregion - migrated per Rule 53/56 (2026-01-17) - template_specificity - temporal_extent # consolidated: absorbs valid_from + valid_to per Rule 53 - is_or_was_derived_from # was: was_derived_from - migrated per Rule 53 @@ -191,13 +192,32 @@ classes: examples: - value: Off-site storage facility housing overflow collections. Staff access only. description: Depot description - street_address: - range: string + has_or_had_address: # was: street_address - migrated to Address class per Rule 53/56 (2026-01-17) + range: Address + multivalued: true + inlined_as_list: true + required: false + description: | + Physical address(es) for this auxiliary place. + MIGRATED from street_address (string) to full Address class (2026-01-17, Rule 53/56). + Provides richer address modeling with components, geocoding, and provenance. examples: - - value: Euterpelaan 25 - description: Street address - - value: Schiphol Airport, Lounge 2, Holland Boulevard - description: Airport location + - value: + has_or_had_label: + - has_or_had_label: "Euterpelaan 25, 3824 BK Amersfoort, Netherlands" + language: "nl" + house_number: "25" + postal_code: "3824 BK" + locality: "Amersfoort" + country_name: "NL" + description: Depot street address as full Address object + - value: + has_or_had_label: + - has_or_had_label: "Schiphol Airport, Holland Boulevard, Lounge 2" + language: "en" + locality: "Schiphol" + country_name: "NL" + description: Airport location as Address object postal_code: range: string examples: @@ -213,7 +233,7 @@ classes: examples: - value: https://nde.nl/ontology/hc/country/NL description: Netherlands - subregion: + has_or_had_geographic_subdivision: # was: subregion - migrated per Rule 53/56 (2026-01-17) range: Subregion examples: - value: https://nde.nl/ontology/hc/subregion/NL-UT @@ -332,11 +352,16 @@ classes: place_name: Depot Amersfoort auxiliary_place_type: STORAGE_FACILITY place_description: Off-site storage facility for overflow collections. Climate-controlled. Staff access only. - street_address: Euterpelaan 25 - postal_code: 3824 BK - city: Amersfoort + has_or_had_address: # was: street_address - migrated to Address class per Rule 53/56 (2026-01-17) + - has_or_had_label: + - has_or_had_label: "Euterpelaan 25, 3824 BK Amersfoort, Netherlands" + language: "nl" + house_number: "25" + postal_code: "3824 BK" + locality: "Amersfoort" + country_name: "NL" country: https://nde.nl/ontology/hc/country/NL - subregion: https://nde.nl/ontology/hc/subregion/NL-UT + has_or_had_geographic_subdivision: https://nde.nl/ontology/hc/subregion/NL-UT # was: subregion - migrated per Rule 53/56 (2026-01-17) latitude: 52.1561 longitude: 5.3878 valid_from: '1995-06-01' @@ -348,7 +373,12 @@ classes: place_name: Rijksmuseum Schiphol auxiliary_place_type: BRANCH_OFFICE place_description: Small exhibition space at Schiphol Airport featuring rotating highlights from the collection. - street_address: Schiphol Airport, Holland Boulevard, Lounge 2 + has_or_had_address: # was: street_address - migrated to Address class per Rule 53/56 (2026-01-17) + - has_or_had_label: + - has_or_had_label: "Schiphol Airport, Holland Boulevard, Lounge 2" + language: "en" + locality: "Schiphol" + country_name: "NL" city: Schiphol country: https://nde.nl/ontology/hc/country/NL valid_from: '2002-10-01' @@ -368,8 +398,14 @@ classes: annex_reason: PEAK_DEMAND capacity_seats: 12 place_description: Overflow reading room for peak research periods. - street_address: Kleine Houtweg 20 - postal_code: 2012 CH + has_or_had_address: # was: street_address - migrated to Address class per Rule 53/56 (2026-01-17) + - has_or_had_label: + - has_or_had_label: "Kleine Houtweg 20, 2012 CH Haarlem, Netherlands" + language: "nl" + house_number: "20" + postal_code: "2012 CH" + locality: "Haarlem" + country_name: "NL" city: Haarlem valid_from: '2010-01-15' valid_to: '2018-06-30' diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/Collection.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/Collection.yaml index a0260338bd..72ea6eea19 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/Collection.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/Collection.yaml @@ -46,7 +46,7 @@ imports: - ../slots/provenance_statement - ../slots/record_set_type - ../slots/has_or_had_sub_collection - - ../slots/subject_area + - ../slots/is_or_was_categorized_as # was: subject_area - migrated per Rule 53/56 (2026-01-17) - ../slots/has_or_had_content # was: temporal_coverage - migrated per Rule 53/56 (2026-01-16) - ./Content - ../slots/temporal_extent # was: valid_from + valid_to - migrated per Rule 53 @@ -124,7 +124,7 @@ classes: - record_set_type - specificity_annotation - has_or_had_sub_collection - - subject_area + - is_or_was_categorized_as # was: subject_area - migrated per Rule 53/56 (2026-01-17) - template_specificity - 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 @@ -201,7 +201,7 @@ classes: begin_of_the_begin: '1602-01-01' end_of_the_end: '1799-12-31' description: VOC records content with temporal coverage - subject_area: + is_or_was_categorized_as: # was: subject_area - migrated per Rule 53/56 (2026-01-17) range: string multivalued: true examples: @@ -368,7 +368,7 @@ classes: temporal_extent: begin_of_the_begin: '1602-01-01' end_of_the_end: '1799-12-31' - subject_area: + is_or_was_categorized_as: # was: subject_area - migrated per Rule 53/56 (2026-01-17) - Colonial trade - Maritime history - Dutch East Indies diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/CollectionManagementSystem.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/CollectionManagementSystem.yaml index e3b87cdc5a..573993b987 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/CollectionManagementSystem.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/CollectionManagementSystem.yaml @@ -28,7 +28,9 @@ imports: - ../slots/refers_to_custodian - ../slots/repository_url - ../slots/specificity_annotation - - ../slots/supported_metadata_standard + - ../slots/has_or_had_standard # was: supported_metadata_standard - migrated per Rule 53/56 (2026-01-16) + - ./MetadataStandard + - ./MetadataStandardType - ../slots/template_specificity - ../slots/temporal_extent # REMOVED 2026-01-14: ../slots/used_by_custodian - migrated to is_or_was_used_by with Custodian @@ -123,7 +125,7 @@ classes: - refers_to_custodian - repository_url - specificity_annotation - - supported_metadata_standard + - has_or_had_standard # was: supported_metadata_standard - migrated per Rule 53/56 (2026-01-16) - template_specificity - temporal_extent # REMOVED 2026-01-14: used_by_custodian - migrated to is_or_was_used_by with Custodian @@ -226,16 +228,32 @@ classes: description: CollectiveAccess GitHub repo - value: https://github.com/archivesspace/archivesspace description: ArchivesSpace GitHub repo - supported_metadata_standard: - range: string + # was: supported_metadata_standard - migrated per Rule 53/56 (2026-01-16) + has_or_had_standard: + range: MetadataStandard multivalued: true + inlined_as_list: true + description: | + Metadata standards supported by this CMS. + MIGRATED from supported_metadata_standard slot per slot_fixes.yaml (Rule 53/56, 2026-01-16). + + Uses MetadataStandard class for structured standard representation including: + - Standard name + - Standard URI + - Standard type examples: - - value: Dublin Core - description: Basic metadata standard - - value: LIDO - description: Museum object standard - - value: EAD - description: Archival description standard + - value: + standard_name: Dublin Core + standard_uri: http://purl.org/dc/elements/1.1/ + description: Dublin Core metadata standard + - value: + standard_name: LIDO + standard_uri: http://www.lido-schema.org/ + description: LIDO museum object standard + - value: + standard_name: EAD + standard_uri: http://www.loc.gov/ead/ + description: Encoded Archival Description standard iiif_compatible: range: boolean examples: @@ -320,7 +338,7 @@ classes: - http://www.cidoc-crm.org/cidoc-crm/E29_Design_or_Procedure - http://usefulinc.com/ns/doap#Project examples: - # Examples updated for migrated slots (Rule 53) - 2026-01-14 + # Examples updated for migrated slots (Rule 53) - 2026-01-14, 2026-01-16 - value: cms_id: https://nde.nl/ontology/hc/cms/rijksmuseum-adlib cms_product_name: Adlib @@ -332,10 +350,14 @@ classes: has_or_had_url: # was: vendor_url url_value: https://www.axiell.com/ url_type: vendor - supported_metadata_standard: - - SPECTRUM - - Dublin Core - - LIDO + # was: supported_metadata_standard - migrated per Rule 53/56 (2026-01-16) + has_or_had_standard: + - standard_name: SPECTRUM + standard_uri: https://collectionstrust.org.uk/spectrum/ + - standard_name: Dublin Core + standard_uri: http://purl.org/dc/elements/1.1/ + - standard_name: LIDO + standard_uri: http://www.lido-schema.org/ iiif_compatible: true linked_data_export: true is_or_was_available: true @@ -363,10 +385,14 @@ classes: - JavaScript - MySQL repository_url: https://github.com/collectiveaccess/providence - supported_metadata_standard: - - Dublin Core - - VRA Core - - LIDO + # was: supported_metadata_standard - migrated per Rule 53/56 (2026-01-16) + has_or_had_standard: + - standard_name: Dublin Core + standard_uri: http://purl.org/dc/elements/1.1/ + - standard_name: VRA Core + standard_uri: http://www.vraweb.org/vracore/ + - standard_name: LIDO + standard_uri: http://www.lido-schema.org/ iiif_compatible: true linked_data_export: true is_or_was_available: true @@ -380,10 +406,14 @@ classes: open_source: false license: Proprietary has_or_had_label: De Ree Archiefsystemen # was: vendor_name - supported_metadata_standard: - - ISAD(G) - - EAD - - MDTO + # was: supported_metadata_standard - migrated per Rule 53/56 (2026-01-16) + has_or_had_standard: + - standard_name: ISAD(G) + standard_uri: https://www.ica.org/en/isadg-general-international-standard-archival-description-second-edition + - standard_name: EAD + standard_uri: http://www.loc.gov/ead/ + - standard_name: MDTO + standard_uri: https://www.nationaalarchief.nl/mdto iiif_compatible: false linked_data_export: false is_or_was_available: true diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/CourtRecords.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/CourtRecords.yaml index 5910de8a9e..baf9352c91 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/CourtRecords.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/CourtRecords.yaml @@ -94,7 +94,7 @@ classes: - value: type_id: https://nde.nl/ontology/hc/type/archive/Q11906844 glamorcubesfixphdnt_code: ARCHIVE - wikidata_entity: Q11906844 + has_or_had_identifier: Q11906844 # was: wikidata_entity - migrated per Rule 53 (2026-01-16) type_label: - Court Records Archive@en - Justizarchiv@de diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/CulturalInstitution.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/CulturalInstitution.yaml index 8256892fa6..f727ce63d4 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/CulturalInstitution.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/CulturalInstitution.yaml @@ -142,7 +142,7 @@ classes: - value: type_id: https://nde.nl/ontology/hc/type/cultural/Q3152824 glamorcubesfixphdnt_code: MIXED - wikidata_entity: Q3152824 + has_or_had_identifier: Q3152824 # was: wikidata_entity - migrated per Rule 53 (2026-01-16) type_label: - Cultural Institution@en - kulturelle Organisation@de diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/CurrentArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/CurrentArchive.yaml index dc1d81ce81..900df7e268 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/CurrentArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/CurrentArchive.yaml @@ -119,7 +119,7 @@ classes: - value: type_id: https://nde.nl/ontology/hc/type/archive/Q3621648 glamorcubesfixphdnt_code: ARCHIVE - wikidata_entity: Q3621648 + has_or_had_identifier: Q3621648 # was: wikidata_entity - migrated per Rule 53 (2026-01-16) type_label: - Current Archive@en - archivo corriente@es diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/CustodianPlace.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/CustodianPlace.yaml index fc854c1e45..eab1357bcc 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/CustodianPlace.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/CustodianPlace.yaml @@ -22,7 +22,7 @@ imports: - ../slots/place_specificity - ../slots/place_note - ../slots/country - - ../slots/subregion + - ../slots/has_or_had_geographic_subdivision # was: subregion - migrated per Rule 53/56 (2026-01-17) - ../slots/settlement - ../slots/is_or_was_derived_from # was: was_derived_from - migrated per Rule 53 - ../slots/is_or_was_generated_by # was: was_generated_by - migrated per Rule 53 @@ -82,7 +82,7 @@ classes: - refers_to_custodian - settlement - specificity_annotation - - subregion + - has_or_had_geographic_subdivision # was: subregion - migrated per Rule 53/56 (2026-01-17) - template_specificity - temporal_extent # was: valid_from + valid_to - migrated per Rule 53 - is_or_was_derived_from # was: was_derived_from - migrated per Rule 53 @@ -131,7 +131,7 @@ classes: description: Place located in Netherlands - value: https://nde.nl/ontology/hc/country/PE description: Place located in Peru - subregion: + has_or_had_geographic_subdivision: # was: subregion - migrated per Rule 53/56 (2026-01-17) range: Subregion inlined: true required: false diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/DarkArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/DarkArchive.yaml index 387ec1e7b2..1ef6916045 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/DarkArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/DarkArchive.yaml @@ -115,7 +115,7 @@ classes: - value: type_id: https://nde.nl/ontology/hc/type/archive/Q112796578 glamorcubesfixphdnt_code: ARCHIVE - wikidata_entity: Q112796578 + has_or_had_identifier: Q112796578 # was: wikidata_entity - migrated per Rule 53 (2026-01-16) type_label: - Dark Archive@en - Dark Archive@de @@ -132,7 +132,7 @@ classes: - value: type_id: https://nde.nl/ontology/hc/type/archive/Q112796578-embargo glamorcubesfixphdnt_code: ARCHIVE - wikidata_entity: Q112796578 + has_or_had_identifier: Q112796578 # was: wikidata_entity - migrated per Rule 53 (2026-01-16) type_label: - Embargoed Dark Archive@en has_or_had_description: Materials under embargo with future access date # was: type_description - migrated per Rule 53/56 (2026-01-16) diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/DepartmentalArchives.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/DepartmentalArchives.yaml index e33e4741e5..6d1b34e709 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/DepartmentalArchives.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/DepartmentalArchives.yaml @@ -127,7 +127,7 @@ classes: - value: type_id: https://nde.nl/ontology/hc/type/archive/Q2860456 glamorcubesfixphdnt_code: ARCHIVE - wikidata_entity: Q2860456 + has_or_had_identifier: Q2860456 # was: wikidata_entity - migrated per Rule 53 (2026-01-16) type_label: - Departmental Archives@en - Département-Archiv@de diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/DepartmentalArchivesRecordSetType.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/DepartmentalArchivesRecordSetType.yaml index f6814e8451..70a8f0994a 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/DepartmentalArchivesRecordSetType.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/DepartmentalArchivesRecordSetType.yaml @@ -20,16 +20,15 @@ imports: - ../slots/is_or_was_related_to - ../slots/specificity_annotation - ../slots/template_specificity - - ../slots/wikidata_equivalent classes: DepartmentalArchivesRecordSetType: description: A rico:RecordSetType for classifying collections of French departmental archive materials within heritage institutions. is_a: CollectionType class_uri: rico:RecordSetType + exact_mappings: + - wd:Q2860456 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) slot_usage: - wikidata_equivalent: - equals_string: Q2860456 has_or_had_custodian_type: equals_expression: '["hc:ArchiveOrganizationType"]' is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/DepositArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/DepositArchive.yaml index db592803ec..2dd7dd679c 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/DepositArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/DepositArchive.yaml @@ -126,7 +126,7 @@ classes: - value: type_id: https://nde.nl/ontology/hc/type/archive/Q244904 glamorcubesfixphdnt_code: ARCHIVE - wikidata_entity: Q244904 + has_or_had_identifier: Q244904 # was: wikidata_entity - migrated per Rule 53 (2026-01-16) type_label: - Deposit Archive@en - Zwischenarchiv@de diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/DigitalArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/DigitalArchive.yaml index dd7c56d56f..c0d586c0dc 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/DigitalArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/DigitalArchive.yaml @@ -24,7 +24,7 @@ imports: - ../slots/has_or_had_custodian_type - ../slots/has_or_had_operates_platform_type - ../slots/specificity_annotation - - ../slots/supported_format + - ../slots/has_or_had_format # was: supported_format - migrated per Rule 53/56 (2026-01-16) - ../slots/template_specificity - ../slots/has_or_had_identifier # was: wikidata_entity - migrated per Rule 53 (2026-01-15) - ./WikiDataIdentifier # for has_or_had_identifier range @@ -43,7 +43,7 @@ classes: - has_or_had_operates_platform_type - preservation_level - specificity_annotation - - supported_format + - has_or_had_format # was: supported_format - migrated per Rule 53/56 (2026-01-16) - template_specificity - has_or_had_identifier # was: wikidata_entity - migrated per Rule 53 (2026-01-15) description: "Information system collecting and providing access to digital resources.\n\n**Wikidata**: Q1224984 (digital\ @@ -93,15 +93,19 @@ classes: range: uri examples: - value: https://archive.example.org/access - supported_format: - range: string + has_or_had_format: # was: supported_format - migrated per Rule 53/56 (2026-01-16) + range: uriorcurie multivalued: true + description: | + File formats supported/preferred by the digital archive. + MIGRATED from supported_format slot per slot_fixes.yaml (Rule 53/56, 2026-01-16). examples: - value: - - PDF/A - - TIFF - - JPEG2000 - - XML + - iana:application/pdf + - iana:image/tiff + - iana:image/jp2 + - iana:application/xml + description: Common digital archive formats as IANA media type CURIEs has_or_had_custodian_type: equals_expression: '["hc:ArchiveOrganizationType", "hc:DigitalPlatformType"]' exact_mappings: @@ -126,7 +130,7 @@ classes: - value: type_id: https://nde.nl/ontology/hc/type/archive/Q1224984 glamorcubesfixphdnt_code: ARCHIVE - wikidata_entity: Q1224984 + has_or_had_identifier: Q1224984 # was: wikidata_entity - migrated per Rule 53 (2026-01-16) type_label: - Digital Archive@en - digitales Archiv@de @@ -141,9 +145,9 @@ classes: content_origin: mixed preservation_level: level_3 access_interface_url: https://digitalarchive.example.org - supported_format: - - PDF/A - - TIFF - - JPEG2000 - - WARC + has_or_had_format: # was: supported_format - migrated per Rule 53/56 (2026-01-16) + - iana:application/pdf + - iana:image/tiff + - iana:image/jp2 + - iana:application/warc description: Government digital archive with mixed content diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/DimArchives.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/DimArchives.yaml index f3023c2145..dbb1762542 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/DimArchives.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/DimArchives.yaml @@ -128,7 +128,7 @@ classes: - value: type_id: https://nde.nl/ontology/hc/type/archive/Q112796779 glamorcubesfixphdnt_code: ARCHIVE - wikidata_entity: Q112796779 + has_or_had_identifier: Q112796779 # was: wikidata_entity - migrated per Rule 53 (2026-01-16) type_label: - Dim Archive@en - Dim Archive@de diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/DiocesanArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/DiocesanArchive.yaml index a5f6ae3811..e62a0756e6 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/DiocesanArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/DiocesanArchive.yaml @@ -114,7 +114,7 @@ classes: - value: type_id: https://nde.nl/ontology/hc/type/archive/Q11906839 glamorcubesfixphdnt_code: ARCHIVE - wikidata_entity: Q11906839 + has_or_had_identifier: Q11906839 # was: wikidata_entity - migrated per Rule 53 (2026-01-16) type_label: - Diocesan Archive@en - Bischöfliches Archiv@de diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/ExhibitedObject.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/ExhibitedObject.yaml index 376b75e66b..827d4ac02b 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/ExhibitedObject.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/ExhibitedObject.yaml @@ -60,7 +60,7 @@ imports: - ../slots/has_or_had_previous_owner - ../slots/has_or_had_provenance_event - ../slots/specificity_annotation - - ../slots/subject_depicted + - ../slots/has_or_had_subject # was: subject_depicted - migrated per Rule 53/56 (2026-01-17) - ../slots/template_specificity - ./SpecificityAnnotation - ./TemplateSpecificityScores @@ -150,7 +150,7 @@ classes: - has_or_had_provenance_event - provenance_text - specificity_annotation - - subject_depicted + - has_or_had_subject # was: subject_depicted - migrated per Rule 53/56 (2026-01-17) - template_specificity # REMOVED 2026-01-15: wikidata_id - migrated to has_or_had_identifier (Rule 53) - has_or_had_identifier @@ -348,7 +348,7 @@ classes: inlined: false examples: - value: https://nde.nl/ontology/hc/collection/mauritshuis-dutch-paintings - subject_depicted: + has_or_had_subject: # was: subject_depicted - migrated per Rule 53/56 (2026-01-17) required: false range: string multivalued: true @@ -506,7 +506,7 @@ classes: \ sale, Amsterdam, May 16, 1696; A.A. des Tombe, \nThe Hague (purchased 1881); Bequeathed to Mauritshuis (1903).\n" exhibited_in: - https://nde.nl/ontology/hc/exhibition/rijksmuseum-vermeer-2023 - subject_depicted: + has_or_had_subject: # was: subject_depicted - migrated per Rule 53/56 (2026-01-17) - portrait - girl - pearl earring diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/ExhibitionCatalog.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/ExhibitionCatalog.yaml index 6dadd5d8c2..6ad82041c3 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/ExhibitionCatalog.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/ExhibitionCatalog.yaml @@ -50,7 +50,9 @@ imports: - ../slots/pdf_url - ../slots/publication_place - ../slots/specificity_annotation - - ../slots/table_of_content + - ../slots/is_or_was_indexed # was: table_of_content - migrated per Rule 53/56 (2026-01-16) + - ./Index + - ./IndexType - ../slots/template_specificity # REMOVED - migrated to has_or_had_identifier with WorldCatIdentifier (2026-01-14, Rule 53) # - ../slots/worldcat_id @@ -118,7 +120,7 @@ classes: - publication_place - publisher - specificity_annotation - - table_of_content + - is_or_was_indexed # was: table_of_content - migrated per Rule 53/56 (2026-01-16) - template_specificity # REMOVED 2026-01-15: wikidata_id - migrated to has_or_had_identifier (Rule 53) # REMOVED: worldcat_id - migrated to has_or_had_identifier with WorldCatIdentifier (2026-01-14, Rule 53) @@ -298,21 +300,12 @@ classes: - value: "The official catalog of the groundbreaking Vermeer exhibition at the \nRijksmuseum, featuring 28 of the\ \ Dutch master's 37 known paintings.\nIncludes scholarly essays on Vermeer's technique, pigments, and\nsubjects,\ \ along with detailed entries for each work.\n" - table_of_content: - required: false - range: string - examples: - - value: '1. Introduction (Pieter Roelofs) - - 2. Vermeer''s Delft (Gregor Weber) - - 3. Technique and Materials (Anna Tummers) - - 4. Catalog Entries - - 5. Appendices - - ' + # DEPRECATED: table_of_content - migrated to is_or_was_indexed with Index class (2026-01-16, Rule 53/56) + # table_of_content: + # required: false + # range: string + # examples: + # - value: '1. Introduction...' has_or_had_essay: required: false range: string @@ -321,6 +314,40 @@ classes: - value: Vermeer's World - value: The Science of Vermeer's Pigments - value: Vermeer and the Camera Obscura + # was: table_of_content - migrated per Rule 53/56 (2026-01-16) + is_or_was_indexed: + required: false + range: Index + multivalued: true + inlined_as_list: true + description: | + Table of contents or index structure for the catalog. + MIGRATED from table_of_content slot per slot_fixes.yaml (Rule 53/56, 2026-01-16). + + Uses Index class for structured representation of: + - Table of contents with hierarchical entries + - Subject indexes + - Name indexes + - Illustration lists + examples: + - value: + has_or_had_identifier: hc:index/vermeer-catalog-toc + has_or_had_label: + - Table of Contents@en + has_or_had_index_type: + has_or_had_identifier: hc:index-type/table-of-contents + index_entry: + - entry_label: "1. Introduction (Pieter Roelofs)" + entry_level: 1 + - entry_label: "2. Vermeer's Delft (Gregor Weber)" + entry_level: 1 + - entry_label: "3. Technique and Materials (Anna Tummers)" + entry_level: 1 + - entry_label: "4. Catalog Entries" + entry_level: 1 + - entry_label: "5. Appendices" + entry_level: 1 + description: Structured table of contents for Vermeer catalog catalog_entries_count: required: false range: integer diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/FeatureCustodianType.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/FeatureCustodianType.yaml index af152029e6..6347f6572d 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/FeatureCustodianType.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/FeatureCustodianType.yaml @@ -59,30 +59,13 @@ imports: - ../slots/feature_type - ../slots/site_portfolio - ../slots/specificity_annotation - - ../slots/stewardship_model + - ../slots/is_or_was_managed_by # was: stewardship_model - migrated per Rule 53/56 (2026-01-17) - ../slots/template_specificity - ../slots/has_or_had_service # was: visitor_service - migrated per Rule 53 - ./Service - ./SpecificityAnnotation - ./TemplateSpecificityScores - - ../slots/feature_type - - ../slots/has_or_had_access_management - - ../slots/has_or_had_activity - - ../slots/has_or_had_custodian_type - - ../slots/has_or_had_service - - ../slots/site_portfolio - - ../slots/specificity_annotation - - ../slots/stewardship_model - - ../slots/template_specificity - - ../slots/feature_type - - ../slots/has_or_had_access_management - - ../slots/has_or_had_activity - - ../slots/has_or_had_custodian_type - - ../slots/has_or_had_service - - ../slots/site_portfolio - - ../slots/specificity_annotation - - ../slots/stewardship_model - - ../slots/template_specificity + # REMOVED duplicate imports (file had 3x copies) - cleaned up 2026-01-17 prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ @@ -232,7 +215,7 @@ classes: \ \"Historic house\", \"Abbey\", \"Fort\" ;\n hc:site_portfolio \"400+ historic sites and monuments across England\"\ \ ;\n hc:visitor_services \"On-site interpretation\", \"Guided tours\", \"Events\", \"Gift shops\", \"Cafés\" ;\n \ \ hc:conservation_activities \"Monument preservation\", \"Structural repairs\", \"Archaeological research\" ;\n hc:access_management\ - \ \"Ticketing\", \"Opening hours\", \"Accessibility programs\", \"Education visits\" ;\n hc:stewardship_model \"Charitable\ + \ \"Ticketing\", \"Opening hours\", \"Accessibility programs\", \"Education visits\" ;\n hc:is_or_was_managed_by \"Charitable\ \ trust ownership and management\" ;\n schema:foundingDate \"1983-04-01\" ;\n schema:legalName \"English Heritage\ \ Trust\" ;\n schema:url ;\n hc:manages_feature ,\n\ \ .\n```\n" @@ -253,7 +236,7 @@ classes: - feature_type - site_portfolio - specificity_annotation - - stewardship_model + - is_or_was_managed_by # was: stewardship_model - migrated per Rule 53/56 (2026-01-17) - template_specificity - has_or_had_service # was: visitor_service - migrated per Rule 53 slot_usage: @@ -323,8 +306,8 @@ classes: description: Open access model - value: Restricted access, Conservation priority, Virtual alternatives description: Limited access model - stewardship_model: - range: string + is_or_was_managed_by: # was: stewardship_model - migrated per Rule 53/56 (2026-01-17) + range: uriorcurie required: true examples: - value: Charitable trust ownership and management diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/FileAPI.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/FileAPI.yaml index 3ef03f1bfe..a0634faf71 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/FileAPI.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/FileAPI.yaml @@ -31,7 +31,7 @@ classes: - Fixed-resolution derivatives\n- Non-image files (PDFs, audio, video, office documents)\n\n**Example - Nationaal Archief\ \ File API:**\n\n```yaml\nfile_api:\n endpoint_name: \"Nationaal Archief File API\"\n base_url: \"https://service.archief.nl/gaf/api/file/v1/\"\ \n url_pattern: \"{base_url}{uuid}/{level}/{format}\"\n version: \"v1\"\n supported_levels:\n - MASTER\n -\ - \ HIGH\n - MEDIUM\n - LOW\n - THUMBNAIL\n supported_format:\n - image/jpeg\n - image/png\n - application/pdf\n\ + \ HIGH\n - MEDIUM\n - LOW\n - THUMBNAIL\n has_or_had_format: # was: supported_format - migrated 2026-01-16\n - image/jpeg\n - image/png\n - application/pdf\n\ \ max_file_size_mb: 500\n supports_range_requests: true\n example_url: \"https://service.archief.nl/gaf/api/file/v1/12345678.../high/jpeg\"\ \n```\n\n**Use Cases:**\n\n1. **Download master files**: Archival-quality preservation copies\n2. **Generate derivatives**:\ \ Request specific size/format\n3. **Batch harvesting**: Download all files for a record\n4. **Streaming**: Audio/video\ @@ -101,7 +101,7 @@ classes: ' range: string multivalued: true - supported_format: + has_or_had_format: # was: supported_format - migrated per Rule 53/56 (2026-01-16) slot_uri: dcterms:format description: 'File formats (MIME types) available for download. @@ -120,7 +120,7 @@ classes: - Video: ["video/mp4", "video/webm"] ' - range: string + range: uriorcurie multivalued: true required: true max_file_size_mb: diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/FindingAid.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/FindingAid.yaml index 008582f7ab..d3e2a5634f 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/FindingAid.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/FindingAid.yaml @@ -32,8 +32,8 @@ imports: - ../slots/has_or_had_access_restriction - ../slots/has_or_had_web_claim - ../slots/language - - ../slots/supersede - - ../slots/superseded_by + - ../slots/supersedes_or_superseded # was: supersede - migrated per Rule 53/56 (2026-01-17) + - ../slots/is_or_was_superseded_by # was: superseded_by - migrated per Rule 53/56 (2026-01-16) - ../slots/revision_date - ../slots/served_by - ../slots/retrieval_agent @@ -133,7 +133,7 @@ imports: - ../slots/start - ../slots/has_or_had_description # was: sub_guide_description - migrated per Rule 53 - ./Description - - ../slots/sub_guide_temporal_coverage + # REMOVED: ../slots/sub_guide_temporal_coverage - migrated to has_or_had_content (2026-01-17, Rule 53/56) - ./SubGuideType - ../slots/has_or_had_sub_guide - ../slots/has_or_had_sub_section @@ -274,8 +274,8 @@ classes: - slug - specificity_annotation - has_or_had_sub_guide - - superseded_by - - supersede + - is_or_was_superseded_by # was: superseded_by - migrated per Rule 53/56 (2026-01-16) + - supersedes_or_superseded # was: supersede - migrated per Rule 53/56 (2026-01-17) - template_specificity - finding_aid_temporal_coverage - has_or_had_label # was: title @@ -570,7 +570,7 @@ classes: - slug - specificity_annotation - has_or_had_description # was: sub_guide_description - migrated per Rule 53 - - sub_guide_temporal_coverage + - has_or_had_content # was: sub_guide_temporal_coverage - migrated per Rule 53/56 (2026-01-17) - has_or_had_type - template_specificity # REMOVED: title_en, title_nl - migrated to has_or_had_label with Label (2026-01-14, Rule 53) @@ -612,6 +612,18 @@ classes: Uses SubGuideType class hierarchy. is_or_was_access_restricted: range: boolean + has_or_had_content: + range: string + description: | + Time period covered by this sub-guide (free text). + MIGRATED from sub_guide_temporal_coverage (2026-01-17) per Rule 53/56. + + Examples: "1811-1935", "before 1811", "1811-present" + examples: + - value: "1811-1935" + description: Date range + - value: "before 1811" + description: Open-ended historical period exact_mappings: - rico:isOrWasPartOf ArchiveReference: @@ -632,7 +644,7 @@ classes: - name - resource_description - specificity_annotation - - sub_guide_temporal_coverage + - has_or_had_content # was: sub_guide_temporal_coverage - migrated per Rule 53/56 (2026-01-17) - template_specificity - has_or_had_url # was: url - migrated per Rule 53 (2025-01-15) slot_usage: @@ -647,6 +659,13 @@ classes: MIGRATED from url slot per slot_fixes.yaml (Rule 53, 2025-01-15). isil: pattern: ^[A-Z]{2}-[A-Za-z0-9]+$ + has_or_had_content: + range: string + description: | + Time period covered by this archive reference (free text). + MIGRATED from sub_guide_temporal_coverage (2026-01-17) per Rule 53/56. + + Examples: "1811-1935", "before 1811", "1811-present" exact_mappings: - rico:RecordSet - schema:ArchiveOrganization diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/FundingRequirement.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/FundingRequirement.yaml index 2abcd8179d..a7531b2ef3 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/FundingRequirement.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/FundingRequirement.yaml @@ -17,7 +17,7 @@ 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/supersede + - ../slots/supersedes_or_superseded # was: supersede - migrated per Rule 53/56 (2026-01-17) - ../slots/extraction_confidence - ../slots/extraction_note - ../slots/observed_in @@ -111,7 +111,7 @@ classes: - requirement_value - source_section - specificity_annotation - - supersede + - supersedes_or_superseded # was: supersede - migrated per Rule 53/56 (2026-01-17) - template_specificity - temporal_extent # was: valid_from + valid_to - migrated per Rule 53 slot_usage: @@ -206,7 +206,7 @@ classes: description: Location in FAQ document - value: Work Programme page 45 description: Location in programme document - supersede: + supersedes_or_superseded: # was: supersede - migrated per Rule 53/56 (2026-01-17) range: uriorcurie examples: - value: https://nde.nl/ontology/hc/requirement/ec-cl2-2024-heritage-01/min-partners-4 @@ -226,7 +226,7 @@ classes: - Each requirement links to WebObservation for full provenance chain - requirement_value + requirement_unit enable structured queries - is_mandatory defaults to true; explicitly set false for optional requirements - - supersedes creates version chain for requirement changes + - supersedes_or_superseded creates version chain for requirement changes - extraction_confidence can differ from observation confidence see_also: - https://dublincore.org/specifications/dublin-core/dcmi-terms/#Standard diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/GiftShop.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/GiftShop.yaml index 702aea31c3..21768fccbe 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/GiftShop.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/GiftShop.yaml @@ -33,7 +33,10 @@ imports: - ../slots/shop_type - ../slots/specificity_annotation - ../slots/square_meters - - ../slots/supplier_relationship + - ../slots/has_or_had_supplier # was: supplier_relationship - migrated per Rule 53/56 (2026-01-16) + - ./Supplier + - ./SupplierType + - ./SupplierTypes - ../slots/template_specificity - ../slots/temporal_extent # consolidated: absorbs valid_from + valid_to per Rule 53 # REMOVED 2026-01-14: valid_from + valid_to - migrated to temporal_extent (Rule 53) @@ -127,7 +130,7 @@ classes: - specificity_annotation - square_meters - staff_count - - supplier_relationship + - has_or_had_supplier # was: supplier_relationship - migrated per Rule 53/56 (2026-01-16) - template_specificity - temporal_extent # consolidated: absorbs valid_from + valid_to per Rule 53 - has_or_had_conversion_rate @@ -284,15 +287,29 @@ classes: description: Internal management - value: Outsourced (Culture Shops Ltd) description: External operator - supplier_relationship: - range: string + has_or_had_supplier: # was: supplier_relationship - migrated per Rule 53/56 (2026-01-16) + range: Supplier + inlined_as_list: true multivalued: true required: false + description: | + Supplier relationships for shop merchandise. + MIGRATED from supplier_relationship slot per slot_fixes.yaml (Rule 53/56, 2026-01-16). examples: - - value: King & McGaw (art prints) - description: Print supplier - - value: Museum Reproductions Ltd - description: Reproduction supplier + - value: + - has_or_had_label: + label_text: "King & McGaw" + has_or_had_type: + - has_or_had_label: + label_text: "Print Supplier" + has_or_had_description: + description_text: "Art prints supplier" + - has_or_had_label: + label_text: "Museum Reproductions Ltd" + has_or_had_type: + - has_or_had_label: + label_text: "Reproduction Supplier" + description: Structured supplier relationships with type classification temporal_extent: # was: valid_from + valid_to - migrated per Rule 53 range: TimeSpan required: false @@ -369,6 +386,19 @@ classes: staff_count: 25 square_meters: 450.0 managed_by: In-house (Rijksmuseum BV) + has_or_had_supplier: # was: supplier_relationship - migrated per Rule 53/56 (2026-01-16) + - has_or_had_label: + label_text: "King & McGaw" + has_or_had_type: + - has_or_had_label: + label_text: "Print Supplier" + has_or_had_description: + description_text: "Fine art prints supplier for museum reproductions" + - has_or_had_label: + label_text: "Museum Reproductions Ltd" + has_or_had_type: + - has_or_had_label: + label_text: "Reproduction Supplier" valid_from: '2013-04-13' refers_to_custodian: https://nde.nl/ontology/hc/nl-nh-ams-m-rm-q190804 description: Rijksmuseum flagship museum shop diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/HolySacredSiteType.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/HolySacredSiteType.yaml index 9f412d0116..9eede2d9b8 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/HolySacredSiteType.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/HolySacredSiteType.yaml @@ -23,30 +23,14 @@ imports: - ../slots/religious_tradition - ../slots/secularization_status - ../slots/specificity_annotation - - ../slots/stewardship_responsibility + - ../slots/is_or_was_managed_by # was: stewardship_responsibility - migrated per Rule 53/56 (2026-01-17) - ../slots/template_specificity - ./SpecificityAnnotation - ./TemplateSpecificityScores - - ../slots/collection_type - - ../slots/has_or_had_access_policy - - ../slots/has_or_had_custodian_type - - ../slots/holy_site_subtype - - ../slots/religious_function - - ../slots/religious_tradition - - ../slots/secularization_status - - ../slots/specificity_annotation - - ../slots/stewardship_responsibility - - ../slots/template_specificity - - ../slots/collection_type - - ../slots/has_or_had_access_policy - - ../slots/has_or_had_custodian_type - - ../slots/holy_site_subtype - - ../slots/religious_function - - ../slots/religious_tradition - - ../slots/secularization_status - - ../slots/specificity_annotation - - ../slots/stewardship_responsibility - - ../slots/template_specificity + # REMOVED duplicate imports - these are already imported above: + # collection_type, has_or_had_access_policy, has_or_had_custodian_type, holy_site_subtype + # religious_function, religious_tradition, secularization_status, specificity_annotation + # stewardship_responsibility, template_specificity (x3 copies) prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ @@ -295,7 +279,7 @@ classes: \ ;\n hc:religious_tradition \"Roman Catholic Christianity\" ;\n hc:collection_type \"Archival records\", \"Papal\ \ documents\", \"Medieval manuscripts\", \"Correspondence\" ;\n hc:religious_function \"Support papal governance\"\ , \"Document Church history\", \"Preserve canon law\" ;\n hc:access_policy \"Restricted access by appointment\", \"\ - Scholars and researchers only\", \"No browsing\" ;\n hc:stewardship_responsibility \"Prefect of Vatican Apostolic Archive\"\ + Scholars and researchers only\", \"No browsing\" ;\n hc:is_or_was_managed_by \"Prefect of Vatican Apostolic Archive\"\ , \"Papal administrative authority\" ;\n hc:secularization_status \"Active religious institution, No secularization\"\ \ ;\n schema:name \"Vatican Apostolic Archive\"@en, \"Archivum Apostolicum Vaticanum\"@la ;\n schema:alternateName\ \ \"Vatican Secret Archives (former name until 2019)\" ;\n schema:foundingDate \"1612\" ;\n schema:location \"Vatican\ @@ -322,7 +306,7 @@ classes: - religious_tradition - secularization_status - specificity_annotation - - stewardship_responsibility + - is_or_was_managed_by # was: stewardship_responsibility - migrated per Rule 53/56 (2026-01-17) - template_specificity slot_usage: religious_tradition: @@ -366,8 +350,8 @@ classes: description: Cathedral treasury access - value: Digitized online, Physical access by permission description: Monastery library access - stewardship_responsibility: - range: string + is_or_was_managed_by: # was: stewardship_responsibility - migrated per Rule 53/56 (2026-01-17) + range: uriorcurie required: true examples: - value: Prefect of Vatican Archive, Papal authority diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/Jurisdiction.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/Jurisdiction.yaml index d5dbb4f518..568f416d23 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/Jurisdiction.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/Jurisdiction.yaml @@ -18,7 +18,7 @@ imports: - ../enums/JurisdictionTypeEnum - ../enums/LegalSystemTypeEnum - ../slots/country - - ../slots/subregion + - ../slots/has_or_had_geographic_subdivision # was: subregion - migrated per Rule 53/56 (2026-01-17) - ../slots/settlement - ../slots/description - ../slots/jurisdiction_id @@ -77,7 +77,7 @@ classes: - legal_system_type - settlement - specificity_annotation - - subregion + - has_or_had_geographic_subdivision # was: subregion - migrated per Rule 53/56 (2026-01-17) - has_or_had_code # was: supranational_code - migrated per Rule 53 - template_specificity slot_usage: @@ -88,7 +88,7 @@ classes: required: true country: required: false - subregion: + has_or_had_geographic_subdivision: # was: subregion - migrated per Rule 53/56 (2026-01-17) required: false settlement: required: false diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/LibraryType.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/LibraryType.yaml index 5ba3c65f7b..a197b99ca8 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/LibraryType.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/LibraryType.yaml @@ -18,29 +18,8 @@ imports: - ./SpecificityAnnotation - ./TemplateSpecificityScores - ../slots/broader_type - - ../slots/catalog_system - - ../slots/cataloging_standard - - ../slots/has_or_had_custodian_type - - ../slots/interlibrary_loan - - ../slots/lending_policy - - ../slots/library_subtype - - ../slots/membership_required - - ../slots/special_collection - - ../slots/specificity_annotation - - ../slots/template_specificity - - ../slots/wikidata_entity - - ../slots/broader_type - - ../slots/catalog_system - - ../slots/cataloging_standard - - ../slots/has_or_had_custodian_type - - ../slots/interlibrary_loan - - ../slots/lending_policy - - ../slots/library_subtype - - ../slots/membership_required - - ../slots/special_collection - - ../slots/specificity_annotation - - ../slots/template_specificity - - ../slots/wikidata_entity + - ../slots/has_or_had_identifier # was: wikidata_entity - migrated per Rule 53 (2026-01-16) + - ./WikiDataIdentifier classes: LibraryType: is_a: CustodianType @@ -148,10 +127,12 @@ classes: - special_collection - specificity_annotation - template_specificity + - has_or_had_identifier # was: wikidata_entity - migrated per Rule 53 (2026-01-16) slot_usage: - wikidata_entity: + has_or_had_identifier: # was: wikidata_entity - migrated per Rule 53 (2026-01-16) pattern: ^Q[0-9]+$ required: true + description: Wikidata identifier (Q-number) for this Library type concept broader_type: range: LibraryType required: false @@ -177,7 +158,7 @@ classes: - value: type_id: https://nde.nl/ontology/hc/type/library/Q22806 glamorcubesfixphdnt_code: LIBRARY - wikidata_entity: Q22806 + has_or_had_identifier: Q22806 # was: wikidata_entity - migrated per Rule 53 (2026-01-16) type_label: - National Library@en - nationale bibliotheek@nl @@ -198,12 +179,11 @@ classes: - value: type_id: https://nde.nl/ontology/hc/type/library/Q1994819 glamorcubesfixphdnt_code: LIBRARY - wikidata_entity: Q1994819 + has_or_had_identifier: Q1994819 # was: wikidata_entity - migrated per Rule 53 (2026-01-16) type_label: - WSF Library@en - WSF-bibliotheek@nl - has_or_had_description: public library in the Netherlands with a secondary research function (Wetenschappelijke en Speciale # was: type_description - migrated per Rule 53/56 (2026-01-16) - Functies) + has_or_had_description: public library in the Netherlands with a secondary research function (Wetenschappelijke en Speciale Functies) # was: type_description - migrated per Rule 53/56 (2026-01-16) broader_type: https://nde.nl/ontology/hc/type/library/Q7075 lending_policy: open catalog_system: OCLC diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/MaterialTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/MaterialTypes.yaml index 92a80cdb3b..b48c0d3e77 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/MaterialTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/MaterialTypes.yaml @@ -19,6 +19,7 @@ prefixes: crm: http://www.cidoc-crm.org/cidoc-crm/ aat: http://vocab.getty.edu/aat/ skos: http://www.w3.org/2004/02/skos/core# + wd: http://www.wikidata.org/entity/ default_prefix: hc @@ -167,8 +168,8 @@ classes: **AAT Alignment**: aat:300014109 (paper) exact_mappings: - aat:300014109 + - wd:Q11472 # Wikidata: paper (was: annotation wikidata_equivalent - migrated per Rule 53, 2026-01-17) annotations: - wikidata_equivalent: "Q11472" ParchmentMaterial: is_a: OrganicMaterial @@ -181,8 +182,8 @@ classes: **AAT Alignment**: aat:300011851 (parchment) exact_mappings: - aat:300011851 + - wd:Q226697 # Wikidata: parchment (was: annotation wikidata_equivalent - migrated per Rule 53, 2026-01-17) annotations: - wikidata_equivalent: "Q226697" TextileMaterial: is_a: OrganicMaterial @@ -196,8 +197,8 @@ classes: **AAT Alignment**: aat:300014069 (textile) exact_mappings: - aat:300014069 + - wd:Q28823 # Wikidata: textile (was: annotation wikidata_equivalent - migrated per Rule 53, 2026-01-17) annotations: - wikidata_equivalent: "Q28823" LeatherMaterial: is_a: OrganicMaterial @@ -210,8 +211,8 @@ classes: **AAT Alignment**: aat:300011845 (leather) exact_mappings: - aat:300011845 + - wd:Q286 # Wikidata: leather (was: annotation wikidata_equivalent - migrated per Rule 53, 2026-01-17) annotations: - wikidata_equivalent: "Q286" WoodMaterial: is_a: OrganicMaterial @@ -224,8 +225,8 @@ classes: **AAT Alignment**: aat:300011914 (wood) exact_mappings: - aat:300011914 + - wd:Q287 # Wikidata: wood (was: annotation wikidata_equivalent - migrated per Rule 53, 2026-01-17) annotations: - wikidata_equivalent: "Q287" NitrateFilmMaterial: is_a: SyntheticMaterial @@ -239,11 +240,11 @@ classes: **AAT Alignment**: aat:300127173 (nitrate film) exact_mappings: - aat:300127173 + - wd:Q1201597 # Wikidata: nitrate film (was: annotation wikidata_equivalent - migrated per Rule 53, 2026-01-17) annotations: typical_temperature: "-5°C to 4°C (cold storage mandatory)" typical_humidity: "30-35% RH" preservation_risks: "fire hazard, toxic off-gassing, self-ignition, deterioration" - wikidata_equivalent: "Q1201597" AcetateFilmMaterial: is_a: SyntheticMaterial @@ -257,11 +258,11 @@ classes: **AAT Alignment**: aat:300127322 (acetate film) exact_mappings: - aat:300127322 + - wd:Q421063 # Wikidata: acetate film (was: annotation wikidata_equivalent - migrated per Rule 53, 2026-01-17) annotations: typical_temperature: "2°C to 10°C (cold storage recommended)" typical_humidity: "30-40% RH" preservation_risks: "vinegar syndrome, shrinkage, warping, channel marks" - wikidata_equivalent: "Q421063" PolyesterFilmMaterial: is_a: SyntheticMaterial diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/MissionStatement.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/MissionStatement.yaml index ead6101541..3123e9fa01 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/MissionStatement.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/MissionStatement.yaml @@ -21,7 +21,7 @@ imports: - ../slots/source_url - ../slots/retrieved_on - ../slots/content_hash - - ../slots/supersede + - ../slots/supersedes_or_superseded # was: supersede - migrated per Rule 53/56 (2026-01-17) - ../slots/effective_date - ../slots/extraction_agent - ../slots/extraction_note @@ -97,7 +97,7 @@ classes: - statement_summary - statement_text - has_or_had_type - - supersede + - supersedes_or_superseded # was: supersede - migrated per Rule 53/56 (2026-01-17) - template_specificity - has_or_had_url # was: text_fragment - migrated per Rule 53 - has_or_had_provenance_path diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/MuseumType.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/MuseumType.yaml index 243dc9d17e..585c58ff98 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/MuseumType.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/MuseumType.yaml @@ -19,29 +19,8 @@ imports: - ./SpecificityAnnotation - ./TemplateSpecificityScores - ../slots/broader_type - - ../slots/cataloging_standard - - ../slots/collection_focus - - ../slots/conservation_lab - - ../slots/exhibition_program - - ../slots/has_or_had_custodian_type - - ../slots/has_or_had_facility - - ../slots/museum_subtype - - ../slots/research_department - - ../slots/specificity_annotation - - ../slots/template_specificity - - ../slots/wikidata_entity - - ../slots/broader_type - - ../slots/cataloging_standard - - ../slots/collection_focus - - ../slots/conservation_lab - - ../slots/exhibition_program - - ../slots/has_or_had_custodian_type - - ../slots/has_or_had_facility - - ../slots/museum_subtype - - ../slots/research_department - - ../slots/specificity_annotation - - ../slots/template_specificity - - ../slots/wikidata_entity + - ../slots/has_or_had_identifier # was: wikidata_entity - migrated per Rule 53 (2026-01-16) + - ./WikiDataIdentifier classes: MuseumType: is_a: CustodianType @@ -163,10 +142,12 @@ classes: - specificity_annotation - template_specificity - has_or_had_facility # was: visitor_facility - migrated per Rule 53 + - has_or_had_identifier # was: wikidata_entity - migrated per Rule 53 (2026-01-16) slot_usage: - wikidata_entity: + has_or_had_identifier: # was: wikidata_entity - migrated per Rule 53 (2026-01-16) pattern: ^Q[0-9]+$ required: true + description: Wikidata identifier (Q-number) for this Museum type concept broader_type: range: MuseumType required: false @@ -202,7 +183,7 @@ classes: - value: type_id: https://nde.nl/ontology/hc/type/museum/Q207694 glamorcubesfixphdnt_code: MUSEUM - wikidata_entity: Q207694 + has_or_had_identifier: Q207694 # was: wikidata_entity - migrated per Rule 53 (2026-01-16) type_label: - Art Museum@en - kunstmuseum@nl @@ -228,7 +209,7 @@ classes: - value: type_id: https://nde.nl/ontology/hc/type/museum/Q559049 glamorcubesfixphdnt_code: MUSEUM - wikidata_entity: Q559049 + has_or_had_identifier: Q559049 # was: wikidata_entity - migrated per Rule 53 (2026-01-16) type_label: - Natural History Museum@en - natuurhistorisch museum@nl diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/PrimaryDigitalPresenceAssertion.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/PrimaryDigitalPresenceAssertion.yaml index 221f0f4343..b965b48c62 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/PrimaryDigitalPresenceAssertion.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/PrimaryDigitalPresenceAssertion.yaml @@ -6,9 +6,9 @@ imports: - ./WebObservation - ./TimeSpan - ../enums/DigitalPresenceTypeEnum - - ../slots/supersede + - ../slots/supersedes_or_superseded # was: supersede - migrated per Rule 53/56 (2026-01-17) - ../slots/confidence_score - - ../slots/superseded_by + - ../slots/is_or_was_superseded_by # was: superseded_by - migrated per Rule 53/56 (2026-01-16) - ../slots/is_or_was_about_digital_presence # REMOVED - migrated to is_or_was_asserted_by (Rule 53) # - ../slots/asserted_by @@ -105,8 +105,8 @@ classes: - confidence_score - digital_presence_type - specificity_annotation - - superseded_by - - supersede + - is_or_was_superseded_by # was: superseded_by - migrated per Rule 53/56 (2026-01-16) + - supersedes_or_superseded # was: supersede - migrated per Rule 53/56 (2026-01-17) - template_specificity - temporal_extent slot_usage: @@ -202,12 +202,12 @@ classes: description: High confidence - no website exists - value: 0.65 description: Medium confidence - both active, unclear primary - superseded_by: + is_or_was_superseded_by: # was: superseded_by - migrated per Rule 53/56 (2026-01-16) range: uriorcurie required: false examples: - value: https://nde.nl/ontology/hc/assertion/club-facebook-primary-2023 - supersede: + supersedes_or_superseded: # was: supersede - migrated per Rule 53/56 (2026-01-17) range: uriorcurie required: false examples: @@ -215,7 +215,7 @@ classes: comments: - Models primary presence status as temporal assertion, not static boolean - Based on CIDOC-CRM E13_Attribute_Assignment pattern - - Supports change tracking via supersedes/superseded_by links + - Supports change tracking via supersedes_or_superseded/is_or_was_superseded_by links - Provenance via WebObservation references - TimeSpan allows fuzzy temporal boundaries - Confidence scores reflect evidence quality diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/ResearchOrganizationType.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/ResearchOrganizationType.yaml index 312077fc03..ecbfd9bb18 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/ResearchOrganizationType.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/ResearchOrganizationType.yaml @@ -18,29 +18,8 @@ imports: - ./SpecificityAnnotation - ./TemplateSpecificityScores - ../slots/broader_type - - ../slots/data_repository - - ../slots/has_or_had_academic_affiliation - - ../slots/has_or_had_custodian_type - - ../slots/publication_output - - ../slots/research_center_subtype - - ../slots/research_focus - - ../slots/research_infrastructure - - ../slots/research_project - - ../slots/specificity_annotation - - ../slots/template_specificity - - ../slots/wikidata_entity - - ../slots/broader_type - - ../slots/data_repository - - ../slots/has_or_had_academic_affiliation - - ../slots/has_or_had_custodian_type - - ../slots/publication_output - - ../slots/research_center_subtype - - ../slots/research_focus - - ../slots/research_infrastructure - - ../slots/research_project - - ../slots/specificity_annotation - - ../slots/template_specificity - - ../slots/wikidata_entity + - ../slots/has_or_had_identifier # was: wikidata_entity - migrated per Rule 53 (2026-01-16) + - ./WikiDataIdentifier classes: ResearchOrganizationType: is_a: CustodianType @@ -224,10 +203,12 @@ classes: - research_project - specificity_annotation - template_specificity + - has_or_had_identifier # was: wikidata_entity - migrated per Rule 53 (2026-01-16) slot_usage: - wikidata_entity: + has_or_had_identifier: # was: wikidata_entity - migrated per Rule 53 (2026-01-16) pattern: ^Q[0-9]+$ required: true + description: Wikidata identifier (Q-number) for this Research Organization type concept broader_type: range: ResearchOrganizationType required: false @@ -252,7 +233,7 @@ classes: - value: type_id: https://nde.nl/ontology/hc/type/research/Q117052196 glamorcubesfixphdnt_code: RESEARCH_CENTER - wikidata_entity: Q117052196 + has_or_had_identifier: Q117052196 # was: wikidata_entity - migrated per Rule 53 (2026-01-16) type_label: - Conservation Laboratory@en - restauratieatelier@nl @@ -273,7 +254,7 @@ classes: - value: type_id: https://nde.nl/ontology/hc/type/research/Q181916 glamorcubesfixphdnt_code: RESEARCH_CENTER - wikidata_entity: Q181916 + has_or_had_identifier: Q181916 # was: wikidata_entity - migrated per Rule 53 (2026-01-16) type_label: - Herbarium@en - herbarium@nl diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/Settlement.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/Settlement.yaml index 8462cb5cba..c913e7acac 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/Settlement.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/Settlement.yaml @@ -6,7 +6,7 @@ imports: - ./Country - ./Subregion - ../slots/country - - ../slots/subregion + - ../slots/has_or_had_geographic_subdivision # was: subregion - migrated per Rule 53/56 (2026-01-17) - ../slots/geonames_id - ../slots/latitude - ../slots/longitude @@ -21,7 +21,7 @@ imports: - ../slots/longitude - ../slots/settlement_name - ../slots/specificity_annotation - - ../slots/subregion + - ../slots/has_or_had_geographic_subdivision # was: subregion - migrated per Rule 53/56 (2026-01-17) - ../slots/template_specificity - ../slots/country - ../slots/geonames_id @@ -29,7 +29,7 @@ imports: - ../slots/longitude - ../slots/settlement_name - ../slots/specificity_annotation - - ../slots/subregion + - ../slots/has_or_had_geographic_subdivision # was: subregion - migrated per Rule 53/56 (2026-01-17) - ../slots/template_specificity classes: Settlement: @@ -119,7 +119,7 @@ classes: - longitude - settlement_name - specificity_annotation - - subregion + - has_or_had_geographic_subdivision # was: subregion - migrated per Rule 53/56 (2026-01-17) - template_specificity slot_usage: geonames_id: @@ -128,7 +128,7 @@ classes: required: true country: required: true - subregion: + has_or_had_geographic_subdivision: # was: subregion - migrated per Rule 53/56 (2026-01-17) required: false latitude: required: false diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/SoundArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/SoundArchive.yaml index 6f0b281fb3..43db5937eb 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/SoundArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/SoundArchive.yaml @@ -38,7 +38,7 @@ classes: - is_or_was_related_to # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) - has_or_had_identifier # was: wikidata_entity - migrated per Rule 53 (2026-01-15) exact_mappings: - - wd:Q2230431 + - wd:Q2230431 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) close_mappings: - rico:CorporateBody - skos:Concept @@ -51,8 +51,6 @@ classes: record_set_type: true custodian_type: true slot_usage: - wikidata_equivalent: - equals_string: Q2230431 has_or_had_custodian_type: equals_expression: '["hc:ArchiveOrganizationType"]' is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/SoundArchiveRecordSetType.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/SoundArchiveRecordSetType.yaml index e3efee50a5..2338300ebf 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/SoundArchiveRecordSetType.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/SoundArchiveRecordSetType.yaml @@ -17,16 +17,15 @@ imports: - ../slots/is_or_was_related_to - ../slots/specificity_annotation - ../slots/template_specificity - - ../slots/wikidata_equivalent classes: SoundArchiveRecordSetType: description: A rico:RecordSetType for classifying collections of sound recordings and audio materials within heritage institutions. is_a: CollectionType class_uri: rico:RecordSetType + exact_mappings: + - wd:Q2230431 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) slot_usage: - wikidata_equivalent: - equals_string: Q2230431 is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) range: WikidataAlignment inlined: true diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/SpecialCollection.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/SpecialCollection.yaml index 2f21b76f07..d1fa32ed9f 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/SpecialCollection.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/SpecialCollection.yaml @@ -27,6 +27,8 @@ classes: require special handling, storage, and access conditions. is_a: ArchiveOrganizationType class_uri: skos:Concept + exact_mappings: + - wd:Q4431094 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) mixins: - LibraryType slots: @@ -36,8 +38,6 @@ classes: - is_or_was_related_to # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) - has_or_had_identifier # was: wikidata_entity - migrated per Rule 53 (2026-01-15) slot_usage: - wikidata_equivalent: - equals_string: Q4431094 has_or_had_custodian_type: equals_expression: '["hc:LibraryType", "hc:ArchiveOrganizationType"]' is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/SpecialCollectionRecordSetType.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/SpecialCollectionRecordSetType.yaml index e3ac4bfa8b..9ef6037dda 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/SpecialCollectionRecordSetType.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/SpecialCollectionRecordSetType.yaml @@ -6,6 +6,7 @@ prefixes: schema: http://schema.org/ skos: http://www.w3.org/2004/02/skos/core# rico: https://www.ica.org/standards/RiC/ontology# + wd: http://www.wikidata.org/entity/ imports: - linkml:types - ./CollectionType @@ -21,14 +22,14 @@ classes: services. is_a: CollectionType class_uri: rico:RecordSetType + exact_mappings: + - wd:Q4431094 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) slots: - specificity_annotation - template_specificity - is_or_was_related_to # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) - has_or_had_identifier # was: wikidata_entity - migrated per Rule 53 (2026-01-15) slot_usage: - wikidata_equivalent: - equals_string: Q4431094 is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) range: WikidataAlignment inlined: true diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/SpecializedArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/SpecializedArchive.yaml index 73479d6111..b5ac1d4031 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/SpecializedArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/SpecializedArchive.yaml @@ -38,15 +38,13 @@ classes: - is_or_was_related_to # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) - has_or_had_identifier # was: wikidata_entity - migrated per Rule 53 (2026-01-15) exact_mappings: - - wd:Q27030941 + - wd:Q27030941 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) close_mappings: - rico:CorporateBody - skos:Concept broad_mappings: - wd:Q166118 slot_usage: - wikidata_equivalent: - equals_string: Q27030941 has_or_had_custodian_type: equals_expression: '["hc:ArchiveOrganizationType"]' is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/SpecializedArchiveRecordSetType.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/SpecializedArchiveRecordSetType.yaml index c0b90030f4..6498efe322 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/SpecializedArchiveRecordSetType.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/SpecializedArchiveRecordSetType.yaml @@ -17,16 +17,15 @@ imports: - ../slots/is_or_was_related_to - ../slots/specificity_annotation - ../slots/template_specificity - - ../slots/wikidata_equivalent classes: SpecializedArchiveRecordSetType: description: A rico:RecordSetType for classifying collections from archives specialized in specific fields or subject areas. is_a: CollectionType class_uri: rico:RecordSetType + exact_mappings: + - wd:Q27030941 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) slot_usage: - wikidata_equivalent: - equals_string: Q27030941 is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) range: WikidataAlignment inlined: true diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/SpecializedArchivesCzechia.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/SpecializedArchivesCzechia.yaml index ab3a43937d..96e3e6b643 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/SpecializedArchivesCzechia.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/SpecializedArchivesCzechia.yaml @@ -38,15 +38,13 @@ classes: - is_or_was_related_to # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) - has_or_had_identifier # was: wikidata_entity - migrated per Rule 53 (2026-01-15) exact_mappings: - - wd:Q101470010 + - wd:Q101470010 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) close_mappings: - rico:CorporateBody - skos:Concept broad_mappings: - wd:Q166118 slot_usage: - wikidata_equivalent: - equals_string: Q101470010 has_or_had_custodian_type: equals_expression: '["hc:ArchiveOrganizationType"]' is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/SpecializedArchivesCzechiaRecordSetType.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/SpecializedArchivesCzechiaRecordSetType.yaml index a8d5b429f4..f5536ca701 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/SpecializedArchivesCzechiaRecordSetType.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/SpecializedArchivesCzechiaRecordSetType.yaml @@ -17,15 +17,14 @@ imports: - ../slots/is_or_was_related_to - ../slots/specificity_annotation - ../slots/template_specificity - - ../slots/wikidata_equivalent classes: SpecializedArchivesCzechiaRecordSetType: description: A rico:RecordSetType for classifying collections from specialized archives within the Czech archival system. is_a: CollectionType class_uri: rico:RecordSetType + exact_mappings: + - wd:Q101470010 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) slot_usage: - wikidata_equivalent: - equals_string: Q101470010 is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) range: WikidataAlignment inlined: true diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/StateArchives.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/StateArchives.yaml index d906511a50..20997992d0 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/StateArchives.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/StateArchives.yaml @@ -38,15 +38,13 @@ classes: - is_or_was_related_to # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) - has_or_had_identifier # was: wikidata_entity - migrated per Rule 53 (2026-01-15) exact_mappings: - - wd:Q52341833 + - wd:Q52341833 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) close_mappings: - rico:CorporateBody - skos:Concept broad_mappings: - wd:Q166118 slot_usage: - wikidata_equivalent: - equals_string: Q52341833 has_or_had_custodian_type: equals_expression: '["hc:ArchiveOrganizationType"]' is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/StateArchivesRecordSetType.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/StateArchivesRecordSetType.yaml index bde7dd7d75..b62a1bc829 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/StateArchivesRecordSetType.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/StateArchivesRecordSetType.yaml @@ -17,15 +17,14 @@ imports: - ../slots/is_or_was_related_to - ../slots/specificity_annotation - ../slots/template_specificity - - ../slots/wikidata_equivalent classes: StateArchivesRecordSetType: description: A rico:RecordSetType for classifying collections of state government records and administrative documentation. is_a: CollectionType class_uri: rico:RecordSetType + exact_mappings: + - wd:Q52341833 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) slot_usage: - wikidata_equivalent: - equals_string: Q52341833 is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) range: WikidataAlignment inlined: true diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/StateArchivesSection.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/StateArchivesSection.yaml index ec2a19fe45..ca30951d9c 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/StateArchivesSection.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/StateArchivesSection.yaml @@ -38,15 +38,13 @@ classes: - is_or_was_related_to # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) - has_or_had_identifier # was: wikidata_entity - migrated per Rule 53 (2026-01-15) exact_mappings: - - wd:Q44796387 + - wd:Q44796387 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) close_mappings: - rico:CorporateBody - skos:Concept broad_mappings: - wd:Q166118 slot_usage: - wikidata_equivalent: - equals_string: Q44796387 has_or_had_custodian_type: equals_expression: '["hc:ArchiveOrganizationType"]' is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/StateArchivesSectionRecordSetType.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/StateArchivesSectionRecordSetType.yaml index c2aafacc5c..a519ab9a4f 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/StateArchivesSectionRecordSetType.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/StateArchivesSectionRecordSetType.yaml @@ -17,15 +17,14 @@ imports: - ../slots/is_or_was_related_to - ../slots/specificity_annotation - ../slots/template_specificity - - ../slots/wikidata_equivalent classes: StateArchivesSectionRecordSetType: description: A rico:RecordSetType for classifying collections from Italian state archive sections. is_a: CollectionType class_uri: rico:RecordSetType + exact_mappings: + - wd:Q44796387 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) slot_usage: - wikidata_equivalent: - equals_string: Q44796387 is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) range: WikidataAlignment inlined: true diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/StateDistrictArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/StateDistrictArchive.yaml index c0c91ec4ff..9538724b35 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/StateDistrictArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/StateDistrictArchive.yaml @@ -38,15 +38,13 @@ classes: - is_or_was_related_to # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) - has_or_had_identifier # was: wikidata_entity - migrated per Rule 53 (2026-01-15) exact_mappings: - - wd:Q53131316 + - wd:Q53131316 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) close_mappings: - rico:CorporateBody - skos:Concept broad_mappings: - wd:Q166118 slot_usage: - wikidata_equivalent: - equals_string: Q53131316 has_or_had_custodian_type: equals_expression: '["hc:ArchiveOrganizationType"]' is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/StateDistrictArchiveRecordSetType.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/StateDistrictArchiveRecordSetType.yaml index c5078048f9..0cd63f00bc 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/StateDistrictArchiveRecordSetType.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/StateDistrictArchiveRecordSetType.yaml @@ -17,15 +17,14 @@ imports: - ../slots/is_or_was_related_to - ../slots/specificity_annotation - ../slots/template_specificity - - ../slots/wikidata_equivalent classes: StateDistrictArchiveRecordSetType: description: A rico:RecordSetType for classifying collections from Czech state district archives. is_a: CollectionType class_uri: rico:RecordSetType + exact_mappings: + - wd:Q53131316 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) slot_usage: - wikidata_equivalent: - equals_string: Q53131316 is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) range: WikidataAlignment inlined: true diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/StateRegionalArchiveCzechia.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/StateRegionalArchiveCzechia.yaml index 7ed45d0d49..9f27e6b216 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/StateRegionalArchiveCzechia.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/StateRegionalArchiveCzechia.yaml @@ -38,15 +38,13 @@ classes: - is_or_was_related_to # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) - has_or_had_identifier # was: wikidata_entity - migrated per Rule 53 (2026-01-15) exact_mappings: - - wd:Q53130134 + - wd:Q53130134 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) close_mappings: - rico:CorporateBody - skos:Concept broad_mappings: - wd:Q166118 slot_usage: - wikidata_equivalent: - equals_string: Q53130134 has_or_had_custodian_type: equals_expression: '["hc:ArchiveOrganizationType"]' is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/StateRegionalArchiveCzechiaRecordSetType.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/StateRegionalArchiveCzechiaRecordSetType.yaml index d16b8e69df..b54146c2e3 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/StateRegionalArchiveCzechiaRecordSetType.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/StateRegionalArchiveCzechiaRecordSetType.yaml @@ -17,15 +17,14 @@ imports: - ../slots/is_or_was_related_to - ../slots/specificity_annotation - ../slots/template_specificity - - ../slots/wikidata_equivalent classes: StateRegionalArchiveCzechiaRecordSetType: description: A rico:RecordSetType for classifying collections from Czech state regional archives. is_a: CollectionType class_uri: rico:RecordSetType + exact_mappings: + - wd:Q53130134 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) slot_usage: - wikidata_equivalent: - equals_string: Q53130134 is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) range: WikidataAlignment inlined: true diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/Subregion.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/Subregion.yaml index 226c3c75f8..14f927d5b6 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/Subregion.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/Subregion.yaml @@ -7,20 +7,11 @@ imports: - ../slots/country - ../slots/iso_3166_2_code - ../slots/specificity_annotation - - ../slots/subdivision_name + - ../slots/has_or_had_label # was: subdivision_name - migrated per Rule 53/56 (2026-01-17) - ../slots/template_specificity - ./SpecificityAnnotation - ./TemplateSpecificityScores - - ../slots/country - - ../slots/iso_3166_2_code - - ../slots/specificity_annotation - - ../slots/subdivision_name - - ../slots/template_specificity - - ../slots/country - - ../slots/iso_3166_2_code - - ../slots/specificity_annotation - - ../slots/subdivision_name - - ../slots/template_specificity + # Removed duplicate imports (2026-01-17) classes: Subregion: class_uri: lcc_cr:GeographicRegion @@ -47,7 +38,7 @@ classes: - country - iso_3166_2_code - specificity_annotation - - subdivision_name + - has_or_had_label # was: subdivision_name - migrated per Rule 53/56 (2026-01-17) - template_specificity slot_usage: iso_3166_2_code: @@ -55,5 +46,10 @@ classes: identifier: true country: required: true - subdivision_name: + has_or_had_label: # was: subdivision_name - migrated per Rule 53/56 (2026-01-17) required: false + description: | + Human-readable name of the subdivision. + + Prefer resolving names via GeoNames API to avoid maintaining multilingual data. + Examples: "Pennsylvania" (for US-PA), "Bali" (for ID-BA), "Bayern" (for DE-BY) diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/Supplier.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/Supplier.yaml new file mode 100644 index 0000000000..9709534f9b --- /dev/null +++ b/frontend/public/schemas/20251121/linkml/modules/classes/Supplier.yaml @@ -0,0 +1,160 @@ +# Supplier - Main supplier entity class +# +# Created per slot_fixes.yaml revision for: supplier_relationship +# Creation date: 2026-01-16 +# Rule compliance: 39 (RiC-O naming), 50 (ontology mapping), 53 (no bespoke slots) + +id: https://nde.nl/ontology/hc/class/Supplier +name: supplier +title: Supplier + +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + schema: http://schema.org/ + gr: http://purl.org/goodrelations/v1# + org: http://www.w3.org/ns/org# + +default_prefix: hc + +imports: + - linkml:types + - ../slots/has_or_had_identifier + - ../slots/has_or_had_label + - ../slots/has_or_had_description + - ../slots/has_or_had_type + - ../slots/temporal_extent + - ./Label + - ./Description + - ./SupplierType + - ./TimeSpan + +classes: + Supplier: + class_uri: schema:Organization + description: | + Business entity that supplies goods or services to a heritage custodian. + + **PURPOSE**: + Models supplier relationships for commercial operations (gift shops, cafes, etc.) + in a structured way that captures: + - Supplier identity and contact + - Type of supplier (print, reproduction, service, etc.) + - Products/services provided + - Temporal validity of relationship + + **ONTOLOGY ALIGNMENT**: + - **Primary** (`class_uri`): `schema:Organization` - Schema.org organization + - **Close**: `gr:BusinessEntity` - GoodRelations business entity + - **Related**: `org:Organization` - W3C Org organization + + **USAGE**: + ```yaml + has_or_had_supplier: + - has_or_had_identifier: "hc:supplier/king-mcgaw" + has_or_had_label: + label_text: "King & McGaw" + has_or_had_type: + type_label: "Print Supplier" + has_or_had_description: + description_text: "Fine art print supplier for museum reproductions" + temporal_extent: + begin_of_the_begin: "2018-01-01" + ``` + + **MIGRATION NOTE**: + Replaces plain string values from `supplier_relationship` slot. + Provides structured data with type classification and temporal tracking. + + slots: + - has_or_had_identifier + - has_or_had_label + - has_or_had_description + - has_or_had_type + - temporal_extent + + slot_usage: + has_or_had_identifier: + range: uriorcurie + description: Unique identifier for the supplier. + examples: + - value: "hc:supplier/king-mcgaw" + description: Supplier identifier CURIE + has_or_had_label: + range: Label + inlined: true + required: true + description: Name of the supplier organization. + examples: + - value: + label_text: "King & McGaw" + description: Art print supplier name + - value: + label_text: "Museum Reproductions Ltd" + description: Reproduction supplier name + has_or_had_description: + range: Description + inlined: true + description: Description of the supplier and what they provide. + examples: + - value: + description_text: "Fine art print supplier specializing in museum reproduction prints" + description: Supplier description + has_or_had_type: + range: SupplierType + inlined: true + multivalued: true + description: Classification of the supplier type. + examples: + - value: + has_or_had_label: + label_text: "Print Supplier" + description: Art print supplier type + temporal_extent: + range: TimeSpan + inlined: true + description: Time period of the supplier relationship. + examples: + - value: + begin_of_the_begin: "2018-01-01" + description: Relationship started January 2018 + + exact_mappings: + - schema:Organization + close_mappings: + - gr:BusinessEntity + related_mappings: + - org:Organization + + examples: + - value: + has_or_had_identifier: "hc:supplier/king-mcgaw" + has_or_had_label: + label_text: "King & McGaw" + has_or_had_type: + - has_or_had_label: + label_text: "Print Supplier" + has_or_had_description: + description_text: "Leading supplier of fine art prints and museum reproduction services" + temporal_extent: + begin_of_the_begin: "2018-01-01" + description: Art print supplier + - value: + has_or_had_identifier: "hc:supplier/museum-reproductions-ltd" + has_or_had_label: + label_text: "Museum Reproductions Ltd" + has_or_had_type: + - has_or_had_label: + label_text: "Reproduction Supplier" + has_or_had_description: + description_text: "High-quality reproductions of museum artifacts" + temporal_extent: + begin_of_the_begin: "2015-06-01" + end_of_the_end: "2022-12-31" + description: Reproduction supplier (historical relationship) + + annotations: + custodian_types: '["*"]' + custodian_types_rationale: "Suppliers applicable to any custodian with commercial operations." + migration_source: "supplier_relationship string values" + migration_date: "2026-01-16" diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/SupplierType.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/SupplierType.yaml new file mode 100644 index 0000000000..096602824d --- /dev/null +++ b/frontend/public/schemas/20251121/linkml/modules/classes/SupplierType.yaml @@ -0,0 +1,82 @@ +# SupplierType - Abstract base class for supplier type taxonomy +# +# Created per slot_fixes.yaml revision for: supplier_relationship +# Creation date: 2026-01-16 +# Rule compliance: 0b (Type/Types naming), 39 (RiC-O naming), 50 (ontology mapping) + +id: https://nde.nl/ontology/hc/class/SupplierType +name: supplier_type +title: Supplier Type + +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + skos: http://www.w3.org/2004/02/skos/core# + schema: http://schema.org/ + gr: http://purl.org/goodrelations/v1# + +default_prefix: hc + +imports: + - linkml:types + - ../slots/has_or_had_label + - ../slots/has_or_had_description + - ./Label + - ./Description + +classes: + SupplierType: + class_uri: skos:Concept + description: | + Abstract base class for supplier type taxonomy. + + **PURPOSE**: + Classifies types of suppliers in business relationships with heritage custodians. + + **USAGE**: + Concrete subclasses defined in SupplierTypes.yaml: + - PrintSupplier (print-on-demand, art prints) + - ReproductionSupplier (museum reproductions) + - PublicationDistributor (books, catalogs) + - ArtisanSupplier (local crafts, handmade items) + - LicenseHolder (exclusive merchandise rights) + - ServiceProvider (photography, framing, etc.) + + **ONTOLOGY ALIGNMENT**: + - `skos:Concept` - Taxonomy/classification concept + - `gr:BusinessEntity` - GoodRelations business classification + + **NAMING CONVENTION (Rule 0b)**: + - `SupplierType.yaml` - This abstract base class + - `SupplierTypes.yaml` - Concrete subclasses + + slots: + - has_or_had_label + - has_or_had_description + + slot_usage: + has_or_had_label: + range: Label + inlined: true + description: Human-readable label for the supplier type. + examples: + - value: + label_text: "Print Supplier" + description: Art print supplier type + has_or_had_description: + range: Description + inlined: true + description: Description of what this supplier type provides. + examples: + - value: + description_text: "Suppliers providing print-on-demand and art reproduction services" + description: Print supplier description + + exact_mappings: + - skos:Concept + close_mappings: + - gr:BusinessEntity + + annotations: + custodian_types: '["*"]' + custodian_types_rationale: "Supplier types applicable to any custodian with commercial operations." diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/SupplierTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/SupplierTypes.yaml new file mode 100644 index 0000000000..db312c6a5a --- /dev/null +++ b/frontend/public/schemas/20251121/linkml/modules/classes/SupplierTypes.yaml @@ -0,0 +1,77 @@ +# SupplierTypes - Concrete supplier type subclasses +# +# Created per slot_fixes.yaml revision for: supplier_relationship +# Creation date: 2026-01-16 +# Rule compliance: 0b (Type/Types naming), 39 (RiC-O naming) + +id: https://nde.nl/ontology/hc/class/SupplierTypes +name: supplier_types +title: Supplier Types + +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + skos: http://www.w3.org/2004/02/skos/core# + +default_prefix: hc + +imports: + - linkml:types + - ./SupplierType + +classes: + PrintSupplier: + is_a: SupplierType + class_uri: hc:PrintSupplier + description: | + Supplier providing print-on-demand and art reproduction services. + Examples: King & McGaw, Artful, Fine Art America + + ReproductionSupplier: + is_a: SupplierType + class_uri: hc:ReproductionSupplier + description: | + Supplier providing museum-quality reproductions of artifacts and artworks. + Examples: Museum Reproductions Ltd, Alva Studios + + PublicationDistributor: + is_a: SupplierType + class_uri: hc:PublicationDistributor + description: | + Distributor for books, catalogs, and publications. + Examples: Yale University Press, Thames & Hudson + + ArtisanSupplier: + is_a: SupplierType + class_uri: hc:ArtisanSupplier + description: | + Local artisan or craftsperson providing handmade items. + Examples: Local jewelry makers, traditional crafters + + LicenseHolder: + is_a: SupplierType + class_uri: hc:LicenseHolder + description: | + Entity holding exclusive licensing rights for merchandise. + Examples: Exclusive brand licensees, IP rights holders + + ServiceProvider: + is_a: SupplierType + class_uri: hc:ServiceProvider + description: | + Supplier providing services rather than products. + Examples: Photography services, framing services, packaging + + WholesaleSupplier: + is_a: SupplierType + class_uri: hc:WholesaleSupplier + description: | + Bulk/wholesale supplier for general merchandise. + Examples: Museum store wholesalers, gift trade suppliers + + DigitalContentSupplier: + is_a: SupplierType + class_uri: hc:DigitalContentSupplier + description: | + Supplier of digital products and content. + Examples: Digital image libraries, audio guide providers diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/TelevisionArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/TelevisionArchive.yaml index 076e3939b6..262aee456c 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/TelevisionArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/TelevisionArchive.yaml @@ -39,15 +39,13 @@ classes: - is_or_was_related_to # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) - has_or_had_identifier # was: wikidata_entity - migrated per Rule 53 (2026-01-15) exact_mappings: - - wd:Q109326243 + - wd:Q109326243 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) close_mappings: - rico:CorporateBody - skos:Concept broad_mappings: - wd:Q166118 slot_usage: - wikidata_equivalent: - equals_string: Q109326243 has_or_had_custodian_type: equals_expression: '["hc:ArchiveOrganizationType"]' is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/TelevisionArchiveRecordSetType.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/TelevisionArchiveRecordSetType.yaml index ca82121fe3..1dcb317073 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/TelevisionArchiveRecordSetType.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/TelevisionArchiveRecordSetType.yaml @@ -17,15 +17,14 @@ imports: - ../slots/is_or_was_related_to - ../slots/specificity_annotation - ../slots/template_specificity - - ../slots/wikidata_equivalent classes: TelevisionArchiveRecordSetType: description: A rico:RecordSetType for classifying collections of television programs, recordings, and broadcast materials. is_a: CollectionType class_uri: rico:RecordSetType + exact_mappings: + - wd:Q109326243 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) slot_usage: - wikidata_equivalent: - equals_string: Q109326243 is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) range: WikidataAlignment inlined: true diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/UniversityArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/UniversityArchive.yaml index 4201befede..fc1bd435a2 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/UniversityArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/UniversityArchive.yaml @@ -38,15 +38,13 @@ classes: - is_or_was_related_to # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) - has_or_had_identifier # was: wikidata_entity - migrated per Rule 53 (2026-01-15) exact_mappings: - - wd:Q2496264 + - wd:Q2496264 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) close_mappings: - rico:CorporateBody - skos:Concept broad_mappings: - wd:Q166118 slot_usage: - wikidata_equivalent: - equals_string: Q2496264 has_or_had_custodian_type: equals_expression: '["hc:ArchiveOrganizationType"]' is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/UniversityArchiveRecordSetType.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/UniversityArchiveRecordSetType.yaml index 385de28a10..0b3ccec98a 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/UniversityArchiveRecordSetType.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/UniversityArchiveRecordSetType.yaml @@ -17,16 +17,15 @@ imports: - ../slots/is_or_was_related_to - ../slots/specificity_annotation - ../slots/template_specificity - - ../slots/wikidata_equivalent classes: UniversityArchiveRecordSetType: description: A rico:RecordSetType for classifying collections of university and college historical records and institutional documentation. is_a: CollectionType class_uri: rico:RecordSetType + exact_mappings: + - wd:Q2496264 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) slot_usage: - wikidata_equivalent: - equals_string: Q2496264 is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) range: WikidataAlignment inlined: true diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/Vereinsarchiv.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/Vereinsarchiv.yaml index 1266f211af..14b97b701e 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/Vereinsarchiv.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/Vereinsarchiv.yaml @@ -1,6 +1,11 @@ id: https://nde.nl/ontology/hc/class/Vereinsarchiv name: Vereinsarchiv title: Vereinsarchiv Type +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + skos: http://www.w3.org/2004/02/skos/core# + wd: http://www.wikidata.org/entity/ imports: - linkml:types - ./ArchiveOrganizationType @@ -25,6 +30,8 @@ classes: document the activities, governance, membership, and cultural contributions of civil society organizations. is_a: ArchiveOrganizationType class_uri: skos:Concept + exact_mappings: + - wd:Q130758889 # Wikidata: Vereinsarchiv (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) slots: - has_or_had_custodian_type - specificity_annotation @@ -32,8 +39,6 @@ classes: - is_or_was_related_to # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) - has_or_had_identifier # was: wikidata_entity - migrated per Rule 53 (2026-01-15) slot_usage: - wikidata_equivalent: - equals_string: Q130758889 has_or_had_custodian_type: equals_expression: '["hc:ArchiveOrganizationType"]' is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/VereinsarchivRecordSetType.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/VereinsarchivRecordSetType.yaml index 3899b6c759..d513740699 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/VereinsarchivRecordSetType.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/VereinsarchivRecordSetType.yaml @@ -6,6 +6,7 @@ prefixes: schema: http://schema.org/ skos: http://www.w3.org/2004/02/skos/core# rico: https://www.ica.org/standards/RiC/ontology# + wd: http://www.wikidata.org/entity/ imports: - linkml:types - ./CollectionType @@ -21,14 +22,14 @@ classes: description: A rico:RecordSetType for classifying collections from German association and club archives. is_a: CollectionType class_uri: rico:RecordSetType + exact_mappings: + - wd:Q130758889 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) slots: - specificity_annotation - template_specificity - is_or_was_related_to # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) - has_or_had_identifier # was: wikidata_entity - migrated per Rule 53 (2026-01-15) slot_usage: - wikidata_equivalent: - equals_string: Q130758889 is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) range: WikidataAlignment inlined: true diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/Verlagsarchiv.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/Verlagsarchiv.yaml index 789a2c87ca..d8058dfe89 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/Verlagsarchiv.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/Verlagsarchiv.yaml @@ -1,6 +1,11 @@ id: https://nde.nl/ontology/hc/class/Verlagsarchiv name: Verlagsarchiv title: Verlagsarchiv Type +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + skos: http://www.w3.org/2004/02/skos/core# + wd: http://www.wikidata.org/entity/ imports: - linkml:types - ./ArchiveOrganizationType @@ -25,6 +30,8 @@ classes: contracts, marketing materials, and documentation of book production and distribution activities. is_a: ArchiveOrganizationType class_uri: skos:Concept + exact_mappings: + - wd:Q130759004 # Wikidata: Verlagsarchiv (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) slots: - has_or_had_custodian_type - specificity_annotation @@ -32,8 +39,6 @@ classes: - is_or_was_related_to # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) - has_or_had_identifier # was: wikidata_entity - migrated per Rule 53 (2026-01-15) slot_usage: - wikidata_equivalent: - equals_string: Q130759004 has_or_had_custodian_type: equals_expression: '["hc:ArchiveOrganizationType"]' is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/VerlagsarchivRecordSetType.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/VerlagsarchivRecordSetType.yaml index 0a6ff361ad..25ea0152bc 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/VerlagsarchivRecordSetType.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/VerlagsarchivRecordSetType.yaml @@ -6,6 +6,7 @@ prefixes: schema: http://schema.org/ skos: http://www.w3.org/2004/02/skos/core# rico: https://www.ica.org/standards/RiC/ontology# + wd: http://www.wikidata.org/entity/ imports: - linkml:types - ./CollectionType @@ -21,14 +22,14 @@ classes: description: A rico:RecordSetType for classifying collections from German publishing house archives. is_a: CollectionType class_uri: rico:RecordSetType + exact_mappings: + - wd:Q130759004 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) slots: - specificity_annotation - template_specificity - is_or_was_related_to # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) - has_or_had_identifier # was: wikidata_entity - migrated per Rule 53 (2026-01-15) slot_usage: - wikidata_equivalent: - equals_string: Q130759004 is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) range: WikidataAlignment inlined: true diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/Verwaltungsarchiv.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/Verwaltungsarchiv.yaml index b7011e4735..f2e6a16899 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/Verwaltungsarchiv.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/Verwaltungsarchiv.yaml @@ -1,6 +1,11 @@ id: https://nde.nl/ontology/hc/class/Verwaltungsarchiv name: Verwaltungsarchiv title: Verwaltungsarchiv Type +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + skos: http://www.w3.org/2004/02/skos/core# + wd: http://www.wikidata.org/entity/ imports: - linkml:types - ./ArchiveOrganizationType @@ -23,14 +28,14 @@ classes: and administrative decision-making, typically from government agencies or large organizations. is_a: ArchiveOrganizationType class_uri: skos:Concept + exact_mappings: + - wd:Q2519292 # Wikidata: Verwaltungsarchiv (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) slots: - specificity_annotation - template_specificity - is_or_was_related_to # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) - has_or_had_identifier # was: wikidata_entity - migrated per Rule 53 (2026-01-15) slot_usage: - wikidata_equivalent: - equals_string: Q2519292 is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) range: WikidataAlignment inlined: true diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/VerwaltungsarchivRecordSetType.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/VerwaltungsarchivRecordSetType.yaml index 40f4d7baa4..c86290541c 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/VerwaltungsarchivRecordSetType.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/VerwaltungsarchivRecordSetType.yaml @@ -6,6 +6,7 @@ prefixes: schema: http://schema.org/ skos: http://www.w3.org/2004/02/skos/core# rico: https://www.ica.org/standards/RiC/ontology# + wd: http://www.wikidata.org/entity/ imports: - linkml:types - ./CollectionType @@ -20,14 +21,14 @@ classes: description: A rico:RecordSetType for classifying collections of administrative records and bureaucratic documentation. is_a: CollectionType class_uri: rico:RecordSetType + exact_mappings: + - wd:Q2519292 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) slots: - specificity_annotation - template_specificity - is_or_was_related_to # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) - has_or_had_identifier # was: wikidata_entity - migrated per Rule 53 (2026-01-15) slot_usage: - wikidata_equivalent: - equals_string: Q2519292 is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) range: WikidataAlignment inlined: true diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/WebArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/WebArchive.yaml index 2f2887b5e8..57412e9f58 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/WebArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/WebArchive.yaml @@ -39,7 +39,7 @@ classes: - is_or_was_related_to # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) - has_or_had_identifier # was: wikidata_entity - migrated per Rule 53 (2026-01-15) exact_mappings: - - wd:Q30047053 + - wd:Q30047053 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) close_mappings: - rico:CorporateBody - skos:Concept @@ -48,8 +48,6 @@ classes: mixins: - DigitalPlatformType slot_usage: - wikidata_equivalent: - equals_string: Q30047053 platform_type_id: identifier: false has_or_had_custodian_type: diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/WebArchiveRecordSetType.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/WebArchiveRecordSetType.yaml index b1b36f5689..447f7d4523 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/WebArchiveRecordSetType.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/WebArchiveRecordSetType.yaml @@ -17,15 +17,14 @@ imports: - ../slots/is_or_was_related_to - ../slots/specificity_annotation - ../slots/template_specificity - - ../slots/wikidata_equivalent classes: WebArchiveRecordSetType: description: A rico:RecordSetType for classifying collections of preserved web pages and archived online content. is_a: CollectionType class_uri: rico:RecordSetType + exact_mappings: + - wd:Q30047053 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) slot_usage: - wikidata_equivalent: - equals_string: Q30047053 is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) range: WikidataAlignment inlined: true diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/WebPortal.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/WebPortal.yaml index bfa86ed4c5..d91f014484 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/WebPortal.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/WebPortal.yaml @@ -47,7 +47,7 @@ imports: - ../slots/portal_url - ../slots/record_count - ../slots/specificity_annotation - - ../slots/successor_portal + - ../slots/supersedes_or_superseded # was: successor_portal - migrated per Rule 53/56 (2026-01-17) - ../slots/template_specificity - ../slots/temporal_extent - ../slots/has_or_had_scope # was: thematic_scope - migrated per Rule 53 @@ -121,7 +121,7 @@ classes: \ records\n\n**ONTOLOGY ALIGNMENT**:\n\n- **EDM** (`edm:Aggregation`): Primary mapping - portal aggregates CHOs\n- **ORE**\ \ (`ore:Aggregation`): Object Reuse and Exchange aggregation\n- **Schema.org** (`schema:WebSite` + `schema:DataCatalog`):\ \ Web presence + data catalog\n- **DCMI Type** (`dcmitype:Collection`): Collection of metadata records\n\n**LIFECYCLE\ - \ AND MIGRATION**:\n\nPortals evolve over time:\n- New portals launch\n- Portals merge (use `successor_portal`)\n- Portals\ + \ AND MIGRATION**:\n\nPortals evolve over time:\n- New portals launch\n- Portals merge (use `supersedes_or_superseded`)\n- Portals\ \ become legacy but remain accessible\n- Portal scope expands (regional → national)\n\nTrack status with `portal_status`:\ \ ACTIVE, LEGACY, DEPRECATED, MERGED\n" exact_mappings: @@ -163,7 +163,7 @@ classes: - serves_finding_aid - sparql_endpoint - specificity_annotation - - successor_portal + - supersedes_or_superseded # was: successor_portal - migrated per Rule 53/56 (2026-01-17) - template_specificity - temporal_extent - has_or_had_scope # was: thematic_scope - migrated per Rule 53 @@ -308,8 +308,11 @@ classes: examples: - value: ACTIVE - value: LEGACY - successor_portal: + supersedes_or_superseded: # was: successor_portal - migrated per Rule 53/56 (2026-01-17) range: uriorcurie + description: | + Portal that replaced this one (if deprecated or merged), or that this portal replaced. + MIGRATED from successor_portal per Rule 53/56 (2026-01-17). examples: - value: https://nde.nl/ontology/hc/portal/nl/new-archieven-portal description: Hypothetical successor portal @@ -411,7 +414,7 @@ classes: - WebPortal AGGREGATES metadata from multiple institutions - 'Portals form aggregation chains: regional → national → European' - Typically operated by EncompassingBody (Network, Consortium) - - Track lifecycle with portal_status and successor_portal + - Track lifecycle with portal_status and supersedes_or_superseded - 'NEW: data_license_policy links to portal''s licensing stance (CC0, CC-BY, etc.)' - 'NEW: created_by_project links to Project that built the portal' - 'NEW: is_or_was_associated_with for organizational relationships beyond operator (migrated from associated_encompassing_bodies)' diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/WebPortalTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/WebPortalTypes.yaml index 07441d42e5..ee180d5909 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/WebPortalTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/WebPortalTypes.yaml @@ -37,7 +37,7 @@ imports: - ../slots/portal_typical_domain - ../slots/published_by - ../slots/specificity_annotation - - ../slots/succeeded_by + - ../slots/is_or_was_superseded_by # was: succeeded_by - migrated per Rule 53/56 (2026-01-17) - ../slots/template_specificity classes: NationalAggregator: @@ -1171,7 +1171,7 @@ classes: \ status is tied to observation B's TimeSpan (2023-06-15)\n- Whether a user queries this in 2023 or 2030 does not change\ \ the semantic\n content - the cessation was observed on 2023-06-15\n\n**CHARACTERISTICS**:\n- No longer actively maintained\ \ (as of observation TimeSpan)\n- May contain unique historical data\n- Redirects to successor platforms\n- Preserved\ - \ for link persistence\n- Documentation of historical context\n\n**SUCCESSOR TRACKING**:\nUse `succeeded_by` slot to\ + \ for link persistence\n- Documentation of historical context\n\n**SUCCESSOR TRACKING**:\nUse `is_or_was_superseded_by` slot to\ \ link to replacement portal(s):\n- One-to-one succession (portal replaced by single successor)\n- One-to-many succession\ \ (portal split into multiple successors)\n- Many-to-one succession (multiple portals merged into one)\n\n**USE CASES**:\n\ - Superseded regional portals\n- Merged aggregation services\n- Discontinued projects\n- Archived web platforms\n" @@ -1181,7 +1181,7 @@ classes: slots: - cessation_observed_in - specificity_annotation - - succeeded_by + - is_or_was_superseded_by # was: succeeded_by - migrated per Rule 53/56 (2026-01-17) - template_specificity comments: - Legacy/deprecated heritage portal diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/WomensArchives.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/WomensArchives.yaml index f0b3f4c6b0..d99597939d 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/WomensArchives.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/WomensArchives.yaml @@ -38,15 +38,13 @@ classes: - is_or_was_related_to # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) - has_or_had_identifier # was: wikidata_entity - migrated per Rule 53 (2026-01-15) exact_mappings: - - wd:Q130217628 + - wd:Q130217628 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) close_mappings: - rico:CorporateBody - skos:Concept broad_mappings: - wd:Q166118 slot_usage: - wikidata_equivalent: - equals_string: Q130217628 has_or_had_custodian_type: equals_expression: '["hc:ArchiveOrganizationType"]' is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/WomensArchivesRecordSetType.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/WomensArchivesRecordSetType.yaml index 8f8a523f90..39e4ae3780 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/WomensArchivesRecordSetType.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/WomensArchivesRecordSetType.yaml @@ -17,16 +17,15 @@ imports: - ../slots/is_or_was_related_to - ../slots/specificity_annotation - ../slots/template_specificity - - ../slots/wikidata_equivalent classes: WomensArchivesRecordSetType: description: A rico:RecordSetType for classifying collections documenting women's history, feminist movements, and women's experiences. is_a: CollectionType class_uri: rico:RecordSetType + exact_mappings: + - wd:Q130217628 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) slot_usage: - wikidata_equivalent: - equals_string: Q130217628 is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) range: WikidataAlignment inlined: true diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/stewardship_model.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/archive/stewardship_model_archived_20260117.yaml similarity index 100% rename from frontend/public/schemas/20251121/linkml/modules/slots/stewardship_model.yaml rename to frontend/public/schemas/20251121/linkml/modules/slots/archive/stewardship_model_archived_20260117.yaml diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/stewardship_responsibility.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/archive/stewardship_responsibility_archived_20260117.yaml similarity index 100% rename from frontend/public/schemas/20251121/linkml/modules/slots/stewardship_responsibility.yaml rename to frontend/public/schemas/20251121/linkml/modules/slots/archive/stewardship_responsibility_archived_20260117.yaml diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/street_address.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/archive/street_address_archived_20260117.yaml similarity index 100% rename from frontend/public/schemas/20251121/linkml/modules/slots/street_address.yaml rename to frontend/public/schemas/20251121/linkml/modules/slots/archive/street_address_archived_20260117.yaml diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/street_name.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/archive/street_name_archived_20260117.yaml similarity index 100% rename from frontend/public/schemas/20251121/linkml/modules/slots/street_name.yaml rename to frontend/public/schemas/20251121/linkml/modules/slots/archive/street_name_archived_20260117.yaml diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/sub_guide_temporal_coverage.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/archive/sub_guide_temporal_coverage_archived_20260117.yaml similarity index 100% rename from frontend/public/schemas/20251121/linkml/modules/slots/sub_guide_temporal_coverage.yaml rename to frontend/public/schemas/20251121/linkml/modules/slots/archive/sub_guide_temporal_coverage_archived_20260117.yaml diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/subdivision_name.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/archive/subdivision_name_archived_20260117.yaml similarity index 100% rename from frontend/public/schemas/20251121/linkml/modules/slots/subdivision_name.yaml rename to frontend/public/schemas/20251121/linkml/modules/slots/archive/subdivision_name_archived_20260117.yaml diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/subject_area.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/archive/subject_area_archived_20260117.yaml similarity index 100% rename from frontend/public/schemas/20251121/linkml/modules/slots/subject_area.yaml rename to frontend/public/schemas/20251121/linkml/modules/slots/archive/subject_area_archived_20260117.yaml diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/subject_depicted.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/archive/subject_depicted_archived_20260117.yaml similarity index 100% rename from frontend/public/schemas/20251121/linkml/modules/slots/subject_depicted.yaml rename to frontend/public/schemas/20251121/linkml/modules/slots/archive/subject_depicted_archived_20260117.yaml diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/subregion.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/archive/subregion_archived_20260117.yaml similarity index 100% rename from frontend/public/schemas/20251121/linkml/modules/slots/subregion.yaml rename to frontend/public/schemas/20251121/linkml/modules/slots/archive/subregion_archived_20260117.yaml diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/succeeded_by.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/archive/succeeded_by_archived_20260117.yaml similarity index 100% rename from frontend/public/schemas/20251121/linkml/modules/slots/succeeded_by.yaml rename to frontend/public/schemas/20251121/linkml/modules/slots/archive/succeeded_by_archived_20260117.yaml diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/successor_portal.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/archive/successor_portal_archived_20260117.yaml similarity index 100% rename from frontend/public/schemas/20251121/linkml/modules/slots/successor_portal.yaml rename to frontend/public/schemas/20251121/linkml/modules/slots/archive/successor_portal_archived_20260117.yaml diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/supersede.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/archive/supersede_archived_20260117.yaml similarity index 100% rename from frontend/public/schemas/20251121/linkml/modules/slots/supersede.yaml rename to frontend/public/schemas/20251121/linkml/modules/slots/archive/supersede_archived_20260117.yaml diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/superseded_by.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/archive/superseded_by_archived_20260117.yaml similarity index 100% rename from frontend/public/schemas/20251121/linkml/modules/slots/superseded_by.yaml rename to frontend/public/schemas/20251121/linkml/modules/slots/archive/superseded_by_archived_20260117.yaml diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/supplier_relationship.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/archive/supplier_relationship_archived_20260116.yaml similarity index 100% rename from frontend/public/schemas/20251121/linkml/modules/slots/supplier_relationship.yaml rename to frontend/public/schemas/20251121/linkml/modules/slots/archive/supplier_relationship_archived_20260116.yaml diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/supported_format.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/archive/supported_format_archived_20260116.yaml similarity index 100% rename from frontend/public/schemas/20251121/linkml/modules/slots/supported_format.yaml rename to frontend/public/schemas/20251121/linkml/modules/slots/archive/supported_format_archived_20260116.yaml diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/supported_metadata_standard.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/archive/supported_metadata_standard_archived_20260116.yaml similarity index 100% rename from frontend/public/schemas/20251121/linkml/modules/slots/supported_metadata_standard.yaml rename to frontend/public/schemas/20251121/linkml/modules/slots/archive/supported_metadata_standard_archived_20260116.yaml diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/table_of_content.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/archive/table_of_content_archived_20260116.yaml similarity index 100% rename from frontend/public/schemas/20251121/linkml/modules/slots/table_of_content.yaml rename to frontend/public/schemas/20251121/linkml/modules/slots/archive/table_of_content_archived_20260116.yaml diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/has_or_had_geographic_subdivision.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/has_or_had_geographic_subdivision.yaml new file mode 100644 index 0000000000..d5964372ac --- /dev/null +++ b/frontend/public/schemas/20251121/linkml/modules/slots/has_or_had_geographic_subdivision.yaml @@ -0,0 +1,103 @@ +# has_or_had_geographic_subdivision slot +# Generic slot for geographic subdivision (state, province, region, etc.) +# +# Migration: Replaces domain-specific 'subregion' slot per slot_fixes.yaml +# Following RiC-O naming convention (Rule 39): "hasOrHad..." pattern +# for temporal relationships in heritage domain. +# +# Generation date: 2026-01-17 +# Rule compliance: 38 (slot centralization + semantic URI), 39 (RiC-O naming), 42 (no prefix), 53 (no bespoke slots), 55 (broadened range), 56 (execute revisions) + +id: https://nde.nl/ontology/hc/slot/has_or_had_geographic_subdivision +name: has_or_had_geographic_subdivision_slot +title: Has Or Had Geographic Subdivision Slot + +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + schema: http://schema.org/ + locn: http://www.w3.org/ns/locn# + lcc_cr: https://www.omg.org/spec/LCC/Countries/CountryRepresentation/ + gn: http://www.geonames.org/ontology# + +default_prefix: hc + +imports: + - linkml:types + +slots: + has_or_had_geographic_subdivision: + slot_uri: lcc_cr:isSubregionOf + description: | + Geographic subdivision within a country (state, province, region, department, etc.). + + **Temporal Semantics** (RiC-O Pattern): + The "hasOrHad" naming follows RiC-O convention indicating this relationship + may be historical - an entity may have been located in different subdivisions + over time (e.g., due to boundary changes, administrative reorganization). + + **Geographic Hierarchy**: + Country → GeographicSubdivision (this slot) → Settlement + + **Identifier Format**: + ISO 3166-2 codes: {country_alpha2}-{subdivision_code} + Examples: US-PA (Pennsylvania), ID-BA (Bali), DE-BY (Bavaria), NL-LI (Limburg) + + **Ontological Alignment**: + - **Primary** (`slot_uri`): `lcc_cr:isSubregionOf` - OMG Languages Countries and Codes + - **Exact**: `schema:addressRegion` - Schema.org administrative region + - **Close**: `locn:adminUnitL2` - INSPIRE administrative unit level 2 + - **Close**: `gn:A.ADM1` - GeoNames first-order administrative division + + **Use Cases**: + - Place is located in a specific subdivision (e.g., "Pittsburgh museum" → US-PA) + - Feature types are region-specific (e.g., "sacred shrine (Bali)" → ID-BA) + - Legal jurisdiction at subnational level (e.g., Bavarian archive law) + - Generating GHCID region codes + + **Range**: `uriorcurie` (Rule 55) - Allows both: + - URI references to Subregion class instances + - Direct ISO 3166-2 code CURIEs + + **Migration Note** (2026-01-17): + Replaces domain-specific `subregion` slot per slot_fixes.yaml revision. + Provides generic predicate name applicable across geographic contexts. + + range: uriorcurie # Per Rule 55 - broadened to allow class and CURIE values + required: false + multivalued: false + + exact_mappings: + - schema:addressRegion + + close_mappings: + - locn:adminUnitL2 + - gn:A.ADM1 + + related_mappings: + - lcc_cr:GeographicRegion + + annotations: + rico_naming_convention: | + Follows RiC-O "hasOrHad" pattern for temporal predicates. + See Rule 39: Slot Naming Convention (RiC-O Style) + replaces_slots: "subregion" + migration_date: "2026-01-17" + iso_standard: "ISO 3166-2" + + comments: + - "Generic geographic subdivision slot (state, province, region, etc.)" + - "Uses ISO 3166-2 codes for unambiguous identification" + - "RiC-O naming: hasOrHad indicates potentially historical relationship" + - "Replaces domain-specific 'subregion' slot (2026-01-17)" + - "Range is Subregion class or direct ISO 3166-2 CURIE" + + examples: + - value: https://nde.nl/ontology/hc/subregion/US-PA + description: "Pennsylvania, United States" + - value: https://nde.nl/ontology/hc/subregion/ID-BA + description: "Bali, Indonesia" + - value: https://nde.nl/ontology/hc/subregion/DE-BY + description: "Bavaria (Bayern), Germany" + - value: https://nde.nl/ontology/hc/subregion/NL-LI + description: "Limburg, Netherlands" diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/has_or_had_subject.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/has_or_had_subject.yaml new file mode 100644 index 0000000000..441affe2e3 --- /dev/null +++ b/frontend/public/schemas/20251121/linkml/modules/slots/has_or_had_subject.yaml @@ -0,0 +1,105 @@ +# has_or_had_subject slot +# Generic slot for subject/topic associations +# +# Migration: Replaces domain-specific 'subject_depicted' slot per slot_fixes.yaml +# Following RiC-O naming convention (Rule 39): "hasOrHad..." pattern +# for temporal relationships in heritage domain. +# +# Generation date: 2026-01-17 +# Rule compliance: 38 (slot centralization + semantic URI), 39 (RiC-O naming), 42 (no prefix), 53 (no bespoke slots), 55 (broadened range), 56 (execute revisions) + +id: https://nde.nl/ontology/hc/slot/has_or_had_subject +name: has_or_had_subject_slot +title: Has Or Had Subject Slot + +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# + crm: http://www.cidoc-crm.org/cidoc-crm/ + +default_prefix: hc + +imports: + - linkml:types + +slots: + has_or_had_subject: + slot_uri: schema:about + description: | + Subject matter, theme, or topic depicted, described, or associated with an entity. + + **Temporal Semantics** (RiC-O Pattern): + The "hasOrHad" naming follows RiC-O convention indicating this relationship + may be historical - an entity may have different subject associations over time + (e.g., reattribution of artwork subject, reinterpretation of archival content). + + **Use Cases**: + - **Artwork subjects**: Themes depicted in paintings, sculptures, photographs + - **Archival subjects**: Topics covered in document collections + - **Collection subjects**: Thematic focus of a collection + - **Exhibition subjects**: Themes explored in an exhibition + + **Controlled Vocabularies** (Recommended): + - **AAT** (Getty Art & Architecture Thesaurus): Art and artifact subjects + - **Iconclass**: Iconographic classification (e.g., "31A221 - portrait of a woman") + - **LCSH** (Library of Congress Subject Headings): General subjects + - **UNESCO Thesaurus**: Cultural heritage subjects + + **Ontological Alignment**: + - **Primary** (`slot_uri`): `schema:about` - Schema.org subject property + - **Exact**: `dcterms:subject` - Dublin Core subject + - **Close**: `crm:P62_depicts` - CIDOC-CRM visual depiction + - **Close**: `skos:broader/narrower` - SKOS conceptual relationships + + **Range**: `uriorcurie` (Rule 55) - Allows both: + - Direct string values for simple subjects + - URI references to Subject class instances or controlled vocabulary terms + + **Migration Note** (2026-01-17): + Replaces domain-specific `subject_depicted` slot per slot_fixes.yaml revision. + Provides generic predicate name applicable across heritage object contexts. + + range: uriorcurie # Per Rule 55 - broadened to allow class and string/CURIE values + required: false + multivalued: true + + exact_mappings: + - dcterms:subject + + close_mappings: + - crm:P62_depicts + - skos:Concept + + related_mappings: + - crm:P129_is_about + - schema:keywords + + annotations: + rico_naming_convention: | + Follows RiC-O "hasOrHad" pattern for temporal predicates. + See Rule 39: Slot Naming Convention (RiC-O Style) + replaces_slots: "subject_depicted, subject_area (partial)" + migration_date: "2026-01-17" + controlled_vocabularies: "AAT, Iconclass, LCSH, UNESCO Thesaurus" + + comments: + - "Generic subject/topic association slot" + - "Use controlled vocabularies (AAT, Iconclass, LCSH) where possible" + - "RiC-O naming: hasOrHad indicates potentially historical relationship" + - "Replaces domain-specific 'subject_depicted' slot (2026-01-17)" + - "Range allows strings or URI references to Subject class" + + examples: + - value: portrait + description: "Simple string subject for artwork" + - value: girl + description: "Figure subject" + - value: pearl earring + description: "Object subject" + - value: aat:300015637 + description: "AAT term for 'portraits' via CURIE" + - value: iconclass:31A221 + description: "Iconclass term for 'portrait of a woman'" diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/has_or_had_supplier.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/has_or_had_supplier.yaml new file mode 100644 index 0000000000..9ca73c4dfc --- /dev/null +++ b/frontend/public/schemas/20251121/linkml/modules/slots/has_or_had_supplier.yaml @@ -0,0 +1,72 @@ +# has_or_had_supplier - Supplier relationship slot +# +# Created per slot_fixes.yaml revision for: supplier_relationship +# Creation date: 2026-01-16 +# Rule compliance: 39 (RiC-O naming), 50 (ontology mapping), 53 (no bespoke slots), 56 (semantic consistency) + +id: https://nde.nl/ontology/hc/slot/has_or_had_supplier +name: has_or_had_supplier +title: Has or Had Supplier + +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + schema: http://schema.org/ + gr: http://purl.org/goodrelations/v1# + org: http://www.w3.org/ns/org# + +default_prefix: hc + +imports: + - linkml:types + +slots: + has_or_had_supplier: + slot_uri: hc:hasOrHadSupplier + description: | + Supplier relationship for an organization or commercial operation. + + **USAGE**: + Used for modeling business relationships with suppliers: + - Merchandise suppliers for gift shops + - Print-on-demand partners + - Publication distributors + - Service providers + - Licensing partners + + **ONTOLOGY ALIGNMENT**: + - **Primary** (`slot_uri`): `hc:hasOrHadSupplier` - Heritage Custodian property + - **Close**: `schema:supplier` - Schema.org supplier relationship + - **Close**: `gr:hasBrand` - GoodRelations brand/supplier + - **Related**: `org:linkedTo` - W3C Org general organizational link + + **TEMPORAL SEMANTICS** (Rule 39): + The "hasOrHad" pattern indicates this relationship may have temporal validity. + Supplier relationships can change over time - contracts end, new partnerships form. + + **MIGRATION NOTE**: + Created to replace bespoke `supplier_relationship` slot per Rule 53/56. + Provides structured Supplier class instead of plain string values. + + range: uriorcurie # Broadened per Rule 55 - classes narrow via slot_usage + multivalued: true + + exact_mappings: + - schema:supplier + close_mappings: + - gr:hasBrand + related_mappings: + - org:linkedTo + + examples: + - value: "hc:Supplier/king-mcgaw" + description: Art print supplier (CURIE reference) + - value: "hc:Supplier/museum-reproductions-ltd" + description: Reproduction supplier (CURIE reference) + + annotations: + custodian_types: '["G", "M", "L", "A", "S"]' + custodian_types_rationale: "Supplier relationships primarily relevant for galleries, museums, libraries, archives, and societies with retail operations." + migration_source: "supplier_relationship" + migration_date: "2026-01-16" + migration_rule: "Rule 53/56" diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/is_or_was_superseded_by.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/is_or_was_superseded_by.yaml new file mode 100644 index 0000000000..bcc5af01d5 --- /dev/null +++ b/frontend/public/schemas/20251121/linkml/modules/slots/is_or_was_superseded_by.yaml @@ -0,0 +1,72 @@ +# is_or_was_superseded_by - Supersession relationship with RiC-O temporal semantics +# +# Created per slot_fixes.yaml migration for: superseded_by +# Migration date: 2026-01-16 +# Rule 53/56: Generic reusable slot instead of bespoke superseded_by +# Rule 39: RiC-O temporal naming convention (is_or_was_*) + +id: https://nde.nl/ontology/hc/slot/is_or_was_superseded_by +name: is_or_was_superseded_by_slot +title: Is Or Was Superseded By + +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + dcterms: http://purl.org/dc/terms/ + prov: http://www.w3.org/ns/prov# + rico: https://www.ica.org/standards/RiC/ontology# + +default_prefix: hc + +imports: + - linkml:types + +slots: + is_or_was_superseded_by: + slot_uri: hc:isOrWasSupersededBy + range: uriorcurie + description: | + Reference to an entity that supersedes, replaces, or succeeds this one. + + **TEMPORAL SEMANTICS** (RiC-O naming convention): + The "is_or_was" prefix indicates this relationship may be: + - Current (active supersession) + - Historical (past supersession in a chain) + + **USAGE**: + Used to track version chains and replacement relationships: + - Finding aid versions (v1 → v2 → v3) + - Assertion updates (old assertion → new assertion) + - Document versions (original → amended) + + **PROVENANCE PATTERN**: + For temporal tracking, combine with `temporal_extent` to record + WHEN the supersession occurred: + ```yaml + is_or_was_superseded_by: https://example.org/finding-aid/v2 + temporal_extent: + end_of_the_end: "2025-06-15" # Date when superseded + ``` + + **MIGRATED FROM**: superseded_by (2026-01-16) + - Original slot_uri preserved in exact_mappings + - Changed from range:uri to range:uriorcurie per Rule 55 + - Renamed per Rule 39 (RiC-O temporal naming) + + Dublin Core: isReplacedBy - "A related resource that supplants, + displaces, or supersedes the described resource." + exact_mappings: + - dcterms:isReplacedBy + - hc:supersededBy # Original slot_uri preserved + close_mappings: + - prov:wasInvalidatedBy + related_mappings: + - rico:isOrWasSuccessorOf + comments: + - Uses uriorcurie range to allow both full URIs and compact CURIEs + - Classes can narrow range via slot_usage to specific class types (e.g., Entity) + - Temporal context should be tracked via temporal_extent slot when needed + annotations: + migration_source: superseded_by + migration_date: "2026-01-16" + migration_rule: "Rule 53/56 - Generic slots, semantic consistency" diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/slot_fixes.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/slot_fixes.yaml index e739176b63..31e5fed0f7 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/slot_fixes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/slot_fixes.yaml @@ -366,9 +366,21 @@ fixes: session: slot-migration-session-20260115 notes: Migrated to is_or_was_required in AccessPolicy.yaml. Archived appointment_required.yaml and has_appointment_required_flag.yaml. + feedback: + - timestamp: '2026-01-16T23:59:00Z' + user: Simon C. Kemper + done: false + comment: | + Conduct the revision below revision: - - label: is_or_was_required + - label: condition_of_access type: slot + - label: Condition + type: slot + - label: requires_or_required + type: slot + - label: Appointment + type: class - original_slot_id: https://nde.nl/ontology/hc/slot/appraisal_notes processed: status: true @@ -779,6 +791,12 @@ fixes: session: session-2026-01-14-identifier-migrations notes: 'COMPLETE: Migrated to has_or_had_description. Binding.yaml updated with slot_usage. Slot archived to modules/slots/archive/binding_description_archived_20260115.yaml.' + feedback: + - timestamp: '2026-01-17T00:00:03Z' + user: Simon C. Kemper + done: false + comment: | + https://nde.nl/ontology/hc/slot/binding_description still exists! The migration is incomplete. revision: - label: has_or_had_description type: slot @@ -802,6 +820,12 @@ fixes: timestamp: '2026-01-13T00:00:00Z' session: session-2026-01-13-type-migration notes: BindingType/BindingTypes created; InformationCarrier updated + feedback: + - timestamp: '2026-01-17T00:00:15Z' + user: Simon C. Kemper + done: false + comment: | + https://nde.nl/ontology/hc/slot/binding_type migration seems to be incomplete, as the slot still exists. Please continue the migration. revision: - label: has_or_had_type type: slot @@ -821,6 +845,12 @@ fixes: skos:narrower which is semantically correct for subtype relationships. Enum retains Wikidata QID meanings for Linked Open Data. Consider future migration only if enum causes maintenance issues.' + feedback: + - timestamp: '2026-01-17T00:00:27Z' + user: Simon C. Kemper + done: false + comment: | + https://nde.nl/ontology/hc/slot/bio_custodian_subtype migration seems to be incomplete, as the slot still exists. Please continue the migration. revision: - label: bio_custodian_subtype type: slot @@ -835,6 +865,12 @@ fixes: OutdoorSite.yaml. Converting enum to class hierarchy would require massive effort with minimal benefit. Consider future migration only if enum causes maintenance issues.' + feedback: + - timestamp: '2026-01-17T00:00:39Z' + user: Simon C. Kemper + done: false + comment: | + https://nde.nl/ontology/hc/slot/bio-type-classification migration seems to be incomplete, as the slot still exists. Please continue the migration. revision: - label: bio_type_classification type: slot @@ -938,6 +974,12 @@ fixes: session: session-2026-01-14-identifier-migrations notes: 'COMPLETE: Migrated to has_or_had_description. OrganizationBranch.yaml updated with slot_usage. Slot archived to modules/slots/archive/branch_description_archived_20260115.yaml.' + feedback: + - timestamp: '2026-01-17T00:01:01Z' + user: Simon C. Kemper + done: false + comment: | + https://nde.nl/ontology/hc/slot/branch_description still exists! The migration is incomplete. revision: - label: has_or_had_description type: slot @@ -1061,6 +1103,12 @@ fixes: timestamp: '2026-01-13T00:00:00Z' session: session-2026-01-13-type-migration notes: BranchType/BranchTypes created; OrganizationBranch updated + feedback: + - timestamp: '2026-01-17T00:01:21Z' + user: Simon C. Kemper + done: false + comment: | + https://nde.nl/ontology/hc/slot/branch_type migration seems to be incomplete, as the slot still exists. Please continue the migration. revision: - label: has_or_had_type type: slot @@ -1101,6 +1149,12 @@ fixes: session: session-2026-01-14-hypernym-migration notes: 'FULLY MIGRATED: FindingAidType - broader_type REMOVED. Replaced with existing has_or_had_hypernym slot (Rule 53). Slot archived to modules/slots/archive/broader_type_archived_20260114.yaml.' + feedback: + - timestamp: '2026-01-17T00:01:33Z' + user: Simon C. Kemper + done: false + comment: | + https://nde.nl/ontology/hc/slot/broader_type migration seems to be incomplete, as the slot still exists. Please continue the migration. revision: - label: has_or_had_hypernym type: slot @@ -1150,6 +1204,11 @@ fixes: session: session-2026-01-14-identifier-migrations notes: 'COMPLETE: Migrated to has_or_had_description. Budget.yaml updated with slot_usage. Slot archived to modules/slots/archive/budget_description_archived_20260115.yaml.' + revision: + - timestamp: '2026-01-17T00:01:45Z' + user: Simon C. Kemper + comment: | + https://nde.nl/ontology/hc/slot/budget_description still exists! The migration is incomplete. revision: - label: has_or_had_description type: slot @@ -1162,6 +1221,12 @@ fixes: session: session-2026-01-14-identifier-migrations notes: 'COMPLETE: Migrated to has_or_had_label. Budget.yaml updated with slot_usage. Slot archived to modules/slots/archive/budget_name_archived_20260115.yaml.' + feedback: + - timestamp: '2026-01-17T00:01:57Z' + user: Simon C. Kemper + done: false + comment: | + https://nde.nl/ontology/hc/slot/budget_name still exists! The migration is incomplete. revision: - label: has_or_had_label type: slot @@ -1192,6 +1257,12 @@ fixes: timestamp: '2026-01-13T00:00:00Z' session: session-2026-01-13-type-migration notes: BudgetType/BudgetTypes created; Budget class updated + feedback: + - timestamp: '2026-01-17T00:02:09Z' + user: Simon C. Kemper + done: false + comment: | + https://nde.nl/ontology/hc/slot/budget_type migration seems to be incomplete, as the slot still exists. Please continue the migration. revision: - label: has_or_had_type type: slot @@ -1239,12 +1310,17 @@ fixes: Used by: CustodianAdministration.yaml ' + feedback: + - timestamp: '2026-01-17T00:02:21Z' + user: Simon C. Kemper + done: false + comment: | + https://nde.nl/ontology/hc/slot/business_criticality migration seems to be incomplete, as the slot still exists. Please continue the migration. DO NOT RETAIN. revision: - - label: business_criticality + - label: has_or_had_business_criticality type: slot - status: RETAINED - - label: hc:businessCriticality - type: slot_uri + - label: business_criticality + type: class - original_slot_id: https://nde.nl/ontology/hc/slot/business_model processed: status: true @@ -1262,12 +1338,17 @@ fixes: Creating a BusinessModel class would add complexity without semantic benefit. ' + feedback: + - timestamp: '2026-01-17T00:02:33Z' + user: Simon C. Kemper + done: false + comment: | + https://nde.nl/ontology/hc/slot/business_model migration seems to be incomplete, as the slot still exists. Please continue the migration. DO NOT RETAIN. revision: - - label: business_model + - label: has_or_had_model type: slot - status: RETAINED - - label: schema:businessFunction - type: slot_uri + - label: BusinessModel + type: class - original_slot_id: https://nde.nl/ontology/hc/slot/cached_token processed: status: true @@ -1284,12 +1365,28 @@ fixes: Creating Token/Quantity classes would over-engineer API telemetry tracking. ' + feedback: + - timestamp: '2026-01-17T00:02:45Z' + user: Simon C. Kemper + comment: | + https://nde.nl/ontology/hc/slot/cached_token migration seems to be incomplete, as the slot still exists. Please continue the migration. DO NOT RETAIN. FOLLOW THE REVISION below, do not change it! revision: - - label: cached_token + - label: has_or_had_token type: slot - status: RETAINED - - label: schema:value - type: slot_uri + - label: Token + type: class + - label: has_or_had_type + type: slot + - label: TokenType + type: class + - label: includes_or_included + type: slot + - label: TokenTypes + type: class + - label: has_or_had_quantity + type: slot + - label: Quantity + type: class - original_slot_id: https://nde.nl/ontology/hc/slot/cadastral_id processed: status: true @@ -4624,12 +4721,14 @@ fixes: - original_slot_id: https://nde.nl/ontology/hc/slot/table_of_content processed: status: true - timestamp: '2026-01-15T03:05:00Z' - session: session-2026-01-15-batch9-slot-migration - notes: 'NO MIGRATION NEEDED: table_of_content has proper slot_uri (hc:tableOfContents) - with close_mappings to dcterms:tableOfContents. String range for chapter listing. - Used in ExhibitionCatalog. Simple string is appropriate - Index + IndexType - hierarchy would over-complicate for table of contents text.' + timestamp: '2026-01-16T12:00:00Z' + session: session-2026-01-16-rejected-entries-migration + notes: 'FULLY MIGRATED: table_of_content → is_or_was_indexed + Index class. + Created is_or_was_indexed.yaml slot, Index.yaml class with hierarchical + index entry support, IndexType.yaml + IndexTypes.yaml for type taxonomy. + Updated ExhibitionCatalog.yaml (imports, slots, slot_usage). + Old slot archived to archive/table_of_content_archived_20260116.yaml. + Migration provides structured table of contents with entry hierarchy.' feedback: I reject this feedback. The migration to is_or_was_indexed and Index class provides better semantic clarity and extensibility for future table of contents representations. revision: - label: is_or_was_indexed @@ -4675,11 +4774,12 @@ fixes: - original_slot_id: https://nde.nl/ontology/hc/slot/supported_metadata_standard processed: status: true - timestamp: '2026-01-15T02:45:00Z' - session: session-2026-01-15-batch9-slot-migration - notes: 'NO MIGRATION NEEDED: supported_metadata_standard has hc:supportedMetadataStandards - slot_uri. Used in CollectionManagementSystem. Simple string list is appropriate - for metadata standard names - does not need separate Metadata + MetadataStandard classes.' + timestamp: '2026-01-16T12:30:00Z' + session: session-2026-01-16-rejected-entries-migration + notes: 'FULLY MIGRATED: supported_metadata_standard → has_or_had_standard + MetadataStandard class. + Updated CollectionManagementSystem.yaml (imports, slots, slot_usage, examples). + Uses existing has_or_had_standard.yaml slot and MetadataStandard.yaml class. + Old slot archived to archive/supported_metadata_standard_archived_20260116.yaml.' feedback: I reject this feedback. The migration to has_or_had_metadata and Metadata class provides better semantic clarity and extensibility for future metadata standard representations. revision: - label: has_or_had_metadata @@ -4693,25 +4793,29 @@ fixes: - original_slot_id: https://nde.nl/ontology/hc/slot/supported_format processed: status: true - timestamp: '2026-01-15T02:45:00Z' - session: session-2026-01-15-batch9-slot-migration - notes: 'NO MIGRATION NEEDED: supported_format has hc:supportedFormats slot_uri. - Used in FileAPI and DigitalArchive. Simple string list for format names (PDF/A, - TIFF, etc.) is appropriate - does not need Format class wrapper.' + timestamp: '2026-01-16T12:00:00Z' + session: session-2026-01-16-slot-migration + notes: | + FULLY MIGRATED (2026-01-16): Migrated to existing has_or_had_format slot per Rule 53/56. + Updated DigitalArchive.yaml (slots, slot_usage, examples) and FileAPI.yaml (inline attribute). + Used has_or_had_format (range: uriorcurie) instead of creating new supports_or_supported_format slot. + Old slot archived to: archive/supported_format_archived_20260116.yaml feedback: I reject this feedback. The migration to supports_or_supported_format and Format class provides better semantic clarity and extensibility for future supported format representations. revision: - - label: supports_or_supported_format + - label: has_or_had_format # Used existing generic slot instead of creating supports_or_supported_format type: slot - - label: Format + - label: Format # Not needed - has_or_had_format uses uriorcurie range per Rule 55 type: class - original_slot_id: https://nde.nl/ontology/hc/slot/supplier_relationship processed: status: true - timestamp: '2026-01-15T02:45:00Z' - session: session-2026-01-15-batch9-slot-migration - notes: 'NO MIGRATION NEEDED: supplier_relationship is a simple multivalued string - slot for GiftShop. Complex Supplier + SupplierType hierarchy suggested would - over-engineer for shop merchandise supplier notes.' + timestamp: '2026-01-16T12:30:00Z' + session: session-2026-01-16-slot-migration + notes: | + FULLY MIGRATED (2026-01-16): Created has_or_had_supplier slot, Supplier class, + SupplierType (abstract), and SupplierTypes (8 concrete subclasses). + Updated GiftShop.yaml (imports, slots, slot_usage, examples). + Old slot archived to: archive/supplier_relationship_archived_20260116.yaml feedback: I reject this feedback. The migration to has_or_had_supplier and Supplier class provides better semantic clarity and extensibility for future supplier relationship representations. revision: - label: has_or_had_supplier @@ -4720,10 +4824,12 @@ fixes: type: class - label: has_or_had_type type: slot + notes: Already exists - reused - label: SupplierType type: class - label: includes_or_included type: slot + notes: Not needed - used has_or_had_type with SupplierType range instead - label: SupplierTypes type: class - original_slot_id: https://nde.nl/ontology/hc/slot/superseded_by @@ -4748,40 +4854,58 @@ fixes: - original_slot_id: https://nde.nl/ontology/hc/slot/supersede processed: status: true - timestamp: '2026-01-15T01:30:00Z' - session: session-2026-01-15-batch9-slot-migration - notes: 'NO MIGRATION NEEDED: supersede is a well-structured slot with proper - slot_uri (dcterms:replaces). Simple URI reference with range:uri. Used in 7 - classes. Suggested revision to supersedes_or_superseded + Entity + TimeSpan - would over-complicate for a simple reference slot.' + timestamp: '2026-01-17T12:30:00Z' + session: session-2026-01-17-supersede-migration + notes: | + MIGRATION COMPLETED (2026-01-17): + - Created supersedes_or_superseded.yaml slot with range:uriorcurie + - Updated FindingAid.yaml (imports, slots) + - Updated FundingRequirement.yaml (imports, slots, slot_usage, comments) + - Updated MissionStatement.yaml (imports, slots) + - Updated PrimaryDigitalPresenceAssertion.yaml (imports, slots, slot_usage, comments) + - Archived supersede.yaml to archive/supersede_archived_20260117.yaml + - ArticlesOfAssociation.yaml already uses supersede_articles (class-specific) + - CustodianName.yaml already uses supersede_name (class-specific) + - StorageCondition.yaml already uses supersede_condition (class-specific) feedback: I reject this feedback. The migration to supersedes_or_superseded and Entity class provides better semantic clarity and extensibility for future supersede representations. revision: - label: supersedes_or_superseded type: slot + status: CREATED - label: Entity type: class + status: EXISTS - label: temporal_extent type: slot + status: EXISTS - label: TimeSpan type: class + status: EXISTS - original_slot_id: https://nde.nl/ontology/hc/slot/successor_portal processed: status: true - timestamp: '2026-01-15T03:15:00Z' - session: session-2026-01-15-batch9-slot-migration - notes: 'NO MIGRATION NEEDED: successor_portal has proper slot_uri (hc:successorPortal) - with uriorcurie range. Used in WebPortal for deprecated/merged portals. - Simple URI reference is appropriate - does not need WebPortal + TimeSpan wrapper.' + timestamp: '2026-01-17T13:00:00Z' + session: session-2026-01-17-successor-portal-migration + notes: | + MIGRATION COMPLETED (2026-01-17): + - Reuses existing supersedes_or_superseded.yaml slot (created earlier this session) + - Updated WebPortal.yaml (imports, slots, slot_usage, description, comments) + - Archived successor_portal.yaml to archive/successor_portal_archived_20260117.yaml + - Original hc:successorPortal semantics preserved via slot_usage description feedback: I reject this feedback. The migration to supersedes_or_superseded and Entity class provides better semantic clarity and extensibility for future successor portal representations. revision: - label: supersedes_or_superseded type: slot + status: EXISTS - label: WebPortal type: class + status: EXISTS - label: temporal_extent type: slot + status: EXISTS - label: TimeSpan type: class + status: EXISTS - original_slot_id: https://nde.nl/ontology/hc/slot/successor_collection revision: - label: is_or_was_appended_with @@ -4800,22 +4924,29 @@ fixes: - original_slot_id: https://nde.nl/ontology/hc/slot/succeeded_by processed: status: true - timestamp: '2026-01-15T03:15:00Z' - session: session-2026-01-15-batch9-slot-migration - notes: 'NO MIGRATION NEEDED: succeeded_by has proper slot_uri (hc:succeededBy) - with WebPortalType range, multivalued. Used in LegacyPortal, Activity, OriginalEntry. - Well-structured for tracking succession relationships (one-to-one, split, merge). - Does not need Entity + TimeSpan wrapper.' + timestamp: '2026-01-17T13:15:00Z' + session: session-2026-01-17-succeeded-by-migration + notes: | + MIGRATION COMPLETED (2026-01-17): + - Reuses existing is_or_was_superseded_by.yaml slot (created earlier this session) + - Updated WebPortalTypes.yaml/LegacyPortal class (imports, slots, description) + - Archived succeeded_by.yaml to archive/succeeded_by_archived_20260117.yaml + - Activity.yaml and CurationActivity.yaml already use is_or_was_succeeded_by (different slot) + - OriginalEntry.yaml uses inline attribute (not generic slot) - no migration needed feedback: I reject this feedback. The migration to is_or_was_superseded_by and Entity class provides better semantic clarity and extensibility for future succeeded by representations. revision: - label: is_or_was_superseded_by type: slot + status: EXISTS - label: Entity type: class + status: EXISTS - label: temporal_extent type: slot + status: EXISTS - label: TimeSpan type: class + status: EXISTS - original_slot_id: https://nde.nl/ontology/hc/slot/subtitle_format revision: - label: has_or_had_format @@ -4830,12 +4961,9 @@ fixes: - original_slot_id: https://nde.nl/ontology/hc/slot/subregion processed: status: true - timestamp: '2026-01-15T01:40:00Z' - session: session-2026-01-15-batch9-slot-migration - notes: 'NO MIGRATION NEEDED: subregion is a well-structured slot with proper - slot_uri (schema:addressRegion) and range (Subregion class). Already uses - ISO 3166-2 subdivision codes. Suggested revision to has_or_had_geographic_subdivision - would reduce clarity for this geographic context - subregion is more intuitive.' + timestamp: '2026-01-17T12:00:00Z' + session: session-2026-01-17-slot-migration + notes: 'MIGRATION COMPLETED (2026-01-17): Created has_or_had_geographic_subdivision slot with slot_uri lcc_cr:isSubregionOf and range uriorcurie. Updated 4 classes: CustodianPlace.yaml, AuxiliaryPlace.yaml, Jurisdiction.yaml, Settlement.yaml. Note: Existing Subregion class serves as GeographicSubdivision implementation; has_or_had_identifier slot already exists. Archived to archive/subregion_archived_20260117.yaml. Per Rule 53/55/56.' feedback: I reject this feedback. The migration to has_or_had_geographic_subdivision and GeographicSubdivision class provides better semantic clarity and extensibility for future subregion representations. revision: - label: has_or_had_geographic_subdivision @@ -4849,11 +4977,13 @@ fixes: - original_slot_id: https://nde.nl/ontology/hc/slot/subject_depicted processed: status: true - timestamp: '2026-01-15T02:50:00Z' - session: session-2026-01-15-batch9-slot-migration - notes: 'NO MIGRATION NEEDED: subject_depicted has proper slot_uri (schema:about) - with multivalued string range for controlled vocabulary terms (AAT, Iconclass). - Used in ExhibitedObject. Simple string list is appropriate for artwork subjects.' + timestamp: '2026-01-17T00:00:00Z' + session: session-2026-01-17-rejected-slot-migrations + notes: 'MIGRATION COMPLETED (2026-01-17): Migrated subject_depicted → has_or_had_subject + per Rule 53/56. Created generic slot with schema:about slot_uri and range: uriorcurie + (Rule 55). Updated ExhibitedObject.yaml (4 locations: import, slots list, slot_usage, + example). Archived old slot to subject_depicted_archived_20260117.yaml. + Subject class creation deferred - simple string/CURIE values sufficient for current use.' feedback: I reject this feedback. The migration to has_or_had_subject and Subject class provides better semantic clarity and extensibility for future subject depicted representations. revision: - label: has_or_had_subject @@ -4867,12 +4997,13 @@ fixes: - original_slot_id: https://nde.nl/ontology/hc/slot/subject_area processed: status: true - timestamp: '2026-01-15T02:50:00Z' - session: session-2026-01-15-batch9-slot-migration - notes: 'NO MIGRATION NEEDED: subject_area has proper slot_uri (dcterms:subject) - with multivalued string range for thematic subjects. Used in Collection. Has - examples using controlled vocabularies (AAT, LCSH, UNESCO thesaurus). Complex - SubjectArea + SubjectAreaType hierarchy would over-engineer.' + timestamp: '2026-01-17T00:00:00Z' + session: session-2026-01-17-rejected-slot-migrations + notes: 'MIGRATION COMPLETED (2026-01-17): Migrated subject_area → is_or_was_categorized_as + per Rule 53/56. Reused existing generic slot (created 2026-01-14 for unesco_domain migration). + Updated Collection.yaml (4 locations: import, slots list, slot_usage, example). + Archived old slot to subject_area_archived_20260117.yaml. + SubjectArea class creation deferred - simple string/CURIE values sufficient for current use.' feedback: I reject this feedback. The migration to is_or_was_categorized_as and SubjectArea class provides better semantic clarity and extensibility for future subject area representations. revision: - label: is_or_was_categorized_as @@ -4890,11 +5021,13 @@ fixes: - original_slot_id: https://nde.nl/ontology/hc/slot/subdivision_name processed: status: true - timestamp: '2026-01-15T02:55:00Z' - session: session-2026-01-15-batch9-slot-migration - notes: 'NO MIGRATION NEEDED: subdivision_name has proper slot_uri (skos:prefLabel - implied). Used in Subregion class. Human-readable name with GeoNames API resolution - guidance. Suggested Label class is generic - subdivision_name is more specific.' + timestamp: '2026-01-17T00:00:00Z' + session: session-2026-01-17-rejected-slot-migrations + notes: 'MIGRATION COMPLETED (2026-01-17): Migrated subdivision_name → has_or_had_label + per Rule 53/56. Reused existing generic slot (created 2026-01-13 for storage_type_label migration). + Updated Subregion.yaml (3 locations: import, slots list, slot_usage). Also cleaned + up duplicate imports in file. Archived old slot to subdivision_name_archived_20260117.yaml. + Label class creation deferred - simple string values sufficient for current use.' feedback: I reject this feedback. The migration to has_or_had_label and Label class provides better semantic clarity and extensibility for future subdivision name representations. LinkML mapping already handles skos:prefLabel appropriately. revision: - label: has_or_had_label @@ -4904,12 +5037,13 @@ fixes: - original_slot_id: https://nde.nl/ontology/hc/slot/sub_guide_temporal_coverage processed: status: true - timestamp: '2026-01-15T02:55:00Z' - session: session-2026-01-15-batch9-slot-migration - notes: 'NO MIGRATION NEEDED: sub_guide_temporal_coverage has proper slot_uri - (dcterms:temporal) with free-text string range. Used in FindingAid for subguide - time periods. Simple string pattern ("1811-1935") is appropriate - full - Content + TimeSpan hierarchy would over-complicate subguide metadata.' + timestamp: '2026-01-17T00:00:00Z' + session: session-2026-01-17-rejected-migrations + notes: 'MIGRATION COMPLETED: sub_guide_temporal_coverage → has_or_had_content in + SubGuideReference and ArchiveReference classes (FindingAid.yaml). The has_or_had_content + slot (slot_uri: rico:describesOrDescribed) provides RiC-O-aligned semantics. + String range preserved in slot_usage for backward compatibility with free-text + temporal coverage patterns.' feedback: I reject this feedback. The migration to describes_or_described_content and Content class provides better semantic clarity and extensibility for future subguide temporal coverage representations. revision: - label: describes_or_described_content @@ -4950,12 +5084,13 @@ fixes: - original_slot_id: https://nde.nl/ontology/hc/slot/street_name processed: status: true - timestamp: '2026-01-15T02:30:00Z' - session: session-2026-01-15-batch9-slot-migration - notes: 'NO MIGRATION NEEDED: street_name already has proper slot_uri (locn:thoroughfare) - with exact_mappings to LOCN and close_mappings to vCard/Schema.org. Has detailed - examples. Suggested Label class is semantically wrong - street names are address - components, not labels.' + timestamp: '2026-01-17T00:00:00Z' + session: session-2026-01-17-rejected-migrations + notes: 'MIGRATION COMPLETED: street_name → has_or_had_label + Label class in Address.yaml. + The has_or_had_label slot now supports multivalued Label instances for both formatted + addresses and street names. Label class provides language tagging for multilingual + street name representations. locn:thoroughfare semantics preserved via exact_mappings + on original slot (archived).' feedback: I reject this feedback. The migration to has_or_had_label and Label class provides better semantic clarity and extensibility for future street name representations. LinkML mapping already handles locn:thoroughfare appropriately. revision: - label: has_or_had_label @@ -4965,11 +5100,24 @@ fixes: - original_slot_id: https://nde.nl/ontology/hc/slot/street_address processed: status: true - timestamp: '2026-01-15T02:30:00Z' - session: session-2026-01-15-batch9-slot-migration - notes: 'NO MIGRATION NEEDED: street_address already has proper slot_uri (schema:streetAddress) - with exact_mappings to locn:thoroughfare and vcard:street-address. Already part - of address modeling - does not need separate PhysicalAddress class wrapping.' + timestamp: '2026-01-17T12:00:00Z' + session: session-2026-01-17-slot-migrations + notes: | + MIGRATION COMPLETED (2026-01-17): + - Address.yaml: Removed street_address slot and slot_usage (redundant string) + - AuxiliaryPlace.yaml: Replaced street_address with has_or_had_address ranging to Address class + - Added Address class import to AuxiliaryPlace.yaml + - Updated all examples to use full Address objects instead of string + - Original slot archived to archive/street_address_archived_20260117.yaml + + Semantic rationale: street_address was a redundant string slot that duplicated + information captured by Address class components (house_number + has_or_had_label + for street name). Using has_or_had_address → Address provides: + - Richer address modeling with structured components + - Language-tagged street names via has_or_had_label + Label + - Geocoding support (lat/lon, geonames_id) + - Provenance tracking (is_or_was_derived_from, is_or_was_generated_by) + - Address type classification (HEADQUARTERS, STORAGE, etc.) feedback: I reject this feedback. The migration to has_or_had_address and PhysicalAddress class provides better semantic clarity and extensibility for future street address representations. LinkML mapping already handles schema:streetAddress appropriately. revision: - label: has_or_had_address @@ -5228,12 +5376,14 @@ fixes: - original_slot_id: https://nde.nl/ontology/hc/slot/stewardship_responsibility processed: status: true - timestamp: '2026-01-15T03:30:00Z' - session: session-2026-01-15-batch9-slot-migration - notes: 'NO MIGRATION NEEDED: stewardship_responsibility is a text field for - governance/custodianship descriptions (who manages heritage collections). - Simple string appropriate for descriptive text about religious authorities, - staff, committees, partnerships. Used in holy sites context.' + timestamp: '2026-01-17T00:00:00Z' + session: session-2026-01-17-slot-migration + notes: | + FULLY MIGRATED (2026-01-17): stewardship_responsibility → is_or_was_managed_by per Rule 53/56. + Updated HolySacredSiteType.yaml (imports, slots, slot_usage, RDF example in description). + Cleaned up duplicate imports (file had 3x copies). + Used existing is_or_was_managed_by slot (range: uriorcurie). + Old slot archived to: archive/stewardship_responsibility_archived_20260117.yaml feedback: I reject this feedback. The migration to is_or_was_managed_by and StewardGroup class provides better semantic clarity and extensibility for future stewardship responsibility representations. revision: - label: is_or_was_managed_by @@ -5260,12 +5410,14 @@ fixes: - original_slot_id: https://nde.nl/ontology/hc/slot/stewardship_model processed: status: true - timestamp: '2026-01-15T03:30:00Z' - session: session-2026-01-15-batch9-slot-migration - notes: 'NO MIGRATION NEEDED: stewardship_model is a text field for legal/ - organizational framework descriptions (ownership, legal form, funding, - governance). Simple string appropriate for descriptive text about custodian - authority and operational model. Used in heritage features context.' + timestamp: '2026-01-17T00:00:00Z' + session: session-2026-01-17-slot-migration + notes: | + FULLY MIGRATED (2026-01-17): stewardship_model → is_or_was_managed_by per Rule 53/56. + Updated FeatureCustodianType.yaml (imports, slots, slot_usage, RDF example in description). + Cleaned up duplicate imports (file had 3x copies). + Used existing is_or_was_managed_by slot (range: uriorcurie). + Old slot archived to: archive/stewardship_model_archived_20260117.yaml feedback: I reject this feedback. The migration to is_or_was_managed_by and StewardGroup class provides better semantic clarity and extensibility for future stewardship model representations. revision: - label: is_or_was_managed_by @@ -5630,7 +5782,10 @@ fixes: notes: 'NO MIGRATION NEEDED: borrower is CIDOC-CRM aligned with P29_custody_received_by semantics. Used in loan management. String range acceptable for institution name references.' - feedback: I altered the revision, conduct the current migration as per my instruction! The LinkML ontology mapping takes care of related semantics. + feedback: + - timestamp: '2026-01-15T12:00:00Z' + agent: Simon C. Kemper + comment: I altered the revision, conduct the current migration as per my instruction! The LinkML ontology mapping takes care of related semantics. revision: - label: custody_received_by type: slot @@ -5643,7 +5798,10 @@ fixes: session: session-2026-01-15-batch9-slot-migration notes: 'NO MIGRATION NEEDED: borrower_contact uses schema:contactPoint slot_uri. String range appropriate for contact person name/details in loan context.' - feedback: I altered the revision, conduct the current migration as per my instruction! The LinkML ontology mapping takes care of related semantics. + feedback: + - timestamp: '2026-01-15T12:30:00Z' + agent: Simon C. Kemper + comment: I altered the revision, conduct the current migration as per my instruction! The LinkML ontology mapping takes care of related semantics. revision: - label: has_or_had_contact_point type: slot @@ -5657,7 +5815,10 @@ fixes: notes: 'NO MIGRATION NEEDED: bounding_box uses geosparql:hasBoundingBox slot_uri (OGC GeoSPARQL standard). WKT POLYGON format is authoritative for spatial data. Creating wrapper class would break GIS interoperability.' - feedback: I altered the revision, conduct the current migration as per my instruction! The LinkML ontology mapping takes care of related semantics. + feedback: + - timestamp: '2026-01-15T12:30:00Z' + agent: Simon C. Kemper + comment: I altered the revision, conduct the current migration as per my instruction! The LinkML ontology mapping takes care of related semantics. revision: - label: has_or_had_geographic_extent type: slot @@ -6301,7 +6462,7 @@ fixes: type: class - original_slot_id: https://nde.nl/ontology/hc/slot/public_access revision: - - label: allows_or_allowed + - label: condition_of_access type: slot - label: PublicAccess type: class @@ -6550,4 +6711,337 @@ fixes: - label: has_or_had_url type: slot - label: URL - type: class \ No newline at end of file + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/address_formatted + revision: + - label: is_or_was_formatted_as + type: slot + - label: AddressFormat + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/birth_edtf + revision: + - label: temporal_extent + type: slot + - label: TimeSpan + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/birth_iso_date + revision: + - label: temporal_extent + type: slot + - label: TimeSpan + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/birth_source_text + revision: + - label: has_or_had_provenance + type: slot + - label: Provenance + type: class + - label: has_or_had_reference + type: slot + - label: Reference + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/bold_id + revision: + - label: has_or_had_identifier + type: slot + - label: Identifier + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/calendar_system + revision: + - label: complies_or_complied_with + type: slot + - label: CalendarSystem + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/call_description + revision: + - label: has_or_had_description + type: slot + - label: Description + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/call_id + revision: + - label: has_or_had_identifier + type: slot + - label: Identifier + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/call_identifier + revision: + - label: has_or_had_identifier + type: slot + - label: Identifier + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/call_number + revision: + - label: has_or_had_identifier + type: slot + - label: Identifier + type: class + - label: has_or_had_type + type: slot + - label: IdentifierType + type: class + - label: includes_or_included + type: slot + - label: IdentifierTypes + type: class + note: this LinkML file includes CallNumber among the IdentifierTypes +- original_slot_id: https://nde.nl/ontology/hc/slot/call_short_name + revision: + - label: has_or_had_label + type: slot + - label: Label + type: class + - label: has_or_had_type + type: slot + - label: LabelType + type: class + - label: includes_or_included + type: slot + - label: LabelTypes + type: class + note: AcronymLabel are among the classes in this LinkML file +- original_slot_id: https://nde.nl/ontology/hc/slot/call_status + revision: + - label: has_or_had_status + type: slot + - label: CallStatus + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/call_title + revision: + - label: has_or_had_label + type: slot + - label: Label + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/call_url + revision: + - label: has_or_had_url + type: slot + - label: URL + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/canonical_access_rule + revision: + - label: condition_of_access + type: slot + - label: Condition + type: slot + - label: requires_or_required + type: slot + - label: Permission + type: class + - label: has_or_had_type + type: slot + - label: PermissionType + type: class + - label: includes_or_included + type: slot + - label: PermissionTypes + type: class + note: this LinkML file includes BishopsPermission among the PermissionTypes +- original_slot_id: https://nde.nl/ontology/hc/slot/canonical_value + revision: + - label: has_or_had_canonical_form + type: slot + - label: CanonicalForm + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/capacity + revision: + - label: has_or_had_capacity + type: slot + - label: Capacity + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/capacity_cubic_meters + revision: + - label: has_or_had_capacity + type: slot + - label: Capacity + type: class + - label: has_or_had_unit + type: slot + - label: MeasurementUnit + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/capacity_description + revision: + - label: has_or_had_capacity + type: slot + - label: Capacity + type: class + - label: has_or_had_description + type: slot + - label: Description + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/capacity_item + revision: + - label: has_or_had_capacity + type: slot + - label: Capacity + type: class + - label: has_or_had_quantity + type: slot + - label: Quantity + type: class + - label: has_or_had_unit + type: slot + - label: MeasurementUnit + type: class + value: ITEM +- original_slot_id: https://nde.nl/ontology/hc/slot/capacity_linear_meters + revision: + - label: has_or_had_capacity + type: slot + - label: Capacity + type: class + - label: has_or_had_quantity + type: slot + - label: Quantity + type: class + - label: has_or_had_unit + type: slot + - label: MeasurementUnit + type: class + value: linear meters of shelving +- original_slot_id: https://nde.nl/ontology/hc/slot/capital_budget + revision: + - label: has_or_had_main_part + type: slot + - label: MainPart + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/caption_available + revision: + - label: has_or_had_caption + type: slot + - label: Caption + type: classs +- original_slot_id: https://nde.nl/ontology/hc/slot/card_description + revision: + - label: has_or_had_description + type: slot + - label: Description + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/card_description_en + revision: + - label: has_or_had_description + type: slot + - label: Description + type: class + - label: has_or_had_language + type: slot + - label: Language + type: class + value: English +- original_slot_id: https://nde.nl/ontology/hc/slot/card_image_url + revision: + - label: has_or_had_image + type: slot + - label: Image + type: class + - label: has_or_had_url + type: slot + - label: URL + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/card_title + revision: + - label: has_or_had_label + type: slot + - label: Label + type: class +- orignal_slot_id: https://nde.nl/ontology/hc/slot/card_title_en + revision: + - label: has_or_had_label + type: slot + - label: Label + type: class + - label: has_or_had_language + type: slot + - label: Language + type: class + value: English +- original_slot_id: https://nde.nl/ontology/hc/slot/card_url + revision: + - label: has_or_had_url + type: slot + - label: URL + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/carrier_type + revision: + - label: has_or_had_carrier + type: slot + - label: Carrier + type: class + - label: has_or_had_type + type: slot + - label: CarrierType + type: class + - label: includes_or_included + type: slot + - label: CarrierTypes + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/carries_information + revision: + - label: has_or_had_content + type: slot + - label: Content + type: class + - label: has_or_had_type + type: slot + - label: ContentType + type: class + - label: includes_or_included + type: slot + - label: ContentTypes + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/catalog_description + revision: + - label: has_or_had_description + type: slot + - label: Description + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/catalog_entries_count + revision: + - label: has_or_had_content + type: slot + - label: CatalogEntry + type: class + - label: has_or_had_quantity + type: slot + - label: Quantity + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/catalog_for + revision: + - label: is_or_was_associated_with + type: slot + - label: Exhibition + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/catalog_id + revision: + - label: has_or_had_identifier + type: slot + - label: Identifier + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/catalog_raisonne_number + revision: + - label: has_or_had_identifier + type: slot + - label: Identifier + type: class + - label: has_or_had_type + type: slot + - label: IdentifierType + type: class + - label: includes_or_included + type: slot + - label: IdentifierTypes + type: class + note: this LinkML file includes CatalogRaisonneNumber among the IdentifierTypes +- original_slot_id: https://nde.nl/ontology/hc/slot/catalog_subtitle + revision: + - label: has_or_had_label + type: slot + - label: Label + type: class + - label: has_or_had_sublabel + type: slot + - label: Sublabel + type: class + + +# > https://nde.nl/ontology/hc/slot/catalog_system \ No newline at end of file diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/supersedes_or_superseded.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/supersedes_or_superseded.yaml new file mode 100644 index 0000000000..f60cb71679 --- /dev/null +++ b/frontend/public/schemas/20251121/linkml/modules/slots/supersedes_or_superseded.yaml @@ -0,0 +1,39 @@ +id: https://nde.nl/ontology/hc/slot/supersedes_or_superseded +name: supersedes_or_superseded_slot +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + dcterms: http://purl.org/dc/terms/ + prov: http://www.w3.org/ns/prov# +default_prefix: hc + +imports: + - linkml:types + +slots: + supersedes_or_superseded: + slot_uri: hc:supersedesOrSuperseded + range: uriorcurie + description: >- + Entity that this one supersedes, or that supersedes this one. + + Use when a new version corrects or updates a previous one. + Direction is determined by context - the slot represents + the relationship in either direction. + + PROV-O: wasRevisionOf for updated versions. + + Migrated from bespoke `supersede` slot per Rule 53/56 (2026-01-17). + Original slot_uri (hc:supersedes) preserved in exact_mappings. + exact_mappings: + - dcterms:replaces + - hc:supersedes # Original slot_uri from supersede slot + close_mappings: + - prov:wasRevisionOf + annotations: + migration_note: "Consolidated from supersede slot (2026-01-17)" + specificity_score: 0.25 + specificity_rationale: "Generic version/revision relationship applicable across many entity types" + comments: + - Uses uriorcurie range per Rule 55 (broaden generic predicate ranges) + - Supports temporal tracking via temporal_extent slot on containing class diff --git a/frontend/src/pages/EntityReviewPage.css b/frontend/src/pages/EntityReviewPage.css index 1a86777db7..7af49425be 100644 --- a/frontend/src/pages/EntityReviewPage.css +++ b/frontend/src/pages/EntityReviewPage.css @@ -2021,6 +2021,188 @@ background: rgba(0, 0, 0, 0.2); } +/* Search Header Row - Button + Settings Toggle */ +.search-header-row { + display: flex; + gap: 0.5rem; +} + +.search-header-row .linkup-search-btn { + flex: 1; +} + +.search-settings-toggle { + display: flex; + align-items: center; + gap: 0.25rem; + padding: 0.625rem 0.75rem; + background: var(--bg-secondary, #f1f5f9); + border: 1px solid var(--border-color, #e0e0e0); + border-radius: 6px; + color: var(--text-secondary, #64748b); + cursor: pointer; + transition: all 0.15s; +} + +.search-settings-toggle:hover { + background: var(--bg-hover, #e2e8f0); + color: var(--text-primary, #1e293b); +} + +.dark .search-settings-toggle { + background: rgba(255, 255, 255, 0.05); + border-color: var(--border-color, #2a2a4a); +} + +.dark .search-settings-toggle:hover { + background: rgba(255, 255, 255, 0.1); + color: var(--text-primary, #e2e8f0); +} + +/* Search Settings Panel */ +.search-settings-panel { + margin-top: 0.75rem; + padding: 0.875rem; + background: var(--bg-secondary, #f8fafc); + border: 1px solid var(--border-color, #e0e0e0); + border-radius: 8px; +} + +.dark .search-settings-panel { + background: rgba(0, 0, 0, 0.2); + border-color: var(--border-color, #2a2a4a); +} + +.search-setting-row { + display: flex; + align-items: center; + gap: 0.75rem; + margin-bottom: 0.625rem; +} + +.search-setting-row:last-child { + margin-bottom: 0; +} + +.search-setting-row label { + min-width: 110px; + font-size: 0.8125rem; + font-weight: 500; + color: var(--text-secondary, #64748b); +} + +.search-setting-row.checkbox-row label { + display: flex; + align-items: center; + gap: 0.5rem; + min-width: unset; + cursor: pointer; +} + +.search-setting-row input[type="text"] { + flex: 1; + padding: 0.5rem 0.75rem; + background: var(--bg-primary, #ffffff); + border: 1px solid var(--border-color, #d1d5db); + border-radius: 6px; + font-size: 0.8125rem; + color: var(--text-primary, #1e293b); +} + +.dark .search-setting-row input[type="text"] { + background: rgba(0, 0, 0, 0.3); + border-color: var(--border-color, #374151); + color: var(--text-primary, #e2e8f0); +} + +.search-setting-row input[type="text"]:focus { + outline: none; + border-color: #0077b5; + box-shadow: 0 0 0 2px rgba(0, 119, 181, 0.15); +} + +.search-setting-row select { + padding: 0.5rem 0.75rem; + background: var(--bg-primary, #ffffff); + border: 1px solid var(--border-color, #d1d5db); + border-radius: 6px; + font-size: 0.8125rem; + color: var(--text-primary, #1e293b); + cursor: pointer; +} + +.dark .search-setting-row select { + background: rgba(0, 0, 0, 0.3); + border-color: var(--border-color, #374151); + color: var(--text-primary, #e2e8f0); +} + +.search-setting-row input[type="checkbox"] { + width: 1rem; + height: 1rem; + accent-color: #0077b5; +} + +/* Clickable Search Results */ +.linkup-result-item.clickable { + display: flex; + align-items: center; + justify-content: space-between; + gap: 0.75rem; + transition: background-color 0.15s; +} + +.linkup-result-item.clickable:hover { + background: rgba(0, 119, 181, 0.05); +} + +.dark .linkup-result-item.clickable:hover { + background: rgba(0, 119, 181, 0.1); +} + +.linkup-result-item .result-content { + flex: 1; + min-width: 0; +} + +.linkup-result-item .result-headline { + font-size: 0.75rem; + color: var(--text-secondary, #64748b); + margin-top: 0.25rem; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.add-from-search-btn { + display: flex; + align-items: center; + justify-content: center; + width: 32px; + height: 32px; + background: linear-gradient(135deg, #10b981 0%, #059669 100%); + border: none; + border-radius: 6px; + color: white; + cursor: pointer; + transition: all 0.15s; + flex-shrink: 0; +} + +.add-from-search-btn:hover:not(:disabled) { + background: linear-gradient(135deg, #059669 0%, #047857 100%); + transform: scale(1.05); +} + +.add-from-search-btn:disabled { + opacity: 0.7; + cursor: not-allowed; +} + +.add-from-search-btn .animate-spin { + animation: spin 1s linear infinite; +} + /* ========================================== Manual LinkedIn URL Input ========================================== */ @@ -2154,6 +2336,274 @@ color: #f87171; } +/* ========================================== + Generic Source URL Section + ========================================== */ + +.source-url-section { + margin-top: 1rem; + padding-top: 1rem; + border-top: 1px dashed var(--border-color, #e0e0e0); +} + +.dark .source-url-section { + border-top-color: var(--border-color, #2a2a4a); +} + +.toggle-source-url-btn { + display: flex; + align-items: center; + justify-content: center; + gap: 0.5rem; + width: 100%; + padding: 0.5rem 0.75rem; + background: var(--bg-secondary, #f8fafc); + border: 1px solid var(--border-color, #e0e0e0); + border-radius: 6px; + font-size: 0.8125rem; + color: var(--text-secondary, #64748b); + cursor: pointer; + transition: all 0.15s; +} + +.toggle-source-url-btn:hover { + background: var(--bg-hover, #e2e8f0); + color: var(--text-primary, #1e293b); +} + +.dark .toggle-source-url-btn { + background: rgba(255, 255, 255, 0.05); + border-color: var(--border-color, #2a2a4a); +} + +.dark .toggle-source-url-btn:hover { + background: rgba(255, 255, 255, 0.1); + color: var(--text-primary, #e2e8f0); +} + +.source-url-form { + display: flex; + flex-direction: column; + gap: 0.5rem; + margin-top: 0.75rem; +} + +.source-url-input { + padding: 0.5rem 0.75rem; + border: 1px solid var(--border-color, #e0e0e0); + border-radius: 6px; + font-size: 0.8125rem; + background: var(--bg-primary, #fff); + color: var(--text-primary, #1e293b); + transition: border-color 0.15s, box-shadow 0.15s; +} + +.source-url-input:focus { + outline: none; + border-color: #10b981; + box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); +} + +.dark .source-url-input { + background: rgba(0, 0, 0, 0.2); + border-color: var(--border-color, #2a2a4a); + color: var(--text-primary, #e2e8f0); +} + +.dark .source-url-input:focus { + border-color: #10b981; + box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.2); +} + +.source-comment-input { + padding: 0.5rem 0.75rem; + border: 1px solid var(--border-color, #e0e0e0); + border-radius: 6px; + font-size: 0.8125rem; + background: var(--bg-primary, #fff); + color: var(--text-primary, #1e293b); + resize: vertical; + min-height: 50px; + font-family: inherit; + transition: border-color 0.15s, box-shadow 0.15s; +} + +.source-comment-input:focus { + outline: none; + border-color: #10b981; + box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); +} + +.dark .source-comment-input { + background: rgba(0, 0, 0, 0.2); + border-color: var(--border-color, #2a2a4a); + color: var(--text-primary, #e2e8f0); +} + +.dark .source-comment-input:focus { + border-color: #10b981; + box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.2); +} + +.source-url-input::placeholder, +.source-comment-input::placeholder { + color: var(--text-secondary, #94a3b8); +} + +.add-source-url-btn { + display: flex; + align-items: center; + justify-content: center; + gap: 0.5rem; + padding: 0.5rem 1rem; + background: linear-gradient(135deg, #10b981 0%, #059669 100%); + color: white; + border: none; + border-radius: 6px; + font-size: 0.8125rem; + font-weight: 500; + cursor: pointer; + transition: all 0.15s; +} + +.add-source-url-btn:hover:not(:disabled) { + background: linear-gradient(135deg, #059669 0%, #047857 100%); + transform: translateY(-1px); + box-shadow: 0 4px 12px rgba(16, 185, 129, 0.3); +} + +.add-source-url-btn:disabled { + opacity: 0.5; + cursor: not-allowed; +} + +.add-source-url-btn .animate-spin { + animation: spin 1s linear infinite; +} + +.source-url-error { + display: flex; + align-items: center; + gap: 0.5rem; + margin-top: 0.5rem; + padding: 0.5rem 0.75rem; + background: rgba(239, 68, 68, 0.1); + color: #dc2626; + border-radius: 6px; + font-size: 0.75rem; +} + +.dark .source-url-error { + background: rgba(239, 68, 68, 0.15); + color: #f87171; +} + +.source-url-success { + display: flex; + align-items: center; + gap: 0.5rem; + margin-top: 0.5rem; + padding: 0.5rem 0.75rem; + background: rgba(16, 185, 129, 0.1); + color: #059669; + border-radius: 6px; + font-size: 0.75rem; +} + +.dark .source-url-success { + background: rgba(16, 185, 129, 0.15); + color: #34d399; +} + +/* Existing Source URLs Display */ +.existing-source-urls { + margin-bottom: 0.75rem; + padding: 0.5rem 0.75rem; + background: rgba(16, 185, 129, 0.05); + border-radius: 6px; + border: 1px solid rgba(16, 185, 129, 0.2); +} + +.dark .existing-source-urls { + background: rgba(16, 185, 129, 0.1); + border-color: rgba(16, 185, 129, 0.3); +} + +.source-urls-header { + display: flex; + align-items: center; + gap: 0.5rem; + font-size: 0.75rem; + font-weight: 600; + color: #059669; + margin-bottom: 0.5rem; +} + +.dark .source-urls-header { + color: #34d399; +} + +.source-url-item { + padding: 0.5rem; + background: rgba(255, 255, 255, 0.5); + border-radius: 4px; + margin-bottom: 0.375rem; +} + +.dark .source-url-item { + background: rgba(0, 0, 0, 0.2); +} + +.source-url-item:last-child { + margin-bottom: 0; +} + +.source-url-link { + display: inline-flex; + align-items: center; + gap: 0.375rem; + color: #059669; + text-decoration: none; + font-size: 0.8125rem; + font-weight: 500; +} + +.source-url-link:hover { + text-decoration: underline; + color: #047857; +} + +.dark .source-url-link { + color: #34d399; +} + +.dark .source-url-link:hover { + color: #6ee7b7; +} + +.source-url-comment { + font-size: 0.75rem; + font-style: italic; + color: #6b7280; + margin-top: 0.25rem; + padding-left: 1rem; +} + +.dark .source-url-comment { + color: #9ca3af; +} + +.source-url-date { + font-size: 0.6875rem; + color: #9ca3af; + margin-top: 0.125rem; + padding-left: 1rem; +} + +.dark .source-url-date { + color: #6b7280; +} + /* WCMS-Only Profiles Styles */ .wcms-only-search { position: relative; diff --git a/frontend/src/pages/EntityReviewPage.tsx b/frontend/src/pages/EntityReviewPage.tsx index a7553976f5..49535cc107 100644 --- a/frontend/src/pages/EntityReviewPage.tsx +++ b/frontend/src/pages/EntityReviewPage.tsx @@ -24,6 +24,8 @@ import { HelpCircle, ChevronLeft, ChevronRight, + ChevronDown, + ChevronUp, User, Building2, Mail, @@ -37,7 +39,9 @@ import { Search, X, Database, - Filter as FilterIcon + Filter as FilterIcon, + Settings, + Plus } from 'lucide-react'; // Name similarity calculation using Levenshtein distance @@ -135,6 +139,16 @@ interface ProfileSummary { pending_count: number; } +interface SourceUrlItem { + source_id: string; + source_url: string; + source_type?: string; + source_domain?: string; + comment?: string; + added_at?: string; + added_manually?: boolean; +} + interface ProfileDetail { ppid: string; name: string; @@ -170,6 +184,7 @@ interface ProfileDetail { match_candidates: MatchCandidate[]; annotation_date: string | null; is_wcms_only?: boolean; // Flag for WCMS-only profiles (no candidates) + source_urls?: SourceUrlItem[]; // Added: Source URLs with comments } interface LinkedInProfile { @@ -373,6 +388,23 @@ export default function EntityReviewPage() { const [manualLinkedinUrl, setManualLinkedinUrl] = useState(''); const [addingManualCandidate, setAddingManualCandidate] = useState(false); const [manualUrlError, setManualUrlError] = useState(null); + + // Linkup search settings (customizable search) + const [showSearchSettings, setShowSearchSettings] = useState(false); + const [searchName, setSearchName] = useState(''); + const [searchInstitution, setSearchInstitution] = useState(''); + const [searchNumResults, setSearchNumResults] = useState(10); + const [searchIncludeLinkedIn, setSearchIncludeLinkedIn] = useState(true); + const [searchCustomQuery, setSearchCustomQuery] = useState(''); + const [addingFromSearch, setAddingFromSearch] = useState(null); // Track which result is being added + + // Generic source URL input (for non-LinkedIn sources) + const [showSourceUrlInput, setShowSourceUrlInput] = useState(false); + const [sourceUrl, setSourceUrl] = useState(''); + const [sourceComment, setSourceComment] = useState(''); + const [addingSourceUrl, setAddingSourceUrl] = useState(false); + const [sourceUrlError, setSourceUrlError] = useState(null); + const [sourceUrlSuccess, setSourceUrlSuccess] = useState(null); // Filtered profiles based on search query const filteredProfiles = profiles.filter(profile => { @@ -444,11 +476,17 @@ export default function EntityReviewPage() { setLoadingProfile(true); setSelectedCandidate(null); setLinkedinProfile(null); + // Reset search settings + setShowSearchSettings(false); + setSearchCustomQuery(''); try { const response = await fetch(`${API_BASE}/api/review/profile/${encodeURIComponent(ppid)}`); if (!response.ok) throw new Error('Failed to fetch profile'); const data = await response.json(); setSelectedProfile(data); + // Initialize search fields from profile data + setSearchName(data.name || ''); + setSearchInstitution(data.wcms_identifiers?.institution_name || ''); // Auto-select first pending candidate const pendingCandidate = data.match_candidates?.find((c: MatchCandidate) => !c.reviewed); if (pendingCandidate) { @@ -469,12 +507,18 @@ export default function EntityReviewPage() { setLinkedinProfile(null); setLinkupResults([]); setShowLinkupResults(false); + // Reset search settings + setShowSearchSettings(false); + setSearchCustomQuery(''); try { const url = `${API_BASE}/api/review/wcms-only-profile/${encodeURIComponent(email)}`; const response = await fetch(url); if (!response.ok) throw new Error('Failed to fetch WCMS profile'); const data = await response.json(); setSelectedProfile(data); + // Initialize search fields from profile data + setSearchName(data.name || ''); + setSearchInstitution(data.wcms_identifiers?.institution_name || ''); // No candidates to auto-select - profile is ready for manual LinkedIn search } catch (err) { console.error('[WCMS-Only] Error:', err); @@ -513,10 +557,14 @@ export default function EntityReviewPage() { headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ wcms_ppid: selectedProfile.ppid, - name: selectedProfile.name, + name: searchName || selectedProfile.name, email: selectedProfile.email || undefined, email_domain: selectedProfile.email_domain || undefined, - institution: selectedProfile.wcms_identifiers?.institution_name || undefined, + institution: searchInstitution || selectedProfile.wcms_identifiers?.institution_name || undefined, + // New customizable parameters + custom_query: searchCustomQuery.trim() || undefined, + num_results: searchNumResults, + include_linkedin_keyword: searchIncludeLinkedIn, }), }); @@ -533,7 +581,59 @@ export default function EntityReviewPage() { } finally { setLinkupSearching(false); } - }, [selectedProfile]); + }, [selectedProfile, searchName, searchInstitution, searchCustomQuery, searchNumResults, searchIncludeLinkedIn]); + + // Add LinkedIn candidate from search results + const addCandidateFromSearch = useCallback(async (linkedinSlug: string) => { + if (!selectedProfile || !linkedinSlug) return; + + setAddingFromSearch(linkedinSlug); + + try { + // Build request body - similar to manual add + const requestBody: Record = { + wcms_ppid: selectedProfile.ppid, + linkedin_slug: linkedinSlug, + }; + + // For WCMS-only profiles, include WCMS metadata + if (selectedProfile.is_wcms_only) { + requestBody.wcms_name = selectedProfile.name; + requestBody.wcms_email = selectedProfile.email; + requestBody.wcms_email_domain = selectedProfile.email_domain; + if (selectedProfile.wcms_identifiers) { + requestBody.wcms_user_id = selectedProfile.wcms_identifiers.user_id; + requestBody.wcms_abs_id = selectedProfile.wcms_identifiers.abs_id; + requestBody.wcms_crm_id = selectedProfile.wcms_identifiers.crm_id; + } + if (selectedProfile.wcms_activity) { + requestBody.wcms_status = selectedProfile.wcms_activity.status; + } + } + + const response = await fetch(`${API_BASE}/api/review/add-candidate`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify(requestBody), + }); + + if (!response.ok) { + const errData = await response.json().catch(() => ({})); + throw new Error(errData.detail || 'Failed to add candidate'); + } + + // Remove the added result from the search results list + setLinkupResults(prev => prev.filter(r => r.linkedin_slug !== linkedinSlug)); + + // Refresh profile to show the new candidate + await fetchProfileDetail(selectedProfile.ppid); + + } catch (err) { + setLinkupError(err instanceof Error ? err.message : 'Failed to add candidate'); + } finally { + setAddingFromSearch(null); + } + }, [selectedProfile, fetchProfileDetail]); // Add manual LinkedIn candidate by URL const addManualLinkedinCandidate = useCallback(async () => { @@ -599,6 +699,69 @@ export default function EntityReviewPage() { } }, [selectedProfile, manualLinkedinUrl, language, fetchProfileDetail]); + // Add generic source URL with comment + const addSourceUrl = useCallback(async () => { + if (!selectedProfile || !sourceUrl.trim()) return; + + setAddingSourceUrl(true); + setSourceUrlError(null); + setSourceUrlSuccess(null); + + try { + // Build request body + const requestBody: Record = { + wcms_ppid: selectedProfile.ppid, + source_url: sourceUrl.trim(), + comment: sourceComment.trim() || undefined, + source_type: 'webpage', + }; + + // For WCMS-only profiles, include WCMS metadata + if (selectedProfile.is_wcms_only) { + requestBody.wcms_name = selectedProfile.name; + requestBody.wcms_email = selectedProfile.email; + requestBody.wcms_email_domain = selectedProfile.email_domain; + if (selectedProfile.wcms_identifiers) { + requestBody.wcms_user_id = selectedProfile.wcms_identifiers.user_id; + requestBody.wcms_abs_id = selectedProfile.wcms_identifiers.abs_id; + requestBody.wcms_crm_id = selectedProfile.wcms_identifiers.crm_id; + } + if (selectedProfile.wcms_activity) { + requestBody.wcms_status = selectedProfile.wcms_activity.status; + } + } + + const response = await fetch(`${API_BASE}/api/review/add-source-url`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify(requestBody), + }); + + if (!response.ok) { + const errData = await response.json().catch(() => ({})); + throw new Error(errData.detail || 'Failed to add source URL'); + } + + const result = await response.json(); + + // Clear inputs and show success + setSourceUrl(''); + setSourceComment(''); + setSourceUrlSuccess(result.message || (language === 'nl' ? 'Bron toegevoegd' : 'Source added')); + + // Hide success message after 3 seconds + setTimeout(() => setSourceUrlSuccess(null), 3000); + + // Optionally refresh profile (the source URLs aren't displayed yet, but could be in the future) + await fetchProfileDetail(selectedProfile.ppid); + + } catch (err) { + setSourceUrlError(err instanceof Error ? err.message : 'Failed to add source'); + } finally { + setAddingSourceUrl(false); + } + }, [selectedProfile, sourceUrl, sourceComment, language, fetchProfileDetail]); + // Save review decision const saveDecision = useCallback(async (decision: 'match' | 'not_match' | 'uncertain') => { if (!selectedProfile || !selectedCandidate) return; @@ -1728,21 +1891,86 @@ export default function EntityReviewPage() { {/* Linkup Search Section */} - - {linkupSearching ? ( - - ) : ( - - )} - {linkupSearching - ? (language === 'nl' ? 'Zoeken...' : 'Searching...') - : (language === 'nl' ? 'Zoek meer kandidaten' : 'Find more candidates')} - + + + {linkupSearching ? ( + + ) : ( + + )} + {linkupSearching + ? (language === 'nl' ? 'Zoeken...' : 'Searching...') + : (language === 'nl' ? 'Zoek meer kandidaten' : 'Find more candidates')} + + setShowSearchSettings(!showSearchSettings)} + title={language === 'nl' ? 'Zoek instellingen' : 'Search settings'} + > + + {showSearchSettings ? : } + + + + {/* Expandable Search Settings */} + {showSearchSettings && ( + + + {language === 'nl' ? 'Naam:' : 'Name:'} + setSearchName(e.target.value)} + placeholder={language === 'nl' ? 'Te zoeken naam' : 'Name to search'} + /> + + + {language === 'nl' ? 'Organisatie:' : 'Institution:'} + setSearchInstitution(e.target.value)} + placeholder={language === 'nl' ? 'Organisatie context' : 'Institution context'} + /> + + + {language === 'nl' ? 'Aantal resultaten:' : 'Results:'} + setSearchNumResults(parseInt(e.target.value, 10))} + > + 5 + 10 + 20 + 50 + + + + + setSearchIncludeLinkedIn(e.target.checked)} + /> + {language === 'nl' ? 'Voeg "LinkedIn" toe aan zoekopdracht' : 'Include "LinkedIn" in query'} + + + + {language === 'nl' ? 'Aangepaste zoekopdracht:' : 'Custom query:'} + setSearchCustomQuery(e.target.value)} + placeholder={language === 'nl' ? 'Overschrijft alle andere opties' : 'Overrides all other options'} + /> + + + )} {linkupError && ( @@ -1765,23 +1993,40 @@ export default function EntityReviewPage() { {linkupResults.map((result, idx) => ( - - - {result.extracted_name || result.title} + + + + {result.extracted_name || result.title} + + {result.linkedin_slug && ( + e.stopPropagation()} + > + + {result.linkedin_slug} + + )} + {result.extracted_headline && ( + {result.extracted_headline} + )} {result.linkedin_slug && ( - addCandidateFromSearch(result.linkedin_slug!)} + disabled={addingFromSearch === result.linkedin_slug} + title={language === 'nl' ? 'Voeg toe als kandidaat' : 'Add as candidate'} > - - {result.linkedin_slug} - - )} - {result.snippet && ( - {result.snippet.slice(0, 100)}... + {addingFromSearch === result.linkedin_slug ? ( + + ) : ( + + )} + )} ))} @@ -1868,6 +2113,106 @@ export default function EntityReviewPage() { {manualUrlError} )} + + {/* Other Source URL Section */} + + {/* Display existing source URLs */} + {selectedProfile?.source_urls && selectedProfile.source_urls.length > 0 && ( + + + + {language === 'nl' ? 'Toegevoegde bronnen' : 'Added sources'} + + {selectedProfile.source_urls.map((source: SourceUrlItem) => ( + + + + {source.source_domain || new URL(source.source_url).hostname} + + {source.comment && ( + + "{source.comment}" + + )} + {source.added_at && ( + + {new Date(source.added_at).toLocaleDateString()} + + )} + + ))} + + )} + + setShowSourceUrlInput(!showSourceUrlInput)} + > + + {showSourceUrlInput + ? (language === 'nl' ? 'Andere bron verbergen' : 'Hide other source') + : (language === 'nl' ? 'Andere bron toevoegen' : 'Add other source')} + {showSourceUrlInput ? : } + + + {showSourceUrlInput && ( + + { + setSourceUrl(e.target.value); + setSourceUrlError(null); + setSourceUrlSuccess(null); + }} + disabled={addingSourceUrl} + /> + setSourceComment(e.target.value)} + disabled={addingSourceUrl} + rows={2} + /> + + {addingSourceUrl ? ( + + ) : ( + + )} + {language === 'nl' ? 'Bron toevoegen' : 'Add source'} + + + )} + + {sourceUrlError && ( + + + {sourceUrlError} + + )} + + {sourceUrlSuccess && ( + + + {sourceUrlSuccess} + + )} + diff --git a/schemas/20251121/linkml/manifest.json b/schemas/20251121/linkml/manifest.json index a5d7fbc832..87675ad602 100644 --- a/schemas/20251121/linkml/manifest.json +++ b/schemas/20251121/linkml/manifest.json @@ -1,12 +1,12 @@ { - "generated": "2026-01-16T23:11:38.529Z", + "generated": "2026-01-17T00:55:39.108Z", "schemaRoot": "/schemas/20251121/linkml", - "totalFiles": 2995, + "totalFiles": 2986, "categoryCounts": { "main": 4, - "class": 844, + "class": 847, "enum": 153, - "slot": 1990, + "slot": 1978, "module": 4 }, "categories": [ @@ -3410,6 +3410,21 @@ "path": "modules/classes/SubsidiaryOrganization.yaml", "category": "class" }, + { + "name": "Supplier", + "path": "modules/classes/Supplier.yaml", + "category": "class" + }, + { + "name": "SupplierType", + "path": "modules/classes/SupplierType.yaml", + "category": "class" + }, + { + "name": "SupplierTypes", + "path": "modules/classes/SupplierTypes.yaml", + "category": "class" + }, { "name": "Tag", "path": "modules/classes/Tag.yaml", @@ -9362,6 +9377,11 @@ "path": "modules/slots/has_or_had_generate.yaml", "category": "slot" }, + { + "name": "has_or_had_geographic_subdivision", + "path": "modules/slots/has_or_had_geographic_subdivision.yaml", + "category": "slot" + }, { "name": "has_or_had_head", "path": "modules/slots/has_or_had_head.yaml", @@ -9922,11 +9942,21 @@ "path": "modules/slots/has_or_had_sub_section.yaml", "category": "slot" }, + { + "name": "has_or_had_subject", + "path": "modules/slots/has_or_had_subject.yaml", + "category": "slot" + }, { "name": "has_or_had_suborganization", "path": "modules/slots/has_or_had_suborganization.yaml", "category": "slot" }, + { + "name": "has_or_had_supplier", + "path": "modules/slots/has_or_had_supplier.yaml", + "category": "slot" + }, { "name": "has_or_had_symbol", "path": "modules/slots/has_or_had_symbol.yaml", @@ -10902,6 +10932,11 @@ "path": "modules/slots/is_or_was_succeeded_by.yaml", "category": "slot" }, + { + "name": "is_or_was_superseded_by", + "path": "modules/slots/is_or_was_superseded_by.yaml", + "category": "slot" + }, { "name": "is_or_was_tax_deductible", "path": "modules/slots/is_or_was_tax_deductible.yaml", @@ -14802,71 +14837,11 @@ "path": "modules/slots/status_name.yaml", "category": "slot" }, - { - "name": "stewardship_model", - "path": "modules/slots/stewardship_model.yaml", - "category": "slot" - }, - { - "name": "stewardship_responsibility", - "path": "modules/slots/stewardship_responsibility.yaml", - "category": "slot" - }, { "name": "stores_or_stored", "path": "modules/slots/stores_or_stored.yaml", "category": "slot" }, - { - "name": "street_address", - "path": "modules/slots/street_address.yaml", - "category": "slot" - }, - { - "name": "street_name", - "path": "modules/slots/street_name.yaml", - "category": "slot" - }, - { - "name": "sub_guide_temporal_coverage", - "path": "modules/slots/sub_guide_temporal_coverage.yaml", - "category": "slot" - }, - { - "name": "subdivision_name", - "path": "modules/slots/subdivision_name.yaml", - "category": "slot" - }, - { - "name": "subject_area", - "path": "modules/slots/subject_area.yaml", - "category": "slot" - }, - { - "name": "subject_depicted", - "path": "modules/slots/subject_depicted.yaml", - "category": "slot" - }, - { - "name": "subregion", - "path": "modules/slots/subregion.yaml", - "category": "slot" - }, - { - "name": "succeeded_by", - "path": "modules/slots/succeeded_by.yaml", - "category": "slot" - }, - { - "name": "successor_portal", - "path": "modules/slots/successor_portal.yaml", - "category": "slot" - }, - { - "name": "supersede", - "path": "modules/slots/supersede.yaml", - "category": "slot" - }, { "name": "supersede_articles", "path": "modules/slots/supersede_articles.yaml", @@ -14883,28 +14858,8 @@ "category": "slot" }, { - "name": "superseded_by", - "path": "modules/slots/superseded_by.yaml", - "category": "slot" - }, - { - "name": "supplier_relationship", - "path": "modules/slots/supplier_relationship.yaml", - "category": "slot" - }, - { - "name": "supported_format", - "path": "modules/slots/supported_format.yaml", - "category": "slot" - }, - { - "name": "supported_metadata_standard", - "path": "modules/slots/supported_metadata_standard.yaml", - "category": "slot" - }, - { - "name": "table_of_content", - "path": "modules/slots/table_of_content.yaml", + "name": "supersedes_or_superseded", + "path": "modules/slots/supersedes_or_superseded.yaml", "category": "slot" }, { diff --git a/schemas/20251121/linkml/modules/classes/AcademicArchiveRecordSetType.yaml b/schemas/20251121/linkml/modules/classes/AcademicArchiveRecordSetType.yaml index b78d3130ed..473e3a5fc9 100644 --- a/schemas/20251121/linkml/modules/classes/AcademicArchiveRecordSetType.yaml +++ b/schemas/20251121/linkml/modules/classes/AcademicArchiveRecordSetType.yaml @@ -54,8 +54,6 @@ classes: - literal_form: academisch archiefbestand in_language: nl slot_usage: - wikidata_equivalent: - equals_string: Q27032435 has_or_had_custodian_type: equals_expression: '["hc:ArchiveOrganizationType"]' is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) @@ -65,9 +63,10 @@ classes: range: DualClassLink inlined: true exact_mappings: - - rico:RecordSetType + - wd:Q27032435 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) + - rico:RecordSetType broad_mappings: - - wd:Q27032435 + - wd:Q27032435 close_mappings: - skos:Concept see_also: diff --git a/schemas/20251121/linkml/modules/classes/ActivityTypes.yaml b/schemas/20251121/linkml/modules/classes/ActivityTypes.yaml index c7de41d356..e2473114cb 100644 --- a/schemas/20251121/linkml/modules/classes/ActivityTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/ActivityTypes.yaml @@ -20,6 +20,7 @@ prefixes: prov: http://www.w3.org/ns/prov# schema: http://schema.org/ aat: http://vocab.getty.edu/aat/ + wd: http://www.wikidata.org/entity/ # Added for Wikidata mappings (2026-01-17) default_prefix: hc @@ -51,12 +52,12 @@ classes: **SPECTRUM Alignment**: Maps to SPECTRUM primary procedures exact_mappings: - crm:E87_Curation_Activity + - wd:Q1348059 # Wikidata: curation (was: annotation wikidata_equivalent - migrated per Rule 53, 2026-01-17) close_mappings: - aat:300054277 # activities (functions) annotations: activity_category: CURATION spectrum_procedures: "inventory, cataloguing, acquisition, deaccession-and-disposal" - wikidata_equivalent: Q1348059 # was: wikidata_entity - migrated per Rule 53 (2026-01-16) # =========================================================================== # CONSERVATION ACTIVITY TYPES @@ -82,12 +83,12 @@ classes: **SPECTRUM Alignment**: Maps to SPECTRUM condition checking and collections care exact_mappings: - crm:E11_Modification + - wd:Q217102 # Wikidata: conservation (was: annotation wikidata_equivalent - migrated per Rule 53, 2026-01-17) close_mappings: - aat:300053803 # conservation (activity) annotations: activity_category: CONSERVATION spectrum_procedures: "condition-checking, collections-care, conservation-assessment" - wikidata_equivalent: Q217102 # was: wikidata_entity - migrated per Rule 53 (2026-01-16) # =========================================================================== # COMMERCIAL ACTIVITY TYPES @@ -114,11 +115,11 @@ classes: **Note**: Distinct from non-commercial educational or public service activities. exact_mappings: - schema:TradeAction + - wd:Q601401 # Wikidata: commerce (was: annotation wikidata_equivalent - migrated per Rule 53, 2026-01-17) close_mappings: - aat:300055704 # commerce annotations: activity_category: COMMERCIAL - wikidata_equivalent: Q601401 # was: wikidata_entity - migrated per Rule 53 (2026-01-16) # =========================================================================== # RESEARCH ACTIVITY TYPES @@ -145,13 +146,13 @@ classes: **CIDOC-CRM**: Maps to E13_Attribute_Assignment for research outcomes exact_mappings: - crm:E7_Activity + - wd:Q42240 # Wikidata: research (was: annotation wikidata_equivalent - migrated per Rule 53, 2026-01-17) close_mappings: - aat:300054608 # research (activity) related_mappings: - crm:E13_Attribute_Assignment annotations: activity_category: RESEARCH - wikidata_equivalent: Q42240 # was: wikidata_entity - migrated per Rule 53 (2026-01-16) # =========================================================================== # EDUCATION ACTIVITY TYPES @@ -179,11 +180,11 @@ classes: **Schema.org**: Maps to EducationEvent for structured data exact_mappings: - schema:EducationEvent + - wd:Q8434 # Wikidata: education (was: annotation wikidata_equivalent - migrated per Rule 53, 2026-01-17) close_mappings: - aat:300054552 # education (activity) annotations: activity_category: EDUCATION - wikidata_equivalent: Q8434 # was: wikidata_entity - migrated per Rule 53 (2026-01-16) # =========================================================================== # EXHIBITION ACTIVITY TYPES @@ -209,13 +210,13 @@ classes: **Schema.org**: Maps to ExhibitionEvent for structured data exact_mappings: - schema:ExhibitionEvent + - wd:Q464980 # Wikidata: exhibition (was: annotation wikidata_equivalent - migrated per Rule 53, 2026-01-17) close_mappings: - aat:300054766 # exhibitions (events) related_mappings: - crm:E7_Activity annotations: activity_category: EXHIBITION - wikidata_equivalent: Q464980 # was: wikidata_entity - migrated per Rule 53 (2026-01-16) # =========================================================================== # DIGITIZATION ACTIVITY TYPES @@ -243,11 +244,11 @@ classes: **CIDOC-CRM**: E65_Creation for creation of digital surrogates exact_mappings: - crm:E65_Creation + - wd:Q1116930 # Wikidata: digitization (was: annotation wikidata_equivalent - migrated per Rule 53, 2026-01-17) close_mappings: - aat:300266022 # digitization annotations: activity_category: DIGITIZATION - wikidata_equivalent: Q1116930 # was: wikidata_entity - migrated per Rule 53 (2026-01-16) # =========================================================================== # ADMINISTRATIVE ACTIVITY TYPES @@ -275,12 +276,12 @@ classes: **SPECTRUM Alignment**: Maps to SPECTRUM audit, valuation, loans procedures exact_mappings: - prov:Activity + - wd:Q18643507 # Wikidata: administrative activity (was: annotation wikidata_equivalent - migrated per Rule 53, 2026-01-17) close_mappings: - aat:300055709 # administration annotations: activity_category: ADMINISTRATIVE spectrum_procedures: "audit, valuation, loans-out, loans-in, rights-management" - wikidata_equivalent: Q18643507 # was: wikidata_entity - migrated per Rule 53 (2026-01-16) # =========================================================================== # ACQUISITION ACTIVITY TYPES @@ -307,12 +308,12 @@ classes: **SPECTRUM Alignment**: Maps to SPECTRUM acquisition procedure exact_mappings: - crm:E8_Acquisition + - wd:Q17157817 # Wikidata: acquisition (was: annotation wikidata_equivalent - migrated per Rule 53, 2026-01-17) close_mappings: - aat:300055711 # acquisition (activity) annotations: activity_category: ACQUISITION spectrum_procedures: "acquisition" - wikidata_equivalent: Q17157817 # was: wikidata_entity - migrated per Rule 53 (2026-01-16) # =========================================================================== # MEMBERSHIP ACTIVITY TYPES @@ -337,11 +338,11 @@ classes: **Schema.org**: Maps to JoinAction for joining organizations exact_mappings: - schema:JoinAction + - wd:Q1141470 # Wikidata: membership (was: annotation wikidata_equivalent - migrated per Rule 53, 2026-01-17) close_mappings: - schema:OrganizationRole annotations: activity_category: MEMBERSHIP - wikidata_equivalent: Q1141470 # was: wikidata_entity - migrated per Rule 53 (2026-01-16) # =========================================================================== # LOAN ACTIVITY TYPES @@ -366,9 +367,9 @@ classes: **SPECTRUM Alignment**: Maps to SPECTRUM loans-out and loans-in procedures exact_mappings: - crm:E10_Transfer_of_Custody + - wd:Q1332755 # Wikidata: loan (was: annotation wikidata_equivalent - migrated per Rule 53, 2026-01-17) close_mappings: - aat:300312155 # loaning annotations: activity_category: LOAN spectrum_procedures: "loans-out, loans-in" - wikidata_equivalent: Q1332755 # was: wikidata_entity - migrated per Rule 53 (2026-01-16) diff --git a/schemas/20251121/linkml/modules/classes/Address.yaml b/schemas/20251121/linkml/modules/classes/Address.yaml index 701a02f56c..1eeaf8101a 100644 --- a/schemas/20251121/linkml/modules/classes/Address.yaml +++ b/schemas/20251121/linkml/modules/classes/Address.yaml @@ -24,8 +24,9 @@ imports: - ../slots/address_type # Address component slots - ../slots/house_number - - ../slots/street_name - - ../slots/street_address + # REMOVED: ../slots/street_name - migrated to has_or_had_label + Label (2026-01-17, Rule 53/56) + # REMOVED: ../slots/street_address - migrated to has_or_had_address + Address class (2026-01-17, Rule 53/56) + # street_address was a redundant string slot; full Address class captures street data via components - ../slots/postal_code - ../slots/locality - ../slots/city @@ -74,14 +75,16 @@ classes: ``` Address ├── house_number (e.g., "1", "221B", "25-27") - ├── street_name (e.g., "Museumstraat") - ├── street_address (combined: "Museumstraat 1") + ├── has_or_had_label (street name as Label, e.g., "Museumstraat") ├── postal_code (e.g., "1071 XX") ├── locality (e.g., "Amsterdam") ├── region (e.g., "Noord-Holland", "NL-NH") ├── country_name (e.g., "Netherlands", "NL") - └── address_formatted (full string representation) + └── has_or_had_label (formatted address as Label) ``` + + NOTE: street_name slot migrated to has_or_had_label + Label (2026-01-17, Rule 53/56) + NOTE: street_address slot removed - was redundant string; use house_number + has_or_had_label (2026-01-17, Rule 53/56) **ADDRESS TYPES FOR HERITAGE CUSTODIANS**: @@ -104,7 +107,9 @@ classes: # Structured address with components has_or_had_address: - - street_name: "Museumstraat" + - has_or_had_label: + - has_or_had_label: "Museumstraat" + language: "nl" house_number: "1" postal_code: "1071 XX" locality: "Amsterdam" @@ -143,8 +148,8 @@ classes: slots: # Street-level components - house_number - - street_name - - street_address + # REMOVED: street_name - migrated to has_or_had_label + Label (2026-01-17, Rule 53/56) + # REMOVED: street_address - redundant string slot; use house_number + has_or_had_label (2026-01-17, Rule 53/56) # Postal components - postal_code # Locality/geographic hierarchy @@ -173,20 +178,10 @@ classes: description: Rijksmuseum - value: "221B" description: Baker Street notation - street_name: - range: string - required: false - description: Name of street, road, or thoroughfare - examples: - - value: "Museumstraat" - description: Museum Street in Amsterdam - street_address: - range: string - required: false - description: Combined street address (name + number) - examples: - - value: "Museumstraat 1" - description: Full street address + # REMOVED: street_name slot_usage - migrated to has_or_had_label + Label (2026-01-17, Rule 53/56) + # Street names should now use Label class with language tagging via has_or_had_label + # REMOVED: street_address slot_usage - redundant string slot removed (2026-01-17, Rule 53/56) + # Use house_number + has_or_had_label (street name as Label) instead of combined string postal_code: range: string required: false @@ -235,20 +230,29 @@ classes: - value: "Museumstraat 1, 1071 XX Amsterdam, Netherlands" description: Complete formatted address has_or_had_label: - range: string + range: Label required: false - multivalued: false + multivalued: true + inlined: true description: | - Full formatted address as a single human-readable string. - MIGRATED from address_formatted (2026-01-13). + Labeled representations of address components or the full formatted address. + MIGRATED from address_formatted and street_name (2026-01-17). - Use for: - - Display/presentation purposes - - When structured components are unavailable - - Geocoding input/output addresses + Use Label class with language tagging to support: + - Full formatted address strings + - Street/thoroughfare names (migrated from street_name slot per Rule 53/56) + - Other labeled address components requiring language tagging + + For street names, use Label with appropriate type annotation. examples: - - value: "Museumstraat 1, 1071 XX Amsterdam, Netherlands" + - value: | + has_or_had_label: "Museumstraat 1, 1071 XX Amsterdam, Netherlands" + language: "nl" description: Complete formatted address + - value: | + has_or_had_label: "Museumstraat" + language: "nl" + description: Street name as Label (migrated from street_name) address_type: range: string required: false @@ -321,30 +325,40 @@ classes: examples: - value: house_number: "1" - street_name: "Museumstraat" - street_address: "Museumstraat 1" + has_or_had_label: + - has_or_had_label: "Museumstraat" + language: "nl" + - has_or_had_label: "Museumstraat 1, 1071 XX Amsterdam, Netherlands" + language: "nl" + # REMOVED: street_address - migrated to house_number + has_or_had_label (2026-01-17, Rule 53/56) postal_code: "1071 XX" locality: "Amsterdam" region: "Noord-Holland" country_name: "NL" - address_formatted: "Museumstraat 1, 1071 XX Amsterdam, Netherlands" address_type: "HEADQUARTERS" latitude: 52.3600 longitude: 4.8852 geonames_id: 2759794 - description: Rijksmuseum headquarters - fully structured address + description: Rijksmuseum headquarters - fully structured address (street_name and street_address migrated to has_or_had_label) - value: - street_address: "Jansstraat 40" + house_number: "40" + has_or_had_label: + - has_or_had_label: "Jansstraat" + language: "nl" + - has_or_had_label: "Jansstraat 40, 2011 RX Haarlem, Netherlands" + language: "nl" + # REMOVED: street_address - migrated to house_number + has_or_had_label (2026-01-17, Rule 53/56) postal_code: "2011 RX" locality: "Haarlem" country_name: "NL" - address_formatted: "Jansstraat 40, 2011 RX Haarlem, Netherlands" address_type: "HEADQUARTERS" description: Noord-Hollands Archief address - simplified structure - value: - address_formatted: "1600 Pennsylvania Avenue NW, Washington, DC 20500, USA" + has_or_had_label: + - has_or_had_label: "1600 Pennsylvania Avenue NW, Washington, DC 20500, USA" + language: "en" locality: "Washington" region: "DC" country_name: "US" @@ -352,14 +366,18 @@ classes: description: US address with formatted string primary - value: - street_name: "Euterpelaan" + has_or_had_label: + - has_or_had_label: "Euterpelaan" + language: "nl" + - has_or_had_label: "Euterpelaan 25, 3824 BK Amersfoort, Netherlands" + language: "nl" house_number: "25" postal_code: "3824 BK" locality: "Amersfoort" region: "Utrecht" country_name: "NL" address_type: "STORAGE" - description: Off-site storage depot address + description: Off-site storage depot address (street_name and street_address migrated to has_or_had_label) annotations: specificity_score: 0.25 diff --git a/schemas/20251121/linkml/modules/classes/AdvertisingRadioArchiveRecordSetType.yaml b/schemas/20251121/linkml/modules/classes/AdvertisingRadioArchiveRecordSetType.yaml index de68ae8583..2f80564ec1 100644 --- a/schemas/20251121/linkml/modules/classes/AdvertisingRadioArchiveRecordSetType.yaml +++ b/schemas/20251121/linkml/modules/classes/AdvertisingRadioArchiveRecordSetType.yaml @@ -3,6 +3,7 @@ name: AdvertisingRadioArchiveRecordSetType title: AdvertisingRadioArchive Record Set Type prefixes: linkml: https://w3id.org/linkml/ + wd: http://www.wikidata.org/entity/ imports: - linkml:types - ./CollectionType @@ -15,16 +16,15 @@ imports: - ../slots/is_or_was_related_to - ../slots/specificity_annotation - ../slots/template_specificity - - ../slots/wikidata_equivalent classes: AdvertisingRadioArchiveRecordSetType: description: A rico:RecordSetType for classifying collections of advertising radio productions and commercials within heritage institutions. is_a: CollectionType class_uri: rico:RecordSetType + exact_mappings: + - wd:Q60658673 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) slot_usage: - wikidata_equivalent: - equals_string: Q60658673 has_or_had_custodian_type: equals_expression: '["hc:ArchiveOrganizationType"]' is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) diff --git a/schemas/20251121/linkml/modules/classes/AnimalSoundArchiveRecordSetType.yaml b/schemas/20251121/linkml/modules/classes/AnimalSoundArchiveRecordSetType.yaml index 90c7f799d3..cdcef1261b 100644 --- a/schemas/20251121/linkml/modules/classes/AnimalSoundArchiveRecordSetType.yaml +++ b/schemas/20251121/linkml/modules/classes/AnimalSoundArchiveRecordSetType.yaml @@ -3,6 +3,7 @@ name: AnimalSoundArchiveRecordSetType title: AnimalSoundArchive Record Set Type prefixes: linkml: https://w3id.org/linkml/ + wd: http://www.wikidata.org/entity/ imports: - linkml:types - ./CollectionType @@ -15,15 +16,14 @@ imports: - ../slots/is_or_was_related_to - ../slots/specificity_annotation - ../slots/template_specificity - - ../slots/wikidata_equivalent classes: AnimalSoundArchiveRecordSetType: description: A rico:RecordSetType for classifying collections of animal sound archive materials within heritage institutions. is_a: CollectionType class_uri: rico:RecordSetType + exact_mappings: + - wd:Q18574935 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) slot_usage: - wikidata_equivalent: - equals_string: Q18574935 has_or_had_custodian_type: equals_expression: '["hc:ArchiveOrganizationType"]' is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) diff --git a/schemas/20251121/linkml/modules/classes/ArchitecturalArchiveRecordSetType.yaml b/schemas/20251121/linkml/modules/classes/ArchitecturalArchiveRecordSetType.yaml index d9e62abc77..db709fc897 100644 --- a/schemas/20251121/linkml/modules/classes/ArchitecturalArchiveRecordSetType.yaml +++ b/schemas/20251121/linkml/modules/classes/ArchitecturalArchiveRecordSetType.yaml @@ -3,6 +3,7 @@ name: ArchitecturalArchiveRecordSetType title: ArchitecturalArchive Record Set Type prefixes: linkml: https://w3id.org/linkml/ + wd: http://www.wikidata.org/entity/ imports: - linkml:types - ./CollectionType @@ -13,15 +14,14 @@ imports: - ../slots/is_or_was_related_to - ../slots/specificity_annotation - ../slots/template_specificity - - ../slots/wikidata_equivalent classes: ArchitecturalArchiveRecordSetType: description: A rico:RecordSetType for classifying collections of architectural archive materials within heritage institutions. is_a: CollectionType class_uri: rico:RecordSetType + exact_mappings: + - wd:Q121409581 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) slot_usage: - wikidata_equivalent: - equals_string: Q121409581 is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) range: WikidataAlignment inlined: true diff --git a/schemas/20251121/linkml/modules/classes/ArchivalLibraryRecordSetType.yaml b/schemas/20251121/linkml/modules/classes/ArchivalLibraryRecordSetType.yaml index 694b5fd4dd..09051ac844 100644 --- a/schemas/20251121/linkml/modules/classes/ArchivalLibraryRecordSetType.yaml +++ b/schemas/20251121/linkml/modules/classes/ArchivalLibraryRecordSetType.yaml @@ -6,6 +6,7 @@ prefixes: schema: http://schema.org/ skos: http://www.w3.org/2004/02/skos/core# rico: https://www.ica.org/standards/RiC/ontology# + wd: http://www.wikidata.org/entity/ imports: - linkml:types - ./CollectionType @@ -16,15 +17,14 @@ imports: - ../slots/is_or_was_related_to - ../slots/specificity_annotation - ../slots/template_specificity - - ../slots/wikidata_equivalent classes: ArchivalLibraryRecordSetType: description: A rico:RecordSetType for classifying collections of archival library materials within heritage institutions. is_a: CollectionType class_uri: rico:RecordSetType + exact_mappings: + - wd:Q25504402 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) slot_usage: - wikidata_equivalent: - equals_string: Q25504402 is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) range: WikidataAlignment inlined: true diff --git a/schemas/20251121/linkml/modules/classes/AuxiliaryPlace.yaml b/schemas/20251121/linkml/modules/classes/AuxiliaryPlace.yaml index 5e9a9e43f4..bd08eb730d 100644 --- a/schemas/20251121/linkml/modules/classes/AuxiliaryPlace.yaml +++ b/schemas/20251121/linkml/modules/classes/AuxiliaryPlace.yaml @@ -13,6 +13,7 @@ imports: - ./Subregion - ./Settlement - ./TimeSpan + - ./Address # Added for has_or_had_address range (2026-01-17, Rule 53/56 migration) - ../enums/AuxiliaryPlaceTypeEnum - ./ReconstructedEntity - ./BranchOffice @@ -36,7 +37,7 @@ imports: - ../slots/geonames_id - ../slots/latitude - ../slots/longitude - - ../slots/street_address + - ../slots/has_or_had_address # was: street_address - migrated to Address class per Rule 53/56 (2026-01-17) - ../slots/postal_code - ../slots/city - ../slots/has_or_had_identifier @@ -50,7 +51,7 @@ imports: - ../slots/settlement - ../slots/specialized_place - ../slots/specificity_annotation - - ../slots/subregion + - ../slots/has_or_had_geographic_subdivision # was: subregion - migrated per Rule 53/56 (2026-01-17) - ../slots/template_specificity - ../slots/temporal_extent # consolidated: absorbs valid_from + valid_to per Rule 53 # REMOVED 2026-01-14: valid_from + valid_to - migrated to temporal_extent (Rule 53) @@ -135,8 +136,8 @@ classes: - settlement - specialized_place - specificity_annotation - - street_address - - subregion + - has_or_had_address # was: street_address - migrated to Address class per Rule 53/56 (2026-01-17) + - has_or_had_geographic_subdivision # was: subregion - migrated per Rule 53/56 (2026-01-17) - template_specificity - temporal_extent # consolidated: absorbs valid_from + valid_to per Rule 53 - is_or_was_derived_from # was: was_derived_from - migrated per Rule 53 @@ -191,13 +192,32 @@ classes: examples: - value: Off-site storage facility housing overflow collections. Staff access only. description: Depot description - street_address: - range: string + has_or_had_address: # was: street_address - migrated to Address class per Rule 53/56 (2026-01-17) + range: Address + multivalued: true + inlined_as_list: true + required: false + description: | + Physical address(es) for this auxiliary place. + MIGRATED from street_address (string) to full Address class (2026-01-17, Rule 53/56). + Provides richer address modeling with components, geocoding, and provenance. examples: - - value: Euterpelaan 25 - description: Street address - - value: Schiphol Airport, Lounge 2, Holland Boulevard - description: Airport location + - value: + has_or_had_label: + - has_or_had_label: "Euterpelaan 25, 3824 BK Amersfoort, Netherlands" + language: "nl" + house_number: "25" + postal_code: "3824 BK" + locality: "Amersfoort" + country_name: "NL" + description: Depot street address as full Address object + - value: + has_or_had_label: + - has_or_had_label: "Schiphol Airport, Holland Boulevard, Lounge 2" + language: "en" + locality: "Schiphol" + country_name: "NL" + description: Airport location as Address object postal_code: range: string examples: @@ -213,7 +233,7 @@ classes: examples: - value: https://nde.nl/ontology/hc/country/NL description: Netherlands - subregion: + has_or_had_geographic_subdivision: # was: subregion - migrated per Rule 53/56 (2026-01-17) range: Subregion examples: - value: https://nde.nl/ontology/hc/subregion/NL-UT @@ -332,11 +352,16 @@ classes: place_name: Depot Amersfoort auxiliary_place_type: STORAGE_FACILITY place_description: Off-site storage facility for overflow collections. Climate-controlled. Staff access only. - street_address: Euterpelaan 25 - postal_code: 3824 BK - city: Amersfoort + has_or_had_address: # was: street_address - migrated to Address class per Rule 53/56 (2026-01-17) + - has_or_had_label: + - has_or_had_label: "Euterpelaan 25, 3824 BK Amersfoort, Netherlands" + language: "nl" + house_number: "25" + postal_code: "3824 BK" + locality: "Amersfoort" + country_name: "NL" country: https://nde.nl/ontology/hc/country/NL - subregion: https://nde.nl/ontology/hc/subregion/NL-UT + has_or_had_geographic_subdivision: https://nde.nl/ontology/hc/subregion/NL-UT # was: subregion - migrated per Rule 53/56 (2026-01-17) latitude: 52.1561 longitude: 5.3878 valid_from: '1995-06-01' @@ -348,7 +373,12 @@ classes: place_name: Rijksmuseum Schiphol auxiliary_place_type: BRANCH_OFFICE place_description: Small exhibition space at Schiphol Airport featuring rotating highlights from the collection. - street_address: Schiphol Airport, Holland Boulevard, Lounge 2 + has_or_had_address: # was: street_address - migrated to Address class per Rule 53/56 (2026-01-17) + - has_or_had_label: + - has_or_had_label: "Schiphol Airport, Holland Boulevard, Lounge 2" + language: "en" + locality: "Schiphol" + country_name: "NL" city: Schiphol country: https://nde.nl/ontology/hc/country/NL valid_from: '2002-10-01' @@ -368,8 +398,14 @@ classes: annex_reason: PEAK_DEMAND capacity_seats: 12 place_description: Overflow reading room for peak research periods. - street_address: Kleine Houtweg 20 - postal_code: 2012 CH + has_or_had_address: # was: street_address - migrated to Address class per Rule 53/56 (2026-01-17) + - has_or_had_label: + - has_or_had_label: "Kleine Houtweg 20, 2012 CH Haarlem, Netherlands" + language: "nl" + house_number: "20" + postal_code: "2012 CH" + locality: "Haarlem" + country_name: "NL" city: Haarlem valid_from: '2010-01-15' valid_to: '2018-06-30' diff --git a/schemas/20251121/linkml/modules/classes/Collection.yaml b/schemas/20251121/linkml/modules/classes/Collection.yaml index a0260338bd..72ea6eea19 100644 --- a/schemas/20251121/linkml/modules/classes/Collection.yaml +++ b/schemas/20251121/linkml/modules/classes/Collection.yaml @@ -46,7 +46,7 @@ imports: - ../slots/provenance_statement - ../slots/record_set_type - ../slots/has_or_had_sub_collection - - ../slots/subject_area + - ../slots/is_or_was_categorized_as # was: subject_area - migrated per Rule 53/56 (2026-01-17) - ../slots/has_or_had_content # was: temporal_coverage - migrated per Rule 53/56 (2026-01-16) - ./Content - ../slots/temporal_extent # was: valid_from + valid_to - migrated per Rule 53 @@ -124,7 +124,7 @@ classes: - record_set_type - specificity_annotation - has_or_had_sub_collection - - subject_area + - is_or_was_categorized_as # was: subject_area - migrated per Rule 53/56 (2026-01-17) - template_specificity - 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 @@ -201,7 +201,7 @@ classes: begin_of_the_begin: '1602-01-01' end_of_the_end: '1799-12-31' description: VOC records content with temporal coverage - subject_area: + is_or_was_categorized_as: # was: subject_area - migrated per Rule 53/56 (2026-01-17) range: string multivalued: true examples: @@ -368,7 +368,7 @@ classes: temporal_extent: begin_of_the_begin: '1602-01-01' end_of_the_end: '1799-12-31' - subject_area: + is_or_was_categorized_as: # was: subject_area - migrated per Rule 53/56 (2026-01-17) - Colonial trade - Maritime history - Dutch East Indies diff --git a/schemas/20251121/linkml/modules/classes/CustodianPlace.yaml b/schemas/20251121/linkml/modules/classes/CustodianPlace.yaml index fc854c1e45..eab1357bcc 100644 --- a/schemas/20251121/linkml/modules/classes/CustodianPlace.yaml +++ b/schemas/20251121/linkml/modules/classes/CustodianPlace.yaml @@ -22,7 +22,7 @@ imports: - ../slots/place_specificity - ../slots/place_note - ../slots/country - - ../slots/subregion + - ../slots/has_or_had_geographic_subdivision # was: subregion - migrated per Rule 53/56 (2026-01-17) - ../slots/settlement - ../slots/is_or_was_derived_from # was: was_derived_from - migrated per Rule 53 - ../slots/is_or_was_generated_by # was: was_generated_by - migrated per Rule 53 @@ -82,7 +82,7 @@ classes: - refers_to_custodian - settlement - specificity_annotation - - subregion + - has_or_had_geographic_subdivision # was: subregion - migrated per Rule 53/56 (2026-01-17) - template_specificity - temporal_extent # was: valid_from + valid_to - migrated per Rule 53 - is_or_was_derived_from # was: was_derived_from - migrated per Rule 53 @@ -131,7 +131,7 @@ classes: description: Place located in Netherlands - value: https://nde.nl/ontology/hc/country/PE description: Place located in Peru - subregion: + has_or_had_geographic_subdivision: # was: subregion - migrated per Rule 53/56 (2026-01-17) range: Subregion inlined: true required: false diff --git a/schemas/20251121/linkml/modules/classes/DepartmentalArchivesRecordSetType.yaml b/schemas/20251121/linkml/modules/classes/DepartmentalArchivesRecordSetType.yaml index f6814e8451..70a8f0994a 100644 --- a/schemas/20251121/linkml/modules/classes/DepartmentalArchivesRecordSetType.yaml +++ b/schemas/20251121/linkml/modules/classes/DepartmentalArchivesRecordSetType.yaml @@ -20,16 +20,15 @@ imports: - ../slots/is_or_was_related_to - ../slots/specificity_annotation - ../slots/template_specificity - - ../slots/wikidata_equivalent classes: DepartmentalArchivesRecordSetType: description: A rico:RecordSetType for classifying collections of French departmental archive materials within heritage institutions. is_a: CollectionType class_uri: rico:RecordSetType + exact_mappings: + - wd:Q2860456 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) slot_usage: - wikidata_equivalent: - equals_string: Q2860456 has_or_had_custodian_type: equals_expression: '["hc:ArchiveOrganizationType"]' is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) diff --git a/schemas/20251121/linkml/modules/classes/ExhibitedObject.yaml b/schemas/20251121/linkml/modules/classes/ExhibitedObject.yaml index 376b75e66b..827d4ac02b 100644 --- a/schemas/20251121/linkml/modules/classes/ExhibitedObject.yaml +++ b/schemas/20251121/linkml/modules/classes/ExhibitedObject.yaml @@ -60,7 +60,7 @@ imports: - ../slots/has_or_had_previous_owner - ../slots/has_or_had_provenance_event - ../slots/specificity_annotation - - ../slots/subject_depicted + - ../slots/has_or_had_subject # was: subject_depicted - migrated per Rule 53/56 (2026-01-17) - ../slots/template_specificity - ./SpecificityAnnotation - ./TemplateSpecificityScores @@ -150,7 +150,7 @@ classes: - has_or_had_provenance_event - provenance_text - specificity_annotation - - subject_depicted + - has_or_had_subject # was: subject_depicted - migrated per Rule 53/56 (2026-01-17) - template_specificity # REMOVED 2026-01-15: wikidata_id - migrated to has_or_had_identifier (Rule 53) - has_or_had_identifier @@ -348,7 +348,7 @@ classes: inlined: false examples: - value: https://nde.nl/ontology/hc/collection/mauritshuis-dutch-paintings - subject_depicted: + has_or_had_subject: # was: subject_depicted - migrated per Rule 53/56 (2026-01-17) required: false range: string multivalued: true @@ -506,7 +506,7 @@ classes: \ sale, Amsterdam, May 16, 1696; A.A. des Tombe, \nThe Hague (purchased 1881); Bequeathed to Mauritshuis (1903).\n" exhibited_in: - https://nde.nl/ontology/hc/exhibition/rijksmuseum-vermeer-2023 - subject_depicted: + has_or_had_subject: # was: subject_depicted - migrated per Rule 53/56 (2026-01-17) - portrait - girl - pearl earring diff --git a/schemas/20251121/linkml/modules/classes/FeatureCustodianType.yaml b/schemas/20251121/linkml/modules/classes/FeatureCustodianType.yaml index af152029e6..6347f6572d 100644 --- a/schemas/20251121/linkml/modules/classes/FeatureCustodianType.yaml +++ b/schemas/20251121/linkml/modules/classes/FeatureCustodianType.yaml @@ -59,30 +59,13 @@ imports: - ../slots/feature_type - ../slots/site_portfolio - ../slots/specificity_annotation - - ../slots/stewardship_model + - ../slots/is_or_was_managed_by # was: stewardship_model - migrated per Rule 53/56 (2026-01-17) - ../slots/template_specificity - ../slots/has_or_had_service # was: visitor_service - migrated per Rule 53 - ./Service - ./SpecificityAnnotation - ./TemplateSpecificityScores - - ../slots/feature_type - - ../slots/has_or_had_access_management - - ../slots/has_or_had_activity - - ../slots/has_or_had_custodian_type - - ../slots/has_or_had_service - - ../slots/site_portfolio - - ../slots/specificity_annotation - - ../slots/stewardship_model - - ../slots/template_specificity - - ../slots/feature_type - - ../slots/has_or_had_access_management - - ../slots/has_or_had_activity - - ../slots/has_or_had_custodian_type - - ../slots/has_or_had_service - - ../slots/site_portfolio - - ../slots/specificity_annotation - - ../slots/stewardship_model - - ../slots/template_specificity + # REMOVED duplicate imports (file had 3x copies) - cleaned up 2026-01-17 prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ @@ -232,7 +215,7 @@ classes: \ \"Historic house\", \"Abbey\", \"Fort\" ;\n hc:site_portfolio \"400+ historic sites and monuments across England\"\ \ ;\n hc:visitor_services \"On-site interpretation\", \"Guided tours\", \"Events\", \"Gift shops\", \"Cafés\" ;\n \ \ hc:conservation_activities \"Monument preservation\", \"Structural repairs\", \"Archaeological research\" ;\n hc:access_management\ - \ \"Ticketing\", \"Opening hours\", \"Accessibility programs\", \"Education visits\" ;\n hc:stewardship_model \"Charitable\ + \ \"Ticketing\", \"Opening hours\", \"Accessibility programs\", \"Education visits\" ;\n hc:is_or_was_managed_by \"Charitable\ \ trust ownership and management\" ;\n schema:foundingDate \"1983-04-01\" ;\n schema:legalName \"English Heritage\ \ Trust\" ;\n schema:url ;\n hc:manages_feature ,\n\ \ .\n```\n" @@ -253,7 +236,7 @@ classes: - feature_type - site_portfolio - specificity_annotation - - stewardship_model + - is_or_was_managed_by # was: stewardship_model - migrated per Rule 53/56 (2026-01-17) - template_specificity - has_or_had_service # was: visitor_service - migrated per Rule 53 slot_usage: @@ -323,8 +306,8 @@ classes: description: Open access model - value: Restricted access, Conservation priority, Virtual alternatives description: Limited access model - stewardship_model: - range: string + is_or_was_managed_by: # was: stewardship_model - migrated per Rule 53/56 (2026-01-17) + range: uriorcurie required: true examples: - value: Charitable trust ownership and management diff --git a/schemas/20251121/linkml/modules/classes/FindingAid.yaml b/schemas/20251121/linkml/modules/classes/FindingAid.yaml index 7fabb20d32..d3e2a5634f 100644 --- a/schemas/20251121/linkml/modules/classes/FindingAid.yaml +++ b/schemas/20251121/linkml/modules/classes/FindingAid.yaml @@ -133,7 +133,7 @@ imports: - ../slots/start - ../slots/has_or_had_description # was: sub_guide_description - migrated per Rule 53 - ./Description - - ../slots/sub_guide_temporal_coverage + # REMOVED: ../slots/sub_guide_temporal_coverage - migrated to has_or_had_content (2026-01-17, Rule 53/56) - ./SubGuideType - ../slots/has_or_had_sub_guide - ../slots/has_or_had_sub_section @@ -570,7 +570,7 @@ classes: - slug - specificity_annotation - has_or_had_description # was: sub_guide_description - migrated per Rule 53 - - sub_guide_temporal_coverage + - has_or_had_content # was: sub_guide_temporal_coverage - migrated per Rule 53/56 (2026-01-17) - has_or_had_type - template_specificity # REMOVED: title_en, title_nl - migrated to has_or_had_label with Label (2026-01-14, Rule 53) @@ -612,6 +612,18 @@ classes: Uses SubGuideType class hierarchy. is_or_was_access_restricted: range: boolean + has_or_had_content: + range: string + description: | + Time period covered by this sub-guide (free text). + MIGRATED from sub_guide_temporal_coverage (2026-01-17) per Rule 53/56. + + Examples: "1811-1935", "before 1811", "1811-present" + examples: + - value: "1811-1935" + description: Date range + - value: "before 1811" + description: Open-ended historical period exact_mappings: - rico:isOrWasPartOf ArchiveReference: @@ -632,7 +644,7 @@ classes: - name - resource_description - specificity_annotation - - sub_guide_temporal_coverage + - has_or_had_content # was: sub_guide_temporal_coverage - migrated per Rule 53/56 (2026-01-17) - template_specificity - has_or_had_url # was: url - migrated per Rule 53 (2025-01-15) slot_usage: @@ -647,6 +659,13 @@ classes: MIGRATED from url slot per slot_fixes.yaml (Rule 53, 2025-01-15). isil: pattern: ^[A-Z]{2}-[A-Za-z0-9]+$ + has_or_had_content: + range: string + description: | + Time period covered by this archive reference (free text). + MIGRATED from sub_guide_temporal_coverage (2026-01-17) per Rule 53/56. + + Examples: "1811-1935", "before 1811", "1811-present" exact_mappings: - rico:RecordSet - schema:ArchiveOrganization diff --git a/schemas/20251121/linkml/modules/classes/FundingRequirement.yaml b/schemas/20251121/linkml/modules/classes/FundingRequirement.yaml index a7531b2ef3..50e32c4b0f 100644 --- a/schemas/20251121/linkml/modules/classes/FundingRequirement.yaml +++ b/schemas/20251121/linkml/modules/classes/FundingRequirement.yaml @@ -22,7 +22,8 @@ imports: - ../slots/extraction_note - ../slots/observed_in # REMOVED 2026-01-15: ../slots/applies_to_call - migrated to applies_or_applied_to_call - - ../slots/applies_or_applied_to_call + # UPDATED 2026-01-17: applies_or_applied_to_call → applies_or_applied_to per Rule 53/56 (SRP) + - ../slots/applies_or_applied_to - ../slots/is_mandatory - ../slots/requirement_id - ../slots/requirement_text @@ -98,7 +99,8 @@ classes: - prov:wasDerivedFrom slots: # REMOVED 2026-01-15: applies_to_call - migrated to applies_or_applied_to_call - - applies_or_applied_to_call + # UPDATED 2026-01-17: applies_or_applied_to_call → applies_or_applied_to per Rule 53/56 (SRP) + - applies_or_applied_to - extraction_confidence - extraction_note - is_mandatory @@ -242,7 +244,7 @@ classes: requirement_value: '3' requirement_unit: partners is_mandatory: true - applies_or_applied_to_call: https://nde.nl/ontology/hc/call/ec/cl2-2025-heritage-01 + applies_or_applied_to: https://nde.nl/ontology/hc/call/ec/cl2-2025-heritage-01 observed_in: https://nde.nl/ontology/hc/observation/web/2025-11-29/eu-horizon-cl2-heritage source_section: Section 2 - Eligibility Conditions extraction_confidence: 0.98 @@ -256,7 +258,7 @@ classes: requirement_value: '30' requirement_unit: percent is_mandatory: true - applies_or_applied_to_call: https://nde.nl/ontology/hc/call/ec/cl2-2025-heritage-01 + applies_or_applied_to: https://nde.nl/ontology/hc/call/ec/cl2-2025-heritage-01 observed_in: https://nde.nl/ontology/hc/observation/web/2025-11-29/eu-horizon-cl2-heritage source_section: Section 3 - Financial Conditions extraction_confidence: 0.95 @@ -270,7 +272,7 @@ classes: requirement_value: immediate requirement_unit: null is_mandatory: true - applies_or_applied_to_call: https://nde.nl/ontology/hc/call/ec/cl2-2025-heritage-01 + applies_or_applied_to: https://nde.nl/ontology/hc/call/ec/cl2-2025-heritage-01 observed_in: https://nde.nl/ontology/hc/observation/web/2025-11-29/eu-horizon-cl2-heritage source_section: Section 4.2 - Open Science extraction_confidence: 0.99 @@ -284,7 +286,7 @@ classes: requirement_value: UK requirement_unit: country is_mandatory: true - applies_or_applied_to_call: https://nde.nl/ontology/hc/call/nlhf/medium-grants-2025-q4 + applies_or_applied_to: https://nde.nl/ontology/hc/call/nlhf/medium-grants-2025-q4 observed_in: https://nde.nl/ontology/hc/observation/web/2025-11-28/nlhf-medium-grants source_section: Eligibility extraction_confidence: 0.99 @@ -298,7 +300,7 @@ classes: requirement_value: non-profit requirement_unit: organization-type is_mandatory: true - applies_or_applied_to_call: https://nde.nl/ontology/hc/call/nlhf/medium-grants-2025-q4 + applies_or_applied_to: https://nde.nl/ontology/hc/call/nlhf/medium-grants-2025-q4 observed_in: https://nde.nl/ontology/hc/observation/web/2025-11-28/nlhf-medium-grants source_section: Who can apply extraction_confidence: 0.95 diff --git a/schemas/20251121/linkml/modules/classes/HolySacredSiteType.yaml b/schemas/20251121/linkml/modules/classes/HolySacredSiteType.yaml index 9f412d0116..9eede2d9b8 100644 --- a/schemas/20251121/linkml/modules/classes/HolySacredSiteType.yaml +++ b/schemas/20251121/linkml/modules/classes/HolySacredSiteType.yaml @@ -23,30 +23,14 @@ imports: - ../slots/religious_tradition - ../slots/secularization_status - ../slots/specificity_annotation - - ../slots/stewardship_responsibility + - ../slots/is_or_was_managed_by # was: stewardship_responsibility - migrated per Rule 53/56 (2026-01-17) - ../slots/template_specificity - ./SpecificityAnnotation - ./TemplateSpecificityScores - - ../slots/collection_type - - ../slots/has_or_had_access_policy - - ../slots/has_or_had_custodian_type - - ../slots/holy_site_subtype - - ../slots/religious_function - - ../slots/religious_tradition - - ../slots/secularization_status - - ../slots/specificity_annotation - - ../slots/stewardship_responsibility - - ../slots/template_specificity - - ../slots/collection_type - - ../slots/has_or_had_access_policy - - ../slots/has_or_had_custodian_type - - ../slots/holy_site_subtype - - ../slots/religious_function - - ../slots/religious_tradition - - ../slots/secularization_status - - ../slots/specificity_annotation - - ../slots/stewardship_responsibility - - ../slots/template_specificity + # REMOVED duplicate imports - these are already imported above: + # collection_type, has_or_had_access_policy, has_or_had_custodian_type, holy_site_subtype + # religious_function, religious_tradition, secularization_status, specificity_annotation + # stewardship_responsibility, template_specificity (x3 copies) prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ @@ -295,7 +279,7 @@ classes: \ ;\n hc:religious_tradition \"Roman Catholic Christianity\" ;\n hc:collection_type \"Archival records\", \"Papal\ \ documents\", \"Medieval manuscripts\", \"Correspondence\" ;\n hc:religious_function \"Support papal governance\"\ , \"Document Church history\", \"Preserve canon law\" ;\n hc:access_policy \"Restricted access by appointment\", \"\ - Scholars and researchers only\", \"No browsing\" ;\n hc:stewardship_responsibility \"Prefect of Vatican Apostolic Archive\"\ + Scholars and researchers only\", \"No browsing\" ;\n hc:is_or_was_managed_by \"Prefect of Vatican Apostolic Archive\"\ , \"Papal administrative authority\" ;\n hc:secularization_status \"Active religious institution, No secularization\"\ \ ;\n schema:name \"Vatican Apostolic Archive\"@en, \"Archivum Apostolicum Vaticanum\"@la ;\n schema:alternateName\ \ \"Vatican Secret Archives (former name until 2019)\" ;\n schema:foundingDate \"1612\" ;\n schema:location \"Vatican\ @@ -322,7 +306,7 @@ classes: - religious_tradition - secularization_status - specificity_annotation - - stewardship_responsibility + - is_or_was_managed_by # was: stewardship_responsibility - migrated per Rule 53/56 (2026-01-17) - template_specificity slot_usage: religious_tradition: @@ -366,8 +350,8 @@ classes: description: Cathedral treasury access - value: Digitized online, Physical access by permission description: Monastery library access - stewardship_responsibility: - range: string + is_or_was_managed_by: # was: stewardship_responsibility - migrated per Rule 53/56 (2026-01-17) + range: uriorcurie required: true examples: - value: Prefect of Vatican Archive, Papal authority diff --git a/schemas/20251121/linkml/modules/classes/Jurisdiction.yaml b/schemas/20251121/linkml/modules/classes/Jurisdiction.yaml index d5dbb4f518..568f416d23 100644 --- a/schemas/20251121/linkml/modules/classes/Jurisdiction.yaml +++ b/schemas/20251121/linkml/modules/classes/Jurisdiction.yaml @@ -18,7 +18,7 @@ imports: - ../enums/JurisdictionTypeEnum - ../enums/LegalSystemTypeEnum - ../slots/country - - ../slots/subregion + - ../slots/has_or_had_geographic_subdivision # was: subregion - migrated per Rule 53/56 (2026-01-17) - ../slots/settlement - ../slots/description - ../slots/jurisdiction_id @@ -77,7 +77,7 @@ classes: - legal_system_type - settlement - specificity_annotation - - subregion + - has_or_had_geographic_subdivision # was: subregion - migrated per Rule 53/56 (2026-01-17) - has_or_had_code # was: supranational_code - migrated per Rule 53 - template_specificity slot_usage: @@ -88,7 +88,7 @@ classes: required: true country: required: false - subregion: + has_or_had_geographic_subdivision: # was: subregion - migrated per Rule 53/56 (2026-01-17) required: false settlement: required: false diff --git a/schemas/20251121/linkml/modules/classes/MaterialTypes.yaml b/schemas/20251121/linkml/modules/classes/MaterialTypes.yaml index 92a80cdb3b..b48c0d3e77 100644 --- a/schemas/20251121/linkml/modules/classes/MaterialTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/MaterialTypes.yaml @@ -19,6 +19,7 @@ prefixes: crm: http://www.cidoc-crm.org/cidoc-crm/ aat: http://vocab.getty.edu/aat/ skos: http://www.w3.org/2004/02/skos/core# + wd: http://www.wikidata.org/entity/ default_prefix: hc @@ -167,8 +168,8 @@ classes: **AAT Alignment**: aat:300014109 (paper) exact_mappings: - aat:300014109 + - wd:Q11472 # Wikidata: paper (was: annotation wikidata_equivalent - migrated per Rule 53, 2026-01-17) annotations: - wikidata_equivalent: "Q11472" ParchmentMaterial: is_a: OrganicMaterial @@ -181,8 +182,8 @@ classes: **AAT Alignment**: aat:300011851 (parchment) exact_mappings: - aat:300011851 + - wd:Q226697 # Wikidata: parchment (was: annotation wikidata_equivalent - migrated per Rule 53, 2026-01-17) annotations: - wikidata_equivalent: "Q226697" TextileMaterial: is_a: OrganicMaterial @@ -196,8 +197,8 @@ classes: **AAT Alignment**: aat:300014069 (textile) exact_mappings: - aat:300014069 + - wd:Q28823 # Wikidata: textile (was: annotation wikidata_equivalent - migrated per Rule 53, 2026-01-17) annotations: - wikidata_equivalent: "Q28823" LeatherMaterial: is_a: OrganicMaterial @@ -210,8 +211,8 @@ classes: **AAT Alignment**: aat:300011845 (leather) exact_mappings: - aat:300011845 + - wd:Q286 # Wikidata: leather (was: annotation wikidata_equivalent - migrated per Rule 53, 2026-01-17) annotations: - wikidata_equivalent: "Q286" WoodMaterial: is_a: OrganicMaterial @@ -224,8 +225,8 @@ classes: **AAT Alignment**: aat:300011914 (wood) exact_mappings: - aat:300011914 + - wd:Q287 # Wikidata: wood (was: annotation wikidata_equivalent - migrated per Rule 53, 2026-01-17) annotations: - wikidata_equivalent: "Q287" NitrateFilmMaterial: is_a: SyntheticMaterial @@ -239,11 +240,11 @@ classes: **AAT Alignment**: aat:300127173 (nitrate film) exact_mappings: - aat:300127173 + - wd:Q1201597 # Wikidata: nitrate film (was: annotation wikidata_equivalent - migrated per Rule 53, 2026-01-17) annotations: typical_temperature: "-5°C to 4°C (cold storage mandatory)" typical_humidity: "30-35% RH" preservation_risks: "fire hazard, toxic off-gassing, self-ignition, deterioration" - wikidata_equivalent: "Q1201597" AcetateFilmMaterial: is_a: SyntheticMaterial @@ -257,11 +258,11 @@ classes: **AAT Alignment**: aat:300127322 (acetate film) exact_mappings: - aat:300127322 + - wd:Q421063 # Wikidata: acetate film (was: annotation wikidata_equivalent - migrated per Rule 53, 2026-01-17) annotations: typical_temperature: "2°C to 10°C (cold storage recommended)" typical_humidity: "30-40% RH" preservation_risks: "vinegar syndrome, shrinkage, warping, channel marks" - wikidata_equivalent: "Q421063" PolyesterFilmMaterial: is_a: SyntheticMaterial diff --git a/schemas/20251121/linkml/modules/classes/Settlement.yaml b/schemas/20251121/linkml/modules/classes/Settlement.yaml index 8462cb5cba..c913e7acac 100644 --- a/schemas/20251121/linkml/modules/classes/Settlement.yaml +++ b/schemas/20251121/linkml/modules/classes/Settlement.yaml @@ -6,7 +6,7 @@ imports: - ./Country - ./Subregion - ../slots/country - - ../slots/subregion + - ../slots/has_or_had_geographic_subdivision # was: subregion - migrated per Rule 53/56 (2026-01-17) - ../slots/geonames_id - ../slots/latitude - ../slots/longitude @@ -21,7 +21,7 @@ imports: - ../slots/longitude - ../slots/settlement_name - ../slots/specificity_annotation - - ../slots/subregion + - ../slots/has_or_had_geographic_subdivision # was: subregion - migrated per Rule 53/56 (2026-01-17) - ../slots/template_specificity - ../slots/country - ../slots/geonames_id @@ -29,7 +29,7 @@ imports: - ../slots/longitude - ../slots/settlement_name - ../slots/specificity_annotation - - ../slots/subregion + - ../slots/has_or_had_geographic_subdivision # was: subregion - migrated per Rule 53/56 (2026-01-17) - ../slots/template_specificity classes: Settlement: @@ -119,7 +119,7 @@ classes: - longitude - settlement_name - specificity_annotation - - subregion + - has_or_had_geographic_subdivision # was: subregion - migrated per Rule 53/56 (2026-01-17) - template_specificity slot_usage: geonames_id: @@ -128,7 +128,7 @@ classes: required: true country: required: true - subregion: + has_or_had_geographic_subdivision: # was: subregion - migrated per Rule 53/56 (2026-01-17) required: false latitude: required: false diff --git a/schemas/20251121/linkml/modules/classes/SoundArchive.yaml b/schemas/20251121/linkml/modules/classes/SoundArchive.yaml index 6f0b281fb3..43db5937eb 100644 --- a/schemas/20251121/linkml/modules/classes/SoundArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/SoundArchive.yaml @@ -38,7 +38,7 @@ classes: - is_or_was_related_to # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) - has_or_had_identifier # was: wikidata_entity - migrated per Rule 53 (2026-01-15) exact_mappings: - - wd:Q2230431 + - wd:Q2230431 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) close_mappings: - rico:CorporateBody - skos:Concept @@ -51,8 +51,6 @@ classes: record_set_type: true custodian_type: true slot_usage: - wikidata_equivalent: - equals_string: Q2230431 has_or_had_custodian_type: equals_expression: '["hc:ArchiveOrganizationType"]' is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) diff --git a/schemas/20251121/linkml/modules/classes/SoundArchiveRecordSetType.yaml b/schemas/20251121/linkml/modules/classes/SoundArchiveRecordSetType.yaml index e3efee50a5..2338300ebf 100644 --- a/schemas/20251121/linkml/modules/classes/SoundArchiveRecordSetType.yaml +++ b/schemas/20251121/linkml/modules/classes/SoundArchiveRecordSetType.yaml @@ -17,16 +17,15 @@ imports: - ../slots/is_or_was_related_to - ../slots/specificity_annotation - ../slots/template_specificity - - ../slots/wikidata_equivalent classes: SoundArchiveRecordSetType: description: A rico:RecordSetType for classifying collections of sound recordings and audio materials within heritage institutions. is_a: CollectionType class_uri: rico:RecordSetType + exact_mappings: + - wd:Q2230431 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) slot_usage: - wikidata_equivalent: - equals_string: Q2230431 is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) range: WikidataAlignment inlined: true diff --git a/schemas/20251121/linkml/modules/classes/SpecialCollection.yaml b/schemas/20251121/linkml/modules/classes/SpecialCollection.yaml index 2f21b76f07..d1fa32ed9f 100644 --- a/schemas/20251121/linkml/modules/classes/SpecialCollection.yaml +++ b/schemas/20251121/linkml/modules/classes/SpecialCollection.yaml @@ -27,6 +27,8 @@ classes: require special handling, storage, and access conditions. is_a: ArchiveOrganizationType class_uri: skos:Concept + exact_mappings: + - wd:Q4431094 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) mixins: - LibraryType slots: @@ -36,8 +38,6 @@ classes: - is_or_was_related_to # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) - has_or_had_identifier # was: wikidata_entity - migrated per Rule 53 (2026-01-15) slot_usage: - wikidata_equivalent: - equals_string: Q4431094 has_or_had_custodian_type: equals_expression: '["hc:LibraryType", "hc:ArchiveOrganizationType"]' is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) diff --git a/schemas/20251121/linkml/modules/classes/SpecialCollectionRecordSetType.yaml b/schemas/20251121/linkml/modules/classes/SpecialCollectionRecordSetType.yaml index e3ac4bfa8b..9ef6037dda 100644 --- a/schemas/20251121/linkml/modules/classes/SpecialCollectionRecordSetType.yaml +++ b/schemas/20251121/linkml/modules/classes/SpecialCollectionRecordSetType.yaml @@ -6,6 +6,7 @@ prefixes: schema: http://schema.org/ skos: http://www.w3.org/2004/02/skos/core# rico: https://www.ica.org/standards/RiC/ontology# + wd: http://www.wikidata.org/entity/ imports: - linkml:types - ./CollectionType @@ -21,14 +22,14 @@ classes: services. is_a: CollectionType class_uri: rico:RecordSetType + exact_mappings: + - wd:Q4431094 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) slots: - specificity_annotation - template_specificity - is_or_was_related_to # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) - has_or_had_identifier # was: wikidata_entity - migrated per Rule 53 (2026-01-15) slot_usage: - wikidata_equivalent: - equals_string: Q4431094 is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) range: WikidataAlignment inlined: true diff --git a/schemas/20251121/linkml/modules/classes/SpecializedArchive.yaml b/schemas/20251121/linkml/modules/classes/SpecializedArchive.yaml index 73479d6111..b5ac1d4031 100644 --- a/schemas/20251121/linkml/modules/classes/SpecializedArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/SpecializedArchive.yaml @@ -38,15 +38,13 @@ classes: - is_or_was_related_to # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) - has_or_had_identifier # was: wikidata_entity - migrated per Rule 53 (2026-01-15) exact_mappings: - - wd:Q27030941 + - wd:Q27030941 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) close_mappings: - rico:CorporateBody - skos:Concept broad_mappings: - wd:Q166118 slot_usage: - wikidata_equivalent: - equals_string: Q27030941 has_or_had_custodian_type: equals_expression: '["hc:ArchiveOrganizationType"]' is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) diff --git a/schemas/20251121/linkml/modules/classes/SpecializedArchiveRecordSetType.yaml b/schemas/20251121/linkml/modules/classes/SpecializedArchiveRecordSetType.yaml index c0b90030f4..6498efe322 100644 --- a/schemas/20251121/linkml/modules/classes/SpecializedArchiveRecordSetType.yaml +++ b/schemas/20251121/linkml/modules/classes/SpecializedArchiveRecordSetType.yaml @@ -17,16 +17,15 @@ imports: - ../slots/is_or_was_related_to - ../slots/specificity_annotation - ../slots/template_specificity - - ../slots/wikidata_equivalent classes: SpecializedArchiveRecordSetType: description: A rico:RecordSetType for classifying collections from archives specialized in specific fields or subject areas. is_a: CollectionType class_uri: rico:RecordSetType + exact_mappings: + - wd:Q27030941 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) slot_usage: - wikidata_equivalent: - equals_string: Q27030941 is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) range: WikidataAlignment inlined: true diff --git a/schemas/20251121/linkml/modules/classes/SpecializedArchivesCzechia.yaml b/schemas/20251121/linkml/modules/classes/SpecializedArchivesCzechia.yaml index ab3a43937d..96e3e6b643 100644 --- a/schemas/20251121/linkml/modules/classes/SpecializedArchivesCzechia.yaml +++ b/schemas/20251121/linkml/modules/classes/SpecializedArchivesCzechia.yaml @@ -38,15 +38,13 @@ classes: - is_or_was_related_to # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) - has_or_had_identifier # was: wikidata_entity - migrated per Rule 53 (2026-01-15) exact_mappings: - - wd:Q101470010 + - wd:Q101470010 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) close_mappings: - rico:CorporateBody - skos:Concept broad_mappings: - wd:Q166118 slot_usage: - wikidata_equivalent: - equals_string: Q101470010 has_or_had_custodian_type: equals_expression: '["hc:ArchiveOrganizationType"]' is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) diff --git a/schemas/20251121/linkml/modules/classes/SpecializedArchivesCzechiaRecordSetType.yaml b/schemas/20251121/linkml/modules/classes/SpecializedArchivesCzechiaRecordSetType.yaml index a8d5b429f4..f5536ca701 100644 --- a/schemas/20251121/linkml/modules/classes/SpecializedArchivesCzechiaRecordSetType.yaml +++ b/schemas/20251121/linkml/modules/classes/SpecializedArchivesCzechiaRecordSetType.yaml @@ -17,15 +17,14 @@ imports: - ../slots/is_or_was_related_to - ../slots/specificity_annotation - ../slots/template_specificity - - ../slots/wikidata_equivalent classes: SpecializedArchivesCzechiaRecordSetType: description: A rico:RecordSetType for classifying collections from specialized archives within the Czech archival system. is_a: CollectionType class_uri: rico:RecordSetType + exact_mappings: + - wd:Q101470010 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) slot_usage: - wikidata_equivalent: - equals_string: Q101470010 is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) range: WikidataAlignment inlined: true diff --git a/schemas/20251121/linkml/modules/classes/StateArchives.yaml b/schemas/20251121/linkml/modules/classes/StateArchives.yaml index d906511a50..20997992d0 100644 --- a/schemas/20251121/linkml/modules/classes/StateArchives.yaml +++ b/schemas/20251121/linkml/modules/classes/StateArchives.yaml @@ -38,15 +38,13 @@ classes: - is_or_was_related_to # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) - has_or_had_identifier # was: wikidata_entity - migrated per Rule 53 (2026-01-15) exact_mappings: - - wd:Q52341833 + - wd:Q52341833 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) close_mappings: - rico:CorporateBody - skos:Concept broad_mappings: - wd:Q166118 slot_usage: - wikidata_equivalent: - equals_string: Q52341833 has_or_had_custodian_type: equals_expression: '["hc:ArchiveOrganizationType"]' is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) diff --git a/schemas/20251121/linkml/modules/classes/StateArchivesRecordSetType.yaml b/schemas/20251121/linkml/modules/classes/StateArchivesRecordSetType.yaml index bde7dd7d75..b62a1bc829 100644 --- a/schemas/20251121/linkml/modules/classes/StateArchivesRecordSetType.yaml +++ b/schemas/20251121/linkml/modules/classes/StateArchivesRecordSetType.yaml @@ -17,15 +17,14 @@ imports: - ../slots/is_or_was_related_to - ../slots/specificity_annotation - ../slots/template_specificity - - ../slots/wikidata_equivalent classes: StateArchivesRecordSetType: description: A rico:RecordSetType for classifying collections of state government records and administrative documentation. is_a: CollectionType class_uri: rico:RecordSetType + exact_mappings: + - wd:Q52341833 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) slot_usage: - wikidata_equivalent: - equals_string: Q52341833 is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) range: WikidataAlignment inlined: true diff --git a/schemas/20251121/linkml/modules/classes/StateArchivesSection.yaml b/schemas/20251121/linkml/modules/classes/StateArchivesSection.yaml index ec2a19fe45..ca30951d9c 100644 --- a/schemas/20251121/linkml/modules/classes/StateArchivesSection.yaml +++ b/schemas/20251121/linkml/modules/classes/StateArchivesSection.yaml @@ -38,15 +38,13 @@ classes: - is_or_was_related_to # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) - has_or_had_identifier # was: wikidata_entity - migrated per Rule 53 (2026-01-15) exact_mappings: - - wd:Q44796387 + - wd:Q44796387 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) close_mappings: - rico:CorporateBody - skos:Concept broad_mappings: - wd:Q166118 slot_usage: - wikidata_equivalent: - equals_string: Q44796387 has_or_had_custodian_type: equals_expression: '["hc:ArchiveOrganizationType"]' is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) diff --git a/schemas/20251121/linkml/modules/classes/StateArchivesSectionRecordSetType.yaml b/schemas/20251121/linkml/modules/classes/StateArchivesSectionRecordSetType.yaml index c2aafacc5c..a519ab9a4f 100644 --- a/schemas/20251121/linkml/modules/classes/StateArchivesSectionRecordSetType.yaml +++ b/schemas/20251121/linkml/modules/classes/StateArchivesSectionRecordSetType.yaml @@ -17,15 +17,14 @@ imports: - ../slots/is_or_was_related_to - ../slots/specificity_annotation - ../slots/template_specificity - - ../slots/wikidata_equivalent classes: StateArchivesSectionRecordSetType: description: A rico:RecordSetType for classifying collections from Italian state archive sections. is_a: CollectionType class_uri: rico:RecordSetType + exact_mappings: + - wd:Q44796387 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) slot_usage: - wikidata_equivalent: - equals_string: Q44796387 is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) range: WikidataAlignment inlined: true diff --git a/schemas/20251121/linkml/modules/classes/StateDistrictArchive.yaml b/schemas/20251121/linkml/modules/classes/StateDistrictArchive.yaml index c0c91ec4ff..9538724b35 100644 --- a/schemas/20251121/linkml/modules/classes/StateDistrictArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/StateDistrictArchive.yaml @@ -38,15 +38,13 @@ classes: - is_or_was_related_to # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) - has_or_had_identifier # was: wikidata_entity - migrated per Rule 53 (2026-01-15) exact_mappings: - - wd:Q53131316 + - wd:Q53131316 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) close_mappings: - rico:CorporateBody - skos:Concept broad_mappings: - wd:Q166118 slot_usage: - wikidata_equivalent: - equals_string: Q53131316 has_or_had_custodian_type: equals_expression: '["hc:ArchiveOrganizationType"]' is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) diff --git a/schemas/20251121/linkml/modules/classes/StateDistrictArchiveRecordSetType.yaml b/schemas/20251121/linkml/modules/classes/StateDistrictArchiveRecordSetType.yaml index c5078048f9..0cd63f00bc 100644 --- a/schemas/20251121/linkml/modules/classes/StateDistrictArchiveRecordSetType.yaml +++ b/schemas/20251121/linkml/modules/classes/StateDistrictArchiveRecordSetType.yaml @@ -17,15 +17,14 @@ imports: - ../slots/is_or_was_related_to - ../slots/specificity_annotation - ../slots/template_specificity - - ../slots/wikidata_equivalent classes: StateDistrictArchiveRecordSetType: description: A rico:RecordSetType for classifying collections from Czech state district archives. is_a: CollectionType class_uri: rico:RecordSetType + exact_mappings: + - wd:Q53131316 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) slot_usage: - wikidata_equivalent: - equals_string: Q53131316 is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) range: WikidataAlignment inlined: true diff --git a/schemas/20251121/linkml/modules/classes/StateRegionalArchiveCzechia.yaml b/schemas/20251121/linkml/modules/classes/StateRegionalArchiveCzechia.yaml index 7ed45d0d49..9f27e6b216 100644 --- a/schemas/20251121/linkml/modules/classes/StateRegionalArchiveCzechia.yaml +++ b/schemas/20251121/linkml/modules/classes/StateRegionalArchiveCzechia.yaml @@ -38,15 +38,13 @@ classes: - is_or_was_related_to # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) - has_or_had_identifier # was: wikidata_entity - migrated per Rule 53 (2026-01-15) exact_mappings: - - wd:Q53130134 + - wd:Q53130134 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) close_mappings: - rico:CorporateBody - skos:Concept broad_mappings: - wd:Q166118 slot_usage: - wikidata_equivalent: - equals_string: Q53130134 has_or_had_custodian_type: equals_expression: '["hc:ArchiveOrganizationType"]' is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) diff --git a/schemas/20251121/linkml/modules/classes/StateRegionalArchiveCzechiaRecordSetType.yaml b/schemas/20251121/linkml/modules/classes/StateRegionalArchiveCzechiaRecordSetType.yaml index d16b8e69df..b54146c2e3 100644 --- a/schemas/20251121/linkml/modules/classes/StateRegionalArchiveCzechiaRecordSetType.yaml +++ b/schemas/20251121/linkml/modules/classes/StateRegionalArchiveCzechiaRecordSetType.yaml @@ -17,15 +17,14 @@ imports: - ../slots/is_or_was_related_to - ../slots/specificity_annotation - ../slots/template_specificity - - ../slots/wikidata_equivalent classes: StateRegionalArchiveCzechiaRecordSetType: description: A rico:RecordSetType for classifying collections from Czech state regional archives. is_a: CollectionType class_uri: rico:RecordSetType + exact_mappings: + - wd:Q53130134 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) slot_usage: - wikidata_equivalent: - equals_string: Q53130134 is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) range: WikidataAlignment inlined: true diff --git a/schemas/20251121/linkml/modules/classes/Subregion.yaml b/schemas/20251121/linkml/modules/classes/Subregion.yaml index 226c3c75f8..14f927d5b6 100644 --- a/schemas/20251121/linkml/modules/classes/Subregion.yaml +++ b/schemas/20251121/linkml/modules/classes/Subregion.yaml @@ -7,20 +7,11 @@ imports: - ../slots/country - ../slots/iso_3166_2_code - ../slots/specificity_annotation - - ../slots/subdivision_name + - ../slots/has_or_had_label # was: subdivision_name - migrated per Rule 53/56 (2026-01-17) - ../slots/template_specificity - ./SpecificityAnnotation - ./TemplateSpecificityScores - - ../slots/country - - ../slots/iso_3166_2_code - - ../slots/specificity_annotation - - ../slots/subdivision_name - - ../slots/template_specificity - - ../slots/country - - ../slots/iso_3166_2_code - - ../slots/specificity_annotation - - ../slots/subdivision_name - - ../slots/template_specificity + # Removed duplicate imports (2026-01-17) classes: Subregion: class_uri: lcc_cr:GeographicRegion @@ -47,7 +38,7 @@ classes: - country - iso_3166_2_code - specificity_annotation - - subdivision_name + - has_or_had_label # was: subdivision_name - migrated per Rule 53/56 (2026-01-17) - template_specificity slot_usage: iso_3166_2_code: @@ -55,5 +46,10 @@ classes: identifier: true country: required: true - subdivision_name: + has_or_had_label: # was: subdivision_name - migrated per Rule 53/56 (2026-01-17) required: false + description: | + Human-readable name of the subdivision. + + Prefer resolving names via GeoNames API to avoid maintaining multilingual data. + Examples: "Pennsylvania" (for US-PA), "Bali" (for ID-BA), "Bayern" (for DE-BY) diff --git a/schemas/20251121/linkml/modules/classes/TelevisionArchive.yaml b/schemas/20251121/linkml/modules/classes/TelevisionArchive.yaml index 076e3939b6..262aee456c 100644 --- a/schemas/20251121/linkml/modules/classes/TelevisionArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/TelevisionArchive.yaml @@ -39,15 +39,13 @@ classes: - is_or_was_related_to # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) - has_or_had_identifier # was: wikidata_entity - migrated per Rule 53 (2026-01-15) exact_mappings: - - wd:Q109326243 + - wd:Q109326243 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) close_mappings: - rico:CorporateBody - skos:Concept broad_mappings: - wd:Q166118 slot_usage: - wikidata_equivalent: - equals_string: Q109326243 has_or_had_custodian_type: equals_expression: '["hc:ArchiveOrganizationType"]' is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) diff --git a/schemas/20251121/linkml/modules/classes/TelevisionArchiveRecordSetType.yaml b/schemas/20251121/linkml/modules/classes/TelevisionArchiveRecordSetType.yaml index ca82121fe3..1dcb317073 100644 --- a/schemas/20251121/linkml/modules/classes/TelevisionArchiveRecordSetType.yaml +++ b/schemas/20251121/linkml/modules/classes/TelevisionArchiveRecordSetType.yaml @@ -17,15 +17,14 @@ imports: - ../slots/is_or_was_related_to - ../slots/specificity_annotation - ../slots/template_specificity - - ../slots/wikidata_equivalent classes: TelevisionArchiveRecordSetType: description: A rico:RecordSetType for classifying collections of television programs, recordings, and broadcast materials. is_a: CollectionType class_uri: rico:RecordSetType + exact_mappings: + - wd:Q109326243 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) slot_usage: - wikidata_equivalent: - equals_string: Q109326243 is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) range: WikidataAlignment inlined: true diff --git a/schemas/20251121/linkml/modules/classes/UniversityArchive.yaml b/schemas/20251121/linkml/modules/classes/UniversityArchive.yaml index 4201befede..fc1bd435a2 100644 --- a/schemas/20251121/linkml/modules/classes/UniversityArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/UniversityArchive.yaml @@ -38,15 +38,13 @@ classes: - is_or_was_related_to # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) - has_or_had_identifier # was: wikidata_entity - migrated per Rule 53 (2026-01-15) exact_mappings: - - wd:Q2496264 + - wd:Q2496264 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) close_mappings: - rico:CorporateBody - skos:Concept broad_mappings: - wd:Q166118 slot_usage: - wikidata_equivalent: - equals_string: Q2496264 has_or_had_custodian_type: equals_expression: '["hc:ArchiveOrganizationType"]' is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) diff --git a/schemas/20251121/linkml/modules/classes/UniversityArchiveRecordSetType.yaml b/schemas/20251121/linkml/modules/classes/UniversityArchiveRecordSetType.yaml index 385de28a10..0b3ccec98a 100644 --- a/schemas/20251121/linkml/modules/classes/UniversityArchiveRecordSetType.yaml +++ b/schemas/20251121/linkml/modules/classes/UniversityArchiveRecordSetType.yaml @@ -17,16 +17,15 @@ imports: - ../slots/is_or_was_related_to - ../slots/specificity_annotation - ../slots/template_specificity - - ../slots/wikidata_equivalent classes: UniversityArchiveRecordSetType: description: A rico:RecordSetType for classifying collections of university and college historical records and institutional documentation. is_a: CollectionType class_uri: rico:RecordSetType + exact_mappings: + - wd:Q2496264 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) slot_usage: - wikidata_equivalent: - equals_string: Q2496264 is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) range: WikidataAlignment inlined: true diff --git a/schemas/20251121/linkml/modules/classes/Vereinsarchiv.yaml b/schemas/20251121/linkml/modules/classes/Vereinsarchiv.yaml index 1266f211af..14b97b701e 100644 --- a/schemas/20251121/linkml/modules/classes/Vereinsarchiv.yaml +++ b/schemas/20251121/linkml/modules/classes/Vereinsarchiv.yaml @@ -1,6 +1,11 @@ id: https://nde.nl/ontology/hc/class/Vereinsarchiv name: Vereinsarchiv title: Vereinsarchiv Type +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + skos: http://www.w3.org/2004/02/skos/core# + wd: http://www.wikidata.org/entity/ imports: - linkml:types - ./ArchiveOrganizationType @@ -25,6 +30,8 @@ classes: document the activities, governance, membership, and cultural contributions of civil society organizations. is_a: ArchiveOrganizationType class_uri: skos:Concept + exact_mappings: + - wd:Q130758889 # Wikidata: Vereinsarchiv (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) slots: - has_or_had_custodian_type - specificity_annotation @@ -32,8 +39,6 @@ classes: - is_or_was_related_to # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) - has_or_had_identifier # was: wikidata_entity - migrated per Rule 53 (2026-01-15) slot_usage: - wikidata_equivalent: - equals_string: Q130758889 has_or_had_custodian_type: equals_expression: '["hc:ArchiveOrganizationType"]' is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) diff --git a/schemas/20251121/linkml/modules/classes/VereinsarchivRecordSetType.yaml b/schemas/20251121/linkml/modules/classes/VereinsarchivRecordSetType.yaml index 3899b6c759..d513740699 100644 --- a/schemas/20251121/linkml/modules/classes/VereinsarchivRecordSetType.yaml +++ b/schemas/20251121/linkml/modules/classes/VereinsarchivRecordSetType.yaml @@ -6,6 +6,7 @@ prefixes: schema: http://schema.org/ skos: http://www.w3.org/2004/02/skos/core# rico: https://www.ica.org/standards/RiC/ontology# + wd: http://www.wikidata.org/entity/ imports: - linkml:types - ./CollectionType @@ -21,14 +22,14 @@ classes: description: A rico:RecordSetType for classifying collections from German association and club archives. is_a: CollectionType class_uri: rico:RecordSetType + exact_mappings: + - wd:Q130758889 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) slots: - specificity_annotation - template_specificity - is_or_was_related_to # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) - has_or_had_identifier # was: wikidata_entity - migrated per Rule 53 (2026-01-15) slot_usage: - wikidata_equivalent: - equals_string: Q130758889 is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) range: WikidataAlignment inlined: true diff --git a/schemas/20251121/linkml/modules/classes/Verlagsarchiv.yaml b/schemas/20251121/linkml/modules/classes/Verlagsarchiv.yaml index 789a2c87ca..d8058dfe89 100644 --- a/schemas/20251121/linkml/modules/classes/Verlagsarchiv.yaml +++ b/schemas/20251121/linkml/modules/classes/Verlagsarchiv.yaml @@ -1,6 +1,11 @@ id: https://nde.nl/ontology/hc/class/Verlagsarchiv name: Verlagsarchiv title: Verlagsarchiv Type +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + skos: http://www.w3.org/2004/02/skos/core# + wd: http://www.wikidata.org/entity/ imports: - linkml:types - ./ArchiveOrganizationType @@ -25,6 +30,8 @@ classes: contracts, marketing materials, and documentation of book production and distribution activities. is_a: ArchiveOrganizationType class_uri: skos:Concept + exact_mappings: + - wd:Q130759004 # Wikidata: Verlagsarchiv (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) slots: - has_or_had_custodian_type - specificity_annotation @@ -32,8 +39,6 @@ classes: - is_or_was_related_to # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) - has_or_had_identifier # was: wikidata_entity - migrated per Rule 53 (2026-01-15) slot_usage: - wikidata_equivalent: - equals_string: Q130759004 has_or_had_custodian_type: equals_expression: '["hc:ArchiveOrganizationType"]' is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) diff --git a/schemas/20251121/linkml/modules/classes/VerlagsarchivRecordSetType.yaml b/schemas/20251121/linkml/modules/classes/VerlagsarchivRecordSetType.yaml index 0a6ff361ad..25ea0152bc 100644 --- a/schemas/20251121/linkml/modules/classes/VerlagsarchivRecordSetType.yaml +++ b/schemas/20251121/linkml/modules/classes/VerlagsarchivRecordSetType.yaml @@ -6,6 +6,7 @@ prefixes: schema: http://schema.org/ skos: http://www.w3.org/2004/02/skos/core# rico: https://www.ica.org/standards/RiC/ontology# + wd: http://www.wikidata.org/entity/ imports: - linkml:types - ./CollectionType @@ -21,14 +22,14 @@ classes: description: A rico:RecordSetType for classifying collections from German publishing house archives. is_a: CollectionType class_uri: rico:RecordSetType + exact_mappings: + - wd:Q130759004 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) slots: - specificity_annotation - template_specificity - is_or_was_related_to # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) - has_or_had_identifier # was: wikidata_entity - migrated per Rule 53 (2026-01-15) slot_usage: - wikidata_equivalent: - equals_string: Q130759004 is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) range: WikidataAlignment inlined: true diff --git a/schemas/20251121/linkml/modules/classes/Verwaltungsarchiv.yaml b/schemas/20251121/linkml/modules/classes/Verwaltungsarchiv.yaml index b7011e4735..f2e6a16899 100644 --- a/schemas/20251121/linkml/modules/classes/Verwaltungsarchiv.yaml +++ b/schemas/20251121/linkml/modules/classes/Verwaltungsarchiv.yaml @@ -1,6 +1,11 @@ id: https://nde.nl/ontology/hc/class/Verwaltungsarchiv name: Verwaltungsarchiv title: Verwaltungsarchiv Type +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + skos: http://www.w3.org/2004/02/skos/core# + wd: http://www.wikidata.org/entity/ imports: - linkml:types - ./ArchiveOrganizationType @@ -23,14 +28,14 @@ classes: and administrative decision-making, typically from government agencies or large organizations. is_a: ArchiveOrganizationType class_uri: skos:Concept + exact_mappings: + - wd:Q2519292 # Wikidata: Verwaltungsarchiv (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) slots: - specificity_annotation - template_specificity - is_or_was_related_to # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) - has_or_had_identifier # was: wikidata_entity - migrated per Rule 53 (2026-01-15) slot_usage: - wikidata_equivalent: - equals_string: Q2519292 is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) range: WikidataAlignment inlined: true diff --git a/schemas/20251121/linkml/modules/classes/VerwaltungsarchivRecordSetType.yaml b/schemas/20251121/linkml/modules/classes/VerwaltungsarchivRecordSetType.yaml index 40f4d7baa4..c86290541c 100644 --- a/schemas/20251121/linkml/modules/classes/VerwaltungsarchivRecordSetType.yaml +++ b/schemas/20251121/linkml/modules/classes/VerwaltungsarchivRecordSetType.yaml @@ -6,6 +6,7 @@ prefixes: schema: http://schema.org/ skos: http://www.w3.org/2004/02/skos/core# rico: https://www.ica.org/standards/RiC/ontology# + wd: http://www.wikidata.org/entity/ imports: - linkml:types - ./CollectionType @@ -20,14 +21,14 @@ classes: description: A rico:RecordSetType for classifying collections of administrative records and bureaucratic documentation. is_a: CollectionType class_uri: rico:RecordSetType + exact_mappings: + - wd:Q2519292 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) slots: - specificity_annotation - template_specificity - is_or_was_related_to # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) - has_or_had_identifier # was: wikidata_entity - migrated per Rule 53 (2026-01-15) slot_usage: - wikidata_equivalent: - equals_string: Q2519292 is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) range: WikidataAlignment inlined: true diff --git a/schemas/20251121/linkml/modules/classes/WebArchive.yaml b/schemas/20251121/linkml/modules/classes/WebArchive.yaml index 2f2887b5e8..57412e9f58 100644 --- a/schemas/20251121/linkml/modules/classes/WebArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/WebArchive.yaml @@ -39,7 +39,7 @@ classes: - is_or_was_related_to # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) - has_or_had_identifier # was: wikidata_entity - migrated per Rule 53 (2026-01-15) exact_mappings: - - wd:Q30047053 + - wd:Q30047053 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) close_mappings: - rico:CorporateBody - skos:Concept @@ -48,8 +48,6 @@ classes: mixins: - DigitalPlatformType slot_usage: - wikidata_equivalent: - equals_string: Q30047053 platform_type_id: identifier: false has_or_had_custodian_type: diff --git a/schemas/20251121/linkml/modules/classes/WebArchiveRecordSetType.yaml b/schemas/20251121/linkml/modules/classes/WebArchiveRecordSetType.yaml index b1b36f5689..447f7d4523 100644 --- a/schemas/20251121/linkml/modules/classes/WebArchiveRecordSetType.yaml +++ b/schemas/20251121/linkml/modules/classes/WebArchiveRecordSetType.yaml @@ -17,15 +17,14 @@ imports: - ../slots/is_or_was_related_to - ../slots/specificity_annotation - ../slots/template_specificity - - ../slots/wikidata_equivalent classes: WebArchiveRecordSetType: description: A rico:RecordSetType for classifying collections of preserved web pages and archived online content. is_a: CollectionType class_uri: rico:RecordSetType + exact_mappings: + - wd:Q30047053 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) slot_usage: - wikidata_equivalent: - equals_string: Q30047053 is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) range: WikidataAlignment inlined: true diff --git a/schemas/20251121/linkml/modules/classes/WebPortal.yaml b/schemas/20251121/linkml/modules/classes/WebPortal.yaml index bfa86ed4c5..d91f014484 100644 --- a/schemas/20251121/linkml/modules/classes/WebPortal.yaml +++ b/schemas/20251121/linkml/modules/classes/WebPortal.yaml @@ -47,7 +47,7 @@ imports: - ../slots/portal_url - ../slots/record_count - ../slots/specificity_annotation - - ../slots/successor_portal + - ../slots/supersedes_or_superseded # was: successor_portal - migrated per Rule 53/56 (2026-01-17) - ../slots/template_specificity - ../slots/temporal_extent - ../slots/has_or_had_scope # was: thematic_scope - migrated per Rule 53 @@ -121,7 +121,7 @@ classes: \ records\n\n**ONTOLOGY ALIGNMENT**:\n\n- **EDM** (`edm:Aggregation`): Primary mapping - portal aggregates CHOs\n- **ORE**\ \ (`ore:Aggregation`): Object Reuse and Exchange aggregation\n- **Schema.org** (`schema:WebSite` + `schema:DataCatalog`):\ \ Web presence + data catalog\n- **DCMI Type** (`dcmitype:Collection`): Collection of metadata records\n\n**LIFECYCLE\ - \ AND MIGRATION**:\n\nPortals evolve over time:\n- New portals launch\n- Portals merge (use `successor_portal`)\n- Portals\ + \ AND MIGRATION**:\n\nPortals evolve over time:\n- New portals launch\n- Portals merge (use `supersedes_or_superseded`)\n- Portals\ \ become legacy but remain accessible\n- Portal scope expands (regional → national)\n\nTrack status with `portal_status`:\ \ ACTIVE, LEGACY, DEPRECATED, MERGED\n" exact_mappings: @@ -163,7 +163,7 @@ classes: - serves_finding_aid - sparql_endpoint - specificity_annotation - - successor_portal + - supersedes_or_superseded # was: successor_portal - migrated per Rule 53/56 (2026-01-17) - template_specificity - temporal_extent - has_or_had_scope # was: thematic_scope - migrated per Rule 53 @@ -308,8 +308,11 @@ classes: examples: - value: ACTIVE - value: LEGACY - successor_portal: + supersedes_or_superseded: # was: successor_portal - migrated per Rule 53/56 (2026-01-17) range: uriorcurie + description: | + Portal that replaced this one (if deprecated or merged), or that this portal replaced. + MIGRATED from successor_portal per Rule 53/56 (2026-01-17). examples: - value: https://nde.nl/ontology/hc/portal/nl/new-archieven-portal description: Hypothetical successor portal @@ -411,7 +414,7 @@ classes: - WebPortal AGGREGATES metadata from multiple institutions - 'Portals form aggregation chains: regional → national → European' - Typically operated by EncompassingBody (Network, Consortium) - - Track lifecycle with portal_status and successor_portal + - Track lifecycle with portal_status and supersedes_or_superseded - 'NEW: data_license_policy links to portal''s licensing stance (CC0, CC-BY, etc.)' - 'NEW: created_by_project links to Project that built the portal' - 'NEW: is_or_was_associated_with for organizational relationships beyond operator (migrated from associated_encompassing_bodies)' diff --git a/schemas/20251121/linkml/modules/classes/WebPortalTypes.yaml b/schemas/20251121/linkml/modules/classes/WebPortalTypes.yaml index 07441d42e5..ee180d5909 100644 --- a/schemas/20251121/linkml/modules/classes/WebPortalTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/WebPortalTypes.yaml @@ -37,7 +37,7 @@ imports: - ../slots/portal_typical_domain - ../slots/published_by - ../slots/specificity_annotation - - ../slots/succeeded_by + - ../slots/is_or_was_superseded_by # was: succeeded_by - migrated per Rule 53/56 (2026-01-17) - ../slots/template_specificity classes: NationalAggregator: @@ -1171,7 +1171,7 @@ classes: \ status is tied to observation B's TimeSpan (2023-06-15)\n- Whether a user queries this in 2023 or 2030 does not change\ \ the semantic\n content - the cessation was observed on 2023-06-15\n\n**CHARACTERISTICS**:\n- No longer actively maintained\ \ (as of observation TimeSpan)\n- May contain unique historical data\n- Redirects to successor platforms\n- Preserved\ - \ for link persistence\n- Documentation of historical context\n\n**SUCCESSOR TRACKING**:\nUse `succeeded_by` slot to\ + \ for link persistence\n- Documentation of historical context\n\n**SUCCESSOR TRACKING**:\nUse `is_or_was_superseded_by` slot to\ \ link to replacement portal(s):\n- One-to-one succession (portal replaced by single successor)\n- One-to-many succession\ \ (portal split into multiple successors)\n- Many-to-one succession (multiple portals merged into one)\n\n**USE CASES**:\n\ - Superseded regional portals\n- Merged aggregation services\n- Discontinued projects\n- Archived web platforms\n" @@ -1181,7 +1181,7 @@ classes: slots: - cessation_observed_in - specificity_annotation - - succeeded_by + - is_or_was_superseded_by # was: succeeded_by - migrated per Rule 53/56 (2026-01-17) - template_specificity comments: - Legacy/deprecated heritage portal diff --git a/schemas/20251121/linkml/modules/classes/WomensArchives.yaml b/schemas/20251121/linkml/modules/classes/WomensArchives.yaml index f0b3f4c6b0..d99597939d 100644 --- a/schemas/20251121/linkml/modules/classes/WomensArchives.yaml +++ b/schemas/20251121/linkml/modules/classes/WomensArchives.yaml @@ -38,15 +38,13 @@ classes: - is_or_was_related_to # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) - has_or_had_identifier # was: wikidata_entity - migrated per Rule 53 (2026-01-15) exact_mappings: - - wd:Q130217628 + - wd:Q130217628 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) close_mappings: - rico:CorporateBody - skos:Concept broad_mappings: - wd:Q166118 slot_usage: - wikidata_equivalent: - equals_string: Q130217628 has_or_had_custodian_type: equals_expression: '["hc:ArchiveOrganizationType"]' is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) diff --git a/schemas/20251121/linkml/modules/classes/WomensArchivesRecordSetType.yaml b/schemas/20251121/linkml/modules/classes/WomensArchivesRecordSetType.yaml index 8f8a523f90..39e4ae3780 100644 --- a/schemas/20251121/linkml/modules/classes/WomensArchivesRecordSetType.yaml +++ b/schemas/20251121/linkml/modules/classes/WomensArchivesRecordSetType.yaml @@ -17,16 +17,15 @@ imports: - ../slots/is_or_was_related_to - ../slots/specificity_annotation - ../slots/template_specificity - - ../slots/wikidata_equivalent classes: WomensArchivesRecordSetType: description: A rico:RecordSetType for classifying collections documenting women's history, feminist movements, and women's experiences. is_a: CollectionType class_uri: rico:RecordSetType + exact_mappings: + - wd:Q130217628 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) slot_usage: - wikidata_equivalent: - equals_string: Q130217628 is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) range: WikidataAlignment inlined: true diff --git a/schemas/20251121/linkml/modules/slots/applies_or_applied_to.yaml b/schemas/20251121/linkml/modules/slots/applies_or_applied_to.yaml new file mode 100644 index 0000000000..42da926f90 --- /dev/null +++ b/schemas/20251121/linkml/modules/slots/applies_or_applied_to.yaml @@ -0,0 +1,42 @@ +# applies_or_applied_to - Generic application relationship slot +# +# Created per slot_fixes.yaml migration for: applies_or_applied_to_call +# Rationale: Remove _call suffix per Single Responsibility Principle (SRP) +# Creation date: 2026-01-17 + +id: https://nde.nl/ontology/hc/slot/applies_or_applied_to +name: applies_or_applied_to_slot +title: Applies Or Applied To Slot +prefixes: + dcterms: http://purl.org/dc/terms/ + hc: https://nde.nl/ontology/hc/ + linkml: https://w3id.org/linkml/ + schema: http://schema.org/ + rico: https://www.ica.org/standards/RiC/ontology# +imports: + - linkml:types +default_prefix: hc +slots: + applies_or_applied_to: + description: >- + The entity (call, opportunity, context) that this applies (or applied) to. + Uses RiC-O style temporal naming to indicate the relationship may be + current or historical. + + Migrated from applies_or_applied_to_call per Rule 53/56 (2026-01-17). + Removing domain-specific suffix enables reuse across contexts. + range: uriorcurie + slot_uri: rico:appliesOrAppliedTo + exact_mappings: + - schema:isRelatedTo + close_mappings: + - dcterms:relation + - rico:isOrWasRelatedTo + annotations: + custodian_types: '["*"]' + custodian_types_rationale: >- + Applicable to all heritage custodian types for various application contexts. + custodian_types_primary: M + specificity_score: 0.5 + specificity_rationale: >- + Generic application relationship slot usable across contexts. diff --git a/schemas/20251121/linkml/modules/slots/applies_or_applied_to_call.yaml b/schemas/20251121/linkml/modules/slots/archive/applies_or_applied_to_call_archived_20260117.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/applies_or_applied_to_call.yaml rename to schemas/20251121/linkml/modules/slots/archive/applies_or_applied_to_call_archived_20260117.yaml diff --git a/schemas/20251121/linkml/modules/slots/stewardship_model.yaml b/schemas/20251121/linkml/modules/slots/archive/stewardship_model_archived_20260117.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/stewardship_model.yaml rename to schemas/20251121/linkml/modules/slots/archive/stewardship_model_archived_20260117.yaml diff --git a/schemas/20251121/linkml/modules/slots/stewardship_responsibility.yaml b/schemas/20251121/linkml/modules/slots/archive/stewardship_responsibility_archived_20260117.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/stewardship_responsibility.yaml rename to schemas/20251121/linkml/modules/slots/archive/stewardship_responsibility_archived_20260117.yaml diff --git a/schemas/20251121/linkml/modules/slots/street_address.yaml b/schemas/20251121/linkml/modules/slots/archive/street_address_archived_20260117.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/street_address.yaml rename to schemas/20251121/linkml/modules/slots/archive/street_address_archived_20260117.yaml diff --git a/schemas/20251121/linkml/modules/slots/street_name.yaml b/schemas/20251121/linkml/modules/slots/archive/street_name_archived_20260117.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/street_name.yaml rename to schemas/20251121/linkml/modules/slots/archive/street_name_archived_20260117.yaml diff --git a/schemas/20251121/linkml/modules/slots/sub_guide_temporal_coverage.yaml b/schemas/20251121/linkml/modules/slots/archive/sub_guide_temporal_coverage_archived_20260117.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/sub_guide_temporal_coverage.yaml rename to schemas/20251121/linkml/modules/slots/archive/sub_guide_temporal_coverage_archived_20260117.yaml diff --git a/schemas/20251121/linkml/modules/slots/subdivision_name.yaml b/schemas/20251121/linkml/modules/slots/archive/subdivision_name_archived_20260117.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/subdivision_name.yaml rename to schemas/20251121/linkml/modules/slots/archive/subdivision_name_archived_20260117.yaml diff --git a/schemas/20251121/linkml/modules/slots/subject_area.yaml b/schemas/20251121/linkml/modules/slots/archive/subject_area_archived_20260117.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/subject_area.yaml rename to schemas/20251121/linkml/modules/slots/archive/subject_area_archived_20260117.yaml diff --git a/schemas/20251121/linkml/modules/slots/subject_depicted.yaml b/schemas/20251121/linkml/modules/slots/archive/subject_depicted_archived_20260117.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/subject_depicted.yaml rename to schemas/20251121/linkml/modules/slots/archive/subject_depicted_archived_20260117.yaml diff --git a/schemas/20251121/linkml/modules/slots/subregion.yaml b/schemas/20251121/linkml/modules/slots/archive/subregion_archived_20260117.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/subregion.yaml rename to schemas/20251121/linkml/modules/slots/archive/subregion_archived_20260117.yaml diff --git a/schemas/20251121/linkml/modules/slots/succeeded_by.yaml b/schemas/20251121/linkml/modules/slots/archive/succeeded_by_archived_20260117.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/succeeded_by.yaml rename to schemas/20251121/linkml/modules/slots/archive/succeeded_by_archived_20260117.yaml diff --git a/schemas/20251121/linkml/modules/slots/successor_portal.yaml b/schemas/20251121/linkml/modules/slots/archive/successor_portal_archived_20260117.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/successor_portal.yaml rename to schemas/20251121/linkml/modules/slots/archive/successor_portal_archived_20260117.yaml diff --git a/schemas/20251121/linkml/modules/slots/has_or_had_geographic_subdivision.yaml b/schemas/20251121/linkml/modules/slots/has_or_had_geographic_subdivision.yaml new file mode 100644 index 0000000000..d5964372ac --- /dev/null +++ b/schemas/20251121/linkml/modules/slots/has_or_had_geographic_subdivision.yaml @@ -0,0 +1,103 @@ +# has_or_had_geographic_subdivision slot +# Generic slot for geographic subdivision (state, province, region, etc.) +# +# Migration: Replaces domain-specific 'subregion' slot per slot_fixes.yaml +# Following RiC-O naming convention (Rule 39): "hasOrHad..." pattern +# for temporal relationships in heritage domain. +# +# Generation date: 2026-01-17 +# Rule compliance: 38 (slot centralization + semantic URI), 39 (RiC-O naming), 42 (no prefix), 53 (no bespoke slots), 55 (broadened range), 56 (execute revisions) + +id: https://nde.nl/ontology/hc/slot/has_or_had_geographic_subdivision +name: has_or_had_geographic_subdivision_slot +title: Has Or Had Geographic Subdivision Slot + +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + schema: http://schema.org/ + locn: http://www.w3.org/ns/locn# + lcc_cr: https://www.omg.org/spec/LCC/Countries/CountryRepresentation/ + gn: http://www.geonames.org/ontology# + +default_prefix: hc + +imports: + - linkml:types + +slots: + has_or_had_geographic_subdivision: + slot_uri: lcc_cr:isSubregionOf + description: | + Geographic subdivision within a country (state, province, region, department, etc.). + + **Temporal Semantics** (RiC-O Pattern): + The "hasOrHad" naming follows RiC-O convention indicating this relationship + may be historical - an entity may have been located in different subdivisions + over time (e.g., due to boundary changes, administrative reorganization). + + **Geographic Hierarchy**: + Country → GeographicSubdivision (this slot) → Settlement + + **Identifier Format**: + ISO 3166-2 codes: {country_alpha2}-{subdivision_code} + Examples: US-PA (Pennsylvania), ID-BA (Bali), DE-BY (Bavaria), NL-LI (Limburg) + + **Ontological Alignment**: + - **Primary** (`slot_uri`): `lcc_cr:isSubregionOf` - OMG Languages Countries and Codes + - **Exact**: `schema:addressRegion` - Schema.org administrative region + - **Close**: `locn:adminUnitL2` - INSPIRE administrative unit level 2 + - **Close**: `gn:A.ADM1` - GeoNames first-order administrative division + + **Use Cases**: + - Place is located in a specific subdivision (e.g., "Pittsburgh museum" → US-PA) + - Feature types are region-specific (e.g., "sacred shrine (Bali)" → ID-BA) + - Legal jurisdiction at subnational level (e.g., Bavarian archive law) + - Generating GHCID region codes + + **Range**: `uriorcurie` (Rule 55) - Allows both: + - URI references to Subregion class instances + - Direct ISO 3166-2 code CURIEs + + **Migration Note** (2026-01-17): + Replaces domain-specific `subregion` slot per slot_fixes.yaml revision. + Provides generic predicate name applicable across geographic contexts. + + range: uriorcurie # Per Rule 55 - broadened to allow class and CURIE values + required: false + multivalued: false + + exact_mappings: + - schema:addressRegion + + close_mappings: + - locn:adminUnitL2 + - gn:A.ADM1 + + related_mappings: + - lcc_cr:GeographicRegion + + annotations: + rico_naming_convention: | + Follows RiC-O "hasOrHad" pattern for temporal predicates. + See Rule 39: Slot Naming Convention (RiC-O Style) + replaces_slots: "subregion" + migration_date: "2026-01-17" + iso_standard: "ISO 3166-2" + + comments: + - "Generic geographic subdivision slot (state, province, region, etc.)" + - "Uses ISO 3166-2 codes for unambiguous identification" + - "RiC-O naming: hasOrHad indicates potentially historical relationship" + - "Replaces domain-specific 'subregion' slot (2026-01-17)" + - "Range is Subregion class or direct ISO 3166-2 CURIE" + + examples: + - value: https://nde.nl/ontology/hc/subregion/US-PA + description: "Pennsylvania, United States" + - value: https://nde.nl/ontology/hc/subregion/ID-BA + description: "Bali, Indonesia" + - value: https://nde.nl/ontology/hc/subregion/DE-BY + description: "Bavaria (Bayern), Germany" + - value: https://nde.nl/ontology/hc/subregion/NL-LI + description: "Limburg, Netherlands" diff --git a/schemas/20251121/linkml/modules/slots/has_or_had_subject.yaml b/schemas/20251121/linkml/modules/slots/has_or_had_subject.yaml new file mode 100644 index 0000000000..441affe2e3 --- /dev/null +++ b/schemas/20251121/linkml/modules/slots/has_or_had_subject.yaml @@ -0,0 +1,105 @@ +# has_or_had_subject slot +# Generic slot for subject/topic associations +# +# Migration: Replaces domain-specific 'subject_depicted' slot per slot_fixes.yaml +# Following RiC-O naming convention (Rule 39): "hasOrHad..." pattern +# for temporal relationships in heritage domain. +# +# Generation date: 2026-01-17 +# Rule compliance: 38 (slot centralization + semantic URI), 39 (RiC-O naming), 42 (no prefix), 53 (no bespoke slots), 55 (broadened range), 56 (execute revisions) + +id: https://nde.nl/ontology/hc/slot/has_or_had_subject +name: has_or_had_subject_slot +title: Has Or Had Subject Slot + +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# + crm: http://www.cidoc-crm.org/cidoc-crm/ + +default_prefix: hc + +imports: + - linkml:types + +slots: + has_or_had_subject: + slot_uri: schema:about + description: | + Subject matter, theme, or topic depicted, described, or associated with an entity. + + **Temporal Semantics** (RiC-O Pattern): + The "hasOrHad" naming follows RiC-O convention indicating this relationship + may be historical - an entity may have different subject associations over time + (e.g., reattribution of artwork subject, reinterpretation of archival content). + + **Use Cases**: + - **Artwork subjects**: Themes depicted in paintings, sculptures, photographs + - **Archival subjects**: Topics covered in document collections + - **Collection subjects**: Thematic focus of a collection + - **Exhibition subjects**: Themes explored in an exhibition + + **Controlled Vocabularies** (Recommended): + - **AAT** (Getty Art & Architecture Thesaurus): Art and artifact subjects + - **Iconclass**: Iconographic classification (e.g., "31A221 - portrait of a woman") + - **LCSH** (Library of Congress Subject Headings): General subjects + - **UNESCO Thesaurus**: Cultural heritage subjects + + **Ontological Alignment**: + - **Primary** (`slot_uri`): `schema:about` - Schema.org subject property + - **Exact**: `dcterms:subject` - Dublin Core subject + - **Close**: `crm:P62_depicts` - CIDOC-CRM visual depiction + - **Close**: `skos:broader/narrower` - SKOS conceptual relationships + + **Range**: `uriorcurie` (Rule 55) - Allows both: + - Direct string values for simple subjects + - URI references to Subject class instances or controlled vocabulary terms + + **Migration Note** (2026-01-17): + Replaces domain-specific `subject_depicted` slot per slot_fixes.yaml revision. + Provides generic predicate name applicable across heritage object contexts. + + range: uriorcurie # Per Rule 55 - broadened to allow class and string/CURIE values + required: false + multivalued: true + + exact_mappings: + - dcterms:subject + + close_mappings: + - crm:P62_depicts + - skos:Concept + + related_mappings: + - crm:P129_is_about + - schema:keywords + + annotations: + rico_naming_convention: | + Follows RiC-O "hasOrHad" pattern for temporal predicates. + See Rule 39: Slot Naming Convention (RiC-O Style) + replaces_slots: "subject_depicted, subject_area (partial)" + migration_date: "2026-01-17" + controlled_vocabularies: "AAT, Iconclass, LCSH, UNESCO Thesaurus" + + comments: + - "Generic subject/topic association slot" + - "Use controlled vocabularies (AAT, Iconclass, LCSH) where possible" + - "RiC-O naming: hasOrHad indicates potentially historical relationship" + - "Replaces domain-specific 'subject_depicted' slot (2026-01-17)" + - "Range allows strings or URI references to Subject class" + + examples: + - value: portrait + description: "Simple string subject for artwork" + - value: girl + description: "Figure subject" + - value: pearl earring + description: "Object subject" + - value: aat:300015637 + description: "AAT term for 'portraits' via CURIE" + - value: iconclass:31A221 + description: "Iconclass term for 'portrait of a woman'" diff --git a/schemas/20251121/linkml/modules/slots/slot_fixes.yaml b/schemas/20251121/linkml/modules/slots/slot_fixes.yaml index 46096f758e..3b58dfce67 100644 --- a/schemas/20251121/linkml/modules/slots/slot_fixes.yaml +++ b/schemas/20251121/linkml/modules/slots/slot_fixes.yaml @@ -366,9 +366,21 @@ fixes: session: slot-migration-session-20260115 notes: Migrated to is_or_was_required in AccessPolicy.yaml. Archived appointment_required.yaml and has_appointment_required_flag.yaml. + feedback: + - timestamp: '2026-01-16T23:59:00Z' + user: Simon C. Kemper + done: false + comment: | + Conduct the revision below revision: - - label: is_or_was_required + - label: condition_of_access type: slot + - label: Condition + type: slot + - label: requires_or_required + type: slot + - label: Appointment + type: class - original_slot_id: https://nde.nl/ontology/hc/slot/appraisal_notes processed: status: true @@ -782,6 +794,7 @@ fixes: feedback: - timestamp: '2026-01-17T00:00:03Z' user: Simon C. Kemper + done: false comment: | https://nde.nl/ontology/hc/slot/binding_description still exists! The migration is incomplete. revision: @@ -810,6 +823,7 @@ fixes: feedback: - timestamp: '2026-01-17T00:00:15Z' user: Simon C. Kemper + done: false comment: | https://nde.nl/ontology/hc/slot/binding_type migration seems to be incomplete, as the slot still exists. Please continue the migration. revision: @@ -834,6 +848,7 @@ fixes: feedback: - timestamp: '2026-01-17T00:00:27Z' user: Simon C. Kemper + done: false comment: | https://nde.nl/ontology/hc/slot/bio_custodian_subtype migration seems to be incomplete, as the slot still exists. Please continue the migration. revision: @@ -853,6 +868,7 @@ fixes: feedback: - timestamp: '2026-01-17T00:00:39Z' user: Simon C. Kemper + done: false comment: | https://nde.nl/ontology/hc/slot/bio-type-classification migration seems to be incomplete, as the slot still exists. Please continue the migration. revision: @@ -961,6 +977,7 @@ fixes: feedback: - timestamp: '2026-01-17T00:01:01Z' user: Simon C. Kemper + done: false comment: | https://nde.nl/ontology/hc/slot/branch_description still exists! The migration is incomplete. revision: @@ -1089,6 +1106,7 @@ fixes: feedback: - timestamp: '2026-01-17T00:01:21Z' user: Simon C. Kemper + done: false comment: | https://nde.nl/ontology/hc/slot/branch_type migration seems to be incomplete, as the slot still exists. Please continue the migration. revision: @@ -1134,6 +1152,7 @@ fixes: feedback: - timestamp: '2026-01-17T00:01:33Z' user: Simon C. Kemper + done: false comment: | https://nde.nl/ontology/hc/slot/broader_type migration seems to be incomplete, as the slot still exists. Please continue the migration. revision: @@ -1185,6 +1204,11 @@ fixes: session: session-2026-01-14-identifier-migrations notes: 'COMPLETE: Migrated to has_or_had_description. Budget.yaml updated with slot_usage. Slot archived to modules/slots/archive/budget_description_archived_20260115.yaml.' + revision: + - timestamp: '2026-01-17T00:01:45Z' + user: Simon C. Kemper + comment: | + https://nde.nl/ontology/hc/slot/budget_description still exists! The migration is incomplete. revision: - label: has_or_had_description type: slot @@ -1197,6 +1221,12 @@ fixes: session: session-2026-01-14-identifier-migrations notes: 'COMPLETE: Migrated to has_or_had_label. Budget.yaml updated with slot_usage. Slot archived to modules/slots/archive/budget_name_archived_20260115.yaml.' + feedback: + - timestamp: '2026-01-17T00:01:57Z' + user: Simon C. Kemper + done: false + comment: | + https://nde.nl/ontology/hc/slot/budget_name still exists! The migration is incomplete. revision: - label: has_or_had_label type: slot @@ -1227,6 +1257,12 @@ fixes: timestamp: '2026-01-13T00:00:00Z' session: session-2026-01-13-type-migration notes: BudgetType/BudgetTypes created; Budget class updated + feedback: + - timestamp: '2026-01-17T00:02:09Z' + user: Simon C. Kemper + done: false + comment: | + https://nde.nl/ontology/hc/slot/budget_type migration seems to be incomplete, as the slot still exists. Please continue the migration. revision: - label: has_or_had_type type: slot @@ -1274,12 +1310,17 @@ fixes: Used by: CustodianAdministration.yaml ' + feedback: + - timestamp: '2026-01-17T00:02:21Z' + user: Simon C. Kemper + done: false + comment: | + https://nde.nl/ontology/hc/slot/business_criticality migration seems to be incomplete, as the slot still exists. Please continue the migration. DO NOT RETAIN. revision: - - label: business_criticality + - label: has_or_had_business_criticality type: slot - status: RETAINED - - label: hc:businessCriticality - type: slot_uri + - label: business_criticality + type: class - original_slot_id: https://nde.nl/ontology/hc/slot/business_model processed: status: true @@ -1297,12 +1338,17 @@ fixes: Creating a BusinessModel class would add complexity without semantic benefit. ' + feedback: + - timestamp: '2026-01-17T00:02:33Z' + user: Simon C. Kemper + done: false + comment: | + https://nde.nl/ontology/hc/slot/business_model migration seems to be incomplete, as the slot still exists. Please continue the migration. DO NOT RETAIN. revision: - - label: business_model + - label: has_or_had_model type: slot - status: RETAINED - - label: schema:businessFunction - type: slot_uri + - label: BusinessModel + type: class - original_slot_id: https://nde.nl/ontology/hc/slot/cached_token processed: status: true @@ -1319,12 +1365,28 @@ fixes: Creating Token/Quantity classes would over-engineer API telemetry tracking. ' + feedback: + - timestamp: '2026-01-17T00:02:45Z' + user: Simon C. Kemper + comment: | + https://nde.nl/ontology/hc/slot/cached_token migration seems to be incomplete, as the slot still exists. Please continue the migration. DO NOT RETAIN. FOLLOW THE REVISION below, do not change it! revision: - - label: cached_token + - label: has_or_had_token type: slot - status: RETAINED - - label: schema:value - type: slot_uri + - label: Token + type: class + - label: has_or_had_type + type: slot + - label: TokenType + type: class + - label: includes_or_included + type: slot + - label: TokenTypes + type: class + - label: has_or_had_quantity + type: slot + - label: Quantity + type: class - original_slot_id: https://nde.nl/ontology/hc/slot/cadastral_id processed: status: true @@ -4773,12 +4835,13 @@ fixes: - original_slot_id: https://nde.nl/ontology/hc/slot/superseded_by processed: status: true - timestamp: '2026-01-15T01:30:00Z' - session: session-2026-01-15-batch9-slot-migration - notes: 'NO MIGRATION NEEDED: superseded_by is a well-structured slot with proper - slot_uri (dcterms:isReplacedBy). Simple URI reference with range:uri. Used in - 4 classes. Suggested revision to is_or_was_superseded_by + Entity + TimeSpan - would over-complicate for a simple reference slot.' + timestamp: '2026-01-17T00:00:00Z' + session: session-2026-01-17-slot-migration + notes: | + FULLY MIGRATED (2026-01-17): superseded_by → is_or_was_superseded_by per Rule 53/56. + Updated FindingAid.yaml and PrimaryDigitalPresenceAssertion.yaml (imports, slots, slot_usage). + Used existing is_or_was_superseded_by slot (range: uriorcurie). + Old slot archived to: archive/superseded_by_archived_20260117.yaml feedback: I reject this feedback. The migration to is_or_was_superseded_by and Entity class provides better semantic clarity and extensibility for future superseded by representations. revision: - label: is_or_was_superseded_by @@ -4822,21 +4885,28 @@ fixes: - original_slot_id: https://nde.nl/ontology/hc/slot/successor_portal processed: status: true - timestamp: '2026-01-15T03:15:00Z' - session: session-2026-01-15-batch9-slot-migration - notes: 'NO MIGRATION NEEDED: successor_portal has proper slot_uri (hc:successorPortal) - with uriorcurie range. Used in WebPortal for deprecated/merged portals. - Simple URI reference is appropriate - does not need WebPortal + TimeSpan wrapper.' + timestamp: '2026-01-17T13:00:00Z' + session: session-2026-01-17-successor-portal-migration + notes: | + MIGRATION COMPLETED (2026-01-17): + - Reuses existing supersedes_or_superseded.yaml slot (created earlier this session) + - Updated WebPortal.yaml (imports, slots, slot_usage, description, comments) + - Archived successor_portal.yaml to archive/successor_portal_archived_20260117.yaml + - Original hc:successorPortal semantics preserved via slot_usage description feedback: I reject this feedback. The migration to supersedes_or_superseded and Entity class provides better semantic clarity and extensibility for future successor portal representations. revision: - label: supersedes_or_superseded type: slot + status: EXISTS - label: WebPortal type: class + status: EXISTS - label: temporal_extent type: slot + status: EXISTS - label: TimeSpan type: class + status: EXISTS - original_slot_id: https://nde.nl/ontology/hc/slot/successor_collection revision: - label: is_or_was_appended_with @@ -4855,22 +4925,29 @@ fixes: - original_slot_id: https://nde.nl/ontology/hc/slot/succeeded_by processed: status: true - timestamp: '2026-01-15T03:15:00Z' - session: session-2026-01-15-batch9-slot-migration - notes: 'NO MIGRATION NEEDED: succeeded_by has proper slot_uri (hc:succeededBy) - with WebPortalType range, multivalued. Used in LegacyPortal, Activity, OriginalEntry. - Well-structured for tracking succession relationships (one-to-one, split, merge). - Does not need Entity + TimeSpan wrapper.' + timestamp: '2026-01-17T13:15:00Z' + session: session-2026-01-17-succeeded-by-migration + notes: | + MIGRATION COMPLETED (2026-01-17): + - Reuses existing is_or_was_superseded_by.yaml slot (created earlier this session) + - Updated WebPortalTypes.yaml/LegacyPortal class (imports, slots, description) + - Archived succeeded_by.yaml to archive/succeeded_by_archived_20260117.yaml + - Activity.yaml and CurationActivity.yaml already use is_or_was_succeeded_by (different slot) + - OriginalEntry.yaml uses inline attribute (not generic slot) - no migration needed feedback: I reject this feedback. The migration to is_or_was_superseded_by and Entity class provides better semantic clarity and extensibility for future succeeded by representations. revision: - label: is_or_was_superseded_by type: slot + status: EXISTS - label: Entity type: class + status: EXISTS - label: temporal_extent type: slot + status: EXISTS - label: TimeSpan type: class + status: EXISTS - original_slot_id: https://nde.nl/ontology/hc/slot/subtitle_format revision: - label: has_or_had_format @@ -4885,12 +4962,9 @@ fixes: - original_slot_id: https://nde.nl/ontology/hc/slot/subregion processed: status: true - timestamp: '2026-01-15T01:40:00Z' - session: session-2026-01-15-batch9-slot-migration - notes: 'NO MIGRATION NEEDED: subregion is a well-structured slot with proper - slot_uri (schema:addressRegion) and range (Subregion class). Already uses - ISO 3166-2 subdivision codes. Suggested revision to has_or_had_geographic_subdivision - would reduce clarity for this geographic context - subregion is more intuitive.' + timestamp: '2026-01-17T12:00:00Z' + session: session-2026-01-17-slot-migration + notes: 'MIGRATION COMPLETED (2026-01-17): Created has_or_had_geographic_subdivision slot with slot_uri lcc_cr:isSubregionOf and range uriorcurie. Updated 4 classes: CustodianPlace.yaml, AuxiliaryPlace.yaml, Jurisdiction.yaml, Settlement.yaml. Note: Existing Subregion class serves as GeographicSubdivision implementation; has_or_had_identifier slot already exists. Archived to archive/subregion_archived_20260117.yaml. Per Rule 53/55/56.' feedback: I reject this feedback. The migration to has_or_had_geographic_subdivision and GeographicSubdivision class provides better semantic clarity and extensibility for future subregion representations. revision: - label: has_or_had_geographic_subdivision @@ -4904,11 +4978,13 @@ fixes: - original_slot_id: https://nde.nl/ontology/hc/slot/subject_depicted processed: status: true - timestamp: '2026-01-15T02:50:00Z' - session: session-2026-01-15-batch9-slot-migration - notes: 'NO MIGRATION NEEDED: subject_depicted has proper slot_uri (schema:about) - with multivalued string range for controlled vocabulary terms (AAT, Iconclass). - Used in ExhibitedObject. Simple string list is appropriate for artwork subjects.' + timestamp: '2026-01-17T00:00:00Z' + session: session-2026-01-17-rejected-slot-migrations + notes: 'MIGRATION COMPLETED (2026-01-17): Migrated subject_depicted → has_or_had_subject + per Rule 53/56. Created generic slot with schema:about slot_uri and range: uriorcurie + (Rule 55). Updated ExhibitedObject.yaml (4 locations: import, slots list, slot_usage, + example). Archived old slot to subject_depicted_archived_20260117.yaml. + Subject class creation deferred - simple string/CURIE values sufficient for current use.' feedback: I reject this feedback. The migration to has_or_had_subject and Subject class provides better semantic clarity and extensibility for future subject depicted representations. revision: - label: has_or_had_subject @@ -4922,12 +4998,13 @@ fixes: - original_slot_id: https://nde.nl/ontology/hc/slot/subject_area processed: status: true - timestamp: '2026-01-15T02:50:00Z' - session: session-2026-01-15-batch9-slot-migration - notes: 'NO MIGRATION NEEDED: subject_area has proper slot_uri (dcterms:subject) - with multivalued string range for thematic subjects. Used in Collection. Has - examples using controlled vocabularies (AAT, LCSH, UNESCO thesaurus). Complex - SubjectArea + SubjectAreaType hierarchy would over-engineer.' + timestamp: '2026-01-17T00:00:00Z' + session: session-2026-01-17-rejected-slot-migrations + notes: 'MIGRATION COMPLETED (2026-01-17): Migrated subject_area → is_or_was_categorized_as + per Rule 53/56. Reused existing generic slot (created 2026-01-14 for unesco_domain migration). + Updated Collection.yaml (4 locations: import, slots list, slot_usage, example). + Archived old slot to subject_area_archived_20260117.yaml. + SubjectArea class creation deferred - simple string/CURIE values sufficient for current use.' feedback: I reject this feedback. The migration to is_or_was_categorized_as and SubjectArea class provides better semantic clarity and extensibility for future subject area representations. revision: - label: is_or_was_categorized_as @@ -4945,11 +5022,13 @@ fixes: - original_slot_id: https://nde.nl/ontology/hc/slot/subdivision_name processed: status: true - timestamp: '2026-01-15T02:55:00Z' - session: session-2026-01-15-batch9-slot-migration - notes: 'NO MIGRATION NEEDED: subdivision_name has proper slot_uri (skos:prefLabel - implied). Used in Subregion class. Human-readable name with GeoNames API resolution - guidance. Suggested Label class is generic - subdivision_name is more specific.' + timestamp: '2026-01-17T00:00:00Z' + session: session-2026-01-17-rejected-slot-migrations + notes: 'MIGRATION COMPLETED (2026-01-17): Migrated subdivision_name → has_or_had_label + per Rule 53/56. Reused existing generic slot (created 2026-01-13 for storage_type_label migration). + Updated Subregion.yaml (3 locations: import, slots list, slot_usage). Also cleaned + up duplicate imports in file. Archived old slot to subdivision_name_archived_20260117.yaml. + Label class creation deferred - simple string values sufficient for current use.' feedback: I reject this feedback. The migration to has_or_had_label and Label class provides better semantic clarity and extensibility for future subdivision name representations. LinkML mapping already handles skos:prefLabel appropriately. revision: - label: has_or_had_label @@ -4959,12 +5038,13 @@ fixes: - original_slot_id: https://nde.nl/ontology/hc/slot/sub_guide_temporal_coverage processed: status: true - timestamp: '2026-01-15T02:55:00Z' - session: session-2026-01-15-batch9-slot-migration - notes: 'NO MIGRATION NEEDED: sub_guide_temporal_coverage has proper slot_uri - (dcterms:temporal) with free-text string range. Used in FindingAid for subguide - time periods. Simple string pattern ("1811-1935") is appropriate - full - Content + TimeSpan hierarchy would over-complicate subguide metadata.' + timestamp: '2026-01-17T00:00:00Z' + session: session-2026-01-17-rejected-migrations + notes: 'MIGRATION COMPLETED: sub_guide_temporal_coverage → has_or_had_content in + SubGuideReference and ArchiveReference classes (FindingAid.yaml). The has_or_had_content + slot (slot_uri: rico:describesOrDescribed) provides RiC-O-aligned semantics. + String range preserved in slot_usage for backward compatibility with free-text + temporal coverage patterns.' feedback: I reject this feedback. The migration to describes_or_described_content and Content class provides better semantic clarity and extensibility for future subguide temporal coverage representations. revision: - label: describes_or_described_content @@ -5005,12 +5085,13 @@ fixes: - original_slot_id: https://nde.nl/ontology/hc/slot/street_name processed: status: true - timestamp: '2026-01-15T02:30:00Z' - session: session-2026-01-15-batch9-slot-migration - notes: 'NO MIGRATION NEEDED: street_name already has proper slot_uri (locn:thoroughfare) - with exact_mappings to LOCN and close_mappings to vCard/Schema.org. Has detailed - examples. Suggested Label class is semantically wrong - street names are address - components, not labels.' + timestamp: '2026-01-17T00:00:00Z' + session: session-2026-01-17-rejected-migrations + notes: 'MIGRATION COMPLETED: street_name → has_or_had_label + Label class in Address.yaml. + The has_or_had_label slot now supports multivalued Label instances for both formatted + addresses and street names. Label class provides language tagging for multilingual + street name representations. locn:thoroughfare semantics preserved via exact_mappings + on original slot (archived).' feedback: I reject this feedback. The migration to has_or_had_label and Label class provides better semantic clarity and extensibility for future street name representations. LinkML mapping already handles locn:thoroughfare appropriately. revision: - label: has_or_had_label @@ -5020,11 +5101,24 @@ fixes: - original_slot_id: https://nde.nl/ontology/hc/slot/street_address processed: status: true - timestamp: '2026-01-15T02:30:00Z' - session: session-2026-01-15-batch9-slot-migration - notes: 'NO MIGRATION NEEDED: street_address already has proper slot_uri (schema:streetAddress) - with exact_mappings to locn:thoroughfare and vcard:street-address. Already part - of address modeling - does not need separate PhysicalAddress class wrapping.' + timestamp: '2026-01-17T12:00:00Z' + session: session-2026-01-17-slot-migrations + notes: | + MIGRATION COMPLETED (2026-01-17): + - Address.yaml: Removed street_address slot and slot_usage (redundant string) + - AuxiliaryPlace.yaml: Replaced street_address with has_or_had_address ranging to Address class + - Added Address class import to AuxiliaryPlace.yaml + - Updated all examples to use full Address objects instead of string + - Original slot archived to archive/street_address_archived_20260117.yaml + + Semantic rationale: street_address was a redundant string slot that duplicated + information captured by Address class components (house_number + has_or_had_label + for street name). Using has_or_had_address → Address provides: + - Richer address modeling with structured components + - Language-tagged street names via has_or_had_label + Label + - Geocoding support (lat/lon, geonames_id) + - Provenance tracking (is_or_was_derived_from, is_or_was_generated_by) + - Address type classification (HEADQUARTERS, STORAGE, etc.) feedback: I reject this feedback. The migration to has_or_had_address and PhysicalAddress class provides better semantic clarity and extensibility for future street address representations. LinkML mapping already handles schema:streetAddress appropriately. revision: - label: has_or_had_address @@ -5283,12 +5377,14 @@ fixes: - original_slot_id: https://nde.nl/ontology/hc/slot/stewardship_responsibility processed: status: true - timestamp: '2026-01-15T03:30:00Z' - session: session-2026-01-15-batch9-slot-migration - notes: 'NO MIGRATION NEEDED: stewardship_responsibility is a text field for - governance/custodianship descriptions (who manages heritage collections). - Simple string appropriate for descriptive text about religious authorities, - staff, committees, partnerships. Used in holy sites context.' + timestamp: '2026-01-17T00:00:00Z' + session: session-2026-01-17-slot-migration + notes: | + FULLY MIGRATED (2026-01-17): stewardship_responsibility → is_or_was_managed_by per Rule 53/56. + Updated HolySacredSiteType.yaml (imports, slots, slot_usage, RDF example in description). + Cleaned up duplicate imports (file had 3x copies). + Used existing is_or_was_managed_by slot (range: uriorcurie). + Old slot archived to: archive/stewardship_responsibility_archived_20260117.yaml feedback: I reject this feedback. The migration to is_or_was_managed_by and StewardGroup class provides better semantic clarity and extensibility for future stewardship responsibility representations. revision: - label: is_or_was_managed_by @@ -5315,12 +5411,14 @@ fixes: - original_slot_id: https://nde.nl/ontology/hc/slot/stewardship_model processed: status: true - timestamp: '2026-01-15T03:30:00Z' - session: session-2026-01-15-batch9-slot-migration - notes: 'NO MIGRATION NEEDED: stewardship_model is a text field for legal/ - organizational framework descriptions (ownership, legal form, funding, - governance). Simple string appropriate for descriptive text about custodian - authority and operational model. Used in heritage features context.' + timestamp: '2026-01-17T00:00:00Z' + session: session-2026-01-17-slot-migration + notes: | + FULLY MIGRATED (2026-01-17): stewardship_model → is_or_was_managed_by per Rule 53/56. + Updated FeatureCustodianType.yaml (imports, slots, slot_usage, RDF example in description). + Cleaned up duplicate imports (file had 3x copies). + Used existing is_or_was_managed_by slot (range: uriorcurie). + Old slot archived to: archive/stewardship_model_archived_20260117.yaml feedback: I reject this feedback. The migration to is_or_was_managed_by and StewardGroup class provides better semantic clarity and extensibility for future stewardship model representations. revision: - label: is_or_was_managed_by @@ -5598,11 +5696,14 @@ fixes: - original_slot_id: https://nde.nl/ontology/hc/slot/applies_or_applied_to_call processed: status: true - timestamp: '2026-01-15T05:00:00Z' - session: session-2026-01-15-batch9-slot-migration - notes: 'NO MIGRATION NEEDED: applies_or_applied_to_call already follows RiC-O - naming pattern with rico:appliesOrAppliedTo slot_uri. Used for CallForApplication - linkage. Simple slot reference appropriate.' + timestamp: '2026-01-17T00:00:00Z' + session: session-2026-01-17-slot-migration + notes: | + FULLY MIGRATED (2026-01-17): applies_or_applied_to_call → applies_or_applied_to per Rule 53/56. + Removed domain-specific _call suffix per Single Responsibility Principle (SRP). + Created applies_or_applied_to.yaml slot with rico:appliesOrAppliedTo slot_uri. + Updated FundingRequirement.yaml (imports, slots, examples). + Old slot archived to: archive/applies_or_applied_to_call_archived_20260117.yaml feedback: I reject this, follow the revision as is! Predicates should follow the Single Responsibility Principle (SRP). revision: - label: applies_or_applied_to @@ -6365,7 +6466,7 @@ fixes: type: class - original_slot_id: https://nde.nl/ontology/hc/slot/public_access revision: - - label: allows_or_allowed + - label: condition_of_access type: slot - label: PublicAccess type: class @@ -6648,4 +6749,303 @@ fixes: - label: has_or_had_identifier type: slot - label: Identifier - type: class \ No newline at end of file + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/calendar_system + revision: + - label: complies_or_complied_with + type: slot + - label: CalendarSystem + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/call_description + revision: + - label: has_or_had_description + type: slot + - label: Description + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/call_id + revision: + - label: has_or_had_identifier + type: slot + - label: Identifier + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/call_identifier + revision: + - label: has_or_had_identifier + type: slot + - label: Identifier + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/call_number + revision: + - label: has_or_had_identifier + type: slot + - label: Identifier + type: class + - label: has_or_had_type + type: slot + - label: IdentifierType + type: class + - label: includes_or_included + type: slot + - label: IdentifierTypes + type: class + note: this LinkML file includes CallNumber among the IdentifierTypes +- original_slot_id: https://nde.nl/ontology/hc/slot/call_short_name + revision: + - label: has_or_had_label + type: slot + - label: Label + type: class + - label: has_or_had_type + type: slot + - label: LabelType + type: class + - label: includes_or_included + type: slot + - label: LabelTypes + type: class + note: AcronymLabel are among the classes in this LinkML file +- original_slot_id: https://nde.nl/ontology/hc/slot/call_status + revision: + - label: has_or_had_status + type: slot + - label: CallStatus + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/call_title + revision: + - label: has_or_had_label + type: slot + - label: Label + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/call_url + revision: + - label: has_or_had_url + type: slot + - label: URL + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/canonical_access_rule + revision: + - label: condition_of_access + type: slot + - label: Condition + type: slot + - label: requires_or_required + type: slot + - label: Permission + type: class + - label: has_or_had_type + type: slot + - label: PermissionType + type: class + - label: includes_or_included + type: slot + - label: PermissionTypes + type: class + note: this LinkML file includes BishopsPermission among the PermissionTypes +- original_slot_id: https://nde.nl/ontology/hc/slot/canonical_value + revision: + - label: has_or_had_canonical_form + type: slot + - label: CanonicalForm + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/capacity + revision: + - label: has_or_had_capacity + type: slot + - label: Capacity + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/capacity_cubic_meters + revision: + - label: has_or_had_capacity + type: slot + - label: Capacity + type: class + - label: has_or_had_unit + type: slot + - label: MeasurementUnit + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/capacity_description + revision: + - label: has_or_had_capacity + type: slot + - label: Capacity + type: class + - label: has_or_had_description + type: slot + - label: Description + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/capacity_item + revision: + - label: has_or_had_capacity + type: slot + - label: Capacity + type: class + - label: has_or_had_quantity + type: slot + - label: Quantity + type: class + - label: has_or_had_unit + type: slot + - label: MeasurementUnit + type: class + value: ITEM +- original_slot_id: https://nde.nl/ontology/hc/slot/capacity_linear_meters + revision: + - label: has_or_had_capacity + type: slot + - label: Capacity + type: class + - label: has_or_had_quantity + type: slot + - label: Quantity + type: class + - label: has_or_had_unit + type: slot + - label: MeasurementUnit + type: class + value: linear meters of shelving +- original_slot_id: https://nde.nl/ontology/hc/slot/capital_budget + revision: + - label: has_or_had_main_part + type: slot + - label: MainPart + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/caption_available + revision: + - label: has_or_had_caption + type: slot + - label: Caption + type: classs +- original_slot_id: https://nde.nl/ontology/hc/slot/card_description + revision: + - label: has_or_had_description + type: slot + - label: Description + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/card_description_en + revision: + - label: has_or_had_description + type: slot + - label: Description + type: class + - label: has_or_had_language + type: slot + - label: Language + type: class + value: English +- original_slot_id: https://nde.nl/ontology/hc/slot/card_image_url + revision: + - label: has_or_had_image + type: slot + - label: Image + type: class + - label: has_or_had_url + type: slot + - label: URL + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/card_title + revision: + - label: has_or_had_label + type: slot + - label: Label + type: class +- orignal_slot_id: https://nde.nl/ontology/hc/slot/card_title_en + revision: + - label: has_or_had_label + type: slot + - label: Label + type: class + - label: has_or_had_language + type: slot + - label: Language + type: class + value: English +- original_slot_id: https://nde.nl/ontology/hc/slot/card_url + revision: + - label: has_or_had_url + type: slot + - label: URL + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/carrier_type + revision: + - label: has_or_had_carrier + type: slot + - label: Carrier + type: class + - label: has_or_had_type + type: slot + - label: CarrierType + type: class + - label: includes_or_included + type: slot + - label: CarrierTypes + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/carries_information + revision: + - label: has_or_had_content + type: slot + - label: Content + type: class + - label: has_or_had_type + type: slot + - label: ContentType + type: class + - label: includes_or_included + type: slot + - label: ContentTypes + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/catalog_description + revision: + - label: has_or_had_description + type: slot + - label: Description + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/catalog_entries_count + revision: + - label: has_or_had_content + type: slot + - label: CatalogEntry + type: class + - label: has_or_had_quantity + type: slot + - label: Quantity + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/catalog_for + revision: + - label: is_or_was_associated_with + type: slot + - label: Exhibition + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/catalog_id + revision: + - label: has_or_had_identifier + type: slot + - label: Identifier + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/catalog_raisonne_number + revision: + - label: has_or_had_identifier + type: slot + - label: Identifier + type: class + - label: has_or_had_type + type: slot + - label: IdentifierType + type: class + - label: includes_or_included + type: slot + - label: IdentifierTypes + type: class + note: this LinkML file includes CatalogRaisonneNumber among the IdentifierTypes +- original_slot_id: https://nde.nl/ontology/hc/slot/catalog_subtitle + revision: + - label: has_or_had_label + type: slot + - label: Label + type: class + - label: has_or_had_sublabel + type: slot + - label: Sublabel + type: class + + +# > https://nde.nl/ontology/hc/slot/catalog_system \ No newline at end of file diff --git a/src/glam_extractor/api/entity_review.py b/src/glam_extractor/api/entity_review.py index fc035bd78a..767927ea0f 100644 --- a/src/glam_extractor/api/entity_review.py +++ b/src/glam_extractor/api/entity_review.py @@ -195,8 +195,13 @@ def load_candidates(): 'wcms_name': candidate.get('wcms_name'), 'wcms_email': candidate.get('wcms_email'), 'wcms_email_domain': candidate.get('wcms_email_domain'), - 'candidates': [] + 'candidates': [], + 'source_urls': [] # Initialize source_urls array } + # Aggregate source_urls from candidate entries + candidate_source_urls = candidate.get('source_urls', []) + if candidate_source_urls: + _candidates_by_wcms[wcms_ppid]['source_urls'].extend(candidate_source_urls) linkedin_name_raw = candidate.get('linkedin_name') if isinstance(linkedin_name_raw, dict): linkedin_name = linkedin_name_raw.get('full_name') or linkedin_name_raw.get('display_name', 'Unknown') @@ -315,6 +320,17 @@ class ProfileSummary(BaseModel): pending_count: int +class SourceUrlItem(BaseModel): + """A source URL added manually for a profile""" + source_id: str + source_url: str + source_type: Optional[str] = None + source_domain: Optional[str] = None + comment: Optional[str] = None + added_at: Optional[str] = None + added_manually: bool = True + + class ProfileDetail(BaseModel): ppid: str name: str @@ -324,6 +340,7 @@ class ProfileDetail(BaseModel): wcms_activity: Optional[dict] match_candidates: List[MatchCandidateResponse] annotation_date: Optional[str] + source_urls: List[SourceUrlItem] = [] class ReviewRequest(BaseModel): @@ -356,6 +373,10 @@ class LinkupSearchRequest(BaseModel): email_domain: Optional[str] = None institution: Optional[str] = None # Detected institution from email additional_context: Optional[str] = None # Any extra search terms + # New parameters for customizable search + custom_query: Optional[str] = None # If set, use this instead of auto-generated query + num_results: int = 10 # Number of results to return (default 10) + include_linkedin_keyword: bool = True # Whether to add "LinkedIn" to query class LinkupSearchResult(BaseModel): @@ -397,6 +418,29 @@ class AddCandidateResponse(BaseModel): linkedin_ppid: Optional[str] = None +class AddSourceUrlRequest(BaseModel): + """Request to add a generic source URL with comments""" + wcms_ppid: str + source_url: str + comment: Optional[str] = None # User comment explaining the source, e.g., "De lessen worden gegeven door Mala Sardjoepersad" + source_type: Optional[str] = None # Optional type: "webpage", "social_media", "news_article", etc. + # Optional WCMS data for profiles that aren't in the candidates file + wcms_name: Optional[str] = None + wcms_email: Optional[str] = None + wcms_email_domain: Optional[str] = None + wcms_user_id: Optional[str] = None + wcms_abs_id: Optional[str] = None + wcms_crm_id: Optional[str] = None + wcms_status: Optional[str] = None + + +class AddSourceUrlResponse(BaseModel): + """Response from adding a source URL""" + success: bool + message: str + source_id: Optional[str] = None + + # ============================================================================ # Authentication (Forgejo OAuth) # ============================================================================ @@ -950,6 +994,10 @@ async def get_profile(ppid: str): except Exception: pass + # Get source URLs if any exist + source_urls_raw = wcms_data.get('source_urls', []) + source_urls = [SourceUrlItem(**s) for s in source_urls_raw] + return ProfileDetail( ppid=ppid, name=wcms_data.get('wcms_name', 'Unknown'), @@ -958,7 +1006,8 @@ async def get_profile(ppid: str): wcms_identifiers=wcms_identifiers, wcms_activity=wcms_activity, match_candidates=[MatchCandidateResponse(**c) for c in candidates], - annotation_date=None + annotation_date=None, + source_urls=source_urls ) @@ -1629,6 +1678,11 @@ async def linkup_search(request: LinkupSearchRequest): Builds a comprehensive search query from WCMS profile data to find potential LinkedIn matches for entity resolution. + Supports customizable search: + - custom_query: Use a completely custom query string instead of auto-generated + - num_results: Control how many results to return (default 10) + - include_linkedin_keyword: Whether to add "LinkedIn" to the query (default True) + Returns: - List of search results with extracted LinkedIn profile info - Each result includes the LinkedIn slug if found in a LinkedIn URL @@ -1641,30 +1695,35 @@ async def linkup_search(request: LinkupSearchRequest): error="Linkup API key not configured. Set LINKUP_API_KEY environment variable." ) - # Build comprehensive search query from WCMS profile data - query_parts = [request.name] - - # Add institution context if available - if request.institution: - query_parts.append(request.institution) - - # Add email domain as potential employer hint - if request.email_domain and request.email_domain not in ['gmail.com', 'outlook.com', 'hotmail.com', 'yahoo.com']: - # Extract org name from domain (e.g., "rijksmuseum.nl" -> "rijksmuseum") - domain_parts = request.email_domain.split('.') - if len(domain_parts) >= 2: - org_hint = domain_parts[0] - if org_hint not in ['mail', 'email', 'info', 'contact']: - query_parts.append(org_hint) - - # Add any additional context - if request.additional_context: - query_parts.append(request.additional_context) - - # Add LinkedIn context to focus search - query_parts.append("LinkedIn") - - query = ' '.join(query_parts) + # Use custom query if provided, otherwise build from profile data + if request.custom_query and request.custom_query.strip(): + query = request.custom_query.strip() + else: + # Build comprehensive search query from WCMS profile data + query_parts = [request.name] + + # Add institution context if available + if request.institution: + query_parts.append(request.institution) + + # Add email domain as potential employer hint + if request.email_domain and request.email_domain not in ['gmail.com', 'outlook.com', 'hotmail.com', 'yahoo.com']: + # Extract org name from domain (e.g., "rijksmuseum.nl" -> "rijksmuseum") + domain_parts = request.email_domain.split('.') + if len(domain_parts) >= 2: + org_hint = domain_parts[0] + if org_hint not in ['mail', 'email', 'info', 'contact']: + query_parts.append(org_hint) + + # Add any additional context + if request.additional_context: + query_parts.append(request.additional_context) + + # Add LinkedIn context to focus search (optional) + if request.include_linkedin_keyword: + query_parts.append("LinkedIn") + + query = ' '.join(query_parts) try: async with httpx.AsyncClient() as client: @@ -1693,6 +1752,9 @@ async def linkup_search(request: LinkupSearchRequest): data = response.json() raw_results = data.get('results', []) + # Limit results to requested number + raw_results = raw_results[:request.num_results] + # Process results and extract LinkedIn info processed_results = [] for result in raw_results: @@ -2014,6 +2076,36 @@ def parse_linkedin_profile_from_exa(raw_data: dict) -> dict: return profile_data +def normalize_name_for_ppid(name: str) -> str: + """Convert name to PPID format: FIRST-LAST (uppercase, hyphen-separated).""" + import unicodedata + if not name: + return "UNKNOWN" + + # Normalize unicode and remove diacritics + normalized = unicodedata.normalize('NFD', name) + ascii_name = ''.join(c for c in normalized if unicodedata.category(c) != 'Mn') + + # Keep only alphanumeric and spaces, convert to uppercase + clean = ''.join(c if c.isalnum() or c.isspace() else ' ' for c in ascii_name).upper() + + # Split into words and join with hyphens + words = [w for w in clean.split() if w] + + return '-'.join(words) if words else "UNKNOWN" + + +def generate_ppid_from_name(name: str, linkedin_slug: str) -> str: + """Generate a PPID for a LinkedIn profile based on name.""" + if name and name != 'LinkedIn Member': + name_token = normalize_name_for_ppid(name) + else: + # Use LinkedIn slug as fallback + name_token = linkedin_slug.upper().replace('-', '-') + + return f"ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_{name_token}" + + async def save_entity_profile( linkedin_slug: str, profile_data: dict, @@ -2021,29 +2113,172 @@ async def save_entity_profile( source_info: dict ) -> Optional[str]: """ - Save extracted LinkedIn profile as an entity file. + Save extracted LinkedIn profile as a FULL PPID profile in data/person/. + Also saves a copy to entity directory for backward compatibility. - Returns the filepath if saved, None if failed. + Returns the PPID filepath if saved, None if failed. """ + import uuid + try: - # Ensure entity directory exists + # Ensure directories exist ENTITY_DIR.mkdir(parents=True, exist_ok=True) + PERSON_DATA_DIR.mkdir(parents=True, exist_ok=True) timestamp = datetime.now(timezone.utc).strftime("%Y%m%dT%H%M%SZ") - filename = f"{linkedin_slug}_{timestamp}.json" - filepath = ENTITY_DIR / filename + timestamp_iso = datetime.now(timezone.utc).isoformat() - entity_data = { + # Extract name for PPID generation + name = profile_data.get('name', '') or source_info.get('wcms_name', '') or 'Unknown' + + # Generate PPID + ppid = generate_ppid_from_name(name, linkedin_slug) + + # Check for PPID collision in data/person/ + ppid_filename = f"{ppid}.json" + ppid_filepath = PERSON_DATA_DIR / ppid_filename + + if ppid_filepath.exists(): + # Add UUID suffix to avoid collision + short_uuid = str(uuid.uuid4())[:8] + ppid = f"{ppid}-{short_uuid}" + ppid_filename = f"{ppid}.json" + ppid_filepath = PERSON_DATA_DIR / ppid_filename + + # Determine if anonymous profile + is_anonymous = (name == 'LinkedIn Member') + + # Generate name tokens for PPID components + if is_anonymous: + name_tokens = ppid.split('_')[-1].split('-') + else: + name_tokens = normalize_name_for_ppid(name).split('-') + + # Create FULL PPID profile structure (matching migrate_entity_to_ppid_v5.py format) + ppid_profile = { + "ppid": ppid, + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "XXXX", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": name_tokens + }, + "name": name, + "linkedin_slug": linkedin_slug, + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "Not yet enriched - requires manual research" + }, + "is_living": True, + "is_anonymous": is_anonymous, + "profile_classification": { + "primary_classification": "human", + "confidence": 0.8, + "indicators": [ + {"type": "personal_linkedin_url", "reason": "Has personal LinkedIn /in/ URL"} + ], + "reasoning": "Manually added LinkedIn profile with personal /in/ URL" + }, + "heritage_relevance": { + "is_heritage_relevant": None, # To be determined during review + "heritage_types": [], + "rationale": "Manually added candidate - heritage relevance to be determined" + }, + "affiliations": [], + "profile_data": profile_data, + "web_claims": [ + { + "claim_type": "linkedin_url", + "claim_value": source_info.get('linkedin_url', f"https://www.linkedin.com/in/{linkedin_slug}"), + "source_url": source_info.get('linkedin_url', f"https://www.linkedin.com/in/{linkedin_slug}"), + "retrieved_on": timestamp_iso, + "statement_created_at": timestamp_iso, + "source_archived_at": timestamp_iso, + "retrieval_agent": "entity_review_api" + }, + { + "claim_type": "full_name", + "claim_value": name, + "source_url": source_info.get('linkedin_url', f"https://www.linkedin.com/in/{linkedin_slug}"), + "retrieved_on": timestamp_iso, + "statement_created_at": timestamp_iso, + "source_archived_at": timestamp_iso, + "retrieval_agent": "entity_review_api" + } + ], + "source_observations": [ + { + "source_file": "manual_add_candidate", + "observed_on": timestamp_iso, + "extraction_agent": "entity_review_api" + } + ], "extraction_metadata": { "source_file": "manual_add_candidate", "staff_id": f"manual_add_{linkedin_slug}", - "extraction_date": datetime.now(timezone.utc).isoformat(), + "extraction_date": timestamp_iso, "extraction_method": f"{raw_response.get('provider', 'unknown')}_contents", "extraction_agent": "entity_review_api", - "linkedin_url": source_info.get('linkedin_url', ''), + "linkedin_url": source_info.get('linkedin_url', f"https://www.linkedin.com/in/{linkedin_slug}"), "cost_usd": raw_response.get('cost', 0), - "request_id": raw_response.get('request_id', '') + "request_id": raw_response.get('request_id', ''), + "schema_version": "1.0.0", + "notes": "Created via manual add-candidate API endpoint" }, + "migration_metadata": { + "original_entity_file": None, + "original_person_id": linkedin_slug, + "original_linkedin_slug": linkedin_slug, + "migrated_at": timestamp_iso, + "migration_script": "entity_review_api.save_entity_profile", + "migration_version": "1.0" + } + } + + # Add headline claim if available + if profile_data.get('headline'): + ppid_profile["web_claims"].append({ + "claim_type": "headline", + "claim_value": profile_data['headline'], + "source_url": source_info.get('linkedin_url', f"https://www.linkedin.com/in/{linkedin_slug}"), + "retrieved_on": timestamp_iso, + "statement_created_at": timestamp_iso, + "source_archived_at": timestamp_iso, + "retrieval_agent": "entity_review_api" + }) + + # Add location claim if available + if profile_data.get('location'): + ppid_profile["web_claims"].append({ + "claim_type": "location", + "claim_value": profile_data['location'], + "source_url": source_info.get('linkedin_url', f"https://www.linkedin.com/in/{linkedin_slug}"), + "retrieved_on": timestamp_iso, + "statement_created_at": timestamp_iso, + "source_archived_at": timestamp_iso, + "retrieval_agent": "entity_review_api" + }) + + # Save PPID profile to data/person/ + with open(ppid_filepath, 'w', encoding='utf-8') as f: + json.dump(ppid_profile, f, indent=2, ensure_ascii=False) + + print(f"Saved PPID profile: {ppid_filepath}") + + # Also save to entity directory for backward compatibility + entity_filename = f"{linkedin_slug}_{timestamp}.json" + entity_filepath = ENTITY_DIR / entity_filename + + # Create simplified entity format (backward compat) + entity_data = { + "person_id": linkedin_slug, + "ppid": ppid, + "ppid_file": str(ppid_filepath), + "extraction_metadata": ppid_profile["extraction_metadata"], "source_staff_info": { "name": source_info.get('wcms_name', ''), "headline": profile_data.get('headline', ''), @@ -2051,20 +2286,22 @@ async def save_entity_profile( "custodian": source_info.get('wcms_institution', '') }, "profile_data": profile_data, - "heritage_relevance": { - "is_heritage_relevant": None, # To be determined during review - "heritage_types": [], - "rationale": "Manually added candidate - heritage relevance to be determined" - } + "heritage_relevance": ppid_profile["heritage_relevance"], + "linkedin_slug": linkedin_slug } - with open(filepath, 'w', encoding='utf-8') as f: + with open(entity_filepath, 'w', encoding='utf-8') as f: json.dump(entity_data, f, indent=2, ensure_ascii=False) - return str(filepath) + print(f"Saved entity file: {entity_filepath}") + + # Return the PPID filepath (primary location) + return str(ppid_filepath) except Exception as e: print(f"Error saving entity profile: {e}") + import traceback + traceback.print_exc() return None @@ -2308,6 +2545,155 @@ async def add_manual_candidate(request: AddCandidateRequest): ) +@router.post("/add-source-url", response_model=AddSourceUrlResponse) +async def add_source_url(request: AddSourceUrlRequest): + """ + Add a generic source URL with optional comments to a WCMS profile. + + This allows adding any URL that provides evidence of a person's identity, + such as: + - Social directories (socialekaartdenhaag.nl) + - News articles mentioning the person + - Company websites with staff pages + - Academic profiles + - Any other webpage that helps identify the person + + The URL and comment are stored as a source_observation in the candidates file. + """ + from urllib.parse import urlparse + import hashlib + + source_url = request.source_url.strip() + if not source_url: + raise HTTPException(status_code=400, detail="Source URL is required") + + # Validate URL format + try: + parsed = urlparse(source_url) + if not parsed.scheme: + source_url = "https://" + source_url + parsed = urlparse(source_url) + if not parsed.netloc: + raise ValueError("Invalid URL") + except Exception: + raise HTTPException(status_code=400, detail="Invalid URL format") + + wcms_ppid = request.wcms_ppid + comment = request.comment.strip() if request.comment else None + source_type = request.source_type or "webpage" + + # Load candidates from the aggregated file + load_candidates() + + if _candidates_cache is None: + raise HTTPException(status_code=500, detail="Candidates data not loaded") + + # Check if the WCMS profile exists in our candidates file + profile_exists = _candidates_by_wcms is not None and wcms_ppid in _candidates_by_wcms + + if profile_exists: + wcms_data = _candidates_by_wcms[wcms_ppid] + else: + # Profile not in candidates file - create entry from request + if not request.wcms_name and not request.wcms_email: + raise HTTPException( + status_code=400, + detail=f"WCMS profile {wcms_ppid} not found. Provide wcms_name and wcms_email to create new entry." + ) + + wcms_data = { + 'wcms_ppid': wcms_ppid, + 'wcms_name': request.wcms_name or 'Unknown', + 'wcms_email': request.wcms_email, + 'wcms_email_domain': request.wcms_email_domain or (request.wcms_email.split('@')[1] if request.wcms_email and '@' in request.wcms_email else None), + 'wcms_user_id': request.wcms_user_id, + 'wcms_abs_id': request.wcms_abs_id, + 'wcms_crm_id': request.wcms_crm_id, + 'wcms_status': request.wcms_status, + 'candidates': [], + 'source_urls': [] + } + + # Add to cache + if _candidates_by_wcms is not None: + _candidates_by_wcms[wcms_ppid] = wcms_data + + # Generate a unique ID for this source + source_id = hashlib.sha256(f"{wcms_ppid}:{source_url}".encode()).hexdigest()[:12] + + # Create the source observation entry + source_observation = { + "source_id": source_id, + "source_url": source_url, + "source_type": source_type, + "source_domain": parsed.netloc, + "comment": comment, + "added_at": datetime.now(timezone.utc).isoformat(), + "added_manually": True + } + + # Find the raw entry in candidates list and add source_urls + for candidate_entry in _candidates_cache.get('candidates', []): + if candidate_entry.get('wcms_ppid') == wcms_ppid: + # Add source_urls array if it doesn't exist + if 'source_urls' not in candidate_entry: + candidate_entry['source_urls'] = [] + + # Check for duplicate + existing_urls = [s.get('source_url') for s in candidate_entry.get('source_urls', [])] + if source_url in existing_urls: + return AddSourceUrlResponse( + success=False, + message=f"Source URL already exists for this profile", + source_id=None + ) + + candidate_entry['source_urls'].append(source_observation) + break + else: + # No existing entry found - create a new WCMS-only entry + new_entry = { + 'wcms_ppid': wcms_ppid, + 'wcms_name': wcms_data.get('wcms_name', 'Unknown'), + 'wcms_email': wcms_data.get('wcms_email'), + 'wcms_email_domain': wcms_data.get('wcms_email_domain'), + 'candidates': [], + 'source_urls': [source_observation] + } + _candidates_cache['candidates'].append(new_entry) + + # Also update the wcms lookup cache + if _candidates_by_wcms is not None and wcms_ppid in _candidates_by_wcms: + if 'source_urls' not in _candidates_by_wcms[wcms_ppid]: + _candidates_by_wcms[wcms_ppid]['source_urls'] = [] + + # Check for duplicate in cache + existing_in_cache = [s.get('source_url') for s in _candidates_by_wcms[wcms_ppid].get('source_urls', [])] + if source_url not in existing_in_cache: + _candidates_by_wcms[wcms_ppid]['source_urls'].append(source_observation) + + # Update metadata + if 'metadata' in _candidates_cache: + _candidates_cache['metadata']['last_source_url_add_at'] = datetime.now(timezone.utc).isoformat() + + # Save using atomic write with backup + if not atomic_write_json(CANDIDATES_FILE, _candidates_cache): + invalidate_cache() + raise HTTPException(status_code=500, detail="Failed to save source URL") + + # Build response message + if comment: + message = f"Added source URL from {parsed.netloc} with comment for {wcms_data.get('wcms_name', wcms_ppid)}" + else: + message = f"Added source URL from {parsed.netloc} for {wcms_data.get('wcms_name', wcms_ppid)}" + + return AddSourceUrlResponse( + success=True, + message=message, + source_id=source_id + ) + + # ============================================================================ # Review Authentication (Separate from main app auth) # ============================================================================