From 8174c9692e211aa3476a17cad1bfedde393c0b14 Mon Sep 17 00:00:00 2001 From: kempersc Date: Thu, 15 Jan 2026 13:00:27 +0100 Subject: [PATCH] Refactor and Archive Deprecated Slots - Removed deprecated slots: - accepts_or_accepted_external_work - accepts_or_accepted_payment_method - accepts_or_accepted_visiting_scholar - parent_collection - parent_custodian - storage_description - storage_type_description - sub_guide_description - transfer_location - transfer_location_text - transfer_policy - transfer_to_collection_date - unit_description - Archived corresponding YAML files for the removed slots with detailed notes on migration and replacements. - Updated slot fixes to reflect the migration of deprecated slots to new structures and naming conventions. - Introduced new slots and classes to replace deprecated ones, ensuring compliance with RiC-O standards. --- .../schemas/20251121/linkml/manifest.json | 2 +- .../linkml/01_custodian_name_modular.yaml | 2 +- schemas/20251121/linkml/manifest.json | 2 +- .../modules/classes/ConservationLab.yaml | 28 ++-- .../modules/classes/CurrentArchive.yaml | 14 +- .../modules/classes/CustodianArchive.yaml | 28 +++- .../linkml/modules/classes/FindingAid.yaml | 5 +- .../linkml/modules/classes/GiftShop.yaml | 47 +++--- .../modules/classes/InvalidWebClaim.yaml | 21 +-- .../modules/classes/MissionStatement.yaml | 15 +- .../modules/classes/PersonWebClaim.yaml | 49 +++--- .../modules/classes/ResearchCenter.yaml | 33 +++- .../linkml/modules/classes/Storage.yaml | 42 ++--- .../linkml/modules/classes/StorageUnit.yaml | 27 +++- .../linkml/modules/classes/WebClaim.yaml | 63 ++++---- ...pted_external_work_archived_20260115.yaml} | 0 ...ted_payment_method_archived_20260115.yaml} | 0 ...d_visiting_scholar_archived_20260115.yaml} | 0 .../parent_collection_archived_20250115.yaml} | 0 .../parent_custodian_archived_20250115.yaml} | 0 .../person_xpath_archived_20260115.yaml} | 0 ..._xpath_match_score_archived_20260115.yaml} | 0 ...torage_description_archived_20260115.yaml} | 0 ...e_type_description_archived_20260115.yaml} | 0 ..._guide_description_archived_20260115.yaml} | 0 .../transfer_location_archived_20260115.yaml} | 0 ...sfer_location_text_archived_20260115.yaml} | 0 .../transfer_policy_archived_20260115.yaml} | 0 ...to_collection_date_archived_20260115.yaml} | 0 .../unit_description_archived_20260115.yaml} | 0 .../xpath_archived_20260115.yaml} | 0 .../xpath_match_score_archived_20260115.yaml} | 0 ...xpath_matched_text_archived_20260115.yaml} | 0 .../linkml/modules/slots/slot_fixes.yaml | 147 +++++++++++++++++- 34 files changed, 390 insertions(+), 135 deletions(-) rename schemas/20251121/linkml/modules/slots/{accepts_or_accepted_external_work.yaml => archive/accepts_or_accepted_external_work_archived_20260115.yaml} (100%) rename schemas/20251121/linkml/modules/slots/{accepts_or_accepted_payment_method.yaml => archive/accepts_or_accepted_payment_method_archived_20260115.yaml} (100%) rename schemas/20251121/linkml/modules/slots/{accepts_or_accepted_visiting_scholar.yaml => archive/accepts_or_accepted_visiting_scholar_archived_20260115.yaml} (100%) rename schemas/20251121/linkml/modules/slots/{parent_collection.yaml => archive/parent_collection_archived_20250115.yaml} (100%) rename schemas/20251121/linkml/modules/slots/{parent_custodian.yaml => archive/parent_custodian_archived_20250115.yaml} (100%) rename schemas/20251121/linkml/modules/slots/{person_xpath.yaml => archive/person_xpath_archived_20260115.yaml} (100%) rename schemas/20251121/linkml/modules/slots/{person_xpath_match_score.yaml => archive/person_xpath_match_score_archived_20260115.yaml} (100%) rename schemas/20251121/linkml/modules/slots/{storage_description.yaml => archive/storage_description_archived_20260115.yaml} (100%) rename schemas/20251121/linkml/modules/slots/{storage_type_description.yaml => archive/storage_type_description_archived_20260115.yaml} (100%) rename schemas/20251121/linkml/modules/slots/{sub_guide_description.yaml => archive/sub_guide_description_archived_20260115.yaml} (100%) rename schemas/20251121/linkml/modules/slots/{transfer_location.yaml => archive/transfer_location_archived_20260115.yaml} (100%) rename schemas/20251121/linkml/modules/slots/{transfer_location_text.yaml => archive/transfer_location_text_archived_20260115.yaml} (100%) rename schemas/20251121/linkml/modules/slots/{transfer_policy.yaml => archive/transfer_policy_archived_20260115.yaml} (100%) rename schemas/20251121/linkml/modules/slots/{transfer_to_collection_date.yaml => archive/transfer_to_collection_date_archived_20260115.yaml} (100%) rename schemas/20251121/linkml/modules/slots/{unit_description.yaml => archive/unit_description_archived_20260115.yaml} (100%) rename schemas/20251121/linkml/modules/slots/{xpath.yaml => archive/xpath_archived_20260115.yaml} (100%) rename schemas/20251121/linkml/modules/slots/{xpath_match_score.yaml => archive/xpath_match_score_archived_20260115.yaml} (100%) rename schemas/20251121/linkml/modules/slots/{xpath_matched_text.yaml => archive/xpath_matched_text_archived_20260115.yaml} (100%) diff --git a/frontend/public/schemas/20251121/linkml/manifest.json b/frontend/public/schemas/20251121/linkml/manifest.json index b69edd7038..fd8de8a997 100644 --- a/frontend/public/schemas/20251121/linkml/manifest.json +++ b/frontend/public/schemas/20251121/linkml/manifest.json @@ -1,5 +1,5 @@ { - "generated": "2026-01-15T11:25:29.119Z", + "generated": "2026-01-15T11:37:46.717Z", "schemaRoot": "/schemas/20251121/linkml", "totalFiles": 3026, "categoryCounts": { diff --git a/schemas/20251121/linkml/01_custodian_name_modular.yaml b/schemas/20251121/linkml/01_custodian_name_modular.yaml index 55773eb766..ee7a8774cc 100644 --- a/schemas/20251121/linkml/01_custodian_name_modular.yaml +++ b/schemas/20251121/linkml/01_custodian_name_modular.yaml @@ -109,7 +109,7 @@ imports: - modules/slots/observation_context - modules/slots/observation_date - modules/slots/observed_name - - modules/slots/parent_custodian + # REMOVED 2026-01-15: parent_custodian - archived and migrated (see slot_fixes.yaml) - modules/slots/place_designation - modules/slots/place_name - modules/slots/place_language diff --git a/schemas/20251121/linkml/manifest.json b/schemas/20251121/linkml/manifest.json index fd8de8a997..4c908df113 100644 --- a/schemas/20251121/linkml/manifest.json +++ b/schemas/20251121/linkml/manifest.json @@ -1,5 +1,5 @@ { - "generated": "2026-01-15T11:37:46.717Z", + "generated": "2026-01-15T12:00:28.038Z", "schemaRoot": "/schemas/20251121/linkml", "totalFiles": 3026, "categoryCounts": { diff --git a/schemas/20251121/linkml/modules/classes/ConservationLab.yaml b/schemas/20251121/linkml/modules/classes/ConservationLab.yaml index 57d28c1318..b82c9ea87c 100644 --- a/schemas/20251121/linkml/modules/classes/ConservationLab.yaml +++ b/schemas/20251121/linkml/modules/classes/ConservationLab.yaml @@ -6,7 +6,8 @@ imports: - ./ReconstructedEntity - ./CustodianObservation - ./ReconstructionActivity -- ../slots/accepts_or_accepted_external_work +- ../slots/accepts_or_accepted +- ./ExternalWork - ../slots/has_or_had_accreditation_body - ../slots/conservation_specialization - ../slots/equipment_type @@ -74,7 +75,7 @@ classes: - crm:E14_Condition_Assessment - schema:ResearchOrganization slots: - - accepts_or_accepted_external_work + - accepts_or_accepted - has_or_had_accreditation_body - conservation_specialization - equipment_type @@ -180,13 +181,16 @@ classes: examples: - value: 8 description: Medium-sized conservation team - accepts_or_accepted_external_work: - range: boolean + accepts_or_accepted: + range: ExternalWork + inlined: true + multivalued: true + description: External work types that this conservation lab accepts (e.g., conservation commissions, digitization). examples: - - value: true - description: Accepts external commissions - - value: false - description: Internal collections only + - value: + work_type: "conservation" + description: "Paper and textile conservation" + description: Accepts external conservation commissions was_derived_from: range: CustodianObservation multivalued: true @@ -226,7 +230,7 @@ classes: is_accredited: true accreditation_body: VeRes staff_count: 12 - accepts_or_accepted_external_work: false + accepts_or_accepted: [] # No external work accepted description: Major museum conservation studio - value: lab_id: https://nde.nl/ontology/hc/aux/na-restauratie @@ -247,5 +251,9 @@ classes: has_fume_hoods: true has_deacidification_facility: true staff_count: 6 - accepts_or_accepted_external_work: true + accepts_or_accepted: + - work_type: "paper_conservation" + description: "Paper and parchment conservation commissions" + - work_type: "seal_restoration" + description: "Historical seal restoration" description: Archive paper conservation workshop diff --git a/schemas/20251121/linkml/modules/classes/CurrentArchive.yaml b/schemas/20251121/linkml/modules/classes/CurrentArchive.yaml index 84452fa952..18122293cd 100644 --- a/schemas/20251121/linkml/modules/classes/CurrentArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/CurrentArchive.yaml @@ -77,8 +77,18 @@ classes: range: string examples: - value: Ministry of Finance - transfer_policy: - range: string + # MIGRATED 2026-01-15: transfer_policy → has_or_had_policy with range TransferPolicy (Rule 53) + has_or_had_policy: + description: | + Policy governing transfers of records from this archive type. + Replaces bespoke transfer_policy slot. + range: TransferPolicy + multivalued: true + inlined: true + examples: + - value: + policy_name: Government Records Transfer Policy + policy_text: Records transferred to National Archives after 20 years has_narrower_instance: range: CustodianArchive multivalued: true diff --git a/schemas/20251121/linkml/modules/classes/CustodianArchive.yaml b/schemas/20251121/linkml/modules/classes/CustodianArchive.yaml index 2b12f57748..92db6027df 100644 --- a/schemas/20251121/linkml/modules/classes/CustodianArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/CustodianArchive.yaml @@ -44,7 +44,9 @@ imports: - ../slots/successor_collection - ../slots/template_specificity - ../slots/has_or_had_tracked_in_cm -- ../slots/transfer_to_collection_date +# REMOVED 2026-01-15: transfer_to_collection_date - migrated to is_or_was_transferred + TransferEvent (Rule 53) +- ../slots/is_or_was_transferred +- ./TransferEvent - ../slots/temporal_extent # was: valid_from + valid_to - migrated per Rule 53 # REMOVED 2026-01-14: valid_from + valid_to - migrated to temporal_extent (Rule 53) - ../slots/was_derived_from @@ -96,8 +98,8 @@ classes: - storage_location - successor_collection - template_specificity - - has_or_had_tracked_in_cm - - transfer_to_collection_date + # MIGRATED 2026-01-15: transfer_to_collection_date → is_or_was_transferred + TransferEvent (Rule 53) + - is_or_was_transferred - temporal_extent # was: valid_from + valid_to - migrated per Rule 53 - was_derived_from - was_generated_by @@ -239,12 +241,24 @@ classes: examples: - value: '2024-09-15' description: Processing completed September 2024 - transfer_to_collection_date: - range: date + # MIGRATED 2026-01-15: transfer_to_collection_date → is_or_was_transferred + TransferEvent (Rule 53) + is_or_was_transferred: + description: | + Transfer events for this archive, including transfer to CustodianCollection. + Replaces bespoke transfer_to_collection_date slot. + range: TransferEvent + multivalued: true + inlined: true + inlined_as_list: true required: false examples: - - value: '2024-10-01' - description: Transferred to collection October 2024 + - value: + temporal_extent: + begin_of_the_begin: + timestamp_value: "2024-10-01T00:00:00Z" + has_or_had_description: + description_text: "Transferred to collection after processing complete" + description: Transfer to CustodianCollection October 2024 successor_collection: range: uriorcurie required: false diff --git a/schemas/20251121/linkml/modules/classes/FindingAid.yaml b/schemas/20251121/linkml/modules/classes/FindingAid.yaml index af55258f97..be167c9040 100644 --- a/schemas/20251121/linkml/modules/classes/FindingAid.yaml +++ b/schemas/20251121/linkml/modules/classes/FindingAid.yaml @@ -128,7 +128,8 @@ imports: - ../slots/slug - ../slots/specificity_annotation - ../slots/start -- ../slots/sub_guide_description +- ../slots/has_or_had_description # was: sub_guide_description - migrated per Rule 53 +- ./Description - ../slots/sub_guide_temporal_coverage - ./SubGuideType - ../slots/has_or_had_sub_guide @@ -536,7 +537,7 @@ classes: - note - slug - specificity_annotation - - sub_guide_description + - has_or_had_description # was: sub_guide_description - migrated per Rule 53 - sub_guide_temporal_coverage - has_or_had_type - template_specificity diff --git a/schemas/20251121/linkml/modules/classes/GiftShop.yaml b/schemas/20251121/linkml/modules/classes/GiftShop.yaml index 7de9033720..c4b0ced73f 100644 --- a/schemas/20251121/linkml/modules/classes/GiftShop.yaml +++ b/schemas/20251121/linkml/modules/classes/GiftShop.yaml @@ -15,7 +15,8 @@ imports: - ../slots/managed_by - ../slots/price_currency - ./ReconstructedEntity -- ../slots/accepts_or_accepted_payment_method +- ../slots/accepts_or_accepted +- ./PaymentMethod - ../slots/has_or_had_annual_revenue - ../slots/giftshop_price_range - ../slots/online_shop @@ -63,7 +64,7 @@ classes: \ Extend institutional identity through products\n- **Educational outreach**: Books, educational materials, replicas\ \ for learning\n\n**PHYSICAL vs. DIGITAL PRESENCE**:\n\nGift shops can exist in multiple forms:\n\n1. **Physical shop**\ \ (on-site): Located within museum/archive building\n - Links to AuxiliaryPlace (physical location)\n - Has opening_hours,\ - \ accepts_or_accepted_payment_method\n \n2. **Physical shop** (separate): Stand-alone retail location\n - Links\ + \ accepts_or_accepted (PaymentMethod)\n \n2. **Physical shop** (separate): Stand-alone retail location\n - Links\ \ to AuxiliaryPlace with type RETAIL_SPACE\n - May have separate street address, hours\n \n3. **Online shop** (e-commerce):\ \ Web-based retail platform\n - Links to AuxiliaryDigitalPlatform with type WEBSHOP\n - Has platform_url, shipping\ \ policies\n \n4. **Hybrid**: Both physical and online presence\n - Multiple links to AuxiliaryPlace AND AuxiliaryDigitalPlatform\n\ @@ -105,7 +106,7 @@ classes: - gr:Offering - schema:Product slots: - - accepts_or_accepted_payment_method + - accepts_or_accepted - has_or_had_annual_revenue - giftshop_price_range - managed_by @@ -207,16 +208,18 @@ classes: description: Mid-range pricing - value: €5-€500 description: Price range in euros - accepts_or_accepted_payment_method: - range: string + accepts_or_accepted: + range: PaymentMethod + inlined: true multivalued: true required: false + description: Payment methods accepted by this gift shop. examples: - value: - - CASH - - CREDIT_CARD - - DEBIT_CARD - - MOBILE_PAYMENT + - method_type: "credit_card" + provider: "Visa" + - method_type: "digital" + provider: "iDEAL" description: Common payment methods opening_hour: range: string @@ -337,12 +340,16 @@ classes: - HOME_DECOR price_currency: EUR giftshop_price_range: $$ - accepts_or_accepted_payment_method: - - CASH - - CREDIT_CARD - - DEBIT_CARD - - MOBILE_PAYMENT - - MUSEUM_CARD + accepts_or_accepted: + - method_type: CASH + - method_type: CREDIT_CARD + provider: Visa, Mastercard + - method_type: DEBIT_CARD + provider: Maestro + - method_type: MOBILE_PAYMENT + provider: Apple Pay, Google Pay + - method_type: MUSEUM_CARD + provider: Museumkaart opening_hours: Mo-Su 09:00-18:00 staff_count: 25 square_meters: 450.0 @@ -373,10 +380,12 @@ classes: - GIFTS price_currency: GBP giftshop_price_range: $$ - accepts_or_accepted_payment_method: - - CASH - - CREDIT_CARD - - DEBIT_CARD + accepts_or_accepted: + - method_type: CASH + - method_type: CREDIT_CARD + provider: Visa, Mastercard + - method_type: DEBIT_CARD + provider: V-Pay opening_hours: Mo-Fr 09:30-18:00, Sa 09:30-17:00, Su 11:00-17:00 refers_to_custodian: https://nde.nl/ontology/hc/gb-british-library description: British Library specialist bookshop diff --git a/schemas/20251121/linkml/modules/classes/InvalidWebClaim.yaml b/schemas/20251121/linkml/modules/classes/InvalidWebClaim.yaml index 41c0c5114c..b3a458b60f 100644 --- a/schemas/20251121/linkml/modules/classes/InvalidWebClaim.yaml +++ b/schemas/20251121/linkml/modules/classes/InvalidWebClaim.yaml @@ -1,6 +1,7 @@ # InvalidWebClaim - Invalid claim with validation reason # Extracted from custodian_source.yaml per Rule 38 (modular schema files) # Extraction date: 2026-01-08 +# MIGRATION (2026-01-15): Replaced xpath/xpath_match_score/html_file attributes with has_or_had_provenance_path using XPath class id: https://nde.nl/ontology/hc/classes/InvalidWebClaim name: InvalidWebClaim @@ -17,6 +18,7 @@ prefixes: imports: - linkml:types + - ./XPath default_range: string @@ -35,6 +37,9 @@ classes: - close_mappings includes dqv:QualityAnnotation as this documents a quality issue with extracted data - related_mappings includes prov:Entity for provenance tracking + + XPath provenance is captured via has_or_had_provenance_path using the + XPath class, which consolidates expression, match_score, and source_document. class_uri: rdf:Statement close_mappings: - dqv:QualityAnnotation @@ -56,15 +61,13 @@ classes: retrieved_on: range: datetime description: When page was archived - xpath: - range: string - description: XPath to element - html_file: - range: string - description: Relative path to archived HTML - xpath_match_score: - range: float - description: Match score + has_or_had_provenance_path: + range: XPath + inlined: true + description: >- + XPath provenance path documenting the exact location in the source HTML + where this claim was extracted from. Contains expression, match_score, + matched_text, and source_document (path to archived HTML file). extraction_method: range: string description: Extraction method diff --git a/schemas/20251121/linkml/modules/classes/MissionStatement.yaml b/schemas/20251121/linkml/modules/classes/MissionStatement.yaml index 31a8c9378b..ba456c75a0 100644 --- a/schemas/20251121/linkml/modules/classes/MissionStatement.yaml +++ b/schemas/20251121/linkml/modules/classes/MissionStatement.yaml @@ -17,6 +17,7 @@ imports: - ./TemplateSpecificityScores - ../enums/StatementTypeEnum - ./StatementType +- ./XPath - ../slots/source_url - ../slots/retrieved_on - ../slots/content_hash @@ -24,7 +25,7 @@ imports: - ../slots/effective_date - ../slots/extraction_agent - ../slots/extraction_note -- ../slots/xpath +- ../slots/has_or_had_provenance_path - ../slots/css_selector - ../slots/html_file - ../slots/extraction_timestamp @@ -98,7 +99,7 @@ classes: - supersede - template_specificity - text_fragment - - xpath + - has_or_had_provenance_path slot_usage: has_or_had_type: required: true @@ -119,11 +120,19 @@ classes: required: true retrieved_on: required: true + has_or_had_provenance_path: + range: XPath + inlined: true + description: | + XPath provenance path documenting the exact location in the source HTML + where this statement was extracted from. Contains the XPath expression, + match score, and reference to the archived HTML file. comments: + - 'MIGRATION (2026-01-15): Replaced xpath/xpath_match_score slots with has_or_had_provenance_path using XPath class per slot_fixes.yaml' - 'Rule note: Mottos should be brief - typically under 50 characters' - MissionStatement maps to org:purpose from W3C Organization Ontology - Requires source_url and retrieved_on for provenance - - Strongly recommend xpath/css_selector + html_file for verification + - Strongly recommend has_or_had_provenance_path (XPath class) + html_file for verification - content_hash enables integrity checking - has_archive_memento_uri ensures long-term source accessibility - Supports tracking statement evolution via supersedes field diff --git a/schemas/20251121/linkml/modules/classes/PersonWebClaim.yaml b/schemas/20251121/linkml/modules/classes/PersonWebClaim.yaml index 768b05b8cc..d857ce7e05 100644 --- a/schemas/20251121/linkml/modules/classes/PersonWebClaim.yaml +++ b/schemas/20251121/linkml/modules/classes/PersonWebClaim.yaml @@ -19,12 +19,12 @@ imports: - ../slots/person_claim_type - ../slots/person_claim_value - ../slots/person_html_file -- ../slots/person_xpath -- ../slots/person_xpath_match_score +- ../slots/has_or_had_provenance_path - ../slots/specificity_annotation - ../slots/template_specificity - ./SpecificityAnnotation - ./TemplateSpecificityScores +- ./XPath - ../enums/PersonClaimTypeEnum - ../enums/RetrievalAgentEnum default_prefix: hc @@ -35,8 +35,7 @@ classes: \ Data Provenance**\n\nAll person/staff data associated with heritage custodians MUST have\nweb claim provenance. This\ \ includes:\n- Staff names, titles, and roles\n- Contact information (if publicly available)\n- Professional history\ \ and education\n- Affiliations and expertise areas\n\n**VERIFIABILITY PRINCIPLE**\n\nLike the base WebClaim class,\ - \ PersonWebClaim follows the \"XPath or Remove\" principle:\n- Claims from web pages MUST have xpath pointing to source\ - \ element\n- Claims from APIs (LinkedIn via Exa) may have xpath=null but MUST have source_url\n- Claims without any\ + \ PersonWebClaim follows the \"XPath or Remove\" principle:\n- Claims from web pages MUST have has_or_had_provenance_path with XPath expression\n- Claims from APIs (LinkedIn via Exa) may omit has_or_had_provenance_path but MUST have source_url\n- Claims without any\ \ verifiable source are FABRICATED and must be removed\n\n**SOURCE HIERARCHY**\n\nWhen multiple sources provide the\ \ same information:\n1. Official institutional website (highest reliability)\n2. LinkedIn profile (high reliability)\n\ 3. News articles/press releases (medium-high)\n4. Conference programs (medium)\n5. Academic publications (medium)\n\ @@ -45,11 +44,11 @@ classes: \ (e.g., \"Senior Curator\")\n- **department**: Organizational unit\n- **email**: Professional contact (only if public)\n\ - **biography**: Professional bio text\n- **specialization**: Expertise areas\n- **education**: Degrees and institutions\n\ \n**EXTRACTION WORKFLOW**\n\n1. SCRAPE institutional staff/team pages with FireCrawl\n2. EXTRACT names and roles with\ - \ XPath locations\n3. SEARCH LinkedIn for additional profile data\n4. CREATE PersonWebClaim for each extracted fact\n\ + \ XPath locations stored in has_or_had_provenance_path\n3. SEARCH LinkedIn for additional profile data\n4. CREATE PersonWebClaim for each extracted fact\n\ 5. LINK claims to PersonObservation records\n\n**INTEGRATION WITH PERSONOBSERVATION**\n\nPersonObservation (the PiCo-based\ \ staff role record) references\nPersonWebClaim instances via the `web_claims` slot:\n\n```yaml\nPersonObservation:\n\ \ person_name: \"Dr. Jane Smith\"\n staff_role: CONSERVATOR\n has_or_had_web_claim:\n - claim_type: full_name\n\ - \ claim_value: \"Dr. Jane Smith\"\n source_url: https://museum.org/team\n xpath: /html/body/main/div[2]/h3\n\ + \ claim_value: \"Dr. Jane Smith\"\n source_url: https://museum.org/team\n has_or_had_provenance_path:\n expression: /html/body/main/div[2]/h3\n match_score: 1.0\n\ \ retrieval_agent: firecrawl\n```\n\n**LINKEDIN PROFILE HANDLING**\n\nFor LinkedIn data, create separate profile\ \ files (per Rule 12, Rule 20)\nand reference them:\n\n```yaml\nlinkedin_claims:\n linkedin_url: https://www.linkedin.com/in/jane-smith\n\ \ profile_data_path: data/custodian/person/entity/jane-smith_20250115.json\n retrieved_on: \"2025-01-15T10:30:00Z\"\ @@ -65,8 +64,7 @@ classes: - person_claim_type - person_claim_value - person_html_file - - person_xpath - - person_xpath_match_score + - has_or_had_provenance_path - retrieval_agent - retrieved_on - source_url @@ -84,7 +82,16 @@ classes: retrieval_agent: required: true range: RetrievalAgentEnum + has_or_had_provenance_path: + range: XPath + inlined: true + description: | + XPath provenance path documenting the exact location in the source HTML + where this person claim was extracted from. Contains the XPath expression, + match score, and matched text. + REQUIRED for web page claims. May be omitted for API-sourced claims (e.g., LinkedIn via Exa). comments: + - 'MIGRATION (2026-01-15): Replaced person_xpath/person_xpath_match_score slots with has_or_had_provenance_path using XPath class per slot_fixes.yaml' - PersonWebClaim extends WebClaim pattern for person-specific data - 'XPATH OR REMOVE: Claims without verifiable source must be removed' - Links to PersonObservation via web_claims slot @@ -96,9 +103,11 @@ classes: person_claim_value: Taco Dibbits source_url: https://www.rijksmuseum.nl/en/about-us/organisation retrieved_on: '2025-01-15T10:30:00Z' - person_xpath: /html/body/main/section[2]/div[1]/h2 + has_or_had_provenance_path: + expression: /html/body/main/section[2]/div[1]/h2 + match_score: 1.0 + source_document: web/NL-NH-AMS-M-RM/rijksmuseum.nl/organisation.html person_html_file: web/NL-NH-AMS-M-RM/rijksmuseum.nl/organisation.html - person_xpath_match_score: 1.0 retrieval_agent: firecrawl description: Exact match for museum director name - value: @@ -106,9 +115,11 @@ classes: person_claim_value: General Director source_url: https://www.rijksmuseum.nl/en/about-us/organisation retrieved_on: '2025-01-15T10:30:00Z' - person_xpath: /html/body/main/section[2]/div[1]/p[1] + has_or_had_provenance_path: + expression: /html/body/main/section[2]/div[1]/p[1] + match_score: 1.0 + source_document: web/NL-NH-AMS-M-RM/rijksmuseum.nl/organisation.html person_html_file: web/NL-NH-AMS-M-RM/rijksmuseum.nl/organisation.html - person_xpath_match_score: 1.0 retrieval_agent: firecrawl description: Role title from institutional page - value: @@ -116,18 +127,20 @@ classes: person_claim_value: Taco Dibbits has been General Director since 2016... source_url: https://www.rijksmuseum.nl/en/about-us/organisation retrieved_on: '2025-01-15T10:30:00Z' - person_xpath: /html/body/main/section[2]/div[1]/div[2] + has_or_had_provenance_path: + expression: /html/body/main/section[2]/div[1]/div[2] + match_score: 0.92 + matched_text: Taco Dibbits has been General Director since 2016... + source_document: web/NL-NH-AMS-M-RM/rijksmuseum.nl/organisation.html person_html_file: web/NL-NH-AMS-M-RM/rijksmuseum.nl/organisation.html - person_xpath_match_score: 0.92 retrieval_agent: firecrawl - person_claim_notes: Biography truncated from longer text on page + person_claim_note: Biography truncated from longer text on page description: Biography text with partial match score - value: person_claim_type: linkedin_url person_claim_value: https://www.linkedin.com/in/taco-dibbits source_url: https://www.linkedin.com/in/taco-dibbits retrieved_on: '2025-01-15T11:00:00Z' - person_xpath: null retrieval_agent: exa_crawling_exa - person_claim_notes: Profile data stored in person/entity/taco-dibbits_20250115.json - description: LinkedIn claim - XPath null for API extraction + person_claim_note: Profile data stored in person/entity/taco-dibbits_20250115.json. No XPath for API extraction. + description: LinkedIn claim - No XPath for API extraction diff --git a/schemas/20251121/linkml/modules/classes/ResearchCenter.yaml b/schemas/20251121/linkml/modules/classes/ResearchCenter.yaml index ca35bf3f34..1feef5e49e 100644 --- a/schemas/20251121/linkml/modules/classes/ResearchCenter.yaml +++ b/schemas/20251121/linkml/modules/classes/ResearchCenter.yaml @@ -7,7 +7,8 @@ imports: - ./CustodianObservation - ./ReconstructionActivity - ../enums/ResearchCenterTypeEnum -- ../slots/accepts_or_accepted_visiting_scholar +- ../slots/accepts_or_accepted +- ./VisitingScholar - ../slots/has_or_had_affiliated_university - ../slots/has_or_had_custodian_type - ../slots/fellows_count @@ -75,7 +76,7 @@ classes: - hc:ConservationLab - hc:EducationCenter slots: - - accepts_or_accepted_visiting_scholar + - accepts_or_accepted - has_or_had_affiliated_university - has_or_had_custodian_type - fellows_count @@ -173,11 +174,17 @@ classes: examples: - value: true description: Has research library - accepts_or_accepted_visiting_scholar: - range: boolean + accepts_or_accepted: + range: VisitingScholar + inlined: true + multivalued: true + description: Visiting scholar programs that this research center accepts. examples: - - value: true - description: Accepts visitors + - value: + program_type: "fellowship" + duration: "3-6 months" + stipend_available: true + description: Fellowship program major_research_project: range: string multivalued: true @@ -230,7 +237,13 @@ classes: has_publication_series: true publication_series_name: Rijksmuseum Studies in Art has_research_library: true - accepts_or_accepted_visiting_scholar: true + accepts_or_accepted: + - program_type: "fellowship" + duration: "3-12 months" + eligibility: + - "PhD candidates" + - "Post-doctoral researchers" + stipend_available: true major_research_project: - Rembrandt Database - Operation Night Watch @@ -252,6 +265,10 @@ classes: - TU Delft has_fellows_program: true fellows_count: 4 - accepts_or_accepted_visiting_scholar: true + accepts_or_accepted: + - program_type: "short_term_visit" + duration: "1-4 weeks" + eligibility: + - "Academic researchers" staff_count: 8 description: Digital humanities research lab diff --git a/schemas/20251121/linkml/modules/classes/Storage.yaml b/schemas/20251121/linkml/modules/classes/Storage.yaml index b2beb720df..46f99facfc 100644 --- a/schemas/20251121/linkml/modules/classes/Storage.yaml +++ b/schemas/20251121/linkml/modules/classes/Storage.yaml @@ -43,7 +43,8 @@ imports: - ../slots/specificity_annotation - ../slots/standards_applied - ../slots/has_or_had_storage_condition -- ../slots/storage_description +- ../slots/has_or_had_description # was: storage_description - migrated per Rule 53 +- ./Description - ../slots/storage_id - ../slots/storage_name - ../slots/has_or_had_type @@ -120,7 +121,7 @@ classes: - specificity_annotation - standards_applied - has_or_had_storage_condition - - storage_description + - has_or_had_description # was: storage_description - migrated per Rule 53 - storage_id - storage_location - storage_name @@ -157,11 +158,20 @@ classes: description: Cold storage for film and photographic materials - value: ART_STORAGE description: Climate-controlled art storage - storage_description: - range: string + has_or_had_description: # was: storage_description - migrated per Rule 53 + description: | + Description of this storage facility. + MIGRATED from storage_description per slot_fixes.yaml (Rule 53). + Uses Description class with text and language support. + range: Description + inlined: true + multivalued: true examples: - - value: 'Climate-controlled archive depot housing overflow document collections. Equipped with mobile shelving system - (Compactus). Staff access only. Fire suppression: inert gas system.' + - value: | + description_text: 'Climate-controlled archive depot housing overflow document collections. Equipped with mobile shelving system (Compactus). Staff access only. Fire suppression: inert gas system.' + description_type: storage + language: en + description: Storage description using Description class storage_location: range: AuxiliaryPlace required: false @@ -268,13 +278,10 @@ classes: storage_id: https://nde.nl/ontology/hc/storage/rijksmuseum-depot-amersfoort storage_name: Depot Amersfoort has_or_had_type: ART_STORAGE - storage_description: 'Off-site storage depot for Rijksmuseum overflow collections. - - Climate-controlled facility housing paintings, sculptures, - - and decorative arts not currently on display. - - ' + has_or_had_description: + - description_text: 'Off-site storage depot for Rijksmuseum overflow collections. Climate-controlled facility housing paintings, sculptures, and decorative arts not currently on display.' + description_type: storage + language: en storage_location: https://nde.nl/ontology/hc/aux-place/rijksmuseum-depot-amersfoort capacity_linear_meters: 8000.0 current_utilization_percent: 78.5 @@ -287,11 +294,10 @@ classes: storage_id: https://nde.nl/ontology/hc/storage/nationaal-archief-depot-b storage_name: Depot B - Cold Storage has_or_had_type: COLD_STORAGE - storage_description: 'Refrigerated vault for film negatives, photographic materials, - - and temperature-sensitive documents. Maintained at 4°C, 35% RH. - - ' + has_or_had_description: + - description_text: 'Refrigerated vault for film negatives, photographic materials, and temperature-sensitive documents. Maintained at 4°C, 35% RH.' + description_type: storage + language: en capacity_description: 1,200 linear meters of cold storage shelving standards_applied: - IMAGE_PERMANENCE_INSTITUTE diff --git a/schemas/20251121/linkml/modules/classes/StorageUnit.yaml b/schemas/20251121/linkml/modules/classes/StorageUnit.yaml index 6cec930ad3..fb78bdf172 100644 --- a/schemas/20251121/linkml/modules/classes/StorageUnit.yaml +++ b/schemas/20251121/linkml/modules/classes/StorageUnit.yaml @@ -39,7 +39,8 @@ imports: - ../slots/specificity_annotation - ../slots/stores_object - ../slots/template_specificity -- ../slots/unit_description +- ../slots/has_or_had_description # was: unit_description - migrated per Rule 53 +- ./Description # REMOVED - migrated to has_or_had_identifier (2026-01-14, Rule 53) # - ../slots/unit_id # - ../slots/unit_identifier @@ -102,7 +103,7 @@ classes: - specificity_annotation - stores_object - template_specificity - - unit_description + - has_or_had_description # was: unit_description - migrated per Rule 53 # REMOVED - migrated to has_or_had_identifier (2026-01-14, Rule 53) # - unit_id # - unit_identifier @@ -134,8 +135,14 @@ classes: unit_type: range: StorageUnitTypeEnum required: true - unit_description: - range: string + has_or_had_description: # was: unit_description - migrated per Rule 53 + description: | + Description of this storage unit. + MIGRATED from unit_description per slot_fixes.yaml (Rule 53). + Uses Description class with text and language support. + range: Description + inlined: true + multivalued: true row_number: range: string examples: @@ -215,8 +222,10 @@ classes: unit_identifier: NA-2024-BOX-00145 unit_name: Archive Box 145 - WWII Ministry Records unit_type: ARCHIVE_BOX - unit_description: 'Acid-free archive box containing Ministry of Defense - correspondence from 1940-1945. Handle with care.' + has_or_had_description: + - description_text: 'Acid-free archive box containing Ministry of Defense correspondence from 1940-1945. Handle with care.' + description_type: unit + language: en row_number: '12' has_or_had_identifier: - value: '3' @@ -230,8 +239,10 @@ classes: unit_identifier: FF-MAPS-042 unit_name: Flat File Drawer 42 - Netherlands Maps unit_type: FLAT_FILE_DRAWER - unit_description: 'Flat file drawer containing oversized maps of the - Netherlands, 1850-1920. Climate-controlled environment.' + has_or_had_description: + - description_text: 'Flat file drawer containing oversized maps of the Netherlands, 1850-1920. Climate-controlled environment.' + description_type: unit + language: en drawer_number: 42 capacity_items: 50 current_item_count: 38 diff --git a/schemas/20251121/linkml/modules/classes/WebClaim.yaml b/schemas/20251121/linkml/modules/classes/WebClaim.yaml index e975c07abe..cd651ee9c3 100644 --- a/schemas/20251121/linkml/modules/classes/WebClaim.yaml +++ b/schemas/20251121/linkml/modules/classes/WebClaim.yaml @@ -15,7 +15,7 @@ imports: - linkml:types - ../slots/source_url - ../slots/retrieved_on -- ../slots/xpath +- ../slots/has_or_had_provenance_path - ../slots/html_file - ../slots/claim_id - ../slots/claim_type @@ -23,8 +23,6 @@ imports: - ../slots/extraction_timestamp - ../slots/specificity_annotation - ../slots/template_specificity -- ../slots/xpath_match_score -- ../slots/xpath_matched_text - ../slots/claim_extraction_method - ../slots/pipeline_stage - ../slots/claim_note @@ -32,13 +30,14 @@ imports: - ../enums/ExtractionPipelineStageEnum - ./SpecificityAnnotation - ./TemplateSpecificityScores +- ./XPath default_prefix: hc classes: WebClaim: class_uri: prov:Entity description: "A single verifiable claim extracted from a web page.\n\n**CORE PRINCIPLE: XPATH OR REMOVE**\n\nEvery claim\ - \ extracted from a webpage MUST have:\n1. `xpath` - pointing to exact element in archived HTML\n2. `html_file` - path\ - \ to the archived HTML (Playwright-rendered, NOT WARC)\n3. `xpath_match_score` - quality of the match\n\nClaims without\ + \ extracted from a webpage MUST have:\n1. `has_or_had_provenance_path` - XPath object pointing to exact element in archived HTML\n2. `html_file` - path\ + \ to the archived HTML (Playwright-rendered, NOT WARC)\n\nThe XPath object contains:\n- `expression` - the XPath string\n- `match_score` - quality of match (0.0-1.0)\n- `matched_text` - actual text found (for verification)\n\nClaims without\ \ these fields are FABRICATED and must be REMOVED.\n\n**ARCHIVE FORMAT: PLAYWRIGHT-RENDERED HTML**\n\nWe use Playwright\ \ (headless browser) to:\n1. Navigate to the target URL\n2. Wait for JavaScript to fully render\n3. Save the complete\ \ DOM as an HTML file\n\nThis differs from WARC archives which capture raw HTTP responses.\nPlaywright rendering captures\ @@ -58,10 +57,10 @@ classes: \ This saves: web/{entry_number}/{domain}/rendered.html\n\n2. Add XPath provenance to claims:\n `python scripts/add_xpath_provenance.py`\n\ \n3. Script REMOVES claims that cannot be verified\n (stores in `removed_unverified_claims` for audit)\n\n**EXAMPLES**:\n\ \nCORRECT (Verifiable):\n```yaml\n- claim_type: full_name\n claim_value: Historische Vereniging Nijeveen\n source_url:\ - \ https://historischeverenigingnijeveen.nl/\n retrieved_on: \"2025-11-29T12:28:00Z\"\n xpath: /html[1]/body[1]/div[6]/div[1]/h1[1]\n\ - \ html_file: web/0021/historischeverenigingnijeveen.nl/rendered.html\n xpath_match_score: 1.0\n pipeline_stage: layout_analysis\n\ + \ https://historischeverenigingnijeveen.nl/\n retrieved_on: \"2025-11-29T12:28:00Z\"\n has_or_had_provenance_path:\n expression: /html[1]/body[1]/div[6]/div[1]/h1[1]\n match_score: 1.0\n\ + \ html_file: web/0021/historischeverenigingnijeveen.nl/rendered.html\n pipeline_stage: layout_analysis\n\ ```\n\nWRONG (Fabricated - Must Be Removed):\n```yaml\n- claim_type: full_name\n claim_value: Historische Vereniging\ - \ Nijeveen\n confidence: 0.95 # ← NO! This is meaningless without XPath\n```\n" + \ Nijeveen\n confidence: 0.95 # ← NO! This is meaningless without XPath\n```\n\n**MIGRATION NOTE (2026-01-15)**:\nConsolidated xpath, xpath_match_score, xpath_matched_text\ninto has_or_had_provenance_path with XPath class.\n" exact_mappings: - prov:Entity close_mappings: @@ -80,9 +79,7 @@ classes: - source_url - specificity_annotation - template_specificity - - xpath - - xpath_match_score - - xpath_matched_text + - has_or_had_provenance_path slot_usage: claim_type: required: true @@ -92,26 +89,30 @@ classes: required: true retrieved_on: required: true - xpath: + has_or_had_provenance_path: required: true + range: XPath + inlined: true + description: >- + XPath provenance for this claim - pointing to exact element in archived HTML. + Contains expression, matched_text, and match_score. html_file: required: true - xpath_match_score: - required: true rules: - preconditions: slot_conditions: - xpath: + has_or_had_provenance_path: value_presence: ABSENT postconditions: - description: Claims without XPath must be removed as unverifiable + description: Claims without XPath provenance must be removed as unverifiable comments: - - WebClaim requires XPath provenance - claims without it are fabricated - - Match score is COMPUTED from actual text comparison, not estimated + - WebClaim requires XPath provenance via has_or_had_provenance_path - claims without it are fabricated + - XPath class contains expression, matched_text, and match_score in one structure - Archived HTML files are Playwright-rendered (NOT WARC format) - Use scripts/fetch_website_playwright.py to archive websites - Use scripts/add_xpath_provenance.py to add XPath to existing claims - 'Follows 4-stage GLAM-NER pipeline: recognition → layout → resolution → linking' + - 'MIGRATED 2026-01-15: xpath/xpath_match_score/xpath_matched_text → has_or_had_provenance_path (XPath class)' see_also: - rules/WEB_OBSERVATION_PROVENANCE_RULES.md - scripts/fetch_website_playwright.py @@ -123,9 +124,11 @@ classes: claim_value: Historische Vereniging Nijeveen source_url: https://historischeverenigingnijeveen.nl/ retrieved_on: '2025-11-29T12:28:00Z' - xpath: /html[1]/body[1]/div[6]/div[1]/h1[1] + has_or_had_provenance_path: + expression: /html[1]/body[1]/div[6]/div[1]/h1[1] + match_score: 1.0 + source_document: web/0021/historischeverenigingnijeveen.nl/rendered.html html_file: web/0021/historischeverenigingnijeveen.nl/rendered.html - xpath_match_score: 1.0 pipeline_stage: layout_analysis description: Exact match claim for organization name - value: @@ -133,9 +136,11 @@ classes: claim_value: '6253' source_url: https://historischeverenigingnijeveen.nl/nl/hvn retrieved_on: '2025-11-29T12:28:00Z' - xpath: /html[1]/body[1]/div[6]/div[1]/table[3]/tbody[1]/tr[1]/td[1]/p[1] + has_or_had_provenance_path: + expression: /html[1]/body[1]/div[6]/div[1]/table[3]/tbody[1]/tr[1]/td[1]/p[1] + match_score: 1.0 + source_document: web/0021/historischeverenigingnijeveen.nl/rendered.html html_file: web/0021/historischeverenigingnijeveen.nl/rendered.html - xpath_match_score: 1.0 pipeline_stage: layout_analysis description: Collection count claim from image bank statistics - value: @@ -143,9 +148,11 @@ classes: claim_value: https://www.facebook.com/HistorischeVerenigingNijeveen/ source_url: https://historischeverenigingnijeveen.nl/ retrieved_on: '2025-11-29T12:28:00Z' - xpath: /html[1]/body[1]/footer[1]/div[1]/a[3] + has_or_had_provenance_path: + expression: /html[1]/body[1]/footer[1]/div[1]/a[3] + match_score: 1.0 + source_document: web/0021/historischeverenigingnijeveen.nl/rendered.html html_file: web/0021/historischeverenigingnijeveen.nl/rendered.html - xpath_match_score: 1.0 pipeline_stage: entity_linking description: Social media link claim - entity linking stage - value: @@ -153,9 +160,11 @@ classes: claim_value: https://www.historischeverenigingnijeveen.nl/ source_url: https://historischeverenigingnijeveen.nl/nl/hvn retrieved_on: '2025-11-28T12:00:00Z' - xpath: /html[1]/body[1]/div[6]/div[1]/table[3]/tbody[1]/tr[1]/td[1]/p[6] + has_or_had_provenance_path: + expression: /html[1]/body[1]/div[6]/div[1]/table[3]/tbody[1]/tr[1]/td[1]/p[6] + matched_text: De Historische Vereniging Nijeveen is ook te vinden op Facebook + match_score: 0.561 + source_document: web/0021/historischeverenigingnijeveen.nl/rendered.html html_file: web/0021/historischeverenigingnijeveen.nl/rendered.html - xpath_match_score: 0.561 - xpath_matched_text: De Historische Vereniging Nijeveen is ook te vinden op Facebook pipeline_stage: layout_analysis description: Substring match - URL found within longer text diff --git a/schemas/20251121/linkml/modules/slots/accepts_or_accepted_external_work.yaml b/schemas/20251121/linkml/modules/slots/archive/accepts_or_accepted_external_work_archived_20260115.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/accepts_or_accepted_external_work.yaml rename to schemas/20251121/linkml/modules/slots/archive/accepts_or_accepted_external_work_archived_20260115.yaml diff --git a/schemas/20251121/linkml/modules/slots/accepts_or_accepted_payment_method.yaml b/schemas/20251121/linkml/modules/slots/archive/accepts_or_accepted_payment_method_archived_20260115.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/accepts_or_accepted_payment_method.yaml rename to schemas/20251121/linkml/modules/slots/archive/accepts_or_accepted_payment_method_archived_20260115.yaml diff --git a/schemas/20251121/linkml/modules/slots/accepts_or_accepted_visiting_scholar.yaml b/schemas/20251121/linkml/modules/slots/archive/accepts_or_accepted_visiting_scholar_archived_20260115.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/accepts_or_accepted_visiting_scholar.yaml rename to schemas/20251121/linkml/modules/slots/archive/accepts_or_accepted_visiting_scholar_archived_20260115.yaml diff --git a/schemas/20251121/linkml/modules/slots/parent_collection.yaml b/schemas/20251121/linkml/modules/slots/archive/parent_collection_archived_20250115.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/parent_collection.yaml rename to schemas/20251121/linkml/modules/slots/archive/parent_collection_archived_20250115.yaml diff --git a/schemas/20251121/linkml/modules/slots/parent_custodian.yaml b/schemas/20251121/linkml/modules/slots/archive/parent_custodian_archived_20250115.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/parent_custodian.yaml rename to schemas/20251121/linkml/modules/slots/archive/parent_custodian_archived_20250115.yaml diff --git a/schemas/20251121/linkml/modules/slots/person_xpath.yaml b/schemas/20251121/linkml/modules/slots/archive/person_xpath_archived_20260115.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/person_xpath.yaml rename to schemas/20251121/linkml/modules/slots/archive/person_xpath_archived_20260115.yaml diff --git a/schemas/20251121/linkml/modules/slots/person_xpath_match_score.yaml b/schemas/20251121/linkml/modules/slots/archive/person_xpath_match_score_archived_20260115.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/person_xpath_match_score.yaml rename to schemas/20251121/linkml/modules/slots/archive/person_xpath_match_score_archived_20260115.yaml diff --git a/schemas/20251121/linkml/modules/slots/storage_description.yaml b/schemas/20251121/linkml/modules/slots/archive/storage_description_archived_20260115.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/storage_description.yaml rename to schemas/20251121/linkml/modules/slots/archive/storage_description_archived_20260115.yaml diff --git a/schemas/20251121/linkml/modules/slots/storage_type_description.yaml b/schemas/20251121/linkml/modules/slots/archive/storage_type_description_archived_20260115.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/storage_type_description.yaml rename to schemas/20251121/linkml/modules/slots/archive/storage_type_description_archived_20260115.yaml diff --git a/schemas/20251121/linkml/modules/slots/sub_guide_description.yaml b/schemas/20251121/linkml/modules/slots/archive/sub_guide_description_archived_20260115.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/sub_guide_description.yaml rename to schemas/20251121/linkml/modules/slots/archive/sub_guide_description_archived_20260115.yaml diff --git a/schemas/20251121/linkml/modules/slots/transfer_location.yaml b/schemas/20251121/linkml/modules/slots/archive/transfer_location_archived_20260115.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/transfer_location.yaml rename to schemas/20251121/linkml/modules/slots/archive/transfer_location_archived_20260115.yaml diff --git a/schemas/20251121/linkml/modules/slots/transfer_location_text.yaml b/schemas/20251121/linkml/modules/slots/archive/transfer_location_text_archived_20260115.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/transfer_location_text.yaml rename to schemas/20251121/linkml/modules/slots/archive/transfer_location_text_archived_20260115.yaml diff --git a/schemas/20251121/linkml/modules/slots/transfer_policy.yaml b/schemas/20251121/linkml/modules/slots/archive/transfer_policy_archived_20260115.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/transfer_policy.yaml rename to schemas/20251121/linkml/modules/slots/archive/transfer_policy_archived_20260115.yaml diff --git a/schemas/20251121/linkml/modules/slots/transfer_to_collection_date.yaml b/schemas/20251121/linkml/modules/slots/archive/transfer_to_collection_date_archived_20260115.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/transfer_to_collection_date.yaml rename to schemas/20251121/linkml/modules/slots/archive/transfer_to_collection_date_archived_20260115.yaml diff --git a/schemas/20251121/linkml/modules/slots/unit_description.yaml b/schemas/20251121/linkml/modules/slots/archive/unit_description_archived_20260115.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/unit_description.yaml rename to schemas/20251121/linkml/modules/slots/archive/unit_description_archived_20260115.yaml diff --git a/schemas/20251121/linkml/modules/slots/xpath.yaml b/schemas/20251121/linkml/modules/slots/archive/xpath_archived_20260115.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/xpath.yaml rename to schemas/20251121/linkml/modules/slots/archive/xpath_archived_20260115.yaml diff --git a/schemas/20251121/linkml/modules/slots/xpath_match_score.yaml b/schemas/20251121/linkml/modules/slots/archive/xpath_match_score_archived_20260115.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/xpath_match_score.yaml rename to schemas/20251121/linkml/modules/slots/archive/xpath_match_score_archived_20260115.yaml diff --git a/schemas/20251121/linkml/modules/slots/xpath_matched_text.yaml b/schemas/20251121/linkml/modules/slots/archive/xpath_matched_text_archived_20260115.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/xpath_matched_text.yaml rename to schemas/20251121/linkml/modules/slots/archive/xpath_matched_text_archived_20260115.yaml diff --git a/schemas/20251121/linkml/modules/slots/slot_fixes.yaml b/schemas/20251121/linkml/modules/slots/slot_fixes.yaml index db27fe0805..39dd548934 100644 --- a/schemas/20251121/linkml/modules/slots/slot_fixes.yaml +++ b/schemas/20251121/linkml/modules/slots/slot_fixes.yaml @@ -1364,18 +1364,51 @@ fixes: type: slot - label: ExternalWork type: class + processed: + status: true + date: '2026-01-15' + notes: | + Migration completed for accepts_or_accepted_external_work slot. + Reused existing: accepts_or_accepted slot (generic slot for acceptance policies) + Consuming classes updated: ConservationLab.yaml + - Replaced import with ../slots/accepts_or_accepted and ./ExternalWork + - Updated slots list and slot_usage (range: ExternalWork, inlined: true, multivalued: true) + - Updated 2 examples to use ExternalWork structure + Archived slot: modules/slots/archive/accepts_or_accepted_external_work_archived_20260115.yaml - original_slot_id: https://nde.nl/ontology/hc/slot/accepts_or_accepted_payment_method revision: - label: accepts_or_accepted type: slot - label: PaymentMethod type: class + processed: + status: true + date: '2026-01-15' + notes: | + Migration completed for accepts_or_accepted_payment_method slot. + Reused existing: accepts_or_accepted slot (generic slot for acceptance policies) + Consuming classes updated: GiftShop.yaml + - Replaced import with ../slots/accepts_or_accepted and ./PaymentMethod + - Updated slots list and slot_usage (range: PaymentMethod, inlined: true, multivalued: true) + - Updated 3 examples to use PaymentMethod structure + Archived slot: modules/slots/archive/accepts_or_accepted_payment_method_archived_20260115.yaml - original_slot_id: https://nde.nl/ontology/hc/slot/accepts_or_accepted_visiting_scholar revision: - label: accepts_or_accepted type: slot - label: VisitingScholar type: class + processed: + status: true + date: '2026-01-15' + notes: | + Migration completed for accepts_or_accepted_visiting_scholar slot. + Reused existing: accepts_or_accepted slot (generic slot for acceptance policies) + Consuming classes updated: ResearchCenter.yaml + - Replaced import with ../slots/accepts_or_accepted and ./VisitingScholar + - Updated slots list and slot_usage (range: VisitingScholar, inlined: true, multivalued: true) + - Updated 2 examples to use VisitingScholar structure + Archived slot: modules/slots/archive/accepts_or_accepted_visiting_scholar_archived_20260115.yaml - original_slot_id: https://nde.nl/ontology/hc/slot/zone_name revision: - label: has_or_had_label @@ -1481,12 +1514,26 @@ fixes: type: slot - label: TextSegment type: class + processed: + status: true + notes: >- + Consolidated into has_or_had_provenance_path slot with XPath class. + XPath class has matched_text attribute. xpath_matched_text slot archived + to archive/xpath_matched_text_archived_20260115.yaml. + Updated: WebClaim.yaml, PersonWebClaim.yaml, InvalidWebClaim.yaml, MissionStatement.yaml - original_slot_id: https://nde.nl/ontology/hc/slot/xpath_match_score revision: - label: has_or_had_score type: slot - label: XPathScore type: class + processed: + status: true + notes: >- + Consolidated into has_or_had_provenance_path slot with XPath class. + XPath class has match_score attribute. xpath_match_score slot archived + to archive/xpath_match_score_archived_20260115.yaml. + Updated: WebClaim.yaml, PersonWebClaim.yaml, InvalidWebClaim.yaml, MissionStatement.yaml - original_slot_id: https://nde.nl/ontology/hc/slot/xpath revision: - label: has_or_had_provenance @@ -1497,6 +1544,14 @@ fixes: type: slot - label: XPath type: class + processed: + status: true + notes: >- + Migrated to has_or_had_provenance_path slot with XPath class range. + XPath class consolidates expression, match_score, matched_text, source_document. + xpath slot archived to archive/xpath_archived_20260115.yaml. + person_xpath and person_xpath_match_score slots also archived. + Updated: WebClaim.yaml, PersonWebClaim.yaml, InvalidWebClaim.yaml, MissionStatement.yaml - original_slot_id: https://nde.nl/ontology/hc/slot/writing_system revision: - label: has_or_had_writing_system @@ -2420,6 +2475,11 @@ fixes: type: slot - label: Description type: class + processed: + status: true + date: "2026-01-15" + session: "description-slot-migration" + notes: "Migrated StorageUnit.yaml: unit_description → has_or_had_description + Description class. Archived slot file." - original_slot_id: https://nde.nl/ontology/hc/slot/unit_affiliation revision: - label: is_or_was_affiliated_with @@ -2846,6 +2906,11 @@ fixes: type: slot - label: TimeSpan type: class + processed: + status: true + timestamp: '2026-01-15T12:00:00Z' + session: transfer_migration + notes: Migrated in CustodianArchive.yaml. Bespoke slot archived. - original_slot_id: https://nde.nl/ontology/hc/slot/transfer_policy revision: - label: is_or_was_transferred @@ -2856,6 +2921,11 @@ fixes: type: slot - label: TransferPolicy type: class + processed: + status: true + timestamp: '2026-01-15T12:00:00Z' + session: transfer_migration + notes: Migrated in CurrentArchive.yaml using has_or_had_policy directly (archive TYPE, not instance). Bespoke slot archived. - original_slot_id: https://nde.nl/ontology/hc/slot/transfer_location_text revision: - label: is_or_was_transferred @@ -2870,6 +2940,11 @@ fixes: type: slot - label: Description type: class + processed: + status: true + timestamp: '2026-01-15T12:00:00Z' + session: transfer_migration + notes: Migrated in ProvenanceEvent.yaml using event_location (CustodianPlace.place_name holds text). Bespoke slot archived. - original_slot_id: https://nde.nl/ontology/hc/slot/transfer_location revision: - label: is_or_was_transferred @@ -2884,6 +2959,11 @@ fixes: type: slot - label: Description type: class + processed: + status: true + timestamp: '2026-01-15T12:00:00Z' + session: transfer_migration + notes: Migrated in ProvenanceEvent.yaml using event_location. Bespoke slot archived. - original_slot_id: https://nde.nl/ontology/hc/slot/transcript_format revision: - label: has_or_had_format @@ -4109,6 +4189,11 @@ fixes: type: slot - label: Description type: class + processed: + status: true + date: "2026-01-15" + session: "description-slot-migration" + notes: "Migrated FindingAid.yaml (SubGuideReference class): sub_guide_description → has_or_had_description + Description class. Archived slot file." - original_slot_id: https://nde.nl/ontology/hc/slot/student_service revision: - label: has_or_had_service @@ -4167,6 +4252,11 @@ fixes: type: slot - label: Description type: class + processed: + status: true + date: "2026-01-15" + session: "description-slot-migration" + notes: "Already migrated in StorageType.yaml. Archived slot file." - original_slot_id: https://nde.nl/ontology/hc/slot/storage_type_code revision: - label: has_or_had_code @@ -4209,4 +4299,59 @@ fixes: - label: has_or_had_description type: slot - label: Description - type: class \ No newline at end of file + type: class + processed: + status: true + date: "2026-01-15" + session: "description-slot-migration" + notes: "Migrated Storage.yaml: storage_description → has_or_had_description + Description class. Archived slot file." +- original_slot_id: https://nde.nl/ontology/hc/slot/parent_custodian + revision: + - label: is_or_was_suborganization_of + type: slot + context: hierarchy + - label: CustodianLegalStatus + type: class + context: hierarchy + - label: has_or_had_associated_custodian + type: slot + context: event_association + - label: Custodian + type: class + context: event_association + processed: + status: true + date: '2025-01-15' + notes: | + Migration completed for parent_custodian slot. + DUAL SEMANTICS - different replacements based on context (Rule 39): + + 1. HIERARCHY (CustodianLegalStatus.yaml): + parent_custodian → is_or_was_suborganization_of (RiC-O pattern) + + 2. EVENT ASSOCIATION (OrganizationalChangeEvent.yaml): + parent_custodian → has_or_had_associated_custodian (PROV-O pattern) + + Files migrated: + - CustodianLegalStatus.yaml → is_or_was_suborganization_of + - OrganizationalChangeEvent.yaml → has_or_had_associated_custodian + + Archived: modules/slots/archive/parent_custodian_archived_20250115.yaml +- original_slot_id: https://nde.nl/ontology/hc/slot/parent_collection + revision: + - label: is_or_was_sub_collection_of + type: slot + - label: Collection + type: class + processed: + status: true + date: '2025-01-15' + notes: | + Migration completed for parent_collection slot. + + parent_collection → is_or_was_sub_collection_of (RiC-O pattern) + + Files migrated: + - Collection.yaml (parent_collection → is_or_was_sub_collection_of) + + Archived: modules/slots/archive/parent_collection_archived_20250115.yaml \ No newline at end of file