feat: Migrate has_air_changes_per_hour to specifies_or_specified and create AirChanges and Ventilation classes

This commit is contained in:
kempersc 2026-01-27 09:03:22 +01:00
parent 3d7c52c1de
commit b4d1a7677f
30 changed files with 540 additions and 410 deletions

View file

@ -2752,9 +2752,17 @@ async def person_search(request: PersonSearchRequest) -> PersonSearchResponse:
)
try:
# Augment query for better recall on domain names if it looks like a domain search
# "nos" -> "nos email domain nos" to guide vector search towards email addresses
search_query = request.query
if len(search_query.split()) == 1 and len(search_query) > 2 and "@" not in search_query:
# Heuristic: single word queries might be domain searches
# We append "email domain" context to guide the embedding
search_query = f"{search_query} email domain {search_query}"
# Use the hybrid retriever's person search
results = retriever.search_persons(
query=request.query,
query=search_query,
k=request.k,
filter_custodian=request.filter_custodian,
only_heritage_relevant=request.only_heritage_relevant,

View file

@ -1,5 +1,5 @@
{
"generated": "2026-01-26T23:49:30.478Z",
"generated": "2026-01-26T23:50:10.883Z",
"schemaRoot": "/schemas/20251121/linkml",
"totalFiles": 3014,
"categoryCounts": {

View file

@ -1,5 +1,5 @@
{
"generated": "2026-01-26T23:50:10.883Z",
"generated": "2026-01-27T08:03:23.376Z",
"schemaRoot": "/schemas/20251121/linkml",
"totalFiles": 3014,
"categoryCounts": {

View file

@ -13,6 +13,12 @@ prefixes:
imports:
- linkml:types
- ../slots/has_or_had_origin
- ../slots/temporal_extent
- ./TimeSpan
- ../slots/has_or_had_method
- ./AcquisitionMethod
- ../slots/has_or_had_provenance
- ./Provenance
- ./Entity
default_prefix: hc
classes:
@ -20,6 +26,9 @@ classes:
class_uri: rico:Instantiation
slots:
- has_or_had_origin
- temporal_extent
- has_or_had_method
- has_or_had_provenance
slot_usage:
has_or_had_origin:
range: Entity

View file

@ -0,0 +1,8 @@
classes:
Administration:
class_uri: org:OrganizationalUnit
description: "An administrative unit or body."
slots:
- has_or_had_label
- has_or_had_description
- has_or_had_identifier

View file

@ -0,0 +1,46 @@
# AirChanges class
# Represents the rate of air changes in a space
#
# Generation date: 2026-01-27
# Rule compliance: 0b, 38, 39, 53
#
# Created for has_air_changes_per_hour migration
id: https://nde.nl/ontology/hc/class/AirChanges
name: AirChanges
title: Air Changes Class
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
default_prefix: hc
imports:
- linkml:types
- ../slots/has_or_had_quantity
- ../slots/has_or_had_unit
- ./Quantity
- ./Unit
classes:
AirChanges:
class_uri: schema:QuantitativeValue
description: |
Represents the rate of air changes in a space.
**Ontological Alignment**:
- `schema:QuantitativeValue`: Allows specifying value and unit.
slots:
- has_or_had_quantity
- has_or_had_unit
slot_usage:
has_or_had_quantity:
range: float
description: The number of air changes.
required: true
has_or_had_unit:
range: Unit
description: Unit of measurement (e.g., "per hour").
required: true

View file

@ -0,0 +1,39 @@
# AllocationEvent class
# Represents an event where an identifier was allocated
#
# Generation date: 2026-01-27
# Rule compliance: 0b, 38, 39, 53
#
# Created for has_allocation_date migration
id: https://nde.nl/ontology/hc/class/AllocationEvent
name: AllocationEvent
title: Allocation Event Class
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
prov: http://www.w3.org/ns/prov#
default_prefix: hc
imports:
- linkml:types
- ../slots/temporal_extent
- ./TimeSpan
classes:
AllocationEvent:
class_uri: prov:Activity
description: |
An event representing the allocation of an identifier.
**Ontological Alignment**:
- `prov:Activity`: An activity that occurred over a period of time and acted upon or with entities.
slots:
- temporal_extent
slot_usage:
temporal_extent:
description: Time period when the allocation occurred.
required: true

View file

@ -0,0 +1,61 @@
# Annotation class
# Represents an annotation (comment, note, tag) on an entity
#
# Generation date: 2026-01-27
# Rule compliance: 0b, 38, 39, 53
#
# Created for has_annotation_* migration
id: https://nde.nl/ontology/hc/class/Annotation
name: Annotation
title: Annotation Class
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
oa: http://www.w3.org/ns/oa#
schema: http://schema.org/
default_prefix: hc
imports:
- linkml:types
- ../slots/has_or_had_description
- ../slots/is_or_was_created_by
- ../classes/Agent
- ../slots/has_or_had_rationale
- ../classes/Rationale
- ../slots/contains_or_contained
- ../classes/Segment
- ../slots/has_or_had_type
- ../classes/AnnotationType
classes:
Annotation:
class_uri: oa:Annotation
description: |
An annotation (comment, note, tag, highlight) on a resource.
**Ontological Alignment**:
- `oa:Annotation`: Web Annotation Data Model.
slots:
- has_or_had_description
- is_or_was_created_by
- has_or_had_rationale
- contains_or_contained
- has_or_had_type
slot_usage:
has_or_had_description:
description: The content of the annotation (body).
is_or_was_created_by:
description: The agent who created the annotation.
range: Agent
has_or_had_rationale:
description: The motivation for the annotation (e.g. commenting, tagging).
range: Rationale
contains_or_contained:
description: The target segment being annotated.
range: Segment
has_or_had_type:
description: The type of annotation.
range: AnnotationType

View file

@ -25,9 +25,12 @@ imports:
- ./ExhibitedObject
- ./CurationActivity
- ../slots/has_or_had_access_policy_reference
- ../slots/has_acquisition_date
- ../slots/has_acquisition_method
- ../slots/has_acquisition_source
# - has_acquisition_date (migrated to is_or_was_acquired_through + AcquisitionEvent)
# - has_acquisition_method (migrated to AcquisitionEvent.has_or_had_method)
- ../slots/is_or_was_acquired_through # was: has_acquisition_source - migrated per Rule 53 (2026-01-26)
# - has_acquisition_source (migrated to is_or_was_acquired_through + AcquisitionEvent)
- ./AcquisitionEvent
- ./AcquisitionMethod
- ../slots/has_arrangement
# REMOVED 2026-01-18: ../slots/collection_description - migrated to has_or_had_description + Description (Rule 53)
- ../slots/has_or_had_description
@ -112,9 +115,9 @@ classes:
- bf:Item
slots:
- has_or_had_access_policy_reference
- has_acquisition_date
- has_acquisition_method
- is_or_was_acquired_through # was: has_acquisition_source - migrated per Rule 53 (2026-01-26)
# - has_acquisition_date
# - has_acquisition_method
- is_or_was_acquired_through # was: has_acquisition_source, has_acquisition_date, has_acquisition_method - migrated per Rule 53 (2026-01-26)
- has_arrangement
# REMOVED 2026-01-18: collection_description - migrated to has_or_had_description + Description (Rule 53)
- has_or_had_description
@ -282,22 +285,10 @@ classes:
- Algemeen Rijksarchief (1856-2002)
- Nationaal Archief (2002-present)
description: VOC records custodial history
has_acquisition_method:
range: string
examples:
- value: TRANSFER
description: Government transfer of VOC archives
- value: BEQUEST
description: Testamentary gift
has_acquisition_date:
range: date
examples:
- value: '1856-01-01'
description: Transfer to Algemeen Rijksarchief
is_or_was_acquired_through: # was: has_acquisition_source - migrated per Rule 53 (2026-01-26)
description: |
Source of acquisition (person or organization).
MIGRATED from has_acquisition_source per Rule 53.
Acquisition event for this collection.
MIGRATED from has_acquisition_source, has_acquisition_method, has_acquisition_date per Rule 53.
Uses AcquisitionEvent class.
range: AcquisitionEvent
multivalued: true
@ -306,10 +297,18 @@ classes:
- value:
has_or_had_origin:
has_or_had_label: "Ministry of Colonies"
has_or_had_method:
has_or_had_label: TRANSFER
temporal_extent:
begin_of_the_begin: '1856-01-01'
description: Source of VOC archives transfer
- value:
has_or_had_origin:
has_or_had_label: "Estate of Anna Drucker-Fraser"
has_or_had_method:
has_or_had_label: BEQUEST
temporal_extent:
begin_of_the_begin: '1937-01-01'
description: Source of bequest
has_or_had_access_policy_reference:
range: AccessPolicy
@ -449,11 +448,13 @@ classes:
has_or_had_description:
- description_text: "Transferred to the Dutch state upon the company's dissolution in 1799."
description_type: provenance_statement
acquisition_method: TRANSFER
acquisition_date: '1856-01-01'
is_or_was_acquired_through: # was: has_acquisition_source - migrated per Rule 53 (2026-01-26)
- has_or_had_origin:
has_or_had_label: Ministry of Colonies
has_or_had_method:
has_or_had_label: TRANSFER
temporal_extent:
begin_of_the_begin: '1856-01-01'
has_or_had_access_policy_reference: https://nde.nl/ontology/hc/access-policy/open-access
arrangement: Organized by provenance, then chronologically
has_or_had_finding_aid:

View file

@ -2,7 +2,7 @@
#
# REFACTORED: Now extends Activity base class (2026-01-13)
# Inherits generic slots from Activity:
# - has_activity_identifier, has_activity_name, has_activity_description
# - has_or_had_identifier, has_or_had_label, has_or_had_description
# - has_or_had_activity_type, temporal_extent
# - is_or_was_succeeded_by, preceding_activity, status, note
#
@ -76,9 +76,9 @@ classes:
**INHERITANCE**:
Extends `Activity` base class. Inherits:
- has_activity_identifier (required, identifier)
- has_activity_name (required)
- has_activity_description
# - has_activity_identifier (required, identifier)
# - has_activity_name (required)
# - has_activity_description
- has_or_had_activity_type → ActivityType
- temporal_extent → TimeSpan
- is_or_was_succeeded_by, preceding_activity
@ -418,10 +418,10 @@ classes:
examples:
- value:
has_activity_identifier: https://nde.nl/ontology/hc/activity/rijksmuseum-inventory-2025-001
has_activity_name: 2025 Annual Collection Inventory - Dutch Masters
has_or_had_identifier: https://nde.nl/ontology/hc/activity/rijksmuseum-inventory-2025-001
has_or_had_label: 2025 Annual Collection Inventory - Dutch Masters
has_or_had_activity_type: INVENTORY
has_activity_description: |
has_or_had_description: |
Annual physical inventory of the Dutch Masters collection
(Gallery of Honour and adjacent galleries). Spot-check methodology
with 20% sample verification against CMS records. Includes
@ -448,10 +448,10 @@ classes:
description: Annual inventory activity at Rijksmuseum
- value:
has_activity_identifier: https://nde.nl/ontology/hc/activity/nationaal-archief-digitization-voc-2024
has_activity_name: VOC Archives Digitization Project - Phase 2
has_or_had_identifier: https://nde.nl/ontology/hc/activity/nationaal-archief-digitization-voc-2024
has_or_had_label: VOC Archives Digitization Project - Phase 2
has_or_had_activity_type: DIGITIZATION
has_activity_description: |
has_or_had_description: |
Second phase of systematic digitization of VOC (Dutch East India
Company) archives. Focus on Hoge Regering Batavia series (1.04.02).
High-resolution scanning with OCR/HTR processing for searchability.
@ -484,10 +484,10 @@ classes:
description: Multi-year digitization project at Nationaal Archief
- value:
has_activity_identifier: https://nde.nl/ontology/hc/activity/kb-rehousing-medieval-2025
has_activity_name: Medieval Manuscripts Rehousing Initiative
has_or_had_identifier: https://nde.nl/ontology/hc/activity/kb-rehousing-medieval-2025
has_or_had_label: Medieval Manuscripts Rehousing Initiative
has_or_had_activity_type: REHOUSING
has_activity_description: |
has_or_had_description: |
Transfer of 342 medieval manuscripts from legacy storage to
custom-fitted archival boxes with acid-free tissue interleaving.
Includes updated location records and condition photography.

View file

@ -22,13 +22,13 @@ imports:
- ./ConservationRecord
- ./ProvenanceEvent
- ../enums/ExhibitedObjectTypeEnum
- ../slots/has_or_had_identifier
- ./WikiDataIdentifier
- ../slots/creator
- ../slots/has_accession_number
- ../slots/has_acquisition_method
- ../slots/has_acquisition_date
- ../slots/has_or_had_provenance # was: provenance_text - migrated per Rule 53/56 (2026-01-18)
- ../slots/has_or_had_identifier # was: has_accession_number - migrated per Rule 53 (2026-01-26)
# - has_acquisition_date (migrated to is_or_was_acquired_through + AcquisitionEvent)
# - has_acquisition_method (migrated to AcquisitionEvent.has_or_had_method)
- ../slots/is_or_was_acquired_through
- ./AcquisitionEvent
- ./AcquisitionMethod
# REMOVED 2026-01-23: catalog_raisonne_number - migrated to has_or_had_identifier per Rule 53/F26
- ./Provenance
- ./Description
# REMOVED 2026-01-23: catalog_raisonne_number - migrated to has_or_had_identifier per Rule 53/F26
@ -131,8 +131,8 @@ classes:
# specificity_annotation, template_specificity
# These are listed here to apply class-specific slot_usage
- has_or_had_identifier # was: has_accession_number - migrated per Rule 53 (2026-01-26)
- has_acquisition_date
- has_acquisition_method
- is_or_was_acquired_through # was: has_acquisition_date - migrated per Rule 53 (2026-01-26)
# - has_acquisition_method (migrated to AcquisitionEvent.has_or_had_method)
# REMOVED 2026-01-23: catalog_raisonne_number - migrated to has_or_had_identifier per Rule 53/F26
- has_or_had_condition_note
- conservation_history
@ -429,17 +429,21 @@ classes:
- Pieter van Ruijven (c. 1665-1674)
- Maria de Knuijt (1674)
- A.A. des Tombe (1881-1903)
has_acquisition_method:
is_or_was_acquired_through:
range: AcquisitionEvent
inlined: true
description: |
Acquisition event for this object.
MIGRATED from has_acquisition_date and has_acquisition_method per Rule 53 (2026-01-26).
Uses AcquisitionEvent with temporal_extent, has_or_had_method, and has_or_had_origin.
required: false
range: string
examples:
- value: BEQUEST
- value:
has_or_had_method:
has_or_had_label: BEQUEST
temporal_extent:
begin_of_the_begin: '1903-01-01'
description: des Tombe bequest to Mauritshuis
has_acquisition_date:
required: false
range: date
examples:
- value: '1903-01-01'
# exhibited_in:
# required: false
# range: uriorcurie
@ -627,8 +631,11 @@ classes:
country: NL
permanent_location: Gallery 15
accession_number: '670'
acquisition_method: BEQUEST
acquisition_date: '1903-01-01'
is_or_was_acquired_through:
has_or_had_method:
has_or_had_label: BEQUEST
temporal_extent:
begin_of_the_begin: '1903-01-01'
has_or_had_provenance: # was: provenance_text - migrated per Rule 53/56 (2026-01-18)
has_or_had_description:
- description_text: "Possibly Pieter van Ruijven, Delft (c. 1665); his widow, Maria de Knuijt, Delft (1674); Dissius sale, Amsterdam, May 16, 1696; A.A. des Tombe, The Hague (purchased 1881); Bequeathed to Mauritshuis (1903)."

View file

@ -30,7 +30,10 @@ imports:
- ./IdentifierType
- ./IdentifierTypes
- ../slots/has_or_had_secondary_label
- ../slots/has_allocation_date
- ../slots/is_or_was_allocated_through
- ../classes/AllocationEvent
- ../slots/temporal_extent
- ../classes/TimeSpan
- ../slots/specificity_annotation
- ../slots/has_or_had_score
- ./AllocationAgency
@ -215,20 +218,18 @@ classes:
- owl:sameAs
slots:
- is_or_was_allocated_by
- has_allocation_date
- has_or_had_secondary_label
# MIGRATED 2026-01-22: canonical_value → has_or_had_canonical_form + CanonicalForm
- has_or_had_canonical_form
# MIGRATED 2026-01-24: defined_by_standard → has_or_had_standard + Standard (Rule 53)
- has_or_had_standard
- identifier_format_used
- identifies_custodian
- specificity_annotation
- has_or_had_score
- is_or_was_allocated_through
slot_usage:
identifies_custodian:
range: Custodian
required: false
is_or_was_allocated_through:
range: AllocationEvent
description: |
Event documenting when and how this identifier was allocated.
Replaces has_allocation_date per Rule 53.
examples:
- value:
temporal_extent:
begin_of_the_begin: "2023-01-01"
description: Allocation date
# MIGRATED 2026-01-24: defined_by_standard → has_or_had_standard + Standard (Rule 53)
has_or_had_standard:
range: Standard

View file

@ -0,0 +1,6 @@
classes:
Method:
class_uri: skos:Concept
description: "A method or procedure used."
slots:
- has_or_had_description

View file

@ -20,172 +20,11 @@ imports:
- ./Quantity
- ./Unit
- ../slots/has_or_had_access_restriction
- ../enums/PersonalCollectionTypeEnum
- ../slots/has_acquisition_history
- ../slots/has_or_had_custodian_type
- ../slots/legacy_planning
- ../slots/personal_collection_subtype
- ../slots/preservation_approach
- ../slots/specificity_annotation
- ../slots/has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17)
- ./SpecificityAnnotation
- ./TemplateSpecificityScore # was: TemplateSpecificityScores - migrated per Rule 53 (2026-01-17)
- ./TemplateSpecificityType
- ./TemplateSpecificityTypes
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
skos: http://www.w3.org/2004/02/skos/core#
schema: http://schema.org/
crm: http://www.cidoc-crm.org/cidoc-crm/
dcterms: http://purl.org/dc/terms/
foaf: http://xmlns.com/foaf/0.1/
wd: http://www.wikidata.org/entity/
classes:
PersonalCollectionType:
is_a: CustodianType
class_uri: skos:Concept
annotations:
skos:prefLabel: Personal Collection
skos:altLabel: private collection, private collector, art collector, bibliophile, numismatist, philatelist, personal
archive, family collection, estate collection
structured_aliases:
- literal_form: privécollectie
predicate: EXACT_SYNONYM
in_language: nl
- literal_form: particuliere verzameling
predicate: EXACT_SYNONYM
in_language: nl
- literal_form: privéverzamelaar
predicate: EXACT_SYNONYM
in_language: nl
- literal_form: kunstverzamelaar
predicate: EXACT_SYNONYM
in_language: nl
- literal_form: familiearchief
predicate: EXACT_SYNONYM
in_language: nl
- literal_form: private collection
predicate: EXACT_SYNONYM
in_language: en
- literal_form: private collector
predicate: EXACT_SYNONYM
in_language: en
- literal_form: art collector
predicate: EXACT_SYNONYM
in_language: en
- literal_form: bibliophile
predicate: EXACT_SYNONYM
in_language: en
- literal_form: numismatist
predicate: EXACT_SYNONYM
in_language: en
- literal_form: philatelist
predicate: EXACT_SYNONYM
in_language: en
- literal_form: Privatsammlung
predicate: EXACT_SYNONYM
in_language: de
- literal_form: Privatsammler
predicate: EXACT_SYNONYM
in_language: de
- literal_form: Kunstsammler
predicate: EXACT_SYNONYM
in_language: de
- literal_form: collection privée
predicate: EXACT_SYNONYM
in_language: fr
- literal_form: collectionneur privé
predicate: EXACT_SYNONYM
in_language: fr
- literal_form: collectionneur d'art
predicate: EXACT_SYNONYM
in_language: fr
- literal_form: colección privada
predicate: EXACT_SYNONYM
in_language: es
- literal_form: coleccionista privado
predicate: EXACT_SYNONYM
in_language: es
- literal_form: coleccionista de arte
predicate: EXACT_SYNONYM
in_language: es
- literal_form: collezione privata
predicate: EXACT_SYNONYM
in_language: it
- literal_form: collezionista privato
predicate: EXACT_SYNONYM
in_language: it
- literal_form: coleção privada
predicate: EXACT_SYNONYM
in_language: pt
- literal_form: colecionador privado
predicate: EXACT_SYNONYM
in_language: pt
description: "Specialized custodian type for individual private collectors maintaining\npersonal heritage collections.\n\
\n**Ontology Alignment**:\n\n1. **Structural Layer** (W3C Standards):\n - skos:Concept - Thesaurus classification\n\
\ - Classification within CustodianType hierarchy\n\n2. **Domain Layer** (Heritage Ontologies):\n - crm:E21_Person\
\ - CIDOC-CRM individual person\n - crm:E78_Curated_Holding - Personal collection as curated holding\n - foaf:Person\
\ - Friend of a Friend person representation\n\n3. **Web Layer** (Schema.org):\n - schema:Person - Individual collector\n\
\ - schema:Collection - Personal collection entity\n - schema:OwnershipInfo - Ownership and provenance\n\n**Wikidata\
\ Coverage** (40+ personal collection entities):\n\nNotable Private Collectors:\n- Q5633421 (private collection) - Individual\
\ heritage holdings\n- Q1114515 (art collector) - Art-focused private collections\n- Q15621286 (bibliophile) - Book\
\ collector\n- Q2374149 (numismatist) - Coin and medal collector\n- Q2555521 (philatelist) - Stamp collector\n\nCollection\
\ Types:\n- Q838948 (fine art collection) - Painting, sculpture, decorative arts\n- Q732137 (rare book collection) -\
\ Bibliographic rarities\n- Q7547661 (natural history collection) - Specimens, fossils, minerals\n- Q1968122 (ephemera\
\ collection) - Historical ephemera\n- Q215380 (ethnographic collection) - Cultural artifacts\n\nCollector Profiles:\n\
- Q1028181 (museum founder) - Collectors who establish museums\n- Q3400985 (patron of the arts) - Collectors supporting\
\ artists\n- Q17351810 (antiquarian) - Historical artifact collectors\n- Q1350189 (connoisseur) - Specialized expertise\
\ collectors\n\nCollection Destinations:\n- Q2668072 (bequeathed collection) - Donated to institutions\n- Q838948 (dispersed\
\ collection) - Sold at auction\n- Q5633421 (house museum) - Home converted to museum\n- Q1469207 (study collection)\
\ - Research-focused holdings\n\n**Key Distinctions from Other Types**:\n\nvs. Museum:\n- PersonalCollection: INDIVIDUAL\
\ ownership, PRIVATE residence\n- Museum: INSTITUTIONAL ownership, PUBLIC facility\n- Example: Isabella Stewart Gardner\
\ (private collector) → Isabella Stewart Gardner Museum (after donation)\n\nvs. Gallery:\n- PersonalCollection: PERSONAL\
\ enjoyment, NON-COMMERCIAL\n- Gallery: COMMERCIAL operation, SALES-DRIVEN\n- Example: Art enthusiast's collection vs.\
\ Commercial gallery inventory\n\nvs. HeritageSociety:\n- PersonalCollection: INDIVIDUAL collector\n- HeritageSociety:\
\ MEMBERSHIP organization, COLLECTIVE collecting\n- Example: Stamp collector vs. Philatelic society\n\nvs. Archive:\n\
- PersonalCollection: Often TOPICAL/AESTHETIC focus (collector interest)\n- Archive: PROVENANCE-BASED focus (institutional\
\ or personal papers)\n- Example: Art collector (aesthetic choices) vs. Family archive (provenance unit)\n\nvs. Library:\n\
- PersonalCollection: PRIVATE library, NO PUBLIC LENDING\n- Library: PUBLIC/INSTITUTIONAL lending service\n- Example:\
\ Rare book collector vs. Public library special collections\n\n**Lifecycle Transitions**:\n\nPersonal collections often\
\ undergo institutional transitions:\n\n1. **Private Collection** (CustodianType: PersonalCollectionType)\n ↓\n2.\
\ **Collector Dies** (OrganizationalChangeEvent: CLOSURE)\n ↓\n3. **Three Outcomes**:\n \n a) **Bequest to Museum**\
\ (OrganizationalChangeEvent: ACQUISITION)\n - Collection becomes MuseumType holdings\n - Example: J. Paul\
\ Getty collection → J. Paul Getty Museum\n \n b) **Auction Dispersal** (OrganizationalChangeEvent: DISSOLUTION)\n\
\ - Collection scattered to multiple buyers\n - Example: Yves Saint LaurentPierre Bergé collection sale (2009)\n\
\ \n c) **House Museum** (CustodianType changes: PersonalCollection → Museum)\n - Home preserved as museum\
\ with collection in situ\n - Example: Isabella Stewart Gardner's Fenway Court → Museum (1903)\n\n**RDF Serialization\
\ Example**:\n\n```turtle\n@prefix hc: <https://nde.nl/ontology/hc/> .\n@prefix skos: <http://www.w3.org/2004/02/skos/core#>\
\ .\n@prefix schema: <http://schema.org/> .\n@prefix crm: <http://www.cidoc-crm.org/cidoc-crm/> .\n@prefix foaf: <http://xmlns.com/foaf/0.1/>\
\ .\n\nhc:PersonalCollectionType\n a skos:Concept, hc:CustodianType ;\n skos:prefLabel \"Personal Collection Type\"\
@en,\n \"Privé Collectie Type\"@nl,\n \"Privatsammlung Typ\"@de,\n \"\
Type de Collection Privée\"@fr ;\n skos:definition \"Individual private collectors and personal heritage collections\"\
@en ;\n skos:broader hc:CustodianType ;\n skos:narrower hc:ArtCollector,\n hc:Bibliophile,\n \
\ hc:Numismatist ;\n schema:url <https://nde.nl/ontology/hc/class/personal-collection-type> .\n\n# Example:\
\ Willem Six Collection (17th-century Dutch paintings, Amsterdam)\n<https://w3id.org/heritage/custodian/nl/willem-six-collection>\n\
\ a schema:Person, foaf:Person, crm:E21_Person, hc:PersonalCollector ;\n hc:custodian_type hc:PersonalCollectionType\
\ ;\n hc:has_or_had_category [ hc:category_name \"Dutch Golden Age paintings\" ; hc:category_type \"SUBJECT\" ] ;\n hc:has_or_had_quantity\
\ \"50+ paintings\", \"Historical furniture\", \"Family archives\" ;\n hc:acquisition_history \"Inherited family collection\
\ since 1654\", \"Selective purchases 1980-2020\" ;\n hc:access_restrictions \"Private residence, No public access\"\
, \"Occasional museum loans\" ;\n hc:preservation_approach \"Professional conservation\", \"Climate-controlled room\"\
, \"Regular condition assessments\" ;\n hc:legacy_planning \"Family succession\", \"Selected works on permanent loan\
\ to Rijksmuseum\" ;\n schema:name \"Willem Six\" ;\n schema:familyName \"Six\" ;\n schema:owns <https://w3id.org/heritage/object/nl/rembrandt-portrait-jan-six>\
\ ;\n schema:address \"Amsterdam, Netherlands\" ;\n dcterms:description \"Private collection of Dutch Golden Age paintings,\
\ maintained by the Six family for over 350 years\" .\n```\n"
exact_mappings:
- skos:Concept
close_mappings:
- crm:E21_Person
- foaf:Person
- schema:Person
related_mappings:
- crm:E78_Curated_Holding
- schema:Collection
- schema:OwnershipInfo
slots:
- has_or_had_access_restriction
- has_acquisition_history
# REMOVED 2026-01-19: collection_focus - migrated to has_or_had_category + Category (Rule 53)
- ../slots/is_or_was_acquired_through # was: has_acquisition_history - migrated per Rule 53 (2026-01-26)
- ./AcquisitionEvent
- ./Provenance
# REMOVED 2026-01-19: collection_focus - migrated to has_or_had_category + Category (Rule 53)
- has_or_had_category
# REMOVED 2026-01-19: collection_size - migrated to has_or_had_quantity + Quantity (Rule 53)
- has_or_had_quantity
@ -241,15 +80,31 @@ classes:
has_or_had_unit:
unit_value: "volume"
description: Private library size
has_acquisition_history:
range: string
is_or_was_acquired_through:
description: |
Acquisition history of the collection.
MIGRATED from has_acquisition_history per Rule 53 (2026-01-26).
Uses AcquisitionEvent with Provenance (has_or_had_description).
range: AcquisitionEvent
multivalued: true
inlined: true
required: true
examples:
- value: Inherited family collection, Selective purchases
- value:
has_or_had_provenance:
has_or_had_description:
- description_text: "Inherited family collection since 1654"
- description_text: "Selective purchases 1980-2020"
description: Multi-generational art collection
- value: Assembled 1950-2000, European auctions
- value:
has_or_had_provenance:
has_or_had_description:
- description_text: "Assembled 1950-2000 through European auctions"
description: Acquired art collection
- value: Field-collected, Botanical expeditions
- value:
has_or_had_provenance:
has_or_had_description:
- description_text: "Field-collected during botanical expeditions"
description: Natural history collection
has_or_had_access_restriction:
range: string

View file

@ -0,0 +1,35 @@
# Segment class
# Represents a segment of a resource (e.g. video segment, text region)
#
# Generation date: 2026-01-27
# Rule compliance: 0b, 38, 39, 53
#
# Created for has_annotation_segment migration
id: https://nde.nl/ontology/hc/class/Segment
name: Segment
title: Segment Class
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
oa: http://www.w3.org/ns/oa#
default_prefix: hc
imports:
- linkml:types
- ../slots/has_or_had_label
- ../slots/has_or_had_description
classes:
Segment:
class_uri: oa:SpecificResource
description: |
A segment or region of a resource.
**Ontological Alignment**:
- `oa:SpecificResource`: A specific part of a resource.
slots:
- has_or_had_label
- has_or_had_description

View file

@ -24,7 +24,13 @@ imports:
- ../slots/allows_or_allowed
- ./TemperatureDeviation
- ../slots/humidity_tolerance
- ../slots/has_air_changes_per_hour
- ../slots/specifies_or_specified
- ../classes/Ventilation
- ../classes/AirChanges
- ../slots/has_or_had_quantity
- ../classes/Quantity
- ../slots/has_or_had_unit
- ../classes/Unit
- ../slots/requires_or_required # was: fire_suppression_type - migrated per Rule 53 (2026-01-26)
- ./FireSuppressionSystem
- ./FireSuppressionType
@ -96,7 +102,7 @@ classes:
- crm:E29_Design_or_Procedure
slots:
- has_or_had_access_restriction
- has_air_changes_per_hour
- specifies_or_specified
- requires_or_required # was: fire_suppression_type - migrated per Rule 53 (2026-01-26)
- flood_protection_required
- humidity_max
@ -126,7 +132,19 @@ classes:
# MIGRATED 2026-01-16: is_or_was_required → has_or_had_requirement_status
- has_or_had_requirement_status
slot_usage:
policy_id:
specifies_or_specified:
range: Ventilation
inlined: true
description: |
Specifies ventilation requirements, such as air changes per hour.
Replaces has_air_changes_per_hour per Rule 53.
examples:
- value:
requires_or_required:
has_or_had_quantity: 1.5
has_or_had_unit:
has_or_had_label: "air changes per hour"
description: 1.5 air changes per hour minimum
range: uriorcurie
required: true
identifier: true
@ -233,11 +251,6 @@ classes:
is_required: true
requirement_type: "uv_filtered_lighting"
description: UV filtering required
has_air_changes_per_hour:
range: float
examples:
- value: 1.5
description: 1.5 air changes per hour minimum
particulate_max:
range: float
examples:

View file

@ -0,0 +1,38 @@
# Ventilation class
# Represents ventilation systems and requirements
#
# Generation date: 2026-01-27
# Rule compliance: 0b, 38, 39, 53
#
# Created for has_air_changes_per_hour migration
id: https://nde.nl/ontology/hc/class/Ventilation
name: Ventilation
title: Ventilation Class
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
default_prefix: hc
imports:
- linkml:types
- ../slots/requires_or_required
- ./AirChanges
classes:
Ventilation:
class_uri: schema:Thing
description: |
Ventilation system or requirements.
**Ontological Alignment**:
- `schema:Thing`: Generic entity.
slots:
- requires_or_required
slot_usage:
requires_or_required:
range: AirChanges
description: Required air changes per hour.

View file

@ -0,0 +1,5 @@
name: has_or_had_administration
description: The administration that manages or managed the entity.
slot_uri: org:hasUnit
range: Administration
multivalued: true

View file

@ -0,0 +1,39 @@
# has_or_had_quantity slot
# Generic slot for quantity values
#
# Generation date: 2026-01-27
# Rule compliance: 38, 39, 42
#
# Part of has_air_changes_per_hour migration (Rule 53)
id: https://nde.nl/ontology/hc/slot/has_or_had_quantity
name: has_or_had_quantity_slot
title: Has Or Had Quantity Slot
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
default_prefix: hc
imports:
- linkml:types
slots:
has_or_had_quantity:
slot_uri: schema:value
description: |
The numeric value of a quantity.
**Temporal Semantics** (RiC-O Pattern):
"hasOrHad" indicates the quantity is relative to a specific time or context.
**Ontological Alignment**:
- `schema:value`: The value of the quantitative value or property value node.
**Range**:
- Can be a number (float, integer) or a string representation.
range: uriorcurie
multivalued: false
required: false

View file

@ -0,0 +1,39 @@
# is_or_was_allocated_through slot
# Generic slot for allocation events
#
# Generation date: 2026-01-27
# Rule compliance: 38, 39, 42
#
# Part of has_allocation_date migration (Rule 53)
id: https://nde.nl/ontology/hc/slot/is_or_was_allocated_through
name: is_or_was_allocated_through_slot
title: Is Or Was Allocated Through Slot
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
prov: http://www.w3.org/ns/prov#
default_prefix: hc
imports:
- linkml:types
slots:
is_or_was_allocated_through:
slot_uri: prov:wasGeneratedBy
description: |
The event (activity) through which an identifier was allocated.
**Temporal Semantics** (RiC-O Pattern):
"isOrWas" indicates the allocation event in the past.
**Ontological Alignment**:
- `prov:wasGeneratedBy`: Completion of production of a new entity by an activity.
**Range**:
- `AllocationEvent` class.
range: uriorcurie
multivalued: false
required: false

View file

@ -30,43 +30,13 @@ fixes:
processed:
status: true
date: '2026-01-26'
notes: Migrated to is_or_was_accessioned_through + AccessionEvent (with temporal_extent) in CustodianArchive.yaml. Slot archived.
- original_slot_id: https://nde.nl/ontology/hc/slot/has_accession_number
notes: Migrated to is_or_was_acquired_through + AcquisitionEvent. Slot archived.
- original_slot_id: https://nde.nl/ontology/hc/slot/has_acquisition_date
revision:
- label: has_or_had_interface
- label: is_or_was_acquired_through
type: slot
- label: AccessInterface
type: class
- label: has_or_had_url
type: slot
- label: URL
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/has_accession_date
revision:
- label: is_or_was_accessioned_through
type: slot
- label: AccessionEvent
type: class
- label: temporal_extent
type: slot
- label: TimeSpan
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/has_accession_number
revision:
- label: is_or_was_accessioned_through
type: slot
- label: AccessionEvent
type: class
- label: has_or_had_identifier
type: slot
- label: Identifier
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/has_accumulation_end_date
revision:
- label: has_or_had_accumulation
type: slot
- label: Accumulation
- label: AcquisitionEvent
type: class
- label: temporal_extent
type: slot
@ -76,93 +46,12 @@ fixes:
type: slot
- label: Timestamp
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/has_accumulation_start_date
revision:
- label: has_or_had_accumulation
type: slot
- label: Accumulation
type: class
- label: temporal_extent
type: slot
- label: TimeSpan
type: class
- label: start_of_the_start
type: slot
- label: Timestamp
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/has_accuracy_in_meters
revision:
- label: has_or_had_coordinates
type: slot
- label: Coordinates
type: class
- label: has_or_had_level
type: slot
- label: AccuracyLevel
type: class
- label: has_or_had_quantity
type: slot
- label: Quantity
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/has_acquisition_date
revision:
- label: is_or_was_acquired_through
type: slot
- label: AcquisitionEvent
type: class
- label: temporal_extent
type: slot
- label: TimeSpan
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/has_acquisition_history
revision:
- label: is_or_was_acquired_through
type: slot
- label: AcquisitionEvent
type: class
- label: has_or_had_provenance
type: slot
- label: Provenance
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/has_acquisition_method
revision:
- label: is_or_was_acquired_through
type: slot
- label: AcquisitionEvent
type: class
- label: has_or_had_method
type: slot
- label: AcquisitionMethod
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/has_acquisition_source
revision:
- label: is_or_was_acquired_through
type: slot
- label: AcquisitionEvent
type: class
- label: has_or_had_origin
type: slot
- label: Entity
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/has_activity_description
revision:
- label: has_or_had_description
type: slot
- label: Description
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/has_activity_identifier
revision:
- label: has_or_had_identifier
type: slot
- label: Identifier
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/has_activity_name
revision:
- label: has_or_had_label
type: slot
- label: Label
type: class
processed:
status: true
date: '2026-01-26'
notes: Migrated to temporal_extent + TimeSpan (end_of_the_end) in Loan.yaml. Slot archived.
- original_slot_id: https://nde.nl/ontology/hc/slot/has_actual_return_date
revision:
- label: temporal_extent
type: slot
@ -196,19 +85,12 @@ fixes:
type: slot
- label: Label
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/has_administration
revision:
- label: has_or_had_administration
type: slot
- label: Administration
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/has_administration_description
revision:
- label: has_or_had_description
type: slot
- label: Description
type: class
processed:
status: true
date: '2026-01-26'
notes: Migrated to has_or_had_label + Label in CustodianAdministration.yaml. Slot archived.
- original_slot_id: https://nde.nl/ontology/hc/slot/has_administration_name
revision:
- label: has_or_had_label
type: slot
@ -234,9 +116,14 @@ fixes:
revision:
- label: has_or_had_age
type: slot
- label: Age
- label: Age
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/has_agenda_description
processed:
status: true
date: '2026-01-26'
notes: Migrated to has_or_had_age + Age in PersonObservation.yaml. Slot archived.
- original_slot_id: https://nde.nl/ontology/hc/slot/has_age
nda_description
revision:
- label: has_or_had_description
type: slot
@ -292,6 +179,10 @@ fixes:
- label: AgentTypes
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/has_agreement_signed_date
processed:
status: true
date: '2026-01-27'
notes: Fully migrated to is_or_was_based_on + Agreement class + is_or_was_signed_on slot (Rule 53). Loan.yaml updated. Slot archived.
revision:
- label: is_or_was_based_on
type: slot
@ -306,6 +197,10 @@ fixes:
- label: Timestamp
type: class
- orignal_slot_id: https://nde.nl/ontology/hc/slot/has_air_changes_per_hour
processed:
status: true
date: '2026-01-27'
notes: Fully migrated to specifies_or_specified + Ventilation class + AirChanges class (Rule 53). StorageConditionPolicy.yaml updated. Slot archived.
revision:
- label: specifies_or_specified
type: slot
@ -324,7 +219,11 @@ fixes:
- label: Unit
type: class
value: air changes per hour
- orignal_slot_id: https://nde.nl/ontology/hc/slot/has_allocation_date
- original_slot_id: https://nde.nl/ontology/hc/slot/has_allocation_date
processed:
status: true
date: '2026-01-27'
notes: Fully migrated to is_or_was_allocated_through + AllocationEvent (Rule 53). CustodianIdentifier.yaml updated. Slot archived.
revision:
- label: is_or_was_allocated_through
type: slot
@ -334,19 +233,35 @@ fixes:
type: slot
- label: TimeSpan
type: class
- label: temporal_extent
type: slot
- label: TimeSpan
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/has_alpha_2_code
processed:
status: true
date: '2026-01-27'
notes: Fully migrated to has_or_had_identifier + Alpha2Code class (Rule 53). Country.yaml updated. Slot archived.
revision:
- label: has_or_had_identifier
type: slot
- label: Alpha2Code
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/has_alpha_3_code
processed:
status: true
date: '2026-01-27'
notes: Fully migrated to has_or_had_identifier + Alpha3Code class (Rule 53). Country.yaml updated. Slot archived.
revision:
- label: has_or_had_identifier
type: slot
- label: Alpha3Code
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/has_alpha_3_code
- original_slot_id: https://nde.nl/ontology/hc/slot/has_alpha_3_code_dup
processed:
status: true
date: '2026-01-27'
notes: Duplicate entry processed.
revision:
- label: has_or_had_identifier
type: slot

View file

@ -43,34 +43,39 @@ def update_manifest(add_files, remove_files):
if __name__ == "__main__":
# Define files to add
add_files = [
{"name": "Confidence", "path": "modules/classes/Confidence.yaml", "category": "class"},
{"name": "GovernanceAuthority", "path": "modules/classes/GovernanceAuthority.yaml", "category": "class"},
{"name": "GovernanceRole", "path": "modules/classes/GovernanceRole.yaml", "category": "class"},
{"name": "GovernanceStructure", "path": "modules/classes/GovernanceStructure.yaml", "category": "class"},
{"name": "GoverningBody", "path": "modules/classes/GoverningBody.yaml", "category": "class"},
{"name": "HALCAdm1Code", "path": "modules/classes/HALCAdm1Code.yaml", "category": "class"},
{"name": "HALCAdm2Name", "path": "modules/classes/HALCAdm2Name.yaml", "category": "class"},
{"name": "defines_or_defined", "path": "modules/slots/defines_or_defined.yaml", "category": "slot"},
{"name": "grants_or_granted", "path": "modules/slots/grants_or_granted.yaml", "category": "slot"},
{"name": "has_or_had_confidence", "path": "modules/slots/has_or_had_confidence.yaml", "category": "slot"},
{"name": "is_or_was_governed_by", "path": "modules/slots/is_or_was_governed_by.yaml", "category": "slot"},
{"name": "is_or_was_represented_by", "path": "modules/slots/is_or_was_represented_by.yaml", "category": "slot"},
{"name": "provides_or_provided_to", "path": "modules/slots/provides_or_provided_to.yaml", "category": "slot"},
{"name": "AccessApplication", "path": "modules/classes/AccessApplication.yaml", "category": "class"},
{"name": "AccessInterface", "path": "modules/classes/AccessInterface.yaml", "category": "class"},
{"name": "AccessionEvent", "path": "modules/classes/AccessionEvent.yaml", "category": "class"},
{"name": "Accumulation", "path": "modules/classes/Accumulation.yaml", "category": "class"},
{"name": "Coordinates", "path": "modules/classes/Coordinates.yaml", "category": "class"},
{"name": "AcquisitionEvent", "path": "modules/classes/AcquisitionEvent.yaml", "category": "class"},
{"name": "AcquisitionMethod", "path": "modules/classes/AcquisitionMethod.yaml", "category": "class"},
{"name": "grants_or_granted_access_through", "path": "modules/slots/grants_or_granted_access_through.yaml", "category": "slot"},
{"name": "has_or_had_interface", "path": "modules/slots/has_or_had_interface.yaml", "category": "slot"},
{"name": "is_or_was_accessioned_through", "path": "modules/slots/is_or_was_accessioned_through.yaml", "category": "slot"},
{"name": "has_or_had_accumulation", "path": "modules/slots/has_or_had_accumulation.yaml", "category": "slot"},
{"name": "has_or_had_coordinates", "path": "modules/slots/has_or_had_coordinates.yaml", "category": "slot"},
{"name": "is_or_was_acquired_through", "path": "modules/slots/is_or_was_acquired_through.yaml", "category": "slot"},
{"name": "was_acquired_through", "path": "modules/slots/was_acquired_through.yaml", "category": "slot"},
{"name": "has_or_had_method", "path": "modules/slots/has_or_had_method.yaml", "category": "slot"},
]
# Define files to remove (archived slots)
remove_files = [
"geographic_scope",
"governance_authority",
"governance_clause",
"governance_representative",
"governance_role",
"governance_structure",
"governing_body",
"habitat",
"halc_adm1_code",
"halc_adm2_name",
"handwriting_confidence"
"has_access_application_url",
"has_access_interface_url",
"has_accession_date",
"has_accession_number",
"has_accumulation_end_date",
"has_accumulation_start_date",
"has_accuracy_in_meters",
"has_acquisition_date",
"has_acquisition_history",
"has_acquisition_method",
"has_acquisition_source",
"has_activity_description",
"has_activity_identifier",
"has_activity_name"
]
update_manifest(add_files, remove_files)