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.
This commit is contained in:
kempersc 2026-01-15 13:00:27 +01:00
parent ea61e36a8e
commit 8174c9692e
34 changed files with 390 additions and 135 deletions

View file

@ -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": {

View file

@ -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

View file

@ -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": {

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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
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