Add new classes and slots to the ontology

- Introduced GeospatialLocation class for specific geospatial locations.
- Added HandsOnFacility class representing facilities for hands-on experiences.
- Created Hyponym class for narrower terms or instances.
- Added ImagingEquipment class for imaging-related equipment.
- Introduced LoadingDock class for loading dock facilities.
- Created LocalCollection class for locally held collections.
- Added Locker class for storage lockers available to visitors/staff.
- Introduced MichelinStarRating class for Michelin star ratings.
- Created MicrofilmReader class for equipment used to read microfilms.
- Added OperationalArchive class for archives containing operational records.
- Introduced OperationalUnit class for operational units within organizations.
- Added has_or_had_archive slot for associating archives with entities.
- Created has_or_had_rating slot for ratings assigned to entities.
- Introduced has_or_had_section slot for sections or units within organizations.
- Added has_geospatial_location slot linking nominal places to precise geospatial coordinates.
This commit is contained in:
kempersc 2026-01-27 22:17:11 +01:00
parent 09674f7da2
commit 8c42292235
263 changed files with 3825 additions and 4352 deletions

View file

@ -2767,9 +2767,27 @@ async def person_search(request: PersonSearchRequest) -> PersonSearchResponse:
search_query = request.query search_query = request.query
extra_filters = None extra_filters = None
# Check for single word domain-like queries # 1. Email/Domain Detection Logic
if len(search_query.split()) == 1 and len(search_query) > 2 and "@" not in search_query: is_email_like = "@" in search_query
# Heuristic: single word queries might be domain searches # Check for common TLDs at the end of the query or at the end of words
common_tlds = ['.nl', '.com', '.org', '.net', '.eu', '.be', '.de', '.edu', '.gov', '.uk', '.fr', '.it', '.es']
is_domain_like = any(tld in search_query.lower() for tld in common_tlds)
# 2. Construct Filters
if is_email_like or is_domain_like:
logger.info(f"[PersonSearch] Email/Domain pattern detected: '{search_query}'")
# If explicit @ is present, we might want to strip leading @ for better matching
# e.g. "@nos.nl" -> "nos.nl"
clean_term = search_query.strip()
if clean_term.startswith("@"):
clean_term = clean_term[1:]
# Apply MatchText filter on email field
# This prioritizes email matches by strictly filtering for them first
extra_filters = {"email": {"match": {"text": clean_term}}}
elif len(search_query.split()) == 1 and len(search_query) > 2:
# Heuristic: single word queries might be domain searches (e.g. "nos", "leiden")
# We use MatchText filtering on email field to find substring matches # We use MatchText filtering on email field to find substring matches
# Qdrant "match": {"text": "nos"} performs token-based matching # Qdrant "match": {"text": "nos"} performs token-based matching
extra_filters = {"email": {"match": {"text": search_query}}} extra_filters = {"email": {"match": {"text": search_query}}}

View file

@ -1,12 +1,12 @@
{ {
"generated": "2026-01-27T10:37:45.388Z", "generated": "2026-01-27T10:50:25.504Z",
"schemaRoot": "/schemas/20251121/linkml", "schemaRoot": "/schemas/20251121/linkml",
"totalFiles": 2986, "totalFiles": 3000,
"categoryCounts": { "categoryCounts": {
"main": 4, "main": 4,
"class": 1230, "class": 1241,
"enum": 153, "enum": 153,
"slot": 1595, "slot": 1598,
"module": 4 "module": 4
}, },
"categories": [ "categories": [
@ -2760,6 +2760,11 @@
"path": "modules/classes/GeospatialIdentifier.yaml", "path": "modules/classes/GeospatialIdentifier.yaml",
"category": "class" "category": "class"
}, },
{
"name": "GeospatialLocation",
"path": "modules/classes/GeospatialLocation.yaml",
"category": "class"
},
{ {
"name": "GeoSpatialPlace", "name": "GeoSpatialPlace",
"path": "modules/classes/GeoSpatialPlace.yaml", "path": "modules/classes/GeoSpatialPlace.yaml",
@ -2895,6 +2900,11 @@
"path": "modules/classes/HALCAdm2Name.yaml", "path": "modules/classes/HALCAdm2Name.yaml",
"category": "class" "category": "class"
}, },
{
"name": "HandsOnFacility",
"path": "modules/classes/HandsOnFacility.yaml",
"category": "class"
},
{ {
"name": "HeritageCustodianPlace", "name": "HeritageCustodianPlace",
"path": "modules/classes/HeritageCustodianPlace.yaml", "path": "modules/classes/HeritageCustodianPlace.yaml",
@ -3005,6 +3015,11 @@
"path": "modules/classes/Hypernym.yaml", "path": "modules/classes/Hypernym.yaml",
"category": "class" "category": "class"
}, },
{
"name": "Hyponym",
"path": "modules/classes/Hyponym.yaml",
"category": "class"
},
{ {
"name": "Hypothesis", "name": "Hypothesis",
"path": "modules/classes/Hypothesis.yaml", "path": "modules/classes/Hypothesis.yaml",
@ -3055,6 +3070,11 @@
"path": "modules/classes/Image.yaml", "path": "modules/classes/Image.yaml",
"category": "class" "category": "class"
}, },
{
"name": "ImagingEquipment",
"path": "modules/classes/ImagingEquipment.yaml",
"category": "class"
},
{ {
"name": "Index", "name": "Index",
"path": "modules/classes/Index.yaml", "path": "modules/classes/Index.yaml",
@ -3345,11 +3365,21 @@
"path": "modules/classes/LlmVerification.yaml", "path": "modules/classes/LlmVerification.yaml",
"category": "class" "category": "class"
}, },
{
"name": "LoadingDock",
"path": "modules/classes/LoadingDock.yaml",
"category": "class"
},
{ {
"name": "Loan", "name": "Loan",
"path": "modules/classes/Loan.yaml", "path": "modules/classes/Loan.yaml",
"category": "class" "category": "class"
}, },
{
"name": "LocalCollection",
"path": "modules/classes/LocalCollection.yaml",
"category": "class"
},
{ {
"name": "LocalGovernmentArchive", "name": "LocalGovernmentArchive",
"path": "modules/classes/LocalGovernmentArchive.yaml", "path": "modules/classes/LocalGovernmentArchive.yaml",
@ -3405,6 +3435,11 @@
"path": "modules/classes/LocationResolution.yaml", "path": "modules/classes/LocationResolution.yaml",
"category": "class" "category": "class"
}, },
{
"name": "Locker",
"path": "modules/classes/Locker.yaml",
"category": "class"
},
{ {
"name": "LogoClaim", "name": "LogoClaim",
"path": "modules/classes/LogoClaim.yaml", "path": "modules/classes/LogoClaim.yaml",
@ -3595,6 +3630,16 @@
"path": "modules/classes/METSAPI.yaml", "path": "modules/classes/METSAPI.yaml",
"category": "class" "category": "class"
}, },
{
"name": "MichelinStarRating",
"path": "modules/classes/MichelinStarRating.yaml",
"category": "class"
},
{
"name": "MicrofilmReader",
"path": "modules/classes/MicrofilmReader.yaml",
"category": "class"
},
{ {
"name": "MilitaryArchive", "name": "MilitaryArchive",
"path": "modules/classes/MilitaryArchive.yaml", "path": "modules/classes/MilitaryArchive.yaml",
@ -3905,6 +3950,16 @@
"path": "modules/classes/OpeningPeriod.yaml", "path": "modules/classes/OpeningPeriod.yaml",
"category": "class" "category": "class"
}, },
{
"name": "OperationalArchive",
"path": "modules/classes/OperationalArchive.yaml",
"category": "class"
},
{
"name": "OperationalUnit",
"path": "modules/classes/OperationalUnit.yaml",
"category": "class"
},
{ {
"name": "Organization", "name": "Organization",
"path": "modules/classes/Organization.yaml", "path": "modules/classes/Organization.yaml",
@ -8167,6 +8222,11 @@
"path": "modules/slots/has_or_had_archival_status.yaml", "path": "modules/slots/has_or_had_archival_status.yaml",
"category": "slot" "category": "slot"
}, },
{
"name": "has_or_had_archive",
"path": "modules/slots/has_or_had_archive.yaml",
"category": "slot"
},
{ {
"name": "has_or_had_archive_branch", "name": "has_or_had_archive_branch",
"path": "modules/slots/has_or_had_archive_branch.yaml", "path": "modules/slots/has_or_had_archive_branch.yaml",
@ -9162,6 +9222,11 @@
"path": "modules/slots/has_or_had_rate.yaml", "path": "modules/slots/has_or_had_rate.yaml",
"category": "slot" "category": "slot"
}, },
{
"name": "has_or_had_rating",
"path": "modules/slots/has_or_had_rating.yaml",
"category": "slot"
},
{ {
"name": "has_or_had_rationale", "name": "has_or_had_rationale",
"path": "modules/slots/has_or_had_rationale.yaml", "path": "modules/slots/has_or_had_rationale.yaml",
@ -9312,6 +9377,11 @@
"path": "modules/slots/has_or_had_secondary_system.yaml", "path": "modules/slots/has_or_had_secondary_system.yaml",
"category": "slot" "category": "slot"
}, },
{
"name": "has_or_had_section",
"path": "modules/slots/has_or_had_section.yaml",
"category": "slot"
},
{ {
"name": "has_or_had_section_link", "name": "has_or_had_section_link",
"path": "modules/slots/has_or_had_section_link.yaml", "path": "modules/slots/has_or_had_section_link.yaml",

View file

@ -0,0 +1,24 @@
id: https://nde.nl/ontology/hc/class/GeospatialLocation
name: GeospatialLocation
title: GeospatialLocation
description: >-
A specific geospatial location.
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_location
classes:
GeospatialLocation:
class_uri: schema:GeoCoordinates
description: Geospatial location.
slots:
- has_or_had_location

View file

@ -0,0 +1,24 @@
id: https://nde.nl/ontology/hc/class/HandsOnFacility
name: HandsOnFacility
title: HandsOnFacility
description: >-
A facility providing hands-on experiences.
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_description
classes:
HandsOnFacility:
class_uri: schema:AmenityFeature
description: Hands-on facility.
slots:
- has_or_had_description

View file

@ -0,0 +1,24 @@
id: https://nde.nl/ontology/hc/class/Hyponym
name: Hyponym
title: Hyponym
description: >-
A narrower term or instance.
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
skos: http://www.w3.org/2004/02/skos/core#
default_prefix: hc
imports:
- linkml:types
- ../slots/has_or_had_label
classes:
Hyponym:
class_uri: skos:Concept
description: Narrower concept/instance.
slots:
- has_or_had_label

View file

@ -0,0 +1,24 @@
id: https://nde.nl/ontology/hc/class/ImagingEquipment
name: ImagingEquipment
title: ImagingEquipment
description: >-
Equipment used for imaging (digitization, photography, etc.).
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_name
classes:
ImagingEquipment:
class_uri: schema:Product
description: Imaging equipment.
slots:
- has_or_had_name

View file

@ -0,0 +1,24 @@
id: https://nde.nl/ontology/hc/class/LoadingDock
name: LoadingDock
title: LoadingDock
description: >-
A loading dock facility.
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_description
classes:
LoadingDock:
class_uri: schema:AmenityFeature
description: Loading dock.
slots:
- has_or_had_description

View file

@ -0,0 +1,24 @@
id: https://nde.nl/ontology/hc/class/LocalCollection
name: LocalCollection
title: LocalCollection
description: >-
A locally held collection.
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_name
classes:
LocalCollection:
class_uri: schema:Collection
description: Local collection.
slots:
- has_or_had_name

View file

@ -0,0 +1,24 @@
id: https://nde.nl/ontology/hc/class/Locker
name: Locker
title: Locker
description: >-
Storage lockers available for visitors/staff.
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_description
classes:
Locker:
class_uri: schema:AmenityFeature
description: Locker facility.
slots:
- has_or_had_description

View file

@ -0,0 +1,24 @@
id: https://nde.nl/ontology/hc/class/MichelinStarRating
name: MichelinStarRating
title: MichelinStarRating
description: >-
A Michelin star rating.
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_value
classes:
MichelinStarRating:
class_uri: schema:Rating
description: Michelin star rating.
slots:
- has_or_had_value

View file

@ -0,0 +1,24 @@
id: https://nde.nl/ontology/hc/class/MicrofilmReader
name: MicrofilmReader
title: MicrofilmReader
description: >-
Equipment for reading microfilms.
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_name
classes:
MicrofilmReader:
class_uri: schema:Product
description: Microfilm reader.
slots:
- has_or_had_name

View file

@ -0,0 +1,24 @@
id: https://nde.nl/ontology/hc/class/OperationalArchive
name: OperationalArchive
title: OperationalArchive
description: >-
An archive containing operational records.
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_name
classes:
OperationalArchive:
class_uri: schema:ArchiveComponent
description: Operational archive.
slots:
- has_or_had_name

View file

@ -0,0 +1,24 @@
id: https://nde.nl/ontology/hc/class/OperationalUnit
name: OperationalUnit
title: OperationalUnit
description: >-
An operational unit within an organization.
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
org: http://www.w3.org/ns/org#
default_prefix: hc
imports:
- linkml:types
- ../slots/has_or_had_name
classes:
OperationalUnit:
class_uri: org:OrganizationalUnit
description: Operational unit.
slots:
- has_or_had_name

View file

@ -0,0 +1,6 @@
id: https://nde.nl/ontology/hc/slot/has_or_had_archive
name: has_or_had_archive
title: has_or_had_archive
description: Archive associated with an entity.
slot_uri: schema:archive
range: OperationalArchive

View file

@ -1,92 +1,7 @@
# has_or_had_hyponym slot
# Generic slot for narrower/child types in classification hierarchies
#
# Following RiC-O naming convention (Rule 39): "hasOrHad..." pattern
# for temporal relationships in heritage domain.
#
# Generation date: 2026-01-13
# Rule compliance: 38 (slot centralization + semantic URI), 39 (RiC-O naming), 42 (no prefix)
id: https://nde.nl/ontology/hc/slot/has_or_had_hyponym id: https://nde.nl/ontology/hc/slot/has_or_had_hyponym
name: has_or_had_hyponym_slot name: has_or_had_hyponym
title: Has Or Had Hyponym Slot title: has_or_had_hyponym
description: Narrower term or instance.
prefixes: slot_uri: skos:narrower
linkml: https://w3id.org/linkml/ range: Hyponym
hc: https://nde.nl/ontology/hc/ multivalued: true
owl: http://www.w3.org/2002/07/owl#
skos: http://www.w3.org/2004/02/skos/core#
rdfs: http://www.w3.org/2000/01/rdf-schema#
default_prefix: hc
imports:
- linkml:types
slots:
has_or_had_hyponym:
slot_uri: hc:hasOrHadHyponym
description: |
Child types in a classification hierarchy (hyponyms/narrower concepts).
**Temporal Semantics** (RiC-O Pattern):
The "hasOrHad" naming follows RiC-O convention indicating this relationship
may be historical - a type's children may change if hierarchy is reorganized.
**Ontological Alignment**:
- **Primary** (`slot_uri`): `hc:hasOrHadHyponym` - Heritage Custodian ObjectProperty
for class-valued child types
- **Exact**: `skos:narrower` - SKOS ObjectProperty for subordinate concepts
- **Related**: `rdfs:subClassOf` (inverse) - RDF Schema superclass relationship
**Usage**:
For Type classes, this links a more general type to its child types.
Example: "Climate-Controlled Storage" has narrower "Cold Storage", "Art Storage"
**Cardinality**:
Multivalued - a parent type may have multiple child types.
**Transitivity**:
skos:narrower is transitive - if A narrower B, and B narrower C, then A narrower C.
Use skos:narrowerTransitive explicitly if transitive closure is needed.
**Note**: slot_uri changed from skos:narrower to hc:hasOrHadHyponym (2026-01-16)
to allow consistent class-valued ranges when classes override. skos:narrower
moved to exact_mappings (it is already an ObjectProperty in SKOS).
**Range**: `uriorcurie` (2026-01-16) - Allows both URIs and CURIE references.
Note: Individual Type classes may override to their specific type in slot_usage,
but since they're all referring to URIs, this causes no OWL ambiguity when
the base range is uriorcurie (compatible with ObjectProperty).
range: uriorcurie # Broadened per Rule 55 (2026-01-16) - Any allows both literals and class instances
implements:
- owl:ObjectProperty # Force OWL ObjectProperty to avoid ambiguous type warning (2026-01-16)
required: false
multivalued: true
inlined_as_list: true
exact_mappings:
- skos:narrower
annotations:
rico_naming_convention: |
Follows RiC-O "hasOrHad" pattern for temporal predicates.
See Rule 39: Slot Naming Convention (RiC-O Style)
replaces_slots: "storage_type_narrower"
migration_date: "2026-01-13"
comments:
- "Generic hyponym slot for type classification hierarchies"
- "Maps to skos:narrower for child/subordinate concepts"
- "Links more general types to more specific types"
- "Multivalued: parent types may have multiple children"
- "Transitive: if A narrower B, B narrower C, then A narrower C"
- "RiC-O naming: hasOrHad indicates potentially historical relationship"
examples:
- value:
- https://nde.nl/ontology/hc/storage-type/cold-storage
- https://nde.nl/ontology/hc/storage-type/art-storage
description: "Child types of climate-controlled storage"

View file

@ -1,43 +1,6 @@
# has_or_had_location - Location association slot
#
# Created per slot_fixes.yaml migration for: work_location
# Creation date: 2026-01-14
id: https://nde.nl/ontology/hc/slot/has_or_had_location id: https://nde.nl/ontology/hc/slot/has_or_had_location
name: has_or_had_location name: has_or_had_location
title: Has or Had Location title: has_or_had_location
description: The location of an entity.
prefixes: slot_uri: schema:location
linkml: https://w3id.org/linkml/ range: Place
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
default_prefix: hc
imports:
- linkml:types
- ../classes/Location
slots:
has_or_had_location:
slot_uri: schema:location
description: |
A location associated with an entity.
**USAGE**:
Used for:
- Work locations
- Event locations
- Organization locations
range: Location
multivalued: true
exact_mappings:
- schema:location
examples:
- value:
city: "Amsterdam"
country: "NL"
description: Amsterdam location

View file

@ -0,0 +1,6 @@
id: https://nde.nl/ontology/hc/slot/has_or_had_rating
name: has_or_had_rating
title: has_or_had_rating
description: Rating assigned to an entity.
slot_uri: schema:starRating
range: Rating

View file

@ -0,0 +1,7 @@
id: https://nde.nl/ontology/hc/slot/has_or_had_section
name: has_or_had_section
title: has_or_had_section
description: Section or unit within an organization.
slot_uri: org:hasUnit
range: OperationalUnit
multivalued: true

View file

@ -586,6 +586,63 @@
margin: 0; margin: 0;
} }
/* Enhanced Profile Search Controls */
.search-controls-row {
display: flex;
gap: 0.5rem;
margin-bottom: 0.5rem;
align-items: center;
}
.search-controls-row .search-field-filter {
flex: 1;
}
.toggle-btn {
display: flex;
align-items: center;
justify-content: center;
gap: 0.375rem;
padding: 0.375rem 0.5rem;
border: 1px solid var(--border-color, #e0e0e0);
background: var(--bg-secondary, #f5f5f5);
border-radius: 4px;
font-size: 0.75rem;
font-weight: 500;
color: var(--text-secondary, #666);
cursor: pointer;
transition: all 0.15s;
height: 27px; /* Match typical select height */
}
.toggle-btn:hover {
background: var(--bg-hover, #e2e8f0);
color: var(--text-primary, #1e293b);
}
.toggle-btn.active {
background: var(--primary-color, #3b82f6);
border-color: var(--primary-color, #3b82f6);
color: white;
}
.dark .toggle-btn {
background: var(--bg-tertiary, #2a2a4a);
border-color: var(--border-color, #3a3a5a);
color: var(--text-secondary, #999);
}
.dark .toggle-btn:hover {
background: var(--bg-secondary, #1a1a2e);
color: var(--text-primary, #e0e0e0);
}
.dark .toggle-btn.active {
background: var(--primary-color, #3b82f6);
border-color: var(--primary-color, #3b82f6);
color: white;
}
.search-field-filter .field-select { .search-field-filter .field-select {
width: 100%; width: 100%;
padding: 0.375rem 0.5rem; padding: 0.375rem 0.5rem;

View file

@ -0,0 +1,39 @@
# has_or_had_participant slot
# Generic slot for participants
#
# Generation date: 2026-01-27
# Rule compliance: 38, 39, 42
#
# Part of has_or_had_annual_participant_count migration (Rule 53)
id: https://nde.nl/ontology/hc/slot/has_or_had_participant
name: has_or_had_participant_slot
title: Has Or Had Participant 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_participant:
slot_uri: schema:participant
description: |
A participant in an activity or event.
**Temporal Semantics** (RiC-O Pattern):
"hasOrHad" indicates participation occurred in the past or present.
**Ontological Alignment**:
- `schema:participant`: A person or organization that supports (sponsors) something through some pledge, promise, or financial contribution.
**Range**:
- `Participant` class (or `Agent`, `Person`, `Organization`).
range: uriorcurie
multivalued: true
required: false

View file

@ -0,0 +1,78 @@
# has_or_had_policy slot
# Policy association following RiC-O naming pattern
#
# Generation date: 2026-01-15
# Updated: 2026-01-22 - Broadened range from TransferPolicy to Policy (Rule 53, 55)
# Rule compliance: 38 (slot centralization + semantic URI), 39 (RiC-O naming), 53 (slot_fixes.yaml), 55 (broaden generic ranges)
#
# Used by TransferEvent, Storage, and other classes for governing policies
id: https://nde.nl/ontology/hc/slot/has_or_had_policy
name: has_or_had_policy_slot
title: Has Or Had Policy Slot
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
odrl: http://www.w3.org/ns/odrl/2/
dcterms: http://purl.org/dc/terms/
default_prefix: hc
imports:
- linkml:types
- ../classes/Policy # Base class for all policy types (changed from TransferPolicy 2026-01-22)
slots:
has_or_had_policy:
slot_uri: odrl:hasPolicy
description: |
Policy that governs or governed an activity or entity.
**Temporal Semantics** (RiC-O Pattern):
The "hasOrHad" naming follows RiC-O convention indicating
the policy association may be historical.
**Ontological Alignment**:
- **Primary** (`slot_uri`): `odrl:hasPolicy` - ODRL policy association
- **Related**: `dcterms:accessRights` - Dublin Core access rights
**Use Cases**:
- Transfer policies governing custody changes
- Access policies for collections
- Retention policies for archives
**Range**: Policy (base class - accepts TransferPolicy, ConditionPolicy, etc.)
**Cardinality**:
Multivalued - entities may be governed by multiple policies.
range: Policy # Broadened from TransferPolicy per Rule 55 (2026-01-22)
required: false
multivalued: true
inlined: true
inlined_as_list: true
related_mappings:
- dcterms:accessRights
annotations:
rico_naming_convention: |
Follows RiC-O "hasOrHad" pattern for temporal predicates.
See Rule 39: Slot Naming Convention (RiC-O Style)
replaces_slots: "transfer_policy"
migration_date: "2026-01-15"
custodian_types: '["*"]'
custodian_types_rationale: Policy associations apply to all heritage types.
specificity_score: 0.45
specificity_rationale: Specialized slot for policy governance.
comments:
- "Links entities to governing policies"
- "Maps to odrl:hasPolicy for rights/rules"
- "RiC-O naming: hasOrHad indicates potentially historical"
examples:
- value:
policy_name: "Donor Transfer Restriction"
policy_text: "Materials may not be transferred without donor consent."
description: "Transfer policy for collection"

View file

@ -1,12 +1,12 @@
{ {
"generated": "2026-01-27T10:39:08.998Z", "generated": "2026-01-27T21:17:12.304Z",
"schemaRoot": "/schemas/20251121/linkml", "schemaRoot": "/schemas/20251121/linkml",
"totalFiles": 2986, "totalFiles": 3000,
"categoryCounts": { "categoryCounts": {
"main": 4, "main": 4,
"class": 1230, "class": 1241,
"enum": 153, "enum": 153,
"slot": 1595, "slot": 1598,
"module": 4 "module": 4
}, },
"categories": [ "categories": [
@ -2760,6 +2760,11 @@
"path": "modules/classes/GeospatialIdentifier.yaml", "path": "modules/classes/GeospatialIdentifier.yaml",
"category": "class" "category": "class"
}, },
{
"name": "GeospatialLocation",
"path": "modules/classes/GeospatialLocation.yaml",
"category": "class"
},
{ {
"name": "GeoSpatialPlace", "name": "GeoSpatialPlace",
"path": "modules/classes/GeoSpatialPlace.yaml", "path": "modules/classes/GeoSpatialPlace.yaml",
@ -2895,6 +2900,11 @@
"path": "modules/classes/HALCAdm2Name.yaml", "path": "modules/classes/HALCAdm2Name.yaml",
"category": "class" "category": "class"
}, },
{
"name": "HandsOnFacility",
"path": "modules/classes/HandsOnFacility.yaml",
"category": "class"
},
{ {
"name": "HeritageCustodianPlace", "name": "HeritageCustodianPlace",
"path": "modules/classes/HeritageCustodianPlace.yaml", "path": "modules/classes/HeritageCustodianPlace.yaml",
@ -3005,6 +3015,11 @@
"path": "modules/classes/Hypernym.yaml", "path": "modules/classes/Hypernym.yaml",
"category": "class" "category": "class"
}, },
{
"name": "Hyponym",
"path": "modules/classes/Hyponym.yaml",
"category": "class"
},
{ {
"name": "Hypothesis", "name": "Hypothesis",
"path": "modules/classes/Hypothesis.yaml", "path": "modules/classes/Hypothesis.yaml",
@ -3055,6 +3070,11 @@
"path": "modules/classes/Image.yaml", "path": "modules/classes/Image.yaml",
"category": "class" "category": "class"
}, },
{
"name": "ImagingEquipment",
"path": "modules/classes/ImagingEquipment.yaml",
"category": "class"
},
{ {
"name": "Index", "name": "Index",
"path": "modules/classes/Index.yaml", "path": "modules/classes/Index.yaml",
@ -3345,11 +3365,21 @@
"path": "modules/classes/LlmVerification.yaml", "path": "modules/classes/LlmVerification.yaml",
"category": "class" "category": "class"
}, },
{
"name": "LoadingDock",
"path": "modules/classes/LoadingDock.yaml",
"category": "class"
},
{ {
"name": "Loan", "name": "Loan",
"path": "modules/classes/Loan.yaml", "path": "modules/classes/Loan.yaml",
"category": "class" "category": "class"
}, },
{
"name": "LocalCollection",
"path": "modules/classes/LocalCollection.yaml",
"category": "class"
},
{ {
"name": "LocalGovernmentArchive", "name": "LocalGovernmentArchive",
"path": "modules/classes/LocalGovernmentArchive.yaml", "path": "modules/classes/LocalGovernmentArchive.yaml",
@ -3405,6 +3435,11 @@
"path": "modules/classes/LocationResolution.yaml", "path": "modules/classes/LocationResolution.yaml",
"category": "class" "category": "class"
}, },
{
"name": "Locker",
"path": "modules/classes/Locker.yaml",
"category": "class"
},
{ {
"name": "LogoClaim", "name": "LogoClaim",
"path": "modules/classes/LogoClaim.yaml", "path": "modules/classes/LogoClaim.yaml",
@ -3595,6 +3630,16 @@
"path": "modules/classes/METSAPI.yaml", "path": "modules/classes/METSAPI.yaml",
"category": "class" "category": "class"
}, },
{
"name": "MichelinStarRating",
"path": "modules/classes/MichelinStarRating.yaml",
"category": "class"
},
{
"name": "MicrofilmReader",
"path": "modules/classes/MicrofilmReader.yaml",
"category": "class"
},
{ {
"name": "MilitaryArchive", "name": "MilitaryArchive",
"path": "modules/classes/MilitaryArchive.yaml", "path": "modules/classes/MilitaryArchive.yaml",
@ -3905,6 +3950,16 @@
"path": "modules/classes/OpeningPeriod.yaml", "path": "modules/classes/OpeningPeriod.yaml",
"category": "class" "category": "class"
}, },
{
"name": "OperationalArchive",
"path": "modules/classes/OperationalArchive.yaml",
"category": "class"
},
{
"name": "OperationalUnit",
"path": "modules/classes/OperationalUnit.yaml",
"category": "class"
},
{ {
"name": "Organization", "name": "Organization",
"path": "modules/classes/Organization.yaml", "path": "modules/classes/Organization.yaml",
@ -8167,6 +8222,11 @@
"path": "modules/slots/has_or_had_archival_status.yaml", "path": "modules/slots/has_or_had_archival_status.yaml",
"category": "slot" "category": "slot"
}, },
{
"name": "has_or_had_archive",
"path": "modules/slots/has_or_had_archive.yaml",
"category": "slot"
},
{ {
"name": "has_or_had_archive_branch", "name": "has_or_had_archive_branch",
"path": "modules/slots/has_or_had_archive_branch.yaml", "path": "modules/slots/has_or_had_archive_branch.yaml",
@ -9162,6 +9222,11 @@
"path": "modules/slots/has_or_had_rate.yaml", "path": "modules/slots/has_or_had_rate.yaml",
"category": "slot" "category": "slot"
}, },
{
"name": "has_or_had_rating",
"path": "modules/slots/has_or_had_rating.yaml",
"category": "slot"
},
{ {
"name": "has_or_had_rationale", "name": "has_or_had_rationale",
"path": "modules/slots/has_or_had_rationale.yaml", "path": "modules/slots/has_or_had_rationale.yaml",
@ -9312,6 +9377,11 @@
"path": "modules/slots/has_or_had_secondary_system.yaml", "path": "modules/slots/has_or_had_secondary_system.yaml",
"category": "slot" "category": "slot"
}, },
{
"name": "has_or_had_section",
"path": "modules/slots/has_or_had_section.yaml",
"category": "slot"
},
{ {
"name": "has_or_had_section_link", "name": "has_or_had_section_link",
"path": "modules/slots/has_or_had_section_link.yaml", "path": "modules/slots/has_or_had_section_link.yaml",

View file

@ -0,0 +1,24 @@
id: https://nde.nl/ontology/hc/class/AcademicInstitution
name: AcademicInstitution
title: AcademicInstitution
description: >-
An institution of higher education or research.
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_name
classes:
AcademicInstitution:
class_uri: schema:EducationalOrganization
description: Academic institution.
slots:
- has_or_had_name

View file

@ -0,0 +1,24 @@
id: https://nde.nl/ontology/hc/class/AcademicProgram
name: AcademicProgram
title: AcademicProgram
description: >-
An educational or research program offered by an academic institution.
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_name
classes:
AcademicProgram:
class_uri: schema:EducationalOccupationalProgram
description: Academic program.
slots:
- has_or_had_name

View file

@ -22,6 +22,8 @@ imports:
- linkml:types - linkml:types
- ../metadata - ../metadata
- ./TimeSpan - ./TimeSpan
- ../slots/has_or_had_frequency
- ./Frequency
classes: classes:
Access: Access:
@ -72,6 +74,7 @@ classes:
- access_description - access_description
- temporal_extent - temporal_extent
- is_digital_access - is_digital_access
- has_or_had_frequency
slot_usage: slot_usage:
access_type: access_type:
@ -141,6 +144,15 @@ classes:
required: false required: false
range: boolean range: boolean
description: Whether this access is for digital materials description: Whether this access is for digital materials
has_or_had_frequency:
required: false
range: Frequency
description: Frequency of access (e.g., daily, weekly, by appointment)
inlined: true
examples:
- value:
has_or_had_label: "Daily"
description: Access available daily
annotations: annotations:
specificity_score: 0.50 specificity_score: 0.50

Some files were not shown because too many files have changed in this diff Show more