Compare commits

...

12 commits

Author SHA1 Message Date
kempersc
d4493580ea chore: Update manifest and add remaining slot migrations
All checks were successful
Deploy Frontend / build-and-deploy (push) Successful in 4m17s
2026-01-14 20:03:23 +01:00
kempersc
53c6dbc2d9 feat(schema): Migrate temporal slots and introduce new pattern classes
Major slot migrations following slot_fixes.yaml revisions:
- TimeSpan: begin_of_the_begin, begin_of_the_end, end_of_the_begin, end_of_the_end
- Quantity: has_or_had_measurement_unit with MeasureUnit class
- Description: has_or_had_description with Description class
- URL, WikiData, Timestamp, Location, Provenance pattern classes

New slots for RiC-O compliance:
- Temporal: has_or_had_time_interval, calendar_system
- Transfer: is_or_was_transferred, has_or_had_policy
- Location: starts/ends_or_started/ended_at_location
- Provenance: has_or_had_provenance_path, is_or_was_webarchived_at

Archive deprecated slots per Rule 53 workflow.
2026-01-14 20:01:55 +01:00
kempersc
9f9c69f7b8 docs: Add Rule 53 for slot_fixes.yaml migration workflow
- Document that slot_fixes.yaml revision section is authoritative
- Add link_branch explanation for nested class attributes
- Clarify that deprecated slots must be fully removed, not just annotated
2026-01-14 19:57:08 +01:00
kempersc
13ba8fb09b style(entity-review): Improve header button styling and icon sizes
- Increase icon sizes from 16px to 20px for better visibility
- Add borders and shadows to header action buttons
- Improve hover states with color transitions
- Add proper dark mode styling for all button variants
2026-01-14 19:56:24 +01:00
kempersc
a981bb7ca3 feat(linkml): Add slot_usage comparison popup in schema viewer
- Add 'slot_usage' type to SchemaElementPopup for comparing generic slots vs class overrides
- Show side-by-side comparison table with property, generic value, and override value
- Display green 'changed' badges for modified properties
- Add dual navigation buttons (Go to class / Go to slot)
- Include comprehensive dark mode support
- Match styling to main page's comparison view (green color scheme)
2026-01-14 19:55:57 +01:00
kempersc
853419d6c2 feat: Introduce MeasureUnitEnum for standardized measurement units
- Added MeasureUnitEnum.yaml to define standard measurement units for area, length, and related quantities, compliant with ISO 80000-1, QUDT, and UCUM.
- Included units such as square meters, hectares, acres, meters, kilometers, and their conversions.

feat: Create applies_or_applied_to_call slot for funding requirements

- Introduced applies_or_applied_to_call.yaml to track funding calls related to requirements, following RiC-O naming conventions.

chore: Archive and migrate annual_participants slot

- Archived annual_participants_archived_20260115.yaml, replaced by has_or_had_annual_participant_count for better temporal naming.

chore: Archive applies_to_call slot and migrate to new naming

- Archived applies_to_call_archived_20260115.yaml, replaced by applies_or_applied_to_call for compliance with RiC-O conventions.

chore: Archive area_hectares slot and migrate to has_area_in_hectare

- Archived area_hectares_archived_20260115.yaml, replaced by has_area_in_hectare for standardized area measurement.

chore: Archive arrangement_notes slot and migrate to has_arrangement_note

- Archived arrangement_notes_archived_20260115.yaml, replaced by has_arrangement_note for improved naming consistency.

chore: Archive available_caption_languages slot and migrate to has_available_caption_language

- Archived available_caption_languages_archived_20260115.yaml, replaced by has_available_caption_language for better naming.

chore: Archive beneficiary_group slot and migrate to has_or_had_beneficiary

- Archived beneficiary_group_archived_20260115.yaml, replaced by has_or_had_beneficiary for compliance with naming conventions.

chore: Archive branch_head slot and migrate to has_or_had_head

- Archived branch_head_archived_20260114.yaml, replaced by has_or_had_head for better semantic alignment.

chore: Archive budget_currency slot

- Archived budget_currency_archived_20260114.yaml for future migration.

chore: Archive building_floor_area_sqm slot and migrate to has_or_had_area

- Archived building_floor_area_sqm_archived_20260115.yaml, replaced by has_or_had_area for standardized area measurement.

chore: Archive has_area_in_hectare slot and migrate to has_or_had_area

- Archived has_area_in_hectare_archived_20260115.yaml, replaced by has_or_had_area for compliance with naming conventions.

feat: Introduce has_or_had_area slot for area measurements

- Added has_or_had_area.yaml as the authoritative slot for area measurements, compliant with Rule 53.

feat: Introduce has_or_had_beneficiary slot for beneficiary tracking

- Added has_or_had_beneficiary.yaml to identify beneficiaries of organizational programs, following RiC-O naming conventions.

feat: Introduce has_or_had_currency slot for monetary values

- Added has_or_had_currency.yaml to associate currencies with monetary amounts, compliant with ISO 4217.

feat: Introduce has_or_had_head slot for organizational heads

- Added has_or_had_head.yaml to link organizational units with their heads, following W3C ORG standards.

feat: Introduce has_or_had_unit slot for measurement units

- Added has_or_had_unit.yaml to associate measurements with their units, compliant with Rule 53.
2026-01-14 17:28:38 +01:00
kempersc
e64b5653bf chore: Update manifest.json timestamp and migrate beneficiary_group slot to has_or_had_beneficiary 2026-01-14 17:04:58 +01:00
kempersc
bdf3ceafb8 feat: Migrate and standardize measurement units; introduce Area and MeasureUnit classes 2026-01-14 17:04:33 +01:00
kempersc
913a1a41a7 chore: Update generated timestamp in manifest.json and add new slot revisions in slot_fixes.yaml 2026-01-14 16:59:47 +01:00
kempersc
ad281c507a chore: Remove arrangement_notes slot; migrated to has_arrangement_note 2026-01-14 16:58:50 +01:00
kempersc
8902f0e082 feat: Migrate and enhance currency and area slots; introduce Currency class 2026-01-14 16:58:25 +01:00
kempersc
6da794ee38 feat: Introduce new slots and classes for enhanced heritage data modeling
- Added `has_or_had_place_of_birth` slot to capture structured birth place information with historical context.
- Introduced `has_or_had_quantity` slot for capturing quantified values with units and provenance.
- Created `has_or_had_service_area` slot to define geographic service areas for heritage custodians.
- Implemented `is_or_was_approximate` slot to indicate uncertainty in values (dates, quantities).
- Added `is_or_was_asserted_by` slot to track the agent responsible for assertions.
- Introduced `Asserter` class to model agents making assertions, including types like human, automated, and AI.
- Created `Quantity` class to represent quantified values with optional units and types.
- Added enums for `AsserterTypeEnum` and `QuantityTypeEnum` to standardize types of asserters and quantities.
- Archived outdated slots and replaced them with new structured alternatives following RiC-O conventions.
2026-01-14 16:54:10 +01:00
330 changed files with 27340 additions and 5619 deletions

View file

@ -31,10 +31,112 @@ The `slot_fixes.yaml` file has been **manually curated** to specify the exact re
- ✅ Follow the `revision` section TO THE LETTER - ✅ Follow the `revision` section TO THE LETTER
- ✅ Use EXACTLY the slots and classes specified - ✅ Use EXACTLY the slots and classes specified
- ✅ Apply ALL components of the revision (both slots AND classes) - ✅ Apply ALL components of the revision (both slots AND classes)
- ✅ Interpret `link_branch` fields correctly (see below)
- ✅ Update `processed.status: true` after completing migration - ✅ Update `processed.status: true` after completing migration
--- ---
## Understanding `link_branch` in Revision Plans
🚨 **CRITICAL**: The `link_branch` field in revision plans indicates **nested class attributes**. Items with `link_branch: N` are slots/classes that belong TO the primary class, not standalone replacements.
### How to Interpret `link_branch`
| Revision Item | Meaning |
|---------------|---------|
| Items **WITHOUT** `link_branch` | **PRIMARY** slot and class to create |
| Items **WITH** `link_branch: 1` | First attribute branch that the primary class needs |
| Items **WITH** `link_branch: 2` | Second attribute branch that the primary class needs |
| Items **WITH** `link_branch: N` | Nth attribute branch for the primary class |
### Example: `visitor_count` Revision
```yaml
- original_slot_id: https://nde.nl/ontology/hc/slot/visitor_count
revision:
- label: has_or_had_quantity # PRIMARY SLOT (no link_branch)
type: slot
- label: Quantity # PRIMARY CLASS (no link_branch)
type: class
- label: has_or_had_measurement_unit # Quantity needs this slot
type: slot
link_branch: 1 # ← Branch 1: unit attribute
- label: MeasureUnit # Range of has_or_had_measurement_unit
type: class
value:
- visitors
link_branch: 1
- label: temporal_extent # Quantity needs this slot too
type: slot
link_branch: 2 # ← Branch 2: time attribute
- label: TimeSpan # Range of temporal_extent
type: class
link_branch: 2
```
**Interpretation**: This creates:
1. **Primary**: `has_or_had_quantity` slot → `Quantity` class
2. **Branch 1**: `Quantity.has_or_had_measurement_unit``MeasureUnit` (with value "visitors")
3. **Branch 2**: `Quantity.temporal_extent``TimeSpan`
### Resulting Class Structure
```yaml
# The Quantity class should have these slots:
Quantity:
slots:
- has_or_had_measurement_unit # From link_branch: 1
- temporal_extent # From link_branch: 2
```
### Complex Example: `visitor_conversion_rate`
```yaml
- original_slot_id: https://nde.nl/ontology/hc/slot/visitor_conversion_rate
revision:
- label: has_or_had_conversion_rate # PRIMARY SLOT
type: slot
- label: ConversionRate # PRIMARY CLASS
type: class
- label: has_or_had_type # ConversionRate.has_or_had_type
type: slot
link_branch: 1
- label: ConversionRateType # Abstract type class
type: class
link_branch: 1
- label: includes_or_included # ConversionRateType hierarchy slot
type: slot
link_branch: 1
- label: ConversionRateTypes # Concrete subclasses file
type: class
link_branch: 1
- label: temporal_extent # ConversionRate.temporal_extent
type: slot
link_branch: 2
- label: TimeSpan # Range of temporal_extent
type: class
link_branch: 2
```
**Interpretation**:
1. **Primary**: `has_or_had_conversion_rate``ConversionRate`
2. **Branch 1**: Type hierarchy with `ConversionRateType` (abstract) + `ConversionRateTypes` (concrete subclasses)
3. **Branch 2**: Temporal tracking via `temporal_extent``TimeSpan`
### Migration Checklist for `link_branch` Revisions
- [ ] Create/verify PRIMARY slot exists
- [ ] Create/verify PRIMARY class exists
- [ ] For EACH `link_branch: N`:
- [ ] Add the branch slot to PRIMARY class's `slots:` list
- [ ] Import the branch slot file
- [ ] Import the branch class file (if creating new class)
- [ ] Verify range of branch slot points to branch class
- [ ] Update consuming class to use PRIMARY slot (not deprecated slot)
- [ ] Update examples to show nested structure
---
## Mandatory: Follow slot_fixes.yaml Revisions Exactly ## Mandatory: Follow slot_fixes.yaml Revisions Exactly
**The `revision` section in `slot_fixes.yaml` is AUTHORITATIVE.** Do not substitute different slots based on your own judgment. **The `revision` section in `slot_fixes.yaml` is AUTHORITATIVE.** Do not substitute different slots based on your own judgment.

View file

@ -1603,6 +1603,43 @@ The `revision` section in `slot_fixes.yaml` specifies the EXACT slots and classe
- ❌ Partially apply revisions - ❌ Partially apply revisions
- ❌ Add deprecation notes (keeping both old and new) - ❌ Add deprecation notes (keeping both old and new)
**Understanding `link_branch` in Revisions**:
The `link_branch` field indicates **nested class attributes**:
| Revision Item | Meaning |
|---------------|---------|
| Items **WITHOUT** `link_branch` | PRIMARY slot and class to create |
| Items **WITH** `link_branch: 1` | First attribute the primary class needs |
| Items **WITH** `link_branch: 2` | Second attribute the primary class needs |
**Example - `visitor_count` with `link_branch`**:
```yaml
- original_slot_id: https://nde.nl/ontology/hc/slot/visitor_count
revision:
- label: has_or_had_quantity # PRIMARY SLOT
type: slot
- label: Quantity # PRIMARY CLASS
type: class
- label: has_or_had_measurement_unit # Quantity.has_or_had_measurement_unit
type: slot
link_branch: 1 # ← Branch 1
- label: MeasureUnit # Range of branch 1 slot
type: class
link_branch: 1
- label: temporal_extent # Quantity.temporal_extent
type: slot
link_branch: 2 # ← Branch 2
- label: TimeSpan # Range of branch 2 slot
type: class
link_branch: 2
```
**Interpretation**: Create `Quantity` class with TWO slots:
- `has_or_had_measurement_unit``MeasureUnit` (branch 1)
- `temporal_extent``TimeSpan` (branch 2)
**Example - Following slot_fixes.yaml**: **Example - Following slot_fixes.yaml**:
```yaml ```yaml

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,68 @@
# Alpha2Code - ISO 3166-1 alpha-2 country code
#
# Created per slot_fixes.yaml migration for: alpha_2
# Creation date: 2026-01-14
# Rule compliance: 50 (ontology mapping)
id: https://nde.nl/ontology/hc/class/Alpha2Code
name: Alpha2Code
title: ISO 3166-1 Alpha-2 Country Code
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/
default_prefix: hc
imports:
- linkml:types
- ../slots/has_or_had_code
classes:
Alpha2Code:
class_uri: skos:Concept
description: |
ISO 3166-1 alpha-2 country code (two-letter code).
**DEFINITION**:
A two-letter country code as defined by ISO 3166-1 alpha-2 standard.
Used for representing countries and dependent territories.
**EXAMPLES**:
- NL = Netherlands
- BE = Belgium
- DE = Germany
- US = United States
**ONTOLOGY ALIGNMENT**:
- SKOS Concept: Codes are concepts in ISO 3166-1 vocabulary
- Schema.org: addressCountry can use alpha-2 codes
slots:
- has_or_had_code
slot_usage:
has_or_had_code:
pattern: "^[A-Z]{2}$"
required: true
description: Two-letter ISO 3166-1 alpha-2 country code
examples:
- value: "NL"
description: Netherlands
- value: "BE"
description: Belgium
exact_mappings:
- skos:Concept
annotations:
specificity_score: "0.30"
specificity_rationale: "Low specificity - standard country codes used broadly."
examples:
- value:
has_or_had_code: "NL"
description: Netherlands country code

View file

@ -0,0 +1,68 @@
# Alpha3Code - ISO 3166-1 alpha-3 country code
#
# Created per slot_fixes.yaml migration for: alpha_3
# Creation date: 2026-01-14
# Rule compliance: 50 (ontology mapping)
id: https://nde.nl/ontology/hc/class/Alpha3Code
name: Alpha3Code
title: ISO 3166-1 Alpha-3 Country Code
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/
default_prefix: hc
imports:
- linkml:types
- ../slots/has_or_had_code
classes:
Alpha3Code:
class_uri: skos:Concept
description: |
ISO 3166-1 alpha-3 country code (three-letter code).
**DEFINITION**:
A three-letter country code as defined by ISO 3166-1 alpha-3 standard.
Used for representing countries and dependent territories with more
recognizable abbreviations.
**EXAMPLES**:
- NLD = Netherlands
- BEL = Belgium
- DEU = Germany
- USA = United States
**ONTOLOGY ALIGNMENT**:
- SKOS Concept: Codes are concepts in ISO 3166-1 vocabulary
slots:
- has_or_had_code
slot_usage:
has_or_had_code:
pattern: "^[A-Z]{3}$"
required: true
description: Three-letter ISO 3166-1 alpha-3 country code
examples:
- value: "NLD"
description: Netherlands
- value: "BEL"
description: Belgium
exact_mappings:
- skos:Concept
annotations:
specificity_score: "0.30"
specificity_rationale: "Low specificity - standard country codes used broadly."
examples:
- value:
has_or_had_code: "NLD"
description: Netherlands country code

View file

@ -0,0 +1,149 @@
id: https://nde.nl/ontology/hc/class/ApproximationStatus
name: approximation_status_class
title: ApproximationStatus Class
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
crm: http://www.cidoc-crm.org/cidoc-crm/
rico: https://www.ica.org/standards/RiC/ontology#
skos: http://www.w3.org/2004/02/skos/core#
imports:
- linkml:types
- ../metadata
- ../slots/approximation_level
- ../slots/has_or_had_label
- ../slots/has_or_had_description
- ./SpecificityAnnotation
- ./TemplateSpecificityScores
- ../slots/specificity_annotation
- ../slots/template_specificity
default_prefix: hc
classes:
ApproximationStatus:
class_uri: hc:ApproximationStatus
description: >-
Status indicating the level of approximation or uncertainty for a value.
**PURPOSE**:
ApproximationStatus captures structured uncertainty information for values
like dates, quantities, and measurements where precision varies. This
replaces simple boolean "approximate: true/false" with richer modeling.
**UNCERTAINTY LEVELS**:
| Level | Label | Description | Example |
|-------|-------|-------------|---------|
| EXACT | Exact | Known with certainty | "1880-03-15" |
| APPROXIMATE | Approximate | Close but not exact | "circa 1880" |
| ESTIMATED | Estimated | Calculated/inferred | "estimated 1875-1885" |
| UNCERTAIN | Uncertain | Significant doubt | "possibly 19th century" |
| UNKNOWN | Unknown | Cannot be determined | "date unknown" |
**CIDOC-CRM ALIGNMENT**:
CIDOC-CRM models time-span precision through E52_Time-Span with fuzzy
boundaries. ApproximationStatus provides a complementary vocabulary for
expressing certainty levels.
**USE CASES**:
1. **Date Uncertainty**: Founding dates known only to decade
2. **Quantity Estimates**: Collection size approximations
3. **Location Precision**: Address known only to city level
4. **Historical Events**: Uncertain timing of organizational changes
**EXAMPLE**:
```yaml
event_date: "1880"
is_or_was_approximate:
approximation_level: APPROXIMATE
has_or_had_label: "circa 1880"
has_or_had_description: "Founding date known only to year from secondary sources"
```
exact_mappings:
- crm:E52_Time-Span
close_mappings:
- rico:DateType
related_mappings:
- skos:note
slots:
- approximation_level
- has_or_had_label
- has_or_had_description
- specificity_annotation
- template_specificity
slot_usage:
approximation_level:
range: ApproximationLevelEnum
required: true
description: >-
Level of approximation/uncertainty for the value.
has_or_had_label:
range: string
required: false
description: >-
Human-readable label for the approximation status.
examples:
- value: "circa 1880"
description: Approximate date label
- value: "approximately 10,000"
description: Approximate quantity label
has_or_had_description:
range: string
required: false
description: >-
Explanation of why the value is approximate and how uncertainty
was determined.
examples:
- value: "Founding date derived from secondary sources, exact day unknown"
description: Provenance of uncertainty
comments:
- ApproximationStatus replaces simple boolean approximate field
- Provides structured uncertainty modeling for dates, quantities, etc.
- Aligned with CIDOC-CRM E52_Time-Span precision concepts
- Used by is_or_was_approximate slot
see_also:
- https://www.cidoc-crm.org/Entity/e52-time-span/version-7.1.3
examples:
- value:
approximation_level: EXACT
has_or_had_label: "1880-03-15"
description: Exact date with full precision
- value:
approximation_level: APPROXIMATE
has_or_had_label: "circa 1880"
has_or_had_description: "Founding date known only to year from newspaper accounts"
description: Approximate date with explanation
- value:
approximation_level: ESTIMATED
has_or_had_label: "estimated 1875-1885"
has_or_had_description: "Date range inferred from building construction records"
description: Estimated date range
- value:
approximation_level: UNKNOWN
has_or_had_label: "date unknown"
has_or_had_description: "No founding records survive"
description: Unknown date
annotations:
specificity_score: 0.30
specificity_rationale: >-
Approximation status is broadly useful across contexts where
uncertainty needs to be expressed.
enums:
ApproximationLevelEnum:
description: Levels of approximation/uncertainty for values.
permissible_values:
EXACT:
description: Value is known with certainty
APPROXIMATE:
description: Value is close but not exact (circa, roughly)
ESTIMATED:
description: Value is calculated or inferred
UNCERTAIN:
description: Significant doubt about accuracy
UNKNOWN:
description: Value cannot be determined

View file

@ -0,0 +1,195 @@
id: https://nde.nl/ontology/hc/class/area
name: area_class
title: Area Class
description: >-
Class representing an area measurement with value, unit, and context.
**RULE 53 COMPLIANT**: This is the authoritative class for area measurements,
replacing domain-specific float slots like area_hectares, building_floor_area_sqm,
and has_area_in_hectare.
**REPLACES**:
- area_hectares (OutdoorSite) - float in hectares
- building_floor_area_sqm (HistoricBuilding) - float in square meters
- has_area_in_hectare (bespoke, incorrectly created)
**ADVANTAGES OVER SIMPLE FLOAT**:
- Explicit unit specification (no ambiguity between m² and hectares)
- Temporal context (measurement date for historic facilities)
- Provenance (measurement method, source)
- Estimation flag (is_estimate for approximate values)
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
qudt: http://qudt.org/schema/qudt/
geosparql: http://www.opengis.net/ont/geosparql#
imports:
- linkml:types
- ./MeasureUnit
- ../slots/has_or_had_unit
- ../slots/has_or_had_label
default_prefix: hc
classes:
Area:
description: >-
A measurement of spatial extent (area) with value, unit, and metadata.
Captures area measurements for heritage facilities including outdoor sites,
buildings, rooms, and storage areas. Supports multiple units (m², hectares,
acres) with explicit unit specification.
**TEMPORAL ASPECT**: Areas can change over time (building extensions,
site acquisitions). The measurement_date captures when the area was measured.
**ESTIMATION SUPPORT**: Heritage facilities often have estimated areas,
especially for historic buildings. The is_estimate flag indicates uncertainty.
class_uri: qudt:QuantityValue
exact_mappings:
- qudt:QuantityValue
close_mappings:
- schema:QuantitativeValue
- geosparql:hasArea
slots:
- area_value
- has_or_had_unit
- measurement_date
- is_estimate
- measurement_method
- has_or_had_label
slot_usage:
area_value:
description: >-
The numeric value of the area measurement.
MIGRATED from area_hectares, building_floor_area_sqm (Rule 53).
range: float
required: true
examples:
- value: 25.0
description: 25 hectares (outdoor site)
- value: 5000.0
description: 5000 square meters (building)
has_or_had_unit:
description: >-
The unit of measurement for this area.
MIGRATED from implicit unit assumptions (Rule 53).
range: MeasureUnit
required: true
inlined: true
examples:
- value:
unit_type: HECTARE
unit_symbol: "ha"
description: Hectare unit for outdoor site
- value:
unit_type: SQUARE_METER
unit_symbol: "m²"
description: Square meter unit for building floor
measurement_date:
description: >-
Date when the area was measured or recorded.
range: date
required: false
examples:
- value: "2024-01-15"
description: Recent measurement
- value: "1985-06-01"
description: Historic measurement
is_estimate:
description: >-
Whether the area is an estimate (true) or precise measurement (false).
range: boolean
required: false
examples:
- value: true
description: Estimated area for historic building
- value: false
description: Precise surveyed measurement
measurement_method:
description: >-
Method used to measure the area (survey, GIS, historical records, etc.).
range: string
required: false
examples:
- value: "GIS analysis"
description: Geographic Information System measurement
- value: "Land survey"
description: Professional survey
- value: "Historical records"
description: From archival documents
has_or_had_label:
description: >-
Human-readable label for the area measurement.
range: string
examples:
- value: "Total site area"
description: Label for outdoor site
- value: "Building floor area"
description: Label for building
examples:
- value:
area_value: 25.0
has_or_had_unit:
unit_type: HECTARE
unit_symbol: "ha"
has_or_had_label: "Sculpture garden area"
description: Outdoor site area in hectares (replaces area_hectares)
- value:
area_value: 5000.0
has_or_had_unit:
unit_type: SQUARE_METER
unit_symbol: "m²"
measurement_date: "2023-03-15"
is_estimate: false
measurement_method: "Architectural survey"
has_or_had_label: "Total floor area"
description: Building floor area in square meters (replaces building_floor_area_sqm)
- value:
area_value: 650.0
has_or_had_unit:
unit_type: HECTARE
unit_symbol: "ha"
is_estimate: true
measurement_method: "Historical records"
has_or_had_label: "Estate grounds"
description: Historic estate grounds with estimated area
annotations:
custodian_types: '["*"]'
custodian_types_rationale: >-
Area measurements applicable to all heritage custodian types.
specificity_score: 0.4
specificity_rationale: >-
Broadly useful class - area measurements relevant for site planning,
collection storage, visitor capacity, and facility management.
slots:
area_value:
description: >-
The numeric value of an area measurement.
range: float
slot_uri: qudt:numericValue
exact_mappings:
- qudt:numericValue
- schema:value
measurement_date:
description: >-
Date when a measurement was taken or recorded.
range: date
slot_uri: schema:dateCreated
is_estimate:
description: >-
Whether a value is an estimate (true) or precise measurement (false).
range: boolean
slot_uri: hc:isEstimate
measurement_method:
description: >-
Method used to obtain a measurement.
range: string
slot_uri: hc:measurementMethod

View file

@ -0,0 +1,180 @@
id: https://nde.nl/ontology/hc/class/Asserter
name: Asserter
title: Asserter Class
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
prov: http://www.w3.org/ns/prov#
foaf: http://xmlns.com/foaf/0.1/
schema: http://schema.org/
dcterms: http://purl.org/dc/terms/
imports:
- linkml:types
- ../enums/AsserterTypeEnum
- ../slots/has_or_had_identifier
- ../slots/has_or_had_label
- ../slots/has_or_had_description
- ../slots/specificity_annotation
- ../slots/template_specificity
- ./SpecificityAnnotation
- ./TemplateSpecificityScores
default_prefix: hc
classes:
Asserter:
class_uri: prov:Agent
description: >-
An agent (person, organization, or system) responsible for making
an assertion about a heritage entity.
**PROV-O ALIGNMENT**:
Maps to `prov:Agent` - "An agent is something that bears some form
of responsibility for an activity taking place, for the existence
of an entity, or for another agent's activity."
**TYPES OF ASSERTERS**:
| Type | Description | Example |
|------|-------------|---------|
| HUMAN_ANALYST | Expert making judgment | "jane.doe@nde.nl" |
| AUTOMATED_SYSTEM | Software system | "primary-presence-classifier/1.0" |
| AI_AGENT | AI/ML model | "claude-opus-4", "opencode-claude-sonnet-4" |
| ORGANIZATION | Institution | "Noord-Hollands Archief" |
**USE CASES**:
1. **Attribution Tracking**: Who made this assertion about primary presence?
2. **Provenance Chain**: Trace assertions back to their source agent.
3. **Quality Assessment**: Different asserters may have different reliability.
4. **Accountability**: Identify responsible party for each assertion.
**EXAMPLE**:
```yaml
Asserter:
asserter_id: https://nde.nl/ontology/hc/asserter/claude-opus-4
asserter_name: Claude Opus 4
asserter_type: AI_AGENT
asserter_description: Anthropic Claude AI model used for assertion generation
asserter_version: "claude-opus-4-20250514"
```
exact_mappings:
- prov:Agent
close_mappings:
- foaf:Agent
- dcterms:Agent
related_mappings:
- schema:Person
- schema:Organization
slots:
- has_or_had_identifier
- has_or_had_label
- has_or_had_description
- asserter_type
- asserter_version
- asserter_contact
- specificity_annotation
- template_specificity
slot_usage:
has_or_had_identifier:
range: uriorcurie
required: true
identifier: true
description: >-
Unique identifier for this asserter.
examples:
- value: https://nde.nl/ontology/hc/asserter/claude-opus-4
description: AI agent asserter
- value: https://nde.nl/ontology/hc/asserter/jane-doe-nde
description: Human analyst asserter
has_or_had_label:
range: string
required: true
description: >-
Name of the asserter.
examples:
- value: Claude Opus 4
description: AI model name
- value: Dr. Jane Doe
description: Human analyst name
- value: primary-presence-classifier
description: Automated system name
has_or_had_description:
range: string
required: false
description: >-
Description of the asserter and their role in the assertion process.
examples:
- value: Anthropic Claude AI model used for heritage data assertions
- value: Senior digital heritage analyst at NDE
asserter_type:
range: AsserterTypeEnum
required: true
description: >-
The type of agent making the assertion.
examples:
- value: AI_AGENT
- value: HUMAN_ANALYST
- value: AUTOMATED_SYSTEM
asserter_version:
range: string
required: false
description: >-
Version identifier for software agents.
examples:
- value: "claude-opus-4-20250514"
- value: "1.2.3"
asserter_contact:
range: string
required: false
description: >-
Contact information for human or organizational asserters.
examples:
- value: jane.doe@nde.nl
- value: heritage-team@museum.nl
comments:
- Asserter models the agent responsible for making assertions
- Supports tracking of human, automated, and AI-based assertions
- Uses PROV-O Agent as primary ontology mapping
- Version tracking particularly important for AI/ML agents
see_also:
- https://www.w3.org/TR/prov-o/#Agent
- https://xmlns.com/foaf/spec/#term_Agent
examples:
- value:
has_or_had_identifier: https://nde.nl/ontology/hc/asserter/claude-opus-4
has_or_had_label: Claude Opus 4
asserter_type: AI_AGENT
has_or_had_description: Anthropic Claude AI model used for heritage data assertions
asserter_version: "claude-opus-4-20250514"
description: AI agent asserter
- value:
has_or_had_identifier: https://nde.nl/ontology/hc/asserter/jane-doe-nde
has_or_had_label: Dr. Jane Doe
asserter_type: HUMAN_ANALYST
has_or_had_description: Senior digital heritage analyst at NDE
asserter_contact: jane.doe@nde.nl
description: Human analyst asserter
- value:
has_or_had_identifier: https://nde.nl/ontology/hc/asserter/primary-presence-classifier
has_or_had_label: primary-presence-classifier
asserter_type: AUTOMATED_SYSTEM
has_or_had_description: Automated system for classifying primary digital presence
asserter_version: "1.0.0"
description: Automated system asserter
slots:
asserter_type:
description: >-
The type of agent making the assertion (human, automated, AI, organization).
range: AsserterTypeEnum
slot_uri: hc:asserterType
asserter_version:
description: >-
Version identifier for software agents (automated systems or AI).
range: string
slot_uri: hc:asserterVersion
asserter_contact:
description: >-
Contact information for human or organizational asserters.
range: string
slot_uri: hc:asserterContact

View file

@ -0,0 +1,199 @@
id: https://nde.nl/ontology/hc/class/Author
name: author_class
title: Author Class
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
dcterms: http://purl.org/dc/terms/
bf: http://id.loc.gov/ontologies/bibframe/
bibo: http://purl.org/ontology/bibo/
foaf: http://xmlns.com/foaf/0.1/
rico: https://www.ica.org/standards/RiC/ontology#
imports:
- linkml:types
- ../metadata
- ../slots/has_or_had_label
- ../slots/has_or_had_description
- ../slots/has_or_had_identifier
- ./SpecificityAnnotation
- ./TemplateSpecificityScores
- ../slots/specificity_annotation
- ../slots/template_specificity
default_prefix: hc
classes:
Author:
class_uri: schema:Person
description: >-
Person or organization that authored/created a creative work.
**PURPOSE**:
Author models the creator(s) of works produced by heritage custodians,
such as exhibition catalogs, research publications, finding aids, and
reports. Replaces simple string author lists with structured data.
**ONTOLOGY ALIGNMENT**:
| Ontology | Class/Property | Usage |
|----------|----------------|-------|
| **Schema.org** | `schema:Person`, `schema:author` | Primary class and property |
| **Dublin Core** | `dcterms:creator` | Creator relationship |
| **BIBFRAME** | `bf:Contribution`, `bf:Agent` | Bibliographic contributions |
| **FOAF** | `foaf:Person`, `foaf:name` | Personal information |
| **RiC-O** | `rico:Agent` | Archival agent modeling |
**AUTHOR TYPES**:
Authors may be:
- **Individual persons**: Named authors with affiliations
- **Organizations**: Corporate authors (e.g., "Rijksmuseum Staff")
- **Anonymous**: Works with unknown authorship
- **Collective**: Group authorships
**ROLES**:
Beyond simple "author", works may have multiple contributor types:
- Author (primary creator)
- Editor
- Compiler
- Translator
- Illustrator
- Contributor
**EXAMPLE**:
```yaml
has_or_had_author:
- author_name: "Jan de Vries"
author_role: AUTHOR
author_affiliation: "Rijksmuseum Amsterdam"
- author_name: "Maria van Dijk"
author_role: EDITOR
```
exact_mappings:
- schema:Person
- foaf:Person
close_mappings:
- bf:Agent
- rico:Agent
related_mappings:
- bf:Contribution
- dcterms:creator
slots:
- author_name
- author_role
- author_affiliation
- author_identifier
- has_or_had_identifier
- has_or_had_label
- has_or_had_description
- specificity_annotation
- template_specificity
slot_usage:
author_name:
range: string
required: true
description: >-
Full name of the author (person or organization).
examples:
- value: "Jan de Vries"
description: Individual author
- value: "Rijksmuseum Research Department"
description: Corporate author
author_role:
range: AuthorRoleEnum
required: false
ifabsent: "string(AUTHOR)"
description: >-
Role of this person in creating the work.
examples:
- value: AUTHOR
description: Primary author
- value: EDITOR
description: Editor
author_affiliation:
range: string
required: false
description: >-
Organization the author is affiliated with.
examples:
- value: "Rijksmuseum Amsterdam"
description: Museum affiliation
- value: "Universiteit van Amsterdam"
description: University affiliation
author_identifier:
range: uriorcurie
required: false
description: >-
Identifier for the author (ORCID, VIAF, etc.).
examples:
- value: "https://orcid.org/0000-0001-2345-6789"
description: ORCID identifier
- value: "https://viaf.org/viaf/12345678"
description: VIAF identifier
comments:
- Author replaces simple string author lists with structured data
- Supports both individual and organizational authors
- Includes roles (author, editor, compiler, etc.)
- Can link to identifier systems (ORCID, VIAF)
see_also:
- https://schema.org/author
- https://schema.org/Person
- http://id.loc.gov/ontologies/bibframe/Contribution
examples:
- value:
author_name: "Jan de Vries"
author_role: AUTHOR
author_affiliation: "Rijksmuseum Amsterdam"
author_identifier: "https://orcid.org/0000-0001-2345-6789"
description: Individual author with full metadata
- value:
author_name: "Maria van Dijk"
author_role: EDITOR
description: Editor with minimal metadata
- value:
author_name: "Rijksmuseum Research Department"
author_role: AUTHOR
description: Corporate author
annotations:
specificity_score: 0.35
specificity_rationale: >-
Authorship is broadly useful for creative/documentary works.
slots:
author_name:
description: Full name of the author (person or organization).
range: string
slot_uri: schema:name
author_role:
description: Role of this person in creating the work.
range: string
slot_uri: hc:authorRole
author_affiliation:
description: Organization the author is affiliated with.
range: string
slot_uri: schema:affiliation
author_identifier:
description: Identifier for the author (ORCID, VIAF, etc.).
range: uriorcurie
slot_uri: schema:identifier
enums:
AuthorRoleEnum:
description: Roles for contributors to a creative work.
permissible_values:
AUTHOR:
description: Primary creator of the work
EDITOR:
description: Person who edited the work
COMPILER:
description: Person who compiled/assembled the work
TRANSLATOR:
description: Person who translated the work
ILLUSTRATOR:
description: Person who created illustrations
CONTRIBUTOR:
description: General contributor
PHOTOGRAPHER:
description: Person who created photographs

View file

@ -0,0 +1,217 @@
id: https://nde.nl/ontology/hc/class/BirthDate
name: birth_date_class
title: Birth Date Class
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
crm: http://www.cidoc-crm.org/cidoc-crm/
time: http://www.w3.org/2006/time#
pico: https://personsincontext.org/model#
dcterms: http://purl.org/dc/terms/
xsd: http://www.w3.org/2001/XMLSchema#
imports:
- linkml:types
- ../metadata
- ../slots/specificity_annotation
- ../slots/template_specificity
- ./SpecificityAnnotation
- ./TemplateSpecificityScores
default_prefix: hc
classes:
BirthDate:
class_uri: schema:Date
description: >-
Structured representation of a person's birth date with support for
uncertainty, incomplete dates, and provenance tracking.
**PURPOSE**:
BirthDate replaces simple string birth_date slots to provide:
- EDTF (Extended Date/Time Format) support for uncertain/incomplete dates
- Provenance tracking for inferred dates (Rule 45)
- Confidence scoring
- Source preservation (original format from documents)
**EDTF NOTATION** (Rule 44):
| Pattern | Meaning | Example |
|---------|---------|---------|
| `YYYY` | Year only | `1970` |
| `YYYY-MM` | Year and month | `1970-08` |
| `YYYY-MM-DD` | Full date | `1970-08-15` |
| `YYYX` | Decade | `197X` (1970s) |
| `YYXX` | Century | `19XX` (1900s) |
| `YYYY~` | Approximate | `1985~` (circa 1985) |
| `YYYY?` | Uncertain | `1985?` (possibly 1985) |
| `XXXX` | Unknown | Must have search provenance |
**INFERRED DATA** (Rule 45):
When birth date is inferred (e.g., from earliest education date):
- Store in `inferred_birth_date` with full inference chain
- Set `is_inferred: true`
- Document inference method and sources
**ONTOLOGY ALIGNMENT**:
| Ontology | Mapping | Usage |
|----------|---------|-------|
| **Schema.org** | `schema:Date` | Primary class |
| **CIDOC-CRM** | `crm:E52_Time-Span` | Temporal extent |
| **PiCo** | Birth date observation | Source fidelity |
| **TIME** | `time:Instant` | Point in time |
**EXAMPLE**:
```yaml
has_or_had_date_of_birth:
birth_edtf: "1970-08-15"
birth_iso_date: "1970-08-15"
is_inferred: false
confidence: high
```
exact_mappings:
- schema:Date
close_mappings:
- crm:E52_Time-Span
- time:Instant
related_mappings:
- pico:PersonObservation
slots:
- birth_edtf
- birth_iso_date
- birth_source_text
- is_inferred
- inference_provenance
- confidence
- specificity_annotation
- template_specificity
slot_usage:
birth_edtf:
range: string
required: true
description: >-
Birth date in EDTF notation (Extended Date/Time Format).
Supports incomplete dates, uncertainty, and approximation.
examples:
- value: "1970-08-15"
description: Full date known
- value: "1970-08"
description: Year and month known
- value: "1970"
description: Only year known
- value: "197X"
description: Decade known (1970s)
- value: "1970~"
description: Approximate (circa 1970)
- value: "XXXX"
description: Unknown (requires search provenance)
birth_iso_date:
range: date
required: false
description: >-
Birth date as ISO 8601 date (YYYY-MM-DD) when full date is known.
Optional - use birth_edtf for partial/uncertain dates.
examples:
- value: "1970-08-15"
birth_source_text:
range: string
required: false
description: >-
Original date text from source document, preserved verbatim.
Useful for archival/historical sources with non-standard notation.
examples:
- value: "born in the year of our Lord 1823"
- value: "ca. 1750"
- value: "late 18th century"
is_inferred:
range: boolean
required: false
ifabsent: "false"
description: >-
Whether this birth date was inferred (vs. directly extracted).
If true, inference_provenance MUST be provided per Rule 45.
inference_provenance:
range: string
required: false
description: >-
JSON string documenting inference chain per Rule 45.
Required when is_inferred is true.
examples:
- value: '{"method": "earliest_education_heuristic", "inference_chain": [...]}'
confidence:
range: BirthDateConfidenceEnum
required: false
description: >-
Confidence level in the birth date value.
comments:
- "Replaces simple birth_date string slot (Rule 53)"
- "EDTF notation enables uncertain/incomplete date representation"
- "Inference provenance required when is_inferred=true (Rule 45)"
- "Source text preservation supports archival/historical research"
see_also:
- https://www.loc.gov/standards/datetime/
- https://schema.org/birthDate
examples:
- value:
birth_edtf: "1970-08-15"
birth_iso_date: "1970-08-15"
is_inferred: false
confidence: HIGH
description: Full date known with high confidence
- value:
birth_edtf: "197X"
is_inferred: true
inference_provenance: '{"method": "earliest_education_heuristic", "source_field": "education[0].start_year"}'
confidence: LOW
description: Decade inferred from education start year
- value:
birth_edtf: "1823"
birth_source_text: "born in the year of our Lord 1823"
is_inferred: false
confidence: MEDIUM
description: Year extracted from historical document
annotations:
specificity_score: 0.45
specificity_rationale: >-
Birth dates are relevant for person research across all heritage sectors.
slots:
birth_edtf:
description: Birth date in EDTF notation.
range: string
slot_uri: dcterms:date
birth_iso_date:
description: Birth date as ISO 8601 date when full date is known.
range: date
slot_uri: schema:birthDate
birth_source_text:
description: Original date text from source document.
range: string
slot_uri: hc:sourceText
is_inferred:
description: Whether this date was inferred.
range: boolean
slot_uri: hc:isInferred
inference_provenance:
description: JSON documenting inference chain.
range: string
slot_uri: hc:inferenceProvenance
confidence:
description: Confidence level in the date value.
range: string
slot_uri: hc:confidence
enums:
BirthDateConfidenceEnum:
description: Confidence levels for birth date values.
permissible_values:
HIGH:
description: Full date from authoritative source (e.g., birth certificate)
MEDIUM:
description: Date from reliable source (e.g., official biography)
LOW:
description: Date inferred or from uncertain source
VERY_LOW:
description: Decade/century estimated from indirect evidence

View file

@ -0,0 +1,223 @@
id: https://nde.nl/ontology/hc/class/BirthPlace
name: birth_place_class
title: Birth Place Class
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
crm: http://www.cidoc-crm.org/cidoc-crm/
gn: http://www.geonames.org/ontology#
wdt: http://www.wikidata.org/prop/direct/
imports:
- linkml:types
- ../metadata
- ../slots/specificity_annotation
- ../slots/template_specificity
- ./SpecificityAnnotation
- ./TemplateSpecificityScores
default_prefix: hc
classes:
BirthPlace:
class_uri: schema:Place
description: >-
Structured representation of a person's place of birth with support
for historical place names, modern equivalents, and geographic identifiers.
**PURPOSE**:
BirthPlace replaces simple string birth_place slots to provide:
- Historical place name preservation
- Modern place name linkage
- Geographic identifier integration (GeoNames, Wikidata)
- Coordinate storage for mapping applications
**HISTORICAL VS. MODERN NAMES**:
Many birth places used historical names that have since changed:
- "Batavia" → "Jakarta"
- "Bombay" → "Mumbai"
- "Leningrad" → "St. Petersburg"
- "Saigon" → "Ho Chi Minh City"
BirthPlace preserves the source name while linking to modern identifiers.
**GEOGRAPHIC RESOLUTION**:
Per AGENTS.md Rule on GeoNames as authoritative source:
- `geonames_id`: Links to GeoNames for standardization
- `wikidata_id`: Links to Wikidata for additional context
- `coordinates`: Lat/lon for mapping
**ONTOLOGY ALIGNMENT**:
| Ontology | Mapping | Usage |
|----------|---------|-------|
| **Schema.org** | `schema:Place` | Primary class |
| **CIDOC-CRM** | `crm:E53_Place` | Place entity |
| **GeoNames** | `gn:Feature` | Geographic feature |
**EXAMPLE**:
```yaml
has_or_had_place_of_birth:
place_name: "Batavia"
modern_place_name: "Jakarta"
country_code: "ID"
geonames_id: 1642911
wikidata_id: "Q3630"
```
exact_mappings:
- schema:Place
close_mappings:
- crm:E53_Place
- gn:Feature
slots:
- place_name
- modern_place_name
- country_code
- region_code
- geonames_id
- wikidata_id
- coordinates
- place_source_text
- specificity_annotation
- template_specificity
slot_usage:
place_name:
range: string
required: true
description: >-
Name of the birth place as recorded in source.
May be historical name that has since changed.
examples:
- value: "Amsterdam"
description: Current name
- value: "Batavia"
description: Historical name (now Jakarta)
modern_place_name:
range: string
required: false
description: >-
Modern equivalent name if place_name is historical.
Leave null if place_name is current.
examples:
- value: "Jakarta"
description: Modern name for Batavia
country_code:
range: string
required: false
pattern: "^[A-Z]{2}$"
description: >-
ISO 3166-1 alpha-2 country code.
examples:
- value: "NL"
- value: "ID"
region_code:
range: string
required: false
description: >-
ISO 3166-2 region/province code or GeoNames admin1 code.
examples:
- value: "NH"
description: Noord-Holland
geonames_id:
range: integer
required: false
description: >-
GeoNames geographic identifier for the place.
Authoritative source per AGENTS.md.
examples:
- value: 2759794
description: Amsterdam GeoNames ID
wikidata_id:
range: string
required: false
pattern: "^Q[0-9]+$"
description: >-
Wikidata entity identifier for the place.
examples:
- value: "Q727"
description: Amsterdam Wikidata ID
coordinates:
range: string
required: false
description: >-
Geographic coordinates as "lat,lon" string.
examples:
- value: "52.3676,4.9041"
description: Amsterdam coordinates
place_source_text:
range: string
required: false
description: >-
Original place text from source document, preserved verbatim.
Useful when source contains additional context.
examples:
- value: "born at the family estate in rural Gelderland"
comments:
- "Replaces simple birth_place string slot (Rule 53)"
- "Preserves historical place names while linking to modern identifiers"
- "GeoNames ID is authoritative per AGENTS.md"
see_also:
- https://schema.org/birthPlace
- https://www.geonames.org/
examples:
- value:
place_name: "Amsterdam"
country_code: "NL"
region_code: "NH"
geonames_id: 2759794
wikidata_id: "Q727"
coordinates: "52.3676,4.9041"
description: Birth place with full geographic resolution
- value:
place_name: "Batavia"
modern_place_name: "Jakarta"
country_code: "ID"
geonames_id: 1642911
wikidata_id: "Q3630"
description: Historical place name with modern equivalent
- value:
place_name: "rural Gelderland"
country_code: "NL"
region_code: "GE"
place_source_text: "born at the family estate in rural Gelderland"
description: Imprecise location from archival source
annotations:
specificity_score: 0.45
specificity_rationale: >-
Birth places are relevant for person research across heritage sectors.
slots:
place_name:
description: Name of the place as recorded in source.
range: string
slot_uri: schema:name
modern_place_name:
description: Modern equivalent name if different from source name.
range: string
slot_uri: hc:modernPlaceName
country_code:
description: ISO 3166-1 alpha-2 country code.
range: string
slot_uri: schema:addressCountry
region_code:
description: ISO 3166-2 region/province code.
range: string
slot_uri: schema:addressRegion
geonames_id:
description: GeoNames geographic identifier.
range: integer
slot_uri: gn:geonamesId
wikidata_id:
description: Wikidata entity identifier.
range: string
slot_uri: wdt:P625
coordinates:
description: Geographic coordinates as lat,lon string.
range: string
slot_uri: schema:geo
place_source_text:
description: Original place text from source document.
range: string
slot_uri: hc:sourceText

View file

@ -9,8 +9,15 @@ imports:
- ../slots/has_or_had_description - ../slots/has_or_had_description
- ../slots/has_or_had_identifier - ../slots/has_or_had_identifier
- ../slots/has_or_had_label - ../slots/has_or_had_label
- ../slots/branch_service_area # REMOVED - migrated to has_or_had_service_area (Rule 53)
- ../slots/branch_staff_count # - ../slots/branch_service_area
- ../slots/has_or_had_service_area
- ./ServiceArea
# REMOVED - migrated to has_or_had_quantity (Rule 53)
# - ../slots/branch_staff_count
- ../slots/has_or_had_quantity
- ./Quantity
- ../enums/QuantityTypeEnum
- ../slots/has_local_collection - ../slots/has_local_collection
- ../slots/is_public_facing - ../slots/is_public_facing
- ../slots/operating_hour - ../slots/operating_hour
@ -69,8 +76,12 @@ classes:
- has_or_had_description - has_or_had_description
- has_or_had_identifier - has_or_had_identifier
- has_or_had_label - has_or_had_label
- branch_service_area # REMOVED - migrated to has_or_had_service_area (Rule 53)
- branch_staff_count # - branch_service_area
- has_or_had_service_area
# REMOVED - migrated to has_or_had_quantity (Rule 53)
# - branch_staff_count
- has_or_had_quantity
- has_local_collection - has_local_collection
- is_public_facing - is_public_facing
- operating_hour - operating_hour
@ -115,13 +126,27 @@ classes:
- value: Regional branch serving Zaanstreek-Waterland area. Holds municipal records from Zaandam, Wormerland, Purmerend. - value: Regional branch serving Zaanstreek-Waterland area. Holds municipal records from Zaandam, Wormerland, Purmerend.
Open to researchers Tuesday-Thursday. Open to researchers Tuesday-Thursday.
description: Archive branch description description: Archive branch description
branch_service_area: # REMOVED - migrated to has_or_had_service_area (Rule 53)
range: string # branch_service_area:
# range: string
# examples:
# - value: Zaanstreek-Waterland region
# description: Regional coverage
# - value: Amsterdam Schiphol Airport travelers
# description: Specific community served
has_or_had_service_area:
range: ServiceArea
inlined: true
description: >-
Geographic area or community served by this branch.
MIGRATED from branch_service_area (Rule 53) - changed from string to
ServiceArea class for richer geographic modeling.
examples: examples:
- value: Zaanstreek-Waterland region - value:
description: Regional coverage service_area_id: https://nde.nl/ontology/hc/servicearea/zaanstreek-waterland
- value: Amsterdam Schiphol Airport travelers service_area_name: Zaanstreek-Waterland region
description: Specific community served service_area_type: REGIONAL
description: Regional coverage as structured ServiceArea
is_public_facing: is_public_facing:
range: boolean range: boolean
required: true required: true
@ -144,11 +169,28 @@ classes:
examples: examples:
- value: Tu-Th 09:00-17:00 - value: Tu-Th 09:00-17:00
description: Limited weekday hours description: Limited weekday hours
branch_staff_count: # REMOVED - migrated to has_or_had_quantity (Rule 53)
range: integer # branch_staff_count:
# range: integer
# examples:
# - value: 3
# description: Small branch staff
has_or_had_quantity:
range: Quantity
inlined: true
description: >-
Quantified values associated with this branch office (e.g., staff count).
MIGRATED from branch_staff_count (Rule 53) - changed from integer to
Quantity class for richer measurement context (units, dates, estimates).
examples: examples:
- value: 3 - value:
description: Small branch staff quantity_value: 3
quantity_type: STAFF_COUNT
quantity_unit: FTE
has_or_had_description: Staff assigned to this branch
quantity_date: '2025-01-01'
is_estimate: false
description: Branch staff count as structured Quantity
has_local_collection: has_local_collection:
range: boolean range: boolean
examples: examples:
@ -177,14 +219,21 @@ classes:
has_or_had_label: Noord-Hollands Archief - Zaanstreek-Waterland has_or_had_label: Noord-Hollands Archief - Zaanstreek-Waterland
has_or_had_description: Regional branch serving Zaanstreek-Waterland area. Holds municipal records from Zaandam, has_or_had_description: Regional branch serving Zaanstreek-Waterland area. Holds municipal records from Zaandam,
Wormerland, Purmerend. Wormerland, Purmerend.
branch_service_area: Zaanstreek-Waterland region has_or_had_service_area:
service_area_id: https://nde.nl/ontology/hc/servicearea/zaanstreek-waterland
service_area_name: Zaanstreek-Waterland region
service_area_type: REGIONAL
is_public_facing: true is_public_facing: true
services_offered: services_offered:
- Archival research access - Archival research access
- Genealogical consultations - Genealogical consultations
- Local history reference - Local history reference
operating_hours: Tu-Th 09:00-17:00 operating_hours: Tu-Th 09:00-17:00
branch_staff_count: 3 has_or_had_quantity:
quantity_value: 3
quantity_type: STAFF_COUNT
quantity_unit: FTE
has_or_had_description: Staff assigned to Zaanstreek-Waterland branch
has_local_collection: true has_local_collection: true
description: Regional archive branch description: Regional archive branch
- value: - value:
@ -192,12 +241,19 @@ classes:
has_or_had_label: Rijksmuseum Schiphol has_or_had_label: Rijksmuseum Schiphol
has_or_had_description: Exhibition space at Schiphol Airport featuring rotating highlights from the Rijksmuseum has_or_had_description: Exhibition space at Schiphol Airport featuring rotating highlights from the Rijksmuseum
collection. Free admission. collection. Free admission.
branch_service_area: Amsterdam Schiphol Airport travelers has_or_had_service_area:
service_area_id: https://nde.nl/ontology/hc/servicearea/schiphol-travelers
service_area_name: Amsterdam Schiphol Airport travelers
service_area_type: COMMUNITY
is_public_facing: true is_public_facing: true
services_offered: services_offered:
- Exhibition viewing - Exhibition viewing
- Museum shop - Museum shop
operating_hours: Daily 07:00-20:00 operating_hours: Daily 07:00-20:00
branch_staff_count: 5 has_or_had_quantity:
quantity_value: 5
quantity_type: STAFF_COUNT
quantity_unit: FTE
has_or_had_description: Staff assigned to Schiphol branch
has_local_collection: false has_local_collection: false
description: Museum airport branch description: Museum airport branch

View file

@ -13,7 +13,10 @@ imports:
- ../slots/has_approval_date - ../slots/has_approval_date
- ../slots/has_or_had_acquisition_budget - ../slots/has_or_had_acquisition_budget
- ../slots/is_or_was_approved_by # MIGRATED: was ../slots/approved_by (2026-01-15) - ../slots/is_or_was_approved_by # MIGRATED: was ../slots/approved_by (2026-01-15)
- ../slots/budget_currency # REMOVED - migrated to has_or_had_currency (Rule 53)
# - ../slots/budget_currency
- ../slots/has_or_had_currency
- ./Currency
- ../slots/has_or_had_description - ../slots/has_or_had_description
- ../slots/has_or_had_label - ../slots/has_or_had_label
# REMOVED - migrated to has_or_had_status with range BudgetStatus (Rule 53) # REMOVED - migrated to has_or_had_status with range BudgetStatus (Rule 53)
@ -97,7 +100,9 @@ classes:
- has_or_had_acquisition_budget - has_or_had_acquisition_budget
- has_approval_date - has_approval_date
- is_or_was_approved_by # MIGRATED: was approved_by (2026-01-15) - is_or_was_approved_by # MIGRATED: was approved_by (2026-01-15)
- budget_currency # REMOVED - migrated to has_or_had_currency (Rule 53)
# - budget_currency
- has_or_had_currency
- has_or_had_description - has_or_had_description
- has_or_had_label - has_or_had_label
# MIGRATED from budget_status to has_or_had_status (Rule 53) # MIGRATED from budget_status to has_or_had_status (Rule 53)
@ -209,13 +214,33 @@ classes:
examples: examples:
- value: 45000000.0 - value: 45000000.0
description: EUR 45 million annual budget description: EUR 45 million annual budget
budget_currency: # REMOVED - migrated to has_or_had_currency (Rule 53)
range: string # budget_currency:
# range: string
# required: true
# examples:
# - value: EUR
# description: Euro currency
# - value: USD
# description: US Dollar currency
has_or_had_currency:
range: Currency
inlined: true
required: true required: true
description: >-
Currency for all monetary amounts in this budget.
MIGRATED from budget_currency (Rule 53) - changed from string to
Currency class for richer currency metadata (ISO 4217 code, symbol, name).
examples: examples:
- value: EUR - value:
description: Euro currency currency_code: EUR
- value: USD has_or_had_label: Euro
currency_symbol:
description: Euro currency as structured Currency object
- value:
currency_code: USD
has_or_had_label: US Dollar
currency_symbol: $
description: US Dollar currency description: US Dollar currency
operating_budget: operating_budget:
range: decimal range: decimal
@ -250,9 +275,12 @@ classes:
has_approval_date: has_approval_date:
range: date range: date
required: false required: false
is_or_was_is_or_was_approved_by: # MIGRATED: was was_approved_by (2026-01-15) is_or_was_approved_by:
description: Agent (person/organization) that approved this budget description: >-
range: string Agent (person/organization) that approved this budget.
MIGRATED from approved_by (2026-01-15) per Rule 39.
Range changed from string to Approver class for structured approval tracking.
range: Approver
required: false required: false
# MIGRATED from budget_status to has_or_had_status (Rule 53) # MIGRATED from budget_status to has_or_had_status (Rule 53)
# budget_status: # budget_status:
@ -324,7 +352,10 @@ classes:
fiscal_year_start: '2024-01-01' fiscal_year_start: '2024-01-01'
fiscal_year_end: '2024-12-31' fiscal_year_end: '2024-12-31'
total_budget_amount: 45000000.0 total_budget_amount: 45000000.0
budget_currency: EUR has_or_had_currency:
currency_code: EUR
has_or_had_label: Euro
currency_symbol:
operating_budget: 38000000.0 operating_budget: 38000000.0
capital_budget: 3000000.0 capital_budget: 3000000.0
acquisition_budget: 2000000.0 acquisition_budget: 2000000.0
@ -336,7 +367,8 @@ classes:
internal_funding: 25000000.0 internal_funding: 25000000.0
endowment_draw: 5000000.0 endowment_draw: 5000000.0
approval_date: '2023-11-15' approval_date: '2023-11-15'
is_or_was_approved_by: Board of Directors is_or_was_approved_by:
approver_name: Board of Directors
has_or_had_status: has_or_had_status:
value: ACTIVE value: ACTIVE
effective_date: '2024-01-01' effective_date: '2024-01-01'
@ -352,7 +384,10 @@ classes:
fiscal_year_start: '2024-04-01' fiscal_year_start: '2024-04-01'
fiscal_year_end: '2025-03-31' fiscal_year_end: '2025-03-31'
total_budget_amount: 8500000.0 total_budget_amount: 8500000.0
budget_currency: EUR has_or_had_currency:
currency_code: EUR
has_or_had_label: Euro
currency_symbol:
operating_budget: 7500000.0 operating_budget: 7500000.0
capital_budget: 500000.0 capital_budget: 500000.0
personnel_budget: 5200000.0 personnel_budget: 5200000.0
@ -360,7 +395,8 @@ classes:
external_funding: 6000000.0 external_funding: 6000000.0
internal_funding: 2500000.0 internal_funding: 2500000.0
approval_date: '2024-03-01' approval_date: '2024-03-01'
is_or_was_approved_by: Province of Noord-Holland is_or_was_approved_by:
approver_name: Province of Noord-Holland
has_or_had_status: has_or_had_status:
value: ACTIVE value: ACTIVE
effective_date: '2024-04-01' effective_date: '2024-04-01'

View file

@ -0,0 +1,189 @@
# ConversionRate - Structured conversion rate measurement
# Created per slot_fixes.yaml migration for: visitor_conversion_rate
# Creation date: 2026-01-14
#
# REVISION FROM slot_fixes.yaml (lines 1646-1669):
# - label: has_or_had_conversion_rate (slot)
# - label: ConversionRate (class) ← THIS FILE
# - link_branch 1: has_or_had_type → ConversionRateType → ConversionRateTypes
# - link_branch 2: temporal_extent → TimeSpan
id: https://nde.nl/ontology/hc/classes/ConversionRate
name: ConversionRate
title: ConversionRate
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
xsd: http://www.w3.org/2001/XMLSchema#
imports:
- linkml:types
- ./ConversionRateType
- ./ConversionRateTypes
- ./TimeSpan
- ../slots/has_or_had_type
- ../slots/temporal_extent
default_range: string
classes:
ConversionRate:
description: >-
Structured representation of a conversion rate metric for heritage institutions.
**WHY A DEDICATED CLASS?**
Conversion rates are more than simple floats - they need:
- **Type**: What kind of conversion (visitor-to-purchase, visitor-to-member)
- **Value**: The actual percentage (0.35 = 35%)
- **Time Period**: When this rate was measured
- **Context**: Comparison benchmarks, notes
**SLOT_FIXES.YAML REVISION** (lines 1646-1669):
- Branch 1: has_or_had_type → ConversionRateType/ConversionRateTypes
- Branch 2: temporal_extent → TimeSpan (measurement period)
**USE CASES**:
- Gift shop performance: 35% visitor-to-purchase conversion
- Membership drives: 5% visitor-to-member conversion
- Digital engagement: 3% website-to-visit conversion
**ONTOLOGY MAPPING**:
- class_uri: schema:QuantitativeValue (numeric measurement)
- Uses schema:interactionStatistic for behavioral metrics
class_uri: schema:QuantitativeValue
exact_mappings:
- schema:QuantitativeValue
close_mappings:
- schema:interactionStatistic
slots:
- has_or_had_type
- temporal_extent
attributes:
rate_value:
range: float
required: true
description: >-
The conversion rate as a decimal (0.35 = 35%).
Always expressed as proportion between 0.0 and 1.0.
minimum_value: 0.0
maximum_value: 1.0
rate_percentage:
range: float
description: >-
The conversion rate as a percentage (35 = 35%).
Calculated field: rate_value × 100.
minimum_value: 0.0
maximum_value: 100.0
sample_size:
range: integer
description: >-
The number of observations in the denominator (total visitors, emails sent, etc.).
Required for statistical significance assessment.
converted_count:
range: integer
description: >-
The number of successful conversions (numerator).
Required for statistical significance assessment.
measurement_period_description:
range: string
description: >-
Human-readable description of the measurement period.
Examples: "Q1 2025", "Calendar Year 2024", "Exhibition period"
benchmark_comparison:
range: string
description: >-
How this rate compares to industry benchmarks.
Examples: "Above average", "Top quartile", "Below benchmark"
notes:
range: string
description: >-
Additional context about this conversion rate measurement.
Examples: Special circumstances, data collection methodology.
slot_usage:
has_or_had_type:
range: ConversionRateType
inlined: true
description: >-
The type of conversion being measured.
Use concrete types from ConversionRateTypes (VisitorToPurchaseConversion, etc.)
examples:
- value: |
has_or_had_type:
type_label: "Visitor to Purchase"
source_population: "museum visitors"
target_action: "made gift shop purchase"
description: Visitor to purchase conversion type
temporal_extent:
range: TimeSpan
inlined: true
description: >-
The time period during which this conversion rate was measured.
Use begin/end dates to specify the measurement window.
examples:
- value: |
temporal_extent:
begin_of_the_begin: "2024-01-01"
end_of_the_end: "2024-12-31"
description: Calendar year 2024 measurement period
annotations:
custodian_types: '["*"]'
custodian_types_rationale: >-
Conversion rates applicable to all custodian types with retail or engagement.
custodian_types_primary: "*"
specificity_score: 0.45
specificity_rationale: >-
Moderate specificity - relevant to custodians tracking performance metrics.
examples:
- value: |
ConversionRate:
rate_value: 0.35
rate_percentage: 35.0
sample_size: 500000
converted_count: 175000
has_or_had_type:
type_label: "Visitor to Purchase"
temporal_extent:
begin_of_the_begin: "2024-01-01"
end_of_the_end: "2024-12-31"
measurement_period_description: "Calendar Year 2024"
benchmark_comparison: "Above average (industry avg 15-25%)"
description: Gift shop 35% visitor-to-purchase conversion rate.
- value: |
ConversionRate:
rate_value: 0.05
rate_percentage: 5.0
sample_size: 100000
converted_count: 5000
has_or_had_type:
type_label: "Visitor to Member"
temporal_extent:
begin_of_the_begin: "2024-06-01"
end_of_the_end: "2024-08-31"
measurement_period_description: "Summer membership drive"
benchmark_comparison: "Strong (industry avg 1-3%)"
description: Summer membership campaign with 5% conversion.
comments:
- Created from slot_fixes.yaml migration (2026-01-14)
- Replaces simple float visitor_conversion_rate slot
- Supports multiple conversion types with industry benchmarks
- Temporal extent enables trend analysis over time

View file

@ -0,0 +1,99 @@
# ConversionRateType - Abstract base class for conversion rate types
# Created per slot_fixes.yaml migration for: visitor_conversion_rate
# Creation date: 2026-01-14
#
# NAMING CONVENTION (Rule 0b):
# - ConversionRateType.yaml = Abstract base class (this file)
# - ConversionRateTypes.yaml = Concrete subclasses
id: https://nde.nl/ontology/hc/classes/ConversionRateType
name: ConversionRateType
title: ConversionRateType
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
skos: http://www.w3.org/2004/02/skos/core#
imports:
- linkml:types
default_range: string
classes:
ConversionRateType:
abstract: true
description: >-
Abstract base class for types of conversion rates measured in heritage contexts.
**TYPE TAXONOMY**:
Conversion rates measure the percentage of one group that performs a specific action:
- **Visitor to Purchase**: Museum visitors who buy from gift shop
- **Visitor to Member**: Visitors who become members
- **Online to Visit**: Website visitors who visit physically
- **Email to Click**: Email recipients who click links
- **Social to Follower**: Social media viewers who follow
**NAMING CONVENTION** (Rule 0b):
- This file: Abstract `ConversionRateType` base class
- ConversionRateTypes.yaml: Concrete subclasses
**ONTOLOGY MAPPING**:
- class_uri: skos:Concept (type taxonomy concept)
- Part of SKOS-based classification scheme
class_uri: skos:Concept
exact_mappings:
- skos:Concept
attributes:
type_id:
range: uriorcurie
identifier: true
description: Unique identifier for this conversion rate type.
type_label:
range: string
required: true
description: Human-readable label for this conversion rate type.
type_description:
range: string
description: Detailed description of what this conversion rate measures.
source_population:
range: string
description: >-
The group being measured (denominator).
Examples: "museum visitors", "website visitors", "email recipients"
target_action:
range: string
description: >-
The action being measured (numerator).
Examples: "made purchase", "became member", "clicked link"
industry_benchmark_low:
range: float
description: Low end of industry benchmark for this conversion type.
industry_benchmark_high:
range: float
description: High end of industry benchmark for this conversion type.
annotations:
custodian_types: '["*"]'
custodian_types_rationale: >-
Conversion rate types applicable to all custodian types with retail or engagement metrics.
custodian_types_primary: "*"
specificity_score: 0.45
specificity_rationale: >-
Moderate specificity - relevant to custodians tracking performance metrics.
comments:
- Created from slot_fixes.yaml migration (2026-01-14)
- Abstract base class - see ConversionRateTypes.yaml for concrete types
- Used with ConversionRate class for structured metrics

View file

@ -0,0 +1,218 @@
# ConversionRateTypes - Concrete subclasses of ConversionRateType
# Created per slot_fixes.yaml migration for: visitor_conversion_rate
# Creation date: 2026-01-14
#
# NAMING CONVENTION (Rule 0b):
# - ConversionRateType.yaml = Abstract base class
# - ConversionRateTypes.yaml = Concrete subclasses (this file)
id: https://nde.nl/ontology/hc/classes/ConversionRateTypes
name: ConversionRateTypes
title: ConversionRateTypes
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
skos: http://www.w3.org/2004/02/skos/core#
imports:
- linkml:types
- ./ConversionRateType
default_range: string
classes:
VisitorToPurchaseConversion:
is_a: ConversionRateType
description: >-
Conversion rate measuring museum/archive visitors who make a gift shop purchase.
**INDUSTRY BENCHMARKS**:
- Average: 15-25%
- High performers: 30-40%
- Blockbuster exhibitions: 40-60%
**CALCULATION**: (Purchasers / Total Visitors) × 100
class_uri: hc:VisitorToPurchaseConversion
attributes:
type_label:
range: string
ifabsent: "string(Visitor to Purchase)"
source_population:
range: string
ifabsent: "string(museum/venue visitors)"
target_action:
range: string
ifabsent: "string(made gift shop purchase)"
industry_benchmark_low:
range: float
ifabsent: "float(0.15)"
industry_benchmark_high:
range: float
ifabsent: "float(0.40)"
VisitorToMemberConversion:
is_a: ConversionRateType
description: >-
Conversion rate measuring visitors who become members/supporters.
**INDUSTRY BENCHMARKS**:
- Average: 1-3%
- Strong programs: 5-8%
**CALCULATION**: (New Members / Total Visitors) × 100
class_uri: hc:VisitorToMemberConversion
attributes:
type_label:
range: string
ifabsent: "string(Visitor to Member)"
source_population:
range: string
ifabsent: "string(museum/venue visitors)"
target_action:
range: string
ifabsent: "string(became member/supporter)"
industry_benchmark_low:
range: float
ifabsent: "float(0.01)"
industry_benchmark_high:
range: float
ifabsent: "float(0.08)"
OnlineToPhysicalConversion:
is_a: ConversionRateType
description: >-
Conversion rate measuring website visitors who subsequently visit physically.
**INDUSTRY BENCHMARKS**:
- Average: 0.5-2%
- Strong digital presence: 3-5%
**CALCULATION**: (Physical Visits from Web / Website Visitors) × 100
class_uri: hc:OnlineToPhysicalConversion
attributes:
type_label:
range: string
ifabsent: "string(Online to Physical Visit)"
source_population:
range: string
ifabsent: "string(website visitors)"
target_action:
range: string
ifabsent: "string(visited venue physically)"
industry_benchmark_low:
range: float
ifabsent: "float(0.005)"
industry_benchmark_high:
range: float
ifabsent: "float(0.05)"
EmailToClickConversion:
is_a: ConversionRateType
description: >-
Conversion rate measuring email recipients who click through.
**INDUSTRY BENCHMARKS** (Museum sector):
- Average: 2-4%
- Well-targeted: 5-10%
**CALCULATION**: (Clicks / Emails Delivered) × 100
class_uri: hc:EmailToClickConversion
attributes:
type_label:
range: string
ifabsent: "string(Email to Click)"
source_population:
range: string
ifabsent: "string(email recipients)"
target_action:
range: string
ifabsent: "string(clicked link in email)"
industry_benchmark_low:
range: float
ifabsent: "float(0.02)"
industry_benchmark_high:
range: float
ifabsent: "float(0.10)"
SocialToFollowerConversion:
is_a: ConversionRateType
description: >-
Conversion rate measuring social media viewers who become followers.
**INDUSTRY BENCHMARKS**:
- Average: 1-3%
- Viral content: 5-15%
**CALCULATION**: (New Followers / Content Views) × 100
class_uri: hc:SocialToFollowerConversion
attributes:
type_label:
range: string
ifabsent: "string(Social to Follower)"
source_population:
range: string
ifabsent: "string(social media content viewers)"
target_action:
range: string
ifabsent: "string(became follower)"
industry_benchmark_low:
range: float
ifabsent: "float(0.01)"
industry_benchmark_high:
range: float
ifabsent: "float(0.15)"
TicketToReturnConversion:
is_a: ConversionRateType
description: >-
Conversion rate measuring ticket buyers who return for another visit.
**INDUSTRY BENCHMARKS**:
- Average: 20-30%
- Strong loyalty programs: 40-60%
**CALCULATION**: (Return Visitors / Total Ticket Buyers) × 100
class_uri: hc:TicketToReturnConversion
attributes:
type_label:
range: string
ifabsent: "string(Ticket to Return Visit)"
source_population:
range: string
ifabsent: "string(ticket buyers)"
target_action:
range: string
ifabsent: "string(made return visit within 12 months)"
industry_benchmark_low:
range: float
ifabsent: "float(0.20)"
industry_benchmark_high:
range: float
ifabsent: "float(0.60)"
OtherConversion:
is_a: ConversionRateType
description: >-
Custom or other conversion rate type not covered by standard types.
Use this when tracking novel metrics or institution-specific conversions.
class_uri: hc:OtherConversion
attributes:
custom_type_name:
range: string
description: Name of the custom conversion type.

View file

@ -0,0 +1,173 @@
id: https://nde.nl/ontology/hc/class/Currency
name: Currency
title: Currency Class
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
qudt: http://qudt.org/schema/qudt/
dcterms: http://purl.org/dc/terms/
imports:
- linkml:types
- ../slots/has_or_had_identifier
- ../slots/has_or_had_label
- ../slots/has_or_had_description
- ../slots/specificity_annotation
- ../slots/template_specificity
- ./SpecificityAnnotation
- ./TemplateSpecificityScores
default_prefix: hc
classes:
Currency:
class_uri: schema:Currency
description: >-
A currency used for monetary values.
**SCHEMA.ORG ALIGNMENT**:
Maps to `schema:Currency` - "A currency as defined by ISO 4217."
**ISO 4217 STANDARD**:
ISO 4217 defines three-letter currency codes:
| Code | Currency | Symbol |
|------|----------|--------|
| EUR | Euro | € |
| USD | US Dollar | $ |
| GBP | British Pound | £ |
| JPY | Japanese Yen | ¥ |
| CHF | Swiss Franc | CHF |
**WHY NOT JUST USE STRING?**
Simple string fields like `budget_currency: "EUR"` lose important context:
- Symbol for display purposes
- Full name for accessibility
- Historical validity (currencies change over time)
- Link to authoritative ISO 4217 standard
The Currency class captures this richness while remaining simple for basic use.
**HISTORICAL CURRENCIES**:
Heritage institutions often deal with historical currencies:
- NLG (Dutch Guilder) - replaced by EUR in 2002
- DEM (German Mark) - replaced by EUR in 2002
- FRF (French Franc) - replaced by EUR in 2002
The temporal naming pattern (has_or_had_currency) accommodates this.
**EXAMPLE**:
```yaml
Currency:
currency_code: EUR
currency_name: Euro
currency_symbol:
```
exact_mappings:
- schema:Currency
close_mappings:
- qudt:CurrencyUnit
slots:
- has_or_had_identifier
- currency_code
- has_or_had_label
- currency_symbol
- has_or_had_description
- specificity_annotation
- template_specificity
slot_usage:
has_or_had_identifier:
range: uriorcurie
required: false
identifier: true
description: >-
Optional identifier for this currency.
examples:
- value: https://nde.nl/ontology/hc/currency/EUR
description: Euro currency identifier
currency_code:
range: string
required: true
pattern: "^[A-Z]{3}$"
description: >-
ISO 4217 three-letter currency code.
examples:
- value: EUR
description: Euro
- value: USD
description: US Dollar
- value: GBP
description: British Pound
- value: NLG
description: Dutch Guilder (historical)
has_or_had_label:
range: string
required: false
description: >-
Full name of the currency.
examples:
- value: Euro
- value: US Dollar
- value: Dutch Guilder
currency_symbol:
range: string
required: false
description: >-
Currency symbol for display.
examples:
- value:
description: Euro symbol
- value: $
description: Dollar symbol
- value: £
description: Pound symbol
- value: ƒ
description: Guilder symbol (historical)
has_or_had_description:
range: string
required: false
description: >-
Additional information about the currency, such as historical context.
examples:
- value: Official currency of the Eurozone since 1999
- value: Dutch national currency until replaced by Euro in 2002
comments:
- Currency models monetary unit with ISO 4217 code and metadata
- Replaces simple string currency fields with structured data
- Uses Schema.org Currency as primary ontology mapping
- Supports both current and historical currencies
see_also:
- https://schema.org/Currency
- https://www.iso.org/iso-4217-currency-codes.html
examples:
- value:
currency_code: EUR
has_or_had_label: Euro
currency_symbol:
has_or_had_description: Official currency of the Eurozone
description: Euro currency
- value:
currency_code: NLG
has_or_had_label: Dutch Guilder
currency_symbol: ƒ
has_or_had_description: Dutch national currency until replaced by Euro in 2002
description: Historical Dutch Guilder
- value:
currency_code: USD
has_or_had_label: US Dollar
currency_symbol: $
description: US Dollar currency
slots:
currency_code:
description: >-
ISO 4217 three-letter currency code.
range: string
slot_uri: schema:currency
currency_symbol:
description: >-
Currency symbol for display purposes.
range: string
slot_uri: hc:currencySymbol

View file

@ -27,7 +27,7 @@ imports:
- ./Notes - ./Notes
- ../slots/has_archive_description - ../slots/has_archive_description
- ../slots/has_archive_name - ../slots/has_archive_name
- ../slots/arrangement_notes # REMOVED 2026-01-15: ../slots/arrangement_notes - migrated to has_arrangement_note
- ../slots/has_or_had_assigned_processor - ../slots/has_or_had_assigned_processor
- ../slots/creating_agency - ../slots/creating_agency
- ../slots/has_or_had_custodian_type - ../slots/has_or_had_custodian_type
@ -79,7 +79,6 @@ classes:
- has_or_had_notes - has_or_had_notes
- has_archive_description - has_archive_description
- has_archive_name - has_archive_name
- arrangement_notes
- has_or_had_assigned_processor - has_or_had_assigned_processor
- creating_agency - creating_agency
- has_or_had_custodian_type - has_or_had_custodian_type

View file

@ -14,7 +14,9 @@ imports:
- ./GeoSpatialPlace - ./GeoSpatialPlace
- ../enums/PlaceSpecificityEnum - ../enums/PlaceSpecificityEnum
- ./ReconstructedEntity - ./ReconstructedEntity
- ../slots/auxiliary_places # REMOVED - migrated to has_or_had_auxiliary_entities with range AuxiliaryPlace (Rule 53)
# - ../slots/auxiliary_places
- ../slots/has_or_had_auxiliary_entities
- ../slots/place_name - ../slots/place_name
- ../slots/place_language - ../slots/place_language
- ../slots/place_specificity - ../slots/place_specificity
@ -65,7 +67,9 @@ classes:
- prov:Entity - prov:Entity
- crm:E27_Site - crm:E27_Site
slots: slots:
- auxiliary_places # MIGRATED from auxiliary_places to has_or_had_auxiliary_entities (Rule 53)
# - auxiliary_places
- has_or_had_auxiliary_entities
- country - country
- has_feature_type - has_feature_type
- has_geospatial_location - has_geospatial_location
@ -171,7 +175,11 @@ classes:
has_accuracy_in_meters: 50.0 has_accuracy_in_meters: 50.0
spatial_resolution: NEIGHBORHOOD spatial_resolution: NEIGHBORHOOD
description: Approximate location from neighborhood reference description: Approximate location from neighborhood reference
has_auxiliary_place: # MIGRATED from auxiliary_places / has_auxiliary_place (Rule 53)
has_or_had_auxiliary_entities:
description: |
MIGRATED from auxiliary_places (Rule 53).
Subordinate or auxiliary locations associated with this custodian place.
range: AuxiliaryPlace range: AuxiliaryPlace
multivalued: true multivalued: true
inlined_as_list: true inlined_as_list: true
@ -211,7 +219,7 @@ classes:
- Link to GeoSpatialPlace via has_geospatial_location slot (TOOI pattern) - Link to GeoSpatialPlace via has_geospatial_location slot (TOOI pattern)
- Can be vague ('the mansion') or specific ('het museum op het Museumplein 1') - Can be vague ('the mansion') or specific ('het museum op het Museumplein 1')
- Historical place names capture how custodians were referenced in archival documents - Historical place names capture how custodians were referenced in archival documents
- 'NEW: auxiliary_places links to subordinate AuxiliaryPlace sites (depots, branches, labs)' - 'MIGRATED: auxiliary_places → has_or_had_auxiliary_entities for AuxiliaryPlace sites (depots, branches, labs)'
- Hierarchical pattern mirrors CustodianName → CustodianAppellation relationship - Hierarchical pattern mirrors CustodianName → CustodianAppellation relationship
see_also: see_also:
- http://www.cidoc-crm.org/html/cidoc_crm_v7.1.3.html#E53 - http://www.cidoc-crm.org/html/cidoc_crm_v7.1.3.html#E53

View file

@ -18,7 +18,10 @@ imports:
- ../enums/DataTierEnum - ../enums/DataTierEnum
- ../enums/DatePrecisionEnum - ../enums/DatePrecisionEnum
- ../enums/TimelineExtractionMethodEnum - ../enums/TimelineExtractionMethodEnum
- ../slots/approximate # REMOVED - migrated to is_or_was_approximate (Rule 53)
# - ../slots/approximate
- ../slots/is_or_was_approximate
- ./ApproximationStatus
- ../slots/has_archive_path - ../slots/has_archive_path
- ../slots/data_tier - ../slots/data_tier
- ../slots/date_precision - ../slots/date_precision
@ -53,8 +56,8 @@ classes:
\ Scope decrease (ingekrompen)\n- REORGANIZATION: Complex restructuring (herstructurering)\n\n**EXCLUDED EVENT TYPES**\n\ \ Scope decrease (ingekrompen)\n- REORGANIZATION: Complex restructuring (herstructurering)\n\n**EXCLUDED EVENT TYPES**\n\
\nSome patterns are NOT mapped to events:\n- predecessor: This is a relationship, not an event\n- friends_org: Separate\ \nSome patterns are NOT mapped to events:\n- predecessor: This is a relationship, not an event\n- friends_org: Separate\
\ organization (Vrienden van...)\n- reopening: Not in OrganizationalChangeEventTypeEnum\n\n**EXAMPLE USAGE**\n\n```yaml\n\ \ organization (Vrienden van...)\n- reopening: Not in OrganizationalChangeEventTypeEnum\n\n**EXAMPLE USAGE**\n\n```yaml\n\
timeline_events:\n - event_type: FOUNDING\n event_date: \"2005-04-30\"\n date_precision: day\n approximate:\ timeline_events:\n - event_type: FOUNDING\n event_date: \"2005-04-30\"\n date_precision: day\n is_or_was_approximate:\n\
\ false\n description: >-\n Het RHC Drents Archief werd opgericht op 30 april 2005.\n Het is de voortzetting\ \ approximation_level: EXACT\n description: >-\n Het RHC Drents Archief werd opgericht op 30 april 2005.\n Het is de voortzetting\
\ van het Rijksarchief in Drenthe (sinds 2000).\n source_url:\n - \"https://nl.wikipedia.org/wiki/Drents_Archief\"\ \ van het Rijksarchief in Drenthe (sinds 2000).\n source_url:\n - \"https://nl.wikipedia.org/wiki/Drents_Archief\"\
\n - \"https://bizzy.ai/nl/nl/52454037/regionaal-historisch-centrum-rhc-drents-archief\"\n extraction_method:\ \n - \"https://bizzy.ai/nl/nl/52454037/regionaal-historisch-centrum-rhc-drents-archief\"\n extraction_method:\
\ api_response_regex\n extraction_timestamp: \"2025-12-16T10:00:00Z\"\n extraction_notes: >-\n Query: \"\ \ api_response_regex\n extraction_timestamp: \"2025-12-16T10:00:00Z\"\n extraction_notes: >-\n Query: \"\
@ -67,7 +70,9 @@ classes:
- tooi:Wijzigingsgebeurtenis - tooi:Wijzigingsgebeurtenis
- schema:Event - schema:Event
slots: slots:
- approximate # REMOVED - migrated to is_or_was_approximate (Rule 53)
# - approximate
- is_or_was_approximate
- archive_path - archive_path
- data_tier - data_tier
- date_precision - date_precision
@ -88,8 +93,26 @@ classes:
required: false required: false
date_precision: date_precision:
required: true required: true
is_approximate: # REMOVED - migrated to is_or_was_approximate (Rule 53)
# is_approximate:
# required: true
is_or_was_approximate:
range: ApproximationStatus
inlined: true
required: true required: true
description: >-
Whether the event date is approximate or uncertain.
MIGRATED from approximate (Rule 53) - changed from boolean to
ApproximationStatus class for structured uncertainty modeling.
examples:
- value:
approximation_level: EXACT
description: Exact date known
- value:
approximation_level: APPROXIMATE
has_or_had_label: "circa 1880"
has_or_had_description: "Founding date known only to year"
description: Approximate date with explanation
description: description:
required: true required: true
source_url: source_url:
@ -134,7 +157,8 @@ classes:
event_type: FOUNDING event_type: FOUNDING
event_date: '2005-04-30' event_date: '2005-04-30'
date_precision: day date_precision: day
approximate: false is_or_was_approximate:
approximation_level: EXACT
description: Het RHC Drents Archief werd opgericht op 30 april 2005. description: Het RHC Drents Archief werd opgericht op 30 april 2005.
source_url: source_url:
- https://nl.wikipedia.org/wiki/Drents_Archief - https://nl.wikipedia.org/wiki/Drents_Archief
@ -148,7 +172,8 @@ classes:
event_type: MERGER event_type: MERGER
event_date: '2005' event_date: '2005'
date_precision: year date_precision: year
approximate: false is_or_was_approximate:
approximation_level: EXACT
description: In 2005 ging het Gemeentearchief Assen op in het Drents Archief. description: In 2005 ging het Gemeentearchief Assen op in het Drents Archief.
source_url: source_url:
- https://nl.wikipedia.org/wiki/Drents_Archief - https://nl.wikipedia.org/wiki/Drents_Archief
@ -160,7 +185,8 @@ classes:
event_type: FOUNDING event_type: FOUNDING
event_date: '1810' event_date: '1810'
date_precision: year date_precision: year
approximate: false is_or_was_approximate:
approximation_level: EXACT
description: The Rijksmuseum was founded in 1810 as the Royal Museum. description: The Rijksmuseum was founded in 1810 as the Royal Museum.
source_url: source_url:
- https://www.wikidata.org/wiki/Q190804 - https://www.wikidata.org/wiki/Q190804
@ -173,7 +199,8 @@ classes:
event_type: TRANSFER event_type: TRANSFER
event_date: '1885' event_date: '1885'
date_precision: year date_precision: year
approximate: false is_or_was_approximate:
approximation_level: EXACT
description: The Rijksmuseum moved to its current building designed by Cuypers. description: The Rijksmuseum moved to its current building designed by Cuypers.
source_url: source_url:
- https://www.rijksmuseum.nl/en/about-us/what-we-do/history - https://www.rijksmuseum.nl/en/about-us/what-we-do/history
@ -183,3 +210,16 @@ classes:
archive_path: web/0001/rijksmuseum.nl/about-us/rendered.html archive_path: web/0001/rijksmuseum.nl/about-us/rendered.html
data_tier: TIER_2_VERIFIED data_tier: TIER_2_VERIFIED
description: Relocation event from institutional website description: Relocation event from institutional website
- value:
event_type: FOUNDING
event_date: '1880'
date_precision: year
is_or_was_approximate:
approximation_level: APPROXIMATE
has_or_had_label: "circa 1880"
has_or_had_description: "Founding date derived from secondary sources, exact year uncertain"
description: Museum founded around 1880, exact date unknown.
extraction_method: manual_research
extraction_timestamp: '2025-12-20T16:00:00Z'
data_tier: TIER_4_INFERRED
description: Founding event with approximate date

View file

@ -0,0 +1,148 @@
# Description class
# Generic class for typed descriptions with language support
#
# Generation date: 2026-01-15
# Rule compliance: 0 (LinkML single source of truth), 38 (slot centralization), 53 (slot_fixes.yaml authoritative)
# Migration: Supports has_or_had_description slot (replaces binding_description, branch_description, etc.)
#
# This class supports 11 slot migrations per slot_fixes.yaml:
# - binding_description
# - branch_description
# - branch_office_description
# - budget_description
# - zone_description
# - warehouse_description
# - unit_description
# - type_description
# - treatment_description (partial)
# - transfer_location_text (partial)
# - transfer_location (partial)
id: https://nde.nl/ontology/hc/class/Description
name: description_class
title: Description Class
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
skos: http://www.w3.org/2004/02/skos/core#
rdfs: http://www.w3.org/2000/01/rdf-schema#
schema: http://schema.org/
dcterms: http://purl.org/dc/terms/
default_prefix: hc
imports:
- linkml:types
- ../metadata
- ../slots/description_text
- ../slots/description_type
- ../slots/language
- ../slots/specificity_annotation
- ../slots/template_specificity
- ./SpecificityAnnotation
- ./TemplateSpecificityScores
classes:
Description:
class_uri: dcterms:description
description: |
A typed description with optional language tagging and type metadata.
**Purpose**:
Description provides a reusable class for representing textual descriptions
across the heritage custodian schema. Supports typed descriptions (binding,
branch, budget, zone, etc.) with language tagging.
**Ontological Alignment**:
- **Primary**: `dcterms:description` - Dublin Core description
- **Close**: `skos:definition` - formal definition
- **Related**: `schema:description` - Schema.org description
**Use Cases**:
- Binding descriptions for physical carriers
- Branch/office descriptions for organizational units
- Budget descriptions for financial records
- Zone/warehouse descriptions for storage facilities
- Type descriptions for classification explanations
**Replaces** (per slot_fixes.yaml):
- `binding_description` (string)
- `branch_description` (string)
- `branch_office_description` (string)
- `budget_description` (string)
- `zone_description` (string)
- `warehouse_description` (string)
- `unit_description` (string)
- `type_description` (string)
exact_mappings:
- dcterms:description
close_mappings:
- skos:definition
- rdfs:comment
related_mappings:
- schema:description
slots:
- description_text
- description_type
- language
- specificity_annotation
- template_specificity
slot_usage:
description_text:
description: |
The textual content of the description.
range: string
required: true
description_type:
description: |
The type of description (binding, branch, budget, zone, warehouse, unit, type, general).
This allows distinguishing different kinds of descriptions when multiple
apply to the same entity.
range: string
required: false
examples:
- value: binding
description: Physical binding description
- value: branch
description: Organizational branch description
- value: budget
description: Budget category description
- value: zone
description: Storage zone description
language:
description: |
ISO 639-1 two-letter language code for this description.
Examples: "en", "nl", "de", "fr"
range: string
required: false
pattern: "^[a-z]{2}$"
annotations:
custodian_types: '["*"]'
custodian_types_rationale: Generic description class applicable to all custodian types.
custodian_types_primary: null
specificity_score: 0.2
specificity_rationale: Very broadly applicable generic class for textual descriptions.
examples:
- value: |
description_text: "Climate-controlled storage zone with dedicated HVAC for archival materials. Maintains 65°F and 35% RH."
description_type: zone
language: en
description: "Zone description for archival storage facility"
- value: |
description_text: "Quarter leather binding with marbled boards, spine with five raised bands and gilt titling."
description_type: binding
language: en
description: "Binding description for a rare book"
- value: |
description_text: "Regional branch serving Noord-Holland province with specialized genealogy and notarial collections."
description_type: branch
language: en
description: "Branch description for organizational unit"

View file

@ -16,7 +16,9 @@ imports:
- ./SearchAPI - ./SearchAPI
- ./METSAPI - ./METSAPI
- ./DataServiceEndpointTypes - ./DataServiceEndpointTypes
- ../slots/auxiliary_platforms # REMOVED - migrated to has_or_had_auxiliary_entities with range AuxiliaryDigitalPlatform (Rule 53)
# - ../slots/auxiliary_platforms
- ../slots/has_or_had_auxiliary_entities
- ../slots/has_or_had_powered_by_cm - ../slots/has_or_had_powered_by_cm
- ../slots/has_or_had_access_restriction - ../slots/has_or_had_access_restriction
- ../slots/preservation_level - ../slots/preservation_level
@ -103,7 +105,9 @@ classes:
slots: slots:
- has_or_had_access_restriction - has_or_had_access_restriction
- has_or_had_api_endpoint - has_or_had_api_endpoint
- auxiliary_platforms # MIGRATED from auxiliary_platforms to has_or_had_auxiliary_entities (Rule 53)
# - auxiliary_platforms
- has_or_had_auxiliary_entities
- collection_web_address - collection_web_address
- has_or_had_data_service_endpoint - has_or_had_data_service_endpoint
- fixity_check_date - fixity_check_date
@ -241,7 +245,11 @@ classes:
description: Open to all users description: Open to all users
- value: API key required - value: API key required
description: Developer registration needed description: Developer registration needed
has_auxiliary_platform: # MIGRATED from auxiliary_platforms / has_auxiliary_platform (Rule 53)
has_or_had_auxiliary_entities:
description: |
MIGRATED from auxiliary_platforms (Rule 53).
Subordinate or auxiliary digital platforms associated with this platform.
range: AuxiliaryDigitalPlatform range: AuxiliaryDigitalPlatform
multivalued: true multivalued: true
inlined_as_list: true inlined_as_list: true
@ -326,7 +334,7 @@ classes:
- 'Multivalued on Custodian: one custodian can have multiple platforms (website + API + mobile app)' - 'Multivalued on Custodian: one custodian can have multiple platforms (website + API + mobile app)'
- Temporal validity tracks platform lifecycle (launch, shutdown, migration) - Temporal validity tracks platform lifecycle (launch, shutdown, migration)
- IIIF and linked data flags enable discovery of interoperable platforms - IIIF and linked data flags enable discovery of interoperable platforms
- 'NEW: auxiliary_platforms links to subordinate AuxiliaryDigitalPlatform sites (project portals, microsites, APIs)' - 'MIGRATED: auxiliary_platforms → has_or_had_auxiliary_entities for AuxiliaryDigitalPlatform sites (project portals, microsites, APIs)'
- Hierarchical pattern mirrors CustodianName → CustodianAppellation relationship - Hierarchical pattern mirrors CustodianName → CustodianAppellation relationship
see_also: see_also:
- https://schema.org/WebSite - https://schema.org/WebSite

View file

@ -8,7 +8,7 @@ imports:
- ./ReconstructionActivity - ./ReconstructionActivity
- ../enums/EducationProviderTypeEnum - ../enums/EducationProviderTypeEnum
- ../slots/has_or_had_accessibility_feature - ../slots/has_or_had_accessibility_feature
- ../slots/annual_participants # REMOVED 2026-01-15: ../slots/annual_participants - migrated to has_or_had_annual_participant_count
# REMOVED 2026-01-15: ../slots/booking_required - migrated to is_or_was_required # REMOVED 2026-01-15: ../slots/booking_required - migrated to is_or_was_required
- ../slots/is_or_was_required - ../slots/is_or_was_required
- ../slots/classroom_count - ../slots/classroom_count
@ -79,7 +79,8 @@ classes:
- schema:Course - schema:Course
slots: slots:
- has_or_had_accessibility_feature - has_or_had_accessibility_feature
- annual_participants # REMOVED 2026-01-15: annual_participants - migrated to has_or_had_annual_participant_count
- has_or_had_annual_participant_count
# REMOVED 2026-01-15: booking_required - migrated to is_or_was_required # REMOVED 2026-01-15: booking_required - migrated to is_or_was_required
- is_or_was_required - is_or_was_required
- classroom_count - classroom_count
@ -255,7 +256,7 @@ classes:
has_or_had_accessibility_feature: has_or_had_accessibility_feature:
- Wheelchair accessible - Wheelchair accessible
- Hearing loop - Hearing loop
annual_participants: 75000 has_or_had_annual_participant_count: 75000
staff_count: 12 staff_count: 12
is_or_was_required: true is_or_was_required: true
education_contact_email: educatie@rijksmuseum.nl education_contact_email: educatie@rijksmuseum.nl

View file

@ -44,38 +44,46 @@ imports:
classes: classes:
EnvironmentalZone: EnvironmentalZone:
class_uri: hc:EnvironmentalZone class_uri: hc:EnvironmentalZone
description: "A climate-controlled area within a storage facility with specific\nenvironmental parameters (temperature,\ description: >-
\ relative humidity, light levels,\nair quality).\n\n**DEFINITION**:\n\nAn EnvironmentalZone represents a physically\ A climate-controlled area within a storage facility with specific
\ distinct area within a\nstorage facility that maintains specific environmental conditions.\nDifferent collection types\ environmental parameters (temperature, relative humidity, light levels,
\ require different zones based on their\nmaterial composition and preservation requirements.\n\nExamples include:\n\ air quality).
- Climate-controlled archive rooms (18°C, 50% RH)\n- Cold storage vaults for film (-5°C to +4°C)\n- Photographic materials\
\ storage (15°C, 35% RH)\n- Textile storage (stable RH, low light)\n- General collection storage (ambient controlled)\n\ DEFINITION:
\n**Wikidata Alignment**:\n- Q1759899 (climate control)\n\n**HC Ontology Extension (hc-storage.ttl)**:\n\nPrimary class:\ An EnvironmentalZone represents a physically distinct area within a
\ `hc:EnvironmentalZone` (subclass of `crm:E27_Site`)\n\nThe HC ontology provides environmental preset instances:\n\ storage facility that maintains specific environmental conditions.
- `hc:StandardArchiveEnvironment` - 18°C, 50% RH, 50 lux\n- `hc:PhotographicMaterialsEnvironment` - 15°C, 35% RH\n-\ Different collection types require different zones based on their
\ `hc:ColdStorageEnvironment` - -5°C, 30% RH\n- `hc:TextileStorageEnvironment` - 18°C, 50% RH, 15000 lux-hours/year\n\ material composition and preservation requirements.
\nKey HC properties for zones:\n- `hc:hasStorageSection` - Links zone to storage units\n- `hc:hasEnvironmentalRequirement`\
\ - Links to climate specs\n- `hc:meetsRequirement` - Indicates compliance\n- `hc:hasEnvironmentalObservation` - Links\ Examples include climate-controlled archive rooms (18C, 50% RH),
\ to sensor readings\n- `hc:monitoredByPlatform` - Links to sensor systems\n\n**SOSA/SSN Integration**:\n\nEnvironmental\ cold storage vaults for film (-5C to +4C), photographic materials
\ zones can be monitored using sensor networks:\n- Zone is a `sosa:FeatureOfInterest`\n- Observations are `hc:StorageEnvironmentObservation`\n\ storage (15C, 35% RH), textile storage (stable RH, low light),
- Sensors are hosted on `hc:EnvironmentalSensorPlatform`\n\nSee: `frontend/public/ontology/hc-storage.ttl`\n\n**CIDOC-CRM\ and general collection storage (ambient controlled).
\ Alignment (v7.1.3)**:\n\nBase class: `crm:E27_Site` - Zones are physical locations.\n\nHierarchy:\n```\nStorageFacility\
\ (hc:StorageFacility)\n └── P59 has_section → EnvironmentalZone (hc:EnvironmentalZone)\n ├── hc:hasEnvironmentalRequirement\ Wikidata Alignment: Q1759899 (climate control).
\ → EnvironmentalRequirement\n ├── hc:hasEnvironmentalObservation → StorageEnvironmentObservation[]\n \
\ └── P59 has_section → StorageUnit[]\n```\n\n**RELATIONSHIP TO OTHER CLASSES**:\n\n```\nStorage (facility)\n │\n \ HC Ontology Extension (hc-storage.ttl):
\ └── has_section → EnvironmentalZone[] (THIS CLASS)\n │\n ├── has_or_had_type (EnvironmentalZoneType - class\ Primary class hc:EnvironmentalZone (subclass of crm:E27_Site).
\ hierarchy)\n ├── environmental_requirement → StorageConditionPolicy\n ├── observations → StorageCondition[]\n\ Provides environmental preset instances including
\ ├── monitoring_platform (sensor system info)\n │\n └── has_section → StorageUnit[]\n \ hc:StandardArchiveEnvironment (18C, 50% RH, 50 lux),
\ └── stores_objects → HeritageObject[]\n```\n\n**ENVIRONMENTAL STANDARDS REFERENCE**:\n\n| Material Type | Temperature\ hc:PhotographicMaterialsEnvironment (15C, 35% RH),
\ | RH | Light | Standard |\n|---------------|------------|-----|-------|----------|\n| Paper/archives | 16-20°C | 45-55%\ hc:ColdStorageEnvironment (-5C, 30% RH),
\ | <50 lux | ISO 11799 |\n| Photographs | 10-18°C | 30-40% | <50 lux | ISO 18934 |\n| Film (B&W) | -5°C | 30% | dark\ hc:TextileStorageEnvironment (18C, 50% RH, 15000 lux-hours/year).
\ | ISO 18911 |\n| Film (color) | -20°C | 30% | dark | ISO 18911 |\n| Textiles | 15-20°C | 45-55% | <50 lux | varies\
\ |\n| Metals | 15-25°C | <35% | varies | varies |\n\n**USE CASES**:\n\n1. **Standard Archive Zone**:\n - zone_type:\ Key HC properties: hc:hasStorageSection (links zone to storage units),
\ ARCHIVE_STANDARD\n - target_temperature: 18°C\n - target_humidity: 50%\n - max_light: 50 lux\n - environmental_requirement:\ hc:hasEnvironmentalRequirement (links to climate specs),
\ hc:StandardArchiveEnvironment\n \n2. **Cold Storage Vault**:\n - zone_type: COLD_STORAGE\n - target_temperature:\ hc:meetsRequirement (indicates compliance),
\ -5°C\n - target_humidity: 30%\n - environmental_requirement: hc:ColdStorageEnvironment\n \n3. **Photographic\ hc:hasEnvironmentalObservation (links to sensor readings),
\ Materials Zone**:\n - zone_type: PHOTOGRAPHIC\n - target_temperature: 15°C\n - target_humidity: 35%\n - max_light:\ hc:monitoredByPlatform (links to sensor systems).
\ 50 lux\n"
SOSA/SSN Integration: Environmental zones can be monitored using
sensor networks where Zone is a sosa:FeatureOfInterest,
Observations are hc:StorageEnvironmentObservation, and
Sensors are hosted on hc:EnvironmentalSensorPlatform.
CIDOC-CRM Alignment (v7.1.3): Base class crm:E27_Site - Zones are
physical locations. StorageFacility has_section EnvironmentalZone
which has_section StorageUnit.
exact_mappings: exact_mappings:
- hc:EnvironmentalZone - hc:EnvironmentalZone
- crm:E27_Site - crm:E27_Site

View file

@ -45,7 +45,8 @@ imports:
- ../slots/specificity_annotation - ../slots/specificity_annotation
- ../slots/template_specificity - ../slots/template_specificity
- ../slots/traveling_venue - ../slots/traveling_venue
- ../slots/visitor_count - ../slots/has_or_had_quantity
- ./Quantity
- ./SpecificityAnnotation - ./SpecificityAnnotation
- ./TemplateSpecificityScores - ./TemplateSpecificityScores
default_prefix: hc default_prefix: hc
@ -72,7 +73,7 @@ classes:
\ for CIDOC-CRM\n fuzzy temporal modeling (begin_of_the_begin, end_of_the_end, etc.)\n\n**Example**:\n\nThe \"Vermeer\"\ \ for CIDOC-CRM\n fuzzy temporal modeling (begin_of_the_begin, end_of_the_end, etc.)\n\n**Example**:\n\nThe \"Vermeer\"\
\ exhibition at Rijksmuseum (Feb 10 - Jun 4, 2023):\n- exhibition_id: https://nde.nl/ontology/hc/exhibition/rijksmuseum-vermeer-2023\n\ \ exhibition at Rijksmuseum (Feb 10 - Jun 4, 2023):\n- exhibition_id: https://nde.nl/ontology/hc/exhibition/rijksmuseum-vermeer-2023\n\
- exhibition_name: \"Vermeer\"\n- organized_by: [Rijksmuseum, Mauritshuis] (joint organization)\n- start_date: 2023-02-10\n\ - exhibition_name: \"Vermeer\"\n- organized_by: [Rijksmuseum, Mauritshuis] (joint organization)\n- start_date: 2023-02-10\n\
- end_date: 2023-06-04\n- exhibition_type: BLOCKBUSTER\n- visitor_count: 650000\n- featured_objects: [Girl with a Pearl\ - end_date: 2023-06-04\n- exhibition_type: BLOCKBUSTER\n- has_or_had_quantity: (visitor count)\n- featured_objects: [Girl with a Pearl\
\ Earring, The Milkmaid, View of Delft]\n- exhibition_catalogs: [Vermeer (2023) catalog]\n" \ Earring, The Milkmaid, View of Delft]\n- exhibition_catalogs: [Vermeer (2023) catalog]\n"
exact_mappings: exact_mappings:
- schema:ExhibitionEvent - schema:ExhibitionEvent
@ -108,7 +109,7 @@ classes:
- start_date - start_date
- template_specificity - template_specificity
- traveling_venue - traveling_venue
- visitor_count - has_or_had_quantity
- wikidata_id - wikidata_id
slot_usage: slot_usage:
exhibition_id: exhibition_id:
@ -213,12 +214,25 @@ classes:
range: EventStatusEnum range: EventStatusEnum
examples: examples:
- value: COMPLETED - value: COMPLETED
visitor_count: has_or_had_quantity:
required: false required: false
range: integer range: Quantity
inlined: true
description: >-
Visitor count for the exhibition. RULE 53: Replaces deprecated
visitor_count integer slot with structured Quantity class.
examples: examples:
- value: 650000 - value:
description: Vermeer exhibition attendance quantity_value: 650000
quantity_type: VISITOR_COUNT
has_or_had_measurement_unit:
unit_type: VISITOR
unit_symbol: "visitors"
temporal_extent:
begin_of_the_begin: "2023-02-10T00:00:00Z"
end_of_the_end: "2023-06-04T23:59:59Z"
has_or_had_description: Vermeer exhibition attendance
description: Exhibition visitor count with temporal extent
exhibition_url: exhibition_url:
required: false required: false
range: uri range: uri
@ -290,7 +304,7 @@ classes:
- Links to ExhibitedObject via featured_objects for typed object references - Links to ExhibitedObject via featured_objects for typed object references
- Links to ExhibitionCatalog via exhibition_catalogs for publication metadata - Links to ExhibitionCatalog via exhibition_catalogs for publication metadata
- Use exhibition_type to categorize (permanent, temporary, traveling, etc.) - Use exhibition_type to categorize (permanent, temporary, traveling, etc.)
- visitor_count tracks attendance for completed exhibitions - RULE 53: has_or_had_quantity replaces deprecated visitor_count for attendance
- featured_works (string) retained for backward compatibility; prefer featured_objects - featured_works (string) retained for backward compatibility; prefer featured_objects
see_also: see_also:
- https://schema.org/ExhibitionEvent - https://schema.org/ExhibitionEvent
@ -324,7 +338,16 @@ classes:
country: NL country: NL
exhibition_venue: Philips Wing exhibition_venue: Philips Wing
exhibition_status: COMPLETED exhibition_status: COMPLETED
visitor_count: 650000 has_or_had_quantity:
quantity_value: 650000
quantity_type: VISITOR_COUNT
has_or_had_measurement_unit:
unit_type: VISITOR
unit_symbol: "visitors"
temporal_extent:
begin_of_the_begin: "2023-02-10T00:00:00Z"
end_of_the_end: "2023-06-04T23:59:59Z"
has_or_had_description: Vermeer exhibition attendance
exhibition_url: https://www.rijksmuseum.nl/nl/vermeer exhibition_url: https://www.rijksmuseum.nl/nl/vermeer
has_or_had_featured_object: has_or_had_featured_object:
- https://nde.nl/ontology/hc/object/mauritshuis-girl-pearl-earring - https://nde.nl/ontology/hc/object/mauritshuis-girl-pearl-earring

View file

@ -20,7 +20,10 @@ imports:
- ../slots/isbn - ../slots/isbn
- ../slots/language - ../slots/language
- ../slots/price - ../slots/price
- ../slots/authors # REMOVED - migrated to has_or_had_author (Rule 53)
# - ../slots/authors
- ../slots/has_or_had_author
- ./Author
# REMOVED: ../slots/binding - Use has_or_had_type with BindingType instead (2026-01-15) # REMOVED: ../slots/binding - Use has_or_had_type with BindingType instead (2026-01-15)
- ../slots/has_or_had_type - ../slots/has_or_had_type
- ./BindingType - ./BindingType
@ -51,7 +54,7 @@ imports:
- ../slots/worldcat_id - ../slots/worldcat_id
- ./SpecificityAnnotation - ./SpecificityAnnotation
- ./TemplateSpecificityScores - ./TemplateSpecificityScores
- ../slots/has_author # REMOVED: ../slots/has_author - migrated to has_or_had_author (Rule 53)
default_prefix: hc default_prefix: hc
classes: classes:
ExhibitionCatalog: ExhibitionCatalog:
@ -80,7 +83,8 @@ classes:
- bf:Instance - bf:Instance
- bibo:Book - bibo:Book
slots: slots:
- authors # REMOVED: authors - migrated to has_or_had_author (Rule 53)
- has_or_had_author
# REMOVED: binding - Use has_or_had_type with BindingType instead (2026-01-15) # REMOVED: binding - Use has_or_had_type with BindingType instead (2026-01-15)
- has_or_had_type - has_or_had_type
- catalog_description - catalog_description
@ -146,13 +150,28 @@ classes:
examples: examples:
- value: PRINT_CATALOG - value: PRINT_CATALOG
- value: DIGITAL_CATALOG - value: DIGITAL_CATALOG
has_author: has_or_had_author:
description: >-
Authors of the exhibition catalog.
MIGRATED from authors/has_author slots (Rule 53).
Uses Author class for structured authorship data including
name, role (author/editor/translator), affiliation, and identifiers.
required: false required: false
range: string range: Author
inlined: true
multivalued: true multivalued: true
examples: examples:
- value: Pieter Roelofs - value: |
- value: Gregor J.M. Weber author_name: Pieter Roelofs
author_role: AUTHOR
author_affiliation: Rijksmuseum Amsterdam
description: Primary author with affiliation
- value: |
author_name: Gregor J.M. Weber
author_role: AUTHOR
author_identifier: https://orcid.org/0000-0002-1234-5678
description: Author with ORCID identifier
editor: editor:
required: false required: false
range: string range: string
@ -340,9 +359,13 @@ classes:
catalog_title: Vermeer catalog_title: Vermeer
catalog_for: https://nde.nl/ontology/hc/exhibition/rijksmuseum-vermeer-2023 catalog_for: https://nde.nl/ontology/hc/exhibition/rijksmuseum-vermeer-2023
catalog_type: PRINT_CATALOG catalog_type: PRINT_CATALOG
has_author: has_or_had_author:
- Pieter Roelofs - author_name: Pieter Roelofs
- Gregor J.M. Weber author_role: AUTHOR
author_affiliation: Rijksmuseum Amsterdam
- author_name: Gregor J.M. Weber
author_role: AUTHOR
author_affiliation: Rijksmuseum Amsterdam
editor: editor:
- Pieter Roelofs - Pieter Roelofs
publisher: Rijksmuseum / Hannibal Publishing publisher: Rijksmuseum / Hannibal Publishing

View file

@ -0,0 +1,73 @@
# ExternalWork - External work/services accepted by an institution
# Created per slot_fixes.yaml migration for: accepts_or_accepted_external_work
# Creation date: 2026-01-14
id: https://nde.nl/ontology/hc/classes/ExternalWork
name: ExternalWork
title: ExternalWork
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
imports:
- linkml:types
default_range: string
classes:
ExternalWork:
description: >-
External work or services that an institution accepts or commissions.
**EXAMPLES**:
- Conservation work from external specialists
- Digitization services
- Research collaborations
- Restoration projects
Used with `accepts_or_accepted` slot to indicate what types of
external work an institution will accept or commission.
class_uri: schema:Service
close_mappings:
- schema:Offer
attributes:
work_type:
range: string
required: true
description: >-
Type of external work (e.g., "conservation", "digitization", "restoration").
description:
range: string
description: >-
Description of the external work type.
requirements:
range: string
multivalued: true
description: >-
Requirements or qualifications for external work providers.
annotations:
custodian_types: '["M", "A", "L", "G"]'
custodian_types_rationale: >-
External work primarily relevant for museums, archives, libraries, galleries.
custodian_types_primary: "M"
specificity_score: 0.7
specificity_rationale: >-
High specificity - specific to service acceptance policies.
examples:
- value: |
ExternalWork:
work_type: "conservation"
description: "Paper and textile conservation services"
requirements:
- "Certified conservator"
- "Portfolio of previous work"
description: Conservation work accepted by archive.

View file

@ -20,7 +20,8 @@ imports:
- ../slots/extraction_confidence - ../slots/extraction_confidence
- ../slots/extraction_note - ../slots/extraction_note
- ../slots/observed_in - ../slots/observed_in
- ../slots/applies_to_call # REMOVED 2026-01-15: ../slots/applies_to_call - migrated to applies_or_applied_to_call
- ../slots/applies_or_applied_to_call
- ../slots/is_mandatory - ../slots/is_mandatory
- ../slots/requirement_id - ../slots/requirement_id
- ../slots/requirement_text - ../slots/requirement_text
@ -95,7 +96,8 @@ classes:
- schema:eligibleQuantity - schema:eligibleQuantity
- prov:wasDerivedFrom - prov:wasDerivedFrom
slots: slots:
- applies_to_call # REMOVED 2026-01-15: applies_to_call - migrated to applies_or_applied_to_call
- applies_or_applied_to_call
- extraction_confidence - extraction_confidence
- extraction_note - extraction_note
- is_mandatory - is_mandatory
@ -240,7 +242,7 @@ classes:
requirement_value: '3' requirement_value: '3'
requirement_unit: partners requirement_unit: partners
is_mandatory: true is_mandatory: true
applies_to_call: https://nde.nl/ontology/hc/call/ec/cl2-2025-heritage-01 applies_or_applied_to_call: https://nde.nl/ontology/hc/call/ec/cl2-2025-heritage-01
observed_in: https://nde.nl/ontology/hc/observation/web/2025-11-29/eu-horizon-cl2-heritage observed_in: https://nde.nl/ontology/hc/observation/web/2025-11-29/eu-horizon-cl2-heritage
source_section: Section 2 - Eligibility Conditions source_section: Section 2 - Eligibility Conditions
extraction_confidence: 0.98 extraction_confidence: 0.98
@ -254,7 +256,7 @@ classes:
requirement_value: '30' requirement_value: '30'
requirement_unit: percent requirement_unit: percent
is_mandatory: true is_mandatory: true
applies_to_call: https://nde.nl/ontology/hc/call/ec/cl2-2025-heritage-01 applies_or_applied_to_call: https://nde.nl/ontology/hc/call/ec/cl2-2025-heritage-01
observed_in: https://nde.nl/ontology/hc/observation/web/2025-11-29/eu-horizon-cl2-heritage observed_in: https://nde.nl/ontology/hc/observation/web/2025-11-29/eu-horizon-cl2-heritage
source_section: Section 3 - Financial Conditions source_section: Section 3 - Financial Conditions
extraction_confidence: 0.95 extraction_confidence: 0.95
@ -268,7 +270,7 @@ classes:
requirement_value: immediate requirement_value: immediate
requirement_unit: null requirement_unit: null
is_mandatory: true is_mandatory: true
applies_to_call: https://nde.nl/ontology/hc/call/ec/cl2-2025-heritage-01 applies_or_applied_to_call: https://nde.nl/ontology/hc/call/ec/cl2-2025-heritage-01
observed_in: https://nde.nl/ontology/hc/observation/web/2025-11-29/eu-horizon-cl2-heritage observed_in: https://nde.nl/ontology/hc/observation/web/2025-11-29/eu-horizon-cl2-heritage
source_section: Section 4.2 - Open Science source_section: Section 4.2 - Open Science
extraction_confidence: 0.99 extraction_confidence: 0.99
@ -282,7 +284,7 @@ classes:
requirement_value: UK requirement_value: UK
requirement_unit: country requirement_unit: country
is_mandatory: true is_mandatory: true
applies_to_call: https://nde.nl/ontology/hc/call/nlhf/medium-grants-2025-q4 applies_or_applied_to_call: https://nde.nl/ontology/hc/call/nlhf/medium-grants-2025-q4
observed_in: https://nde.nl/ontology/hc/observation/web/2025-11-28/nlhf-medium-grants observed_in: https://nde.nl/ontology/hc/observation/web/2025-11-28/nlhf-medium-grants
source_section: Eligibility source_section: Eligibility
extraction_confidence: 0.99 extraction_confidence: 0.99
@ -296,7 +298,7 @@ classes:
requirement_value: non-profit requirement_value: non-profit
requirement_unit: organization-type requirement_unit: organization-type
is_mandatory: true is_mandatory: true
applies_to_call: https://nde.nl/ontology/hc/call/nlhf/medium-grants-2025-q4 applies_or_applied_to_call: https://nde.nl/ontology/hc/call/nlhf/medium-grants-2025-q4
observed_in: https://nde.nl/ontology/hc/observation/web/2025-11-28/nlhf-medium-grants observed_in: https://nde.nl/ontology/hc/observation/web/2025-11-28/nlhf-medium-grants
source_section: Who can apply source_section: Who can apply
extraction_confidence: 0.95 extraction_confidence: 0.95

View file

@ -34,7 +34,10 @@ imports:
- ../slots/temporal_extent - ../slots/temporal_extent
- ../slots/valid_from - ../slots/valid_from
- ../slots/valid_to - ../slots/valid_to
- ../slots/visitor_conversion_rate - ../slots/has_or_had_conversion_rate
- ./ConversionRate
- ./ConversionRateType
- ./ConversionRateTypes
- ../slots/was_derived_from - ../slots/was_derived_from
- ../slots/was_generated_by - ../slots/was_generated_by
- ./SpecificityAnnotation - ./SpecificityAnnotation
@ -125,7 +128,7 @@ classes:
- temporal_extent - temporal_extent
- valid_from - valid_from
- valid_to - valid_to
- visitor_conversion_rate - has_or_had_conversion_rate
- was_derived_from - was_derived_from
- was_generated_by - was_generated_by
slot_usage: slot_usage:
@ -232,12 +235,22 @@ classes:
examples: examples:
- value: EUR 5,000,000 - value: EUR 5,000,000
description: Annual revenue in euros description: Annual revenue in euros
visitor_conversion_rate: has_or_had_conversion_rate:
range: float range: ConversionRate
inlined: true
multivalued: true
required: false required: false
description: Conversion rate metrics for the gift shop (visitor-to-purchase, visitor-to-member, etc.)
examples: examples:
- value: 0.35 - value: |
description: 35% conversion rate has_or_had_conversion_rate:
- rate_value: 0.35
has_or_had_type:
type_label: "Visitor to Purchase"
temporal_extent:
begin_of_the_begin: "2024-01-01"
end_of_the_end: "2024-12-31"
description: 35% visitor-to-purchase conversion rate for calendar year
staff_count: staff_count:
range: integer range: integer
required: false required: false

View file

@ -6,10 +6,12 @@ imports:
- ./ReconstructedEntity - ./ReconstructedEntity
- ./CustodianObservation - ./CustodianObservation
- ./ReconstructionActivity - ./ReconstructionActivity
- ./Area
- ../enums/FeatureTypeEnum - ../enums/FeatureTypeEnum
- ../slots/has_or_had_architect - ../slots/has_or_had_architect
- ../slots/has_architectural_style - ../slots/has_architectural_style
- ../slots/building_floor_area_sqm # REMOVED 2026-01-15: ../slots/building_floor_area_sqm - migrated to has_or_had_area + Area (Rule 53)
- ../slots/has_or_had_area
- ../slots/complex_name - ../slots/complex_name
- ../slots/condition_status - ../slots/condition_status
- ../slots/construction_date - ../slots/construction_date
@ -78,7 +80,7 @@ classes:
slots: slots:
- has_or_had_architect - has_or_had_architect
- has_architectural_style - has_architectural_style
- building_floor_area_sqm - has_or_had_area
- complex_name - complex_name
- condition_status - condition_status
- construction_date - construction_date
@ -207,11 +209,30 @@ classes:
description: Monastery complex description: Monastery complex
- value: Paleis Het Loo ensemble - value: Paleis Het Loo ensemble
description: Palace complex description: Palace complex
building_floor_area_sqm: has_or_had_area:
range: float description: >-
Floor area of the historic building.
MIGRATED from building_floor_area_sqm (Rule 53).
range: Area
inlined: true
multivalued: true
examples: examples:
- value: 450.0 - value:
description: Building floor area area_value: 450.0
has_or_had_unit:
unit_type: SQUARE_METER
unit_symbol: "m²"
has_or_had_label: "Building floor area"
description: 450 square meters floor area
- value:
area_value: 1200.0
has_or_had_unit:
unit_type: SQUARE_METER
unit_symbol: "m²"
is_estimate: true
measurement_method: "Historical records"
has_or_had_label: "Total floor area"
description: 1200 square meters (estimated from historical records)
current_use: current_use:
range: string range: string
examples: examples:
@ -239,6 +260,7 @@ classes:
- Links to FeatureTypeEnum for Wikidata-sourced building classification - Links to FeatureTypeEnum for Wikidata-sourced building classification
- Distinguished from CustodianPlace (main headquarters) - Distinguished from CustodianPlace (main headquarters)
- May be open to public or used for operations/events - May be open to public or used for operations/events
- "MIGRATION NOTE: has_or_had_area replaced building_floor_area_sqm (Rule 53)"
see_also: see_also:
- http://vocab.getty.edu/aat/300005425 - http://vocab.getty.edu/aat/300005425
- https://schema.org/LandmarksOrHistoricalBuildings - https://schema.org/LandmarksOrHistoricalBuildings
@ -252,12 +274,18 @@ classes:
feature_type_classification: HISTORIC_HOUSE_MUSEUM feature_type_classification: HISTORIC_HOUSE_MUSEUM
construction_date: '1650' construction_date: '1650'
construction_date_precision: APPROXIMATE construction_date_precision: APPROXIMATE
architectural_style: Dutch Golden Age has_architectural_style: Dutch Golden Age
heritage_status: Rijksmonument heritage_status: Rijksmonument
monument_number: '16284' monument_number: '16284'
is_open_to_public: false is_open_to_public: false
current_use: Administrative offices and events current_use: Administrative offices and events
condition_status: EXCELLENT condition_status: EXCELLENT
has_or_had_area:
- area_value: 450.0
has_or_had_unit:
unit_type: SQUARE_METER
unit_symbol: "m²"
has_or_had_label: "Total floor area"
description: Historic canal house as secondary property description: Historic canal house as secondary property
- value: - value:
historic_building_id: https://nde.nl/ontology/hc/aux/kasteel-amerongen historic_building_id: https://nde.nl/ontology/hc/aux/kasteel-amerongen
@ -266,14 +294,21 @@ classes:
feature_type_classification: CASTLE feature_type_classification: CASTLE
construction_date: 13th century construction_date: 13th century
construction_date_precision: CENTURY construction_date_precision: CENTURY
architectural_style: Dutch Classical has_architectural_style: Dutch Classical
architect: Maurits Post has_or_had_architect: Maurits Post
heritage_status: Rijksmonument heritage_status: Rijksmonument
monument_number: '521814' monument_number: '521814'
is_open_to_public: true is_open_to_public: true
visiting_hours: Tu-Su 11:00-17:00 visiting_hour: Tu-Su 11:00-17:00
is_part_of_complex: true is_part_of_complex: true
complex_name: Kasteel Amerongen landgoed complex_name: Kasteel Amerongen landgoed
current_use: Museum and events current_use: Museum and events
condition_status: GOOD condition_status: GOOD
has_or_had_area:
- area_value: 2500.0
has_or_had_unit:
unit_type: SQUARE_METER
unit_symbol: "m²"
is_estimate: true
has_or_had_label: "Castle floor area"
description: Castle as heritage property description: Castle as heritage property

View file

@ -0,0 +1,133 @@
# Hypothesis - A hypothesis or assertion about uncertain data (e.g., institution type)
# Created per slot_fixes.yaml migration for: type_hypothesis
# Creation date: 2026-01-14
id: https://nde.nl/ontology/hc/classes/Hypothesis
name: Hypothesis
title: Hypothesis
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
prov: http://www.w3.org/ns/prov#
skos: http://www.w3.org/2004/02/skos/core#
schema: http://schema.org/
imports:
- linkml:types
default_range: string
classes:
Hypothesis:
description: >-
A hypothesis or working assertion about uncertain or ambiguous data.
**USE CASE**: Institution Type Hypotheses
When an institution's type cannot be definitively determined, multiple
type hypotheses can be recorded with supporting/contradicting evidence
and confidence levels.
**STRUCTURE**:
- Asserted value (the hypothesis)
- Confidence level
- Supporting evidence
- Contradicting evidence
- Alternative interpretations
**ONTOLOGY MAPPING**:
- class_uri: skos:Concept (the hypothesis is a conceptual assertion)
- Related to prov:Entity (what is being hypothesized about)
class_uri: skos:Concept
close_mappings:
- prov:Entity
- schema:Claim
related_mappings:
- skos:note
attributes:
asserted_value:
range: string
required: true
description: >-
The hypothesized value or assertion.
Example: "MUSEUM", "ARCHIVE", "COLLECTING_SOCIETY"
confidence_level:
range: string
description: >-
Qualitative confidence level for this hypothesis.
Values: "high", "medium", "low", "very_low"
confidence_score:
range: float
minimum_value: 0.0
maximum_value: 1.0
description: >-
Numeric confidence score (0.0 to 1.0) for this hypothesis.
supporting_evidence:
range: string
multivalued: true
description: >-
Evidence supporting this hypothesis.
Example: "Uses term 'exhibitions' in description"
contradicting_evidence:
range: string
multivalued: true
description: >-
Evidence contradicting this hypothesis.
Example: "No physical location mentioned"
alternative_interpretation:
range: string
description: >-
Alternative interpretation of the same evidence.
Example: "Could also be interpreted as gallery based on art focus"
note:
range: string
slot_uri: skos:note
description: >-
General notes about this hypothesis.
annotations:
custodian_types: '["U"]'
custodian_types_rationale: >-
Hypotheses are primarily used for Unknown (U) type institutions
where the type is ambiguous and needs research to resolve.
custodian_types_primary: "U"
specificity_score: 0.8
specificity_rationale: >-
High specificity - only relevant for uncertain/ambiguous data.
examples:
- value: |
Hypothesis:
asserted_value: "MUSEUM"
confidence_level: "medium"
confidence_score: 0.65
supporting_evidence:
- "Website mentions 'exhibitions'"
- "Has physical visitor address"
contradicting_evidence:
- "No collection catalog found"
alternative_interpretation: "Could be a gallery with temporary shows"
description: >-
Type hypothesis suggesting institution is a museum.
- value: |
Hypothesis:
asserted_value: "COLLECTING_SOCIETY"
confidence_level: "high"
confidence_score: 0.85
supporting_evidence:
- "Name contains 'Historische Vereniging'"
- "Membership-based organization"
- "Maintains local archive"
description: >-
High-confidence hypothesis for a collecting society.

View file

@ -33,7 +33,8 @@ imports:
- ../slots/technical_specification - ../slots/technical_specification
- ../slots/template_specificity - ../slots/template_specificity
- ../slots/temporal_extent - ../slots/temporal_extent
- ../slots/update_frequency - ../slots/has_or_had_frequency
- ./UpdateFrequency
- ../slots/was_derived_from - ../slots/was_derived_from
- ../slots/was_generated_by - ../slots/was_generated_by
- ./SpecificityAnnotation - ./SpecificityAnnotation
@ -115,7 +116,7 @@ classes:
- technical_specification - technical_specification
- template_specificity - template_specificity
- temporal_extent - temporal_extent
- update_frequency - has_or_had_frequency
- was_derived_from - was_derived_from
- was_generated_by - was_generated_by
slot_usage: slot_usage:
@ -222,12 +223,26 @@ classes:
examples: examples:
- value: JSON - value: JSON
description: JSON data format description: JSON data format
update_frequency: has_or_had_frequency:
range: string range: UpdateFrequency
inlined: true
description: >-
How often the device sends data/updates, represented as a structured
UpdateFrequency instance with quantity and time interval components.
examples: examples:
- value: Every 5 minutes - value: |
has_or_had_frequency:
frequency_description: "Every 5 minutes"
has_or_had_quantity:
numeric_value: 5
has_or_had_time_interval:
duration_value: "PT1M"
description: Climate sensor update frequency description: Climate sensor update frequency
- value: On proximity trigger - value: |
has_or_had_frequency:
frequency_description: "On proximity trigger"
is_event_driven: true
trigger_type: "proximity"
description: Beacon trigger frequency description: Beacon trigger frequency
installed_at_place: installed_at_place:
range: CustodianPlace range: CustodianPlace
@ -321,7 +336,13 @@ classes:
publishes_to: https://dashboard.rijksmuseum.nl/climate publishes_to: https://dashboard.rijksmuseum.nl/climate
api_endpoint: https://api.rijksmuseum.nl/climate/v1/ api_endpoint: https://api.rijksmuseum.nl/climate/v1/
data_format: JSON data_format: JSON
update_frequency: Every 5 minutes has_or_had_frequency:
frequency_description: "Every 5 minutes"
has_or_had_quantity:
numeric_value: 5
has_or_had_time_interval:
duration_value: "PT1M"
duration_description: "minute"
installation_date: '2020-01-15' installation_date: '2020-01-15'
operational_status: ACTIVE operational_status: ACTIVE
maintenance_schedule: Quarterly calibration maintenance_schedule: Quarterly calibration

View file

@ -0,0 +1,98 @@
# Location class
# Generic geographic location representation
#
# Generation date: 2026-01-15
# Rule compliance: 0 (LinkML single source of truth), 38 (slot centralization)
#
# Generic location class for use by TransferEvent and other location-referencing entities
id: https://nde.nl/ontology/hc/class/Location
name: location_class
title: Location Class
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
locn: http://www.w3.org/ns/locn#
wgs84: http://www.w3.org/2003/01/geo/wgs84_pos#
default_prefix: hc
imports:
- linkml:types
- ../metadata
- ../slots/location_name
- ../slots/latitude
- ../slots/longitude
- ../slots/specificity_annotation
- ../slots/template_specificity
- ./SpecificityAnnotation
- ./TemplateSpecificityScores
classes:
Location:
class_uri: schema:Place
description: |
Generic geographic location representation.
**Purpose**:
Location provides a reusable class for representing geographic
locations with name and optional coordinates.
**Ontological Alignment**:
- **Primary**: `schema:Place` - Schema.org Place
- **Exact**: `locn:Location` - LOCN (W3C Location) location
- **Related**: `wgs84:Point` - WGS84 geo point (for coordinates)
**Use Cases**:
- Transfer event locations (origin/destination)
- Institution physical locations
- Collection storage locations
exact_mappings:
- locn:Location
related_mappings:
- wgs84:Point
slots:
- location_name
- latitude
- longitude
- specificity_annotation
- template_specificity
slot_usage:
location_name:
description: |
Human-readable name of the location.
range: string
required: true
latitude:
description: |
WGS84 latitude coordinate.
range: float
required: false
longitude:
description: |
WGS84 longitude coordinate.
range: float
required: false
annotations:
custodian_types: '["*"]'
custodian_types_rationale: Locations apply to all heritage custodian types.
custodian_types_primary: null
specificity_score: 0.2
specificity_rationale: Generic location class applicable across all contexts.
examples:
- value: |
location_name: "Rijksmuseum Amsterdam"
latitude: 52.3600
longitude: 4.8852
description: "Location with coordinates"
- value: |
location_name: "Noord-Hollands Archief, Haarlem"
description: "Location with name only"

View file

@ -0,0 +1,133 @@
id: https://nde.nl/ontology/hc/class/measure-unit
name: measure_unit_class
title: MeasureUnit Class
description: >-
Class representing a unit of measurement for quantities.
**RULE 53 COMPLIANT**: Generic class for standardized unit representation,
used by Area, Quantity, and other measurement classes.
**ONTOLOGY ALIGNMENT**:
- QUDT (Quantities, Units, Dimensions and Types)
- schema:unitCode / schema:unitText
- OM (Ontology of Units of Measure)
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
qudt: http://qudt.org/schema/qudt/
om: http://www.ontology-of-units-of-measure.org/resource/om-2/
imports:
- linkml:types
- ../enums/MeasureUnitEnum
- ../slots/has_or_had_label
default_prefix: hc
classes:
MeasureUnit:
description: >-
A unit of measurement for expressing quantities.
Captures the unit type (from MeasureUnitEnum), symbol, and optional
conversion factors. Used as the range for has_or_had_unit slot.
**EXAMPLES**:
- Hectare (ha) for outdoor site area
- Square meter (m²) for building floor area
- Linear meter (m) for archival shelf extent
class_uri: qudt:Unit
exact_mappings:
- qudt:Unit
- om:Unit
close_mappings:
- schema:unitCode
slots:
- unit_type
- unit_symbol
- unit_code
- has_or_had_label
slot_usage:
unit_type:
description: >-
The type of unit from MeasureUnitEnum (e.g., HECTARE, SQUARE_METER).
range: MeasureUnitEnum
required: true
unit_symbol:
description: >-
The symbol for the unit (e.g., "ha", "m²", "km").
range: string
required: false
examples:
- value: "ha"
description: Hectare symbol
- value: "m²"
description: Square meter symbol
- value: "m"
description: Meter symbol
unit_code:
description: >-
Standard code for the unit (UCUM or QUDT code).
range: string
required: false
examples:
- value: "har"
description: UCUM code for hectare
- value: "m2"
description: UCUM code for square meter
has_or_had_label:
description: >-
Human-readable label for the unit.
range: string
examples:
- value: "hectare"
description: Hectare label
- value: "square meter"
description: Square meter label
examples:
- value:
unit_type: HECTARE
unit_symbol: "ha"
unit_code: "har"
has_or_had_label: "hectare"
description: Hectare unit for outdoor site area
- value:
unit_type: SQUARE_METER
unit_symbol: "m²"
unit_code: "m2"
has_or_had_label: "square meter"
description: Square meter unit for building floor area
- value:
unit_type: LINEAR_METER
unit_symbol: "m"
unit_code: "m"
has_or_had_label: "linear meter"
description: Linear meter for archival shelf extent
annotations:
custodian_types: '["*"]'
custodian_types_rationale: >-
Measurement units applicable to all heritage custodian types.
specificity_score: 0.3
specificity_rationale: >-
Foundational class - highly reusable across many contexts.
slots:
unit_type:
description: >-
The enumerated type of measurement unit.
range: MeasureUnitEnum
slot_uri: qudt:unit
unit_symbol:
description: >-
The symbol representing the unit (e.g., "ha", "m²").
range: string
slot_uri: qudt:symbol
unit_code:
description: >-
Standard code for the unit from UCUM or QUDT vocabularies.
range: string
slot_uri: qudt:ucumCode

View file

@ -0,0 +1,212 @@
id: https://nde.nl/ontology/hc/class/Methodology
name: methodology_class
title: Methodology Class
description: >-
Defines the methodology or technique used to derive a measurement or observation.
**RULE 53 COMPLIANT**: Created for unique_object_count and unique_face_count
migration per slot_fixes.yaml revision (lines 1951-1994).
**PROV-O ALIGNMENT**:
Maps to `prov:Plan` - "A plan is an entity that represents a set of actions or
steps intended by one or more agents to achieve some goals."
In the PROV-O data model, a Plan describes HOW an activity was performed.
Methodology extends this to describe HOW a measurement was derived.
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
prov: http://www.w3.org/ns/prov#
schema: http://schema.org/
dcterms: http://purl.org/dc/terms/
imports:
- linkml:types
- ../slots/has_or_had_identifier
- ../slots/has_or_had_label
- ../slots/has_or_had_description
- ../slots/specificity_annotation
- ../slots/template_specificity
- ./SpecificityAnnotation
- ./TemplateSpecificityScores
- ../enums/MethodologyTypeEnum
default_prefix: hc
classes:
Methodology:
class_uri: prov:Plan
description: >-
Describes the methodology, technique, or algorithm used to derive a measurement.
**PROV-O ALIGNMENT**:
Maps to `prov:Plan` which represents "a set of actions or steps intended by
one or more agents to achieve some goals." In measurement contexts, this
describes HOW a value was computed or derived.
**WHY METHODOLOGY MATTERS**:
Two measurements of "unique objects" could use different methodologies:
| Methodology | Description | Accuracy |
|-------------|-------------|----------|
| ENTITY_RESOLUTION | Deduplication via feature matching | High |
| TRACKING | Object tracking across frames | Medium |
| MANUAL_COUNT | Human counting | Variable |
| SAMPLING | Statistical sampling | Estimated |
Without methodology, two measurements cannot be meaningfully compared.
**HERITAGE USE CASES**:
- **Video annotation**: How unique faces/objects were counted (entity resolution)
- **Collection inventories**: How item counts were derived (physical vs. digital)
- **Visitor statistics**: How attendance was measured (counters, tickets, samples)
- **Digitization metrics**: How completeness was assessed
**EXAMPLE**:
```yaml
has_or_had_methodology:
methodology_type: ENTITY_RESOLUTION
has_or_had_label: "RetinaFace + ArcFace clustering"
has_or_had_description: >-
Faces detected using RetinaFace model, then clustered
using ArcFace embeddings with cosine similarity threshold 0.6
to identify unique individuals.
```
exact_mappings:
- prov:Plan
close_mappings:
- schema:HowToStep
related_mappings:
- dcterms:methodology
slots:
- has_or_had_identifier
- methodology_type
- has_or_had_label
- has_or_had_description
- algorithm_name
- algorithm_version
- confidence_threshold
- specificity_annotation
- template_specificity
slot_usage:
has_or_had_identifier:
range: uriorcurie
required: false
identifier: true
description: >-
Optional identifier for this methodology specification.
examples:
- value: https://nde.nl/ontology/hc/methodology/retinaface-arcface-v1
description: Face clustering methodology identifier
methodology_type:
range: MethodologyTypeEnum
required: false
description: >-
The type of methodology used.
examples:
- value: ENTITY_RESOLUTION
description: Deduplication via feature matching
- value: OBJECT_TRACKING
description: Multi-object tracking across frames
has_or_had_label:
range: string
required: false
description: >-
Human-readable name for the methodology.
examples:
- value: "RetinaFace + ArcFace clustering"
description: Face detection and clustering pipeline
has_or_had_description:
range: string
required: false
description: >-
Detailed description of the methodology.
examples:
- value: "Faces detected using RetinaFace, clustered using ArcFace embeddings"
description: Algorithm description
algorithm_name:
range: string
required: false
description: >-
Name of the algorithm or model used.
examples:
- value: "YOLOv8"
description: Object detection model
- value: "ArcFace"
description: Face recognition model
algorithm_version:
range: string
required: false
description: >-
Version of the algorithm or model.
examples:
- value: "1.0.0"
- value: "v8n"
confidence_threshold:
range: float
required: false
minimum_value: 0.0
maximum_value: 1.0
description: >-
Confidence threshold used for detection/classification.
examples:
- value: 0.6
description: 60% confidence threshold for face matching
comments:
- Describes HOW a measurement was derived
- Essential for comparing measurements from different sources
- Maps to PROV-O Plan for provenance tracking
- Rule 53 compliant - supports unique_object_count/unique_face_count migration
see_also:
- https://www.w3.org/TR/prov-o/#Plan
examples:
- value:
methodology_type: ENTITY_RESOLUTION
has_or_had_label: "RetinaFace + ArcFace clustering"
has_or_had_description: >-
Faces detected using RetinaFace model, then clustered
using ArcFace embeddings with cosine similarity threshold 0.6.
algorithm_name: "ArcFace"
confidence_threshold: 0.6
description: Face entity resolution methodology
- value:
methodology_type: OBJECT_TRACKING
has_or_had_label: "DeepSORT multi-object tracking"
has_or_had_description: >-
Objects tracked across video frames using DeepSORT algorithm
with Kalman filtering and appearance features.
algorithm_name: "DeepSORT"
algorithm_version: "1.0"
description: Object tracking methodology
slots:
methodology_type:
description: >-
The type of methodology used for measurement derivation.
range: MethodologyTypeEnum
slot_uri: hc:methodologyType
algorithm_name:
description: >-
Name of the algorithm, model, or technique used.
range: string
slot_uri: hc:algorithmName
algorithm_version:
description: >-
Version identifier for the algorithm or model.
range: string
slot_uri: hc:algorithmVersion
confidence_threshold:
description: >-
Confidence threshold used for detection, matching, or classification.
range: float
slot_uri: hc:confidenceThreshold

View file

@ -15,8 +15,8 @@ prefixes:
imports: imports:
- linkml:types - linkml:types
- ../slots/has_or_had_quantity
- ./Quantity
- ./MuseumRegisterProvenance - ./MuseumRegisterProvenance
default_range: string default_range: string
@ -75,8 +75,13 @@ classes:
range: string range: string
multivalued: true multivalued: true
inlined_as_list: true inlined_as_list: true
visitor_count: has_or_had_quantity:
range: integer range: Quantity
inlined: true
description: >-
Visitor count from museum register. RULE 53: Replaces deprecated
visitor_count integer with structured Quantity class supporting
measurement unit (VISITOR) and temporal extent.
accreditation_status: accreditation_status:
range: string range: string
manual_correction: manual_correction:

View file

@ -16,7 +16,8 @@ imports:
- ./CustodianType - ./CustodianType
- ../slots/geographic_scope - ../slots/geographic_scope
- ../enums/NonProfitCustodianTypeEnum - ../enums/NonProfitCustodianTypeEnum
- ../slots/beneficiary_group # REMOVED 2026-01-15: ../slots/beneficiary_group - migrated to has_or_had_beneficiary
- ../slots/has_or_had_beneficiary
- ../slots/has_or_had_custodian_type - ../slots/has_or_had_custodian_type
- ../slots/impact_measurement - ../slots/impact_measurement
- ../slots/nonprofit_subtype - ../slots/nonprofit_subtype
@ -193,7 +194,7 @@ classes:
\ a schema:NGO, foaf:Organization, crm:E74_Group, hc:NonProfitOrganization ;\n hc:custodian_type hc:NonProfitType\ \ a schema:NGO, foaf:Organization, crm:E74_Group, hc:NonProfitOrganization ;\n hc:custodian_type hc:NonProfitType\
\ ;\n hc:organizational_mission \"Heritage advocacy, Awareness campaigns, Policy influence\" ;\n hc:program_activities\ \ ;\n hc:organizational_mission \"Heritage advocacy, Awareness campaigns, Policy influence\" ;\n hc:program_activities\
\ \"7 Most Endangered Programme\", \"European Heritage Awards\", \"Advocacy campaigns\" ;\n hc:geographic_scope \"\ \ \"7 Most Endangered Programme\", \"European Heritage Awards\", \"Advocacy campaigns\" ;\n hc:geographic_scope \"\
Pan-European\", \"50+ countries\", \"300+ member organizations\" ;\n hc:beneficiary_groups \"Heritage organizations\"\ Pan-European\", \"50+ countries\", \"300+ member organizations\" ;\n hc:has_or_had_beneficiary \"Heritage organizations\"\
, \"Local communities\", \"Policy makers\", \"General public\" ;\n hc:partnership_model \"Membership network\", \"\ , \"Local communities\", \"Policy makers\", \"General public\" ;\n hc:partnership_model \"Membership network\", \"\
Co-funded programs\", \"Coalition building\" ;\n hc:impact_measurement \"Sites saved from demolition\", \"Policy changes\ Co-funded programs\", \"Coalition building\" ;\n hc:impact_measurement \"Sites saved from demolition\", \"Policy changes\
\ achieved\", \"Public awareness metrics\" ;\n schema:name \"Europa Nostra\" ;\n schema:foundingDate \"1963\" ;\n\ \ achieved\", \"Public awareness metrics\" ;\n schema:name \"Europa Nostra\" ;\n schema:foundingDate \"1963\" ;\n\
@ -212,7 +213,7 @@ classes:
- schema:EducationalOrganization - schema:EducationalOrganization
- schema:FundingAgency - schema:FundingAgency
slots: slots:
- beneficiary_group - has_or_had_beneficiary
- has_or_had_custodian_type - has_or_had_custodian_type
- geographic_scope - geographic_scope
- impact_measurement - impact_measurement
@ -253,7 +254,7 @@ classes:
description: International NGO scope description: International NGO scope
- value: National (Netherlands), 500 members - value: National (Netherlands), 500 members
description: National NGO scope description: National NGO scope
beneficiary_group: has_or_had_beneficiary:
range: string range: string
multivalued: true multivalued: true
required: true required: true

View file

@ -13,7 +13,8 @@ imports:
- ./BranchType - ./BranchType
- ../slots/located_at - ../slots/located_at
- ../slots/has_or_had_description - ../slots/has_or_had_description
- ../slots/branch_head - ../slots/has_or_had_head
# REMOVED: ../slots/branch_head - MIGRATED to has_or_had_head (2026-01-14) per Rule 53
- ../slots/has_or_had_identifier - ../slots/has_or_had_identifier
- ../slots/has_or_had_label - ../slots/has_or_had_label
- ../slots/has_or_had_type - ../slots/has_or_had_type
@ -85,7 +86,8 @@ classes:
- schema:department - schema:department
slots: slots:
- has_or_had_description - has_or_had_description
- branch_head - has_or_had_head
# REMOVED: branch_head - MIGRATED to has_or_had_head (2026-01-14) per Rule 53
- has_or_had_identifier - has_or_had_identifier
- has_or_had_label - has_or_had_label
- has_or_had_type - has_or_had_type
@ -206,11 +208,21 @@ classes:
- value: - value:
has_or_had_label: Schiphol Terminal 2 Kiosk has_or_had_label: Schiphol Terminal 2 Kiosk
description: Sub-branch of Schiphol exhibition description: Sub-branch of Schiphol exhibition
branch_head: has_or_had_head:
range: string range: Person
description: >-
Person who heads or headed this organizational branch.
MIGRATED from branch_head (2026-01-14) per Rule 53.
Uses W3C ORG pattern - inverse of org:headOf.
Can reference Person entity or be inline PersonObservation.
examples: examples:
- value: Dr. Maria van der Berg - value: https://nde.nl/ontology/hc/person/dr-maria-van-der-berg
description: Branch director name description: Branch director reference
- value:
full_name: Dr. Maria van der Berg
role: Branch Director
description: Inline person observation
staff_count: staff_count:
range: integer range: integer
examples: examples:

View file

@ -6,6 +6,7 @@ imports:
- ./ReconstructedEntity - ./ReconstructedEntity
- ./CustodianObservation - ./CustodianObservation
- ./ReconstructionActivity - ./ReconstructionActivity
- ./Area
- ../enums/BioCustodianTypeEnum - ../enums/BioCustodianTypeEnum
- ../enums/FeatureTypeEnum - ../enums/FeatureTypeEnum
- ../enums/OutdoorSiteTypeEnum - ../enums/OutdoorSiteTypeEnum
@ -15,7 +16,9 @@ imports:
- ../slots/outdoor_site_type - ../slots/outdoor_site_type
- ../slots/bio_type_classification - ../slots/bio_type_classification
- ../slots/feature_type_classification - ../slots/feature_type_classification
- ../slots/area_hectares # REMOVED 2026-01-15: ../slots/area_hectares - migrated to has_or_had_area + Area (Rule 53)
# REMOVED 2026-01-15: ../slots/has_area_in_hectare - BESPOKE SLOT INCORRECTLY CREATED, replaced with has_or_had_area + Area (Rule 53)
- ../slots/has_or_had_area
- ../slots/has_or_had_artwork_count - ../slots/has_or_had_artwork_count
- ../slots/plant_species_count - ../slots/plant_species_count
- ../slots/has_or_had_animal_species_count - ../slots/has_or_had_animal_species_count
@ -63,8 +66,8 @@ classes:
\ ruins\n4. **Botanical Collections**: Arboreta, plant collections\n5. **Nature Reserves**: Managed natural areas\n\ \ ruins\n4. **Botanical Collections**: Arboreta, plant collections\n5. **Nature Reserves**: Managed natural areas\n\
6. **Castle/Estate Grounds**: Historic landscape parks\n7. **Cemeteries**: Historic burial grounds\n\n**USE CASES**:\n\ 6. **Castle/Estate Grounds**: Historic landscape parks\n7. **Cemeteries**: Historic burial grounds\n\n**USE CASES**:\n\
\n1. **Museum Sculpture Garden**:\n ```yaml\n OutdoorSite:\n outdoor_site_id: \"https://nde.nl/ontology/hc/aux/kroller-muller-sculpture\"\ \n1. **Museum Sculpture Garden**:\n ```yaml\n OutdoorSite:\n outdoor_site_id: \"https://nde.nl/ontology/hc/aux/kroller-muller-sculpture\"\
\n outdoor_site_name: \"Kröller-Müller Beeldentuin\"\n feature_type_classification: SCULPTURE_GARDEN\n area_hectares:\ \n outdoor_site_name: \"Kröller-Müller Beeldentuin\"\n feature_type_classification: SCULPTURE_GARDEN\n has_or_had_area:\
\ 25\n artwork_count: 160\n ```\n\n2. **Historic Estate Grounds**:\n ```yaml\n OutdoorSite:\n outdoor_site_name:\ \n - area_value: 25.0\n has_or_had_unit:\n unit_type: HECTARE\n unit_symbol: \"ha\"\n has_or_had_artwork_count: 160\n ```\n\n2. **Historic Estate Grounds**:\n ```yaml\n OutdoorSite:\n outdoor_site_name:\
\ \"Paleis Het Loo Tuinen\"\n bio_type_classification: GARDEN\n feature_type_classification: FORMAL_GARDEN\n\ \ \"Paleis Het Loo Tuinen\"\n bio_type_classification: GARDEN\n feature_type_classification: FORMAL_GARDEN\n\
\ historic_garden_designation: true\n ```\n\n3. **Archaeological Site**:\n ```yaml\n OutdoorSite:\n outdoor_site_name:\ \ historic_garden_designation: true\n ```\n\n3. **Archaeological Site**:\n ```yaml\n OutdoorSite:\n outdoor_site_name:\
\ \"Archeologisch Park Matilo\"\n feature_type_classification: ARCHAEOLOGICAL_SITE\n period_covered: \"Roman\ \ \"Archeologisch Park Matilo\"\n feature_type_classification: ARCHAEOLOGICAL_SITE\n period_covered: \"Roman\
@ -83,7 +86,7 @@ classes:
- has_or_had_accessibility_feature - has_or_had_accessibility_feature
- has_or_had_admission_fee - has_or_had_admission_fee
- has_or_had_animal_species_count - has_or_had_animal_species_count
- area_hectares - has_or_had_area
- has_or_had_artwork_count - has_or_had_artwork_count
- bio_type_classification - bio_type_classification
- conservation_status - conservation_status
@ -150,11 +153,29 @@ classes:
description: Sculpture garden description: Sculpture garden
- value: ARCHAEOLOGICAL_SITE - value: ARCHAEOLOGICAL_SITE
description: Archaeological site description: Archaeological site
has_area_in_hectare: has_or_had_area:
range: float description: >-
Area of the outdoor site.
MIGRATED from area_hectares and has_area_in_hectare (Rule 53).
range: Area
inlined: true
multivalued: true
examples: examples:
- value: 25.0 - value:
description: 25 hectares area_value: 25.0
has_or_had_unit:
unit_type: HECTARE
unit_symbol: "ha"
has_or_had_label: "Sculpture garden area"
description: 25 hectares sculpture garden
- value:
area_value: 650.0
has_or_had_unit:
unit_type: HECTARE
unit_symbol: "ha"
is_estimate: true
has_or_had_label: "Estate grounds"
description: 650 hectares historic estate (estimated)
has_or_had_artwork_count: has_or_had_artwork_count:
range: integer range: integer
examples: examples:
@ -228,6 +249,7 @@ classes:
- Links to BOTH BioCustodianTypeEnum AND FeatureTypeEnum - Links to BOTH BioCustodianTypeEnum AND FeatureTypeEnum
- BioCustodianTypeEnum for botanical/zoo classifications - BioCustodianTypeEnum for botanical/zoo classifications
- FeatureTypeEnum for landscape/archaeological features - FeatureTypeEnum for landscape/archaeological features
- "MIGRATION NOTE: has_or_had_area replaced area_hectares and has_area_in_hectare (Rule 53)"
see_also: see_also:
- https://schema.org/Park - https://schema.org/Park
- https://www.wikidata.org/wiki/Q22698 - https://www.wikidata.org/wiki/Q22698
@ -240,11 +262,16 @@ classes:
National Park. National Park.
outdoor_site_type: SCULPTURE_GARDEN outdoor_site_type: SCULPTURE_GARDEN
feature_type_classification: SCULPTURE_GARDEN feature_type_classification: SCULPTURE_GARDEN
area_hectares: 25.0 has_or_had_area:
artwork_count: 160 - area_value: 25.0
has_or_had_unit:
unit_type: HECTARE
unit_symbol: "ha"
has_or_had_label: "Total site area"
has_or_had_artwork_count: 160
is_open_to_public: true is_open_to_public: true
admission_fee: Included with museum ticket has_or_had_admission_fee: Included with museum ticket
opening_hours: Tu-Su 10:00-17:00 opening_hour: Tu-Su 10:00-17:00
has_or_had_accessibility_feature: has_or_had_accessibility_feature:
- Paved paths - Paved paths
- Wheelchair routes available - Wheelchair routes available
@ -255,10 +282,16 @@ classes:
outdoor_site_description: Formal baroque gardens restored to 17th-century design. Part of royal palace complex. outdoor_site_description: Formal baroque gardens restored to 17th-century design. Part of royal palace complex.
outdoor_site_type: FORMAL_GARDEN outdoor_site_type: FORMAL_GARDEN
bio_type_classification: GARDEN bio_type_classification: GARDEN
area_hectares: 650.0 has_or_had_area:
- area_value: 650.0
has_or_had_unit:
unit_type: HECTARE
unit_symbol: "ha"
is_estimate: true
has_or_had_label: "Estate grounds"
is_open_to_public: true is_open_to_public: true
admission_fee: Included with palace ticket has_or_had_admission_fee: Included with palace ticket
seasonal_hours: Summer 10:00-18:00; Winter 10:00-16:00 seasonal_hour: Summer 10:00-18:00; Winter 10:00-16:00
historic_garden_designation: true historic_garden_designation: true
description: Historic palace gardens description: Historic palace gardens
- value: - value:
@ -267,8 +300,13 @@ classes:
outdoor_site_description: Archaeological park on site of Roman fort Matilo with reconstructed structures. outdoor_site_description: Archaeological park on site of Roman fort Matilo with reconstructed structures.
outdoor_site_type: ARCHAEOLOGICAL_SITE outdoor_site_type: ARCHAEOLOGICAL_SITE
feature_type_classification: ARCHAEOLOGICAL_SITE feature_type_classification: ARCHAEOLOGICAL_SITE
area_hectares: 3.5 has_or_had_area:
- area_value: 3.5
has_or_had_unit:
unit_type: HECTARE
unit_symbol: "ha"
has_or_had_label: "Archaeological park area"
is_open_to_public: true is_open_to_public: true
admission_fee: Free has_or_had_admission_fee: Free
period_covered: Roman period (50-400 CE) period_covered: Roman period (50-400 CE)
description: Roman archaeological park description: Roman archaeological park

View file

@ -0,0 +1,73 @@
# PaymentMethod - Payment methods accepted by an institution
# Created per slot_fixes.yaml migration for: accepts_or_accepted_payment_method
# Creation date: 2026-01-14
id: https://nde.nl/ontology/hc/classes/PaymentMethod
name: PaymentMethod
title: PaymentMethod
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
imports:
- linkml:types
default_range: string
classes:
PaymentMethod:
description: >-
A payment method accepted by an institution for tickets, services, or purchases.
**EXAMPLES**:
- Credit cards (Visa, Mastercard, Amex)
- Debit cards (Maestro, V-Pay)
- Digital payments (iDEAL, Apple Pay, Google Pay)
- Cash
- Museum passes (Museumkaart, etc.)
Used with `accepts_or_accepted` slot to indicate payment options.
class_uri: schema:PaymentMethod
attributes:
method_type:
range: string
required: true
description: >-
Type of payment method (e.g., "credit_card", "debit_card", "digital", "cash").
provider:
range: string
description: >-
Payment provider or brand (e.g., "Visa", "iDEAL", "Apple Pay").
note:
range: string
description: >-
Additional notes about this payment method.
annotations:
custodian_types: '["M", "G", "B", "H"]'
custodian_types_rationale: >-
Payment methods primarily relevant for visitor-facing institutions.
custodian_types_primary: "M"
specificity_score: 0.6
specificity_rationale: >-
Moderate-high specificity - specific to ticketing/commerce.
examples:
- value: |
PaymentMethod:
method_type: "credit_card"
provider: "Visa"
description: Visa credit card payment.
- value: |
PaymentMethod:
method_type: "digital"
provider: "iDEAL"
note: "Dutch bank transfer system"
description: iDEAL digital payment method.

View file

@ -17,8 +17,14 @@ imports:
- ../slots/id - ../slots/id
- ../slots/person_name - ../slots/person_name
- ../slots/has_person_name - ../slots/has_person_name
- ../slots/birth_date # REMOVED - migrated to has_or_had_date_of_birth (Rule 53)
- ../slots/birth_place # - ../slots/birth_date
- ../slots/has_or_had_date_of_birth
- ./BirthDate
# REMOVED - migrated to has_or_had_place_of_birth (Rule 53)
# - ../slots/birth_place
- ../slots/has_or_had_place_of_birth
- ./BirthPlace
- ../slots/death_place - ../slots/death_place
- ../slots/date_of_death - ../slots/date_of_death
- ../slots/deceased - ../slots/deceased
@ -99,8 +105,10 @@ classes:
slots: slots:
- is_or_was_affected_by_event - is_or_was_affected_by_event
- has_age - has_age
- birth_date # REMOVED: birth_date - migrated to has_or_had_date_of_birth (Rule 53)
- birth_place - has_or_had_date_of_birth
# REMOVED: birth_place - migrated to has_or_had_place_of_birth (Rule 53)
- has_or_had_place_of_birth
- contact_email - contact_email
- created - created
- date_of_death - date_of_death
@ -148,12 +156,48 @@ classes:
- Required is false initially to allow PersonObservation without hub linkage - Required is false initially to allow PersonObservation without hub linkage
- Production data SHOULD always have this link for full PICO compliance - Production data SHOULD always have this link for full PICO compliance
- 'Inverse relationship: Person.has_person_observation (implemented v0.9.8)' - 'Inverse relationship: Person.has_person_observation (implemented v0.9.8)'
birth_date: has_or_had_date_of_birth:
range: string description: >-
Birth date of the person using structured BirthDate class.
MIGRATED from birth_date slot (Rule 53).
Supports EDTF notation for uncertain/incomplete dates and
tracks provenance for inferred dates per Rule 45.
range: BirthDate
inlined: true
required: false required: false
birth_place: examples:
range: string - value: |
birth_edtf: "1970-08-15"
is_inferred: false
confidence: HIGH
description: Full date known
- value: |
birth_edtf: "197X"
is_inferred: true
confidence: LOW
description: Decade inferred from career start
has_or_had_place_of_birth:
description: >-
Birth place of the person using structured BirthPlace class.
MIGRATED from birth_place slot (Rule 53).
Supports historical vs. modern place names and links to
GeoNames/Wikidata for geographic resolution.
range: BirthPlace
inlined: true
required: false required: false
examples:
- value: |
place_name: Amsterdam
country_code: NL
geonames_id: 2759794
description: Birth place with geographic identifiers
- value: |
place_name: Batavia
modern_place_name: Jakarta
country_code: ID
description: Historical place name
death_place: death_place:
range: string range: string
required: false required: false

View file

@ -0,0 +1,107 @@
# Place - A geographic or administrative place for containment relationships
# Created per slot_fixes.yaml migration for: within_place, within_auxiliary_place
# Creation date: 2026-01-14
id: https://nde.nl/ontology/hc/classes/Place
name: Place
title: Place
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
gn: http://www.geonames.org/ontology#
locn: http://www.w3.org/ns/locn#
imports:
- linkml:types
default_range: string
classes:
Place:
description: >-
A geographic or administrative place used for containment relationships.
**DISTINCTION FROM Location**:
- `Location` is for precise physical locations (address, coordinates)
- `Place` is for administrative/geographic containment (city within province)
**USE CASES**:
- `within_place`: Institution is within a city/region
- `within_auxiliary_place`: Secondary location containment
- Administrative hierarchies: settlement → region → country
**ONTOLOGY MAPPING**:
- class_uri: schema:Place (generic place concept)
- Supports GeoNames integration for standardized place references
class_uri: schema:Place
close_mappings:
- gn:Feature
- locn:Location
related_mappings:
- schema:AdministrativeArea
attributes:
place_name:
range: string
required: true
description: >-
Name of the place (e.g., "Amsterdam", "Noord-Holland", "Netherlands").
place_type:
range: string
description: >-
Type of place (e.g., "settlement", "region", "country", "district").
geonames_id:
range: integer
description: >-
GeoNames identifier for standardized place reference.
Example: 2759794 for Amsterdam.
iso_code:
range: string
description: >-
ISO code for administrative areas.
Examples: "NL" (country), "NL-NH" (region), "AMS" (settlement code).
parent_place:
range: Place
inlined: true
description: >-
Parent place in the administrative hierarchy.
Example: Amsterdam's parent is Noord-Holland.
annotations:
custodian_types: '["*"]'
custodian_types_rationale: >-
Place references applicable to all custodian types.
custodian_types_primary: "*"
specificity_score: 0.2
specificity_rationale: >-
Low specificity - universal geographic concept.
examples:
- value: |
Place:
place_name: "Amsterdam"
place_type: "settlement"
geonames_id: 2759794
iso_code: "AMS"
parent_place:
place_name: "Noord-Holland"
place_type: "region"
iso_code: "NL-NH"
description: Amsterdam as a settlement within Noord-Holland.
- value: |
Place:
place_name: "Netherlands"
place_type: "country"
iso_code: "NL"
geonames_id: 2750405
description: Country-level place reference.

View file

@ -10,7 +10,10 @@ imports:
- ../slots/confidence_score - ../slots/confidence_score
- ../slots/superseded_by - ../slots/superseded_by
- ../slots/is_or_was_about_digital_presence - ../slots/is_or_was_about_digital_presence
- ../slots/asserted_by # REMOVED - migrated to is_or_was_asserted_by (Rule 53)
# - ../slots/asserted_by
- ../slots/is_or_was_asserted_by
- ./Asserter
- ../slots/has_assertion_date - ../slots/has_assertion_date
- ../slots/has_or_had_identifier - ../slots/has_or_had_identifier
- ../slots/has_assertion_rationale - ../slots/has_assertion_rationale
@ -91,7 +94,9 @@ classes:
- prov:wasGeneratedBy - prov:wasGeneratedBy
slots: slots:
- is_or_was_about_digital_presence - is_or_was_about_digital_presence
- asserted_by # REMOVED - migrated to is_or_was_asserted_by (Rule 53)
# - asserted_by
- is_or_was_asserted_by
- has_assertion_date - has_assertion_date
- has_or_had_identifier - has_or_had_identifier
- has_assertion_rationale - has_assertion_rationale
@ -165,6 +170,27 @@ classes:
required: false required: false
examples: examples:
- value: '2025-11-29T14:30:00Z' - value: '2025-11-29T14:30:00Z'
is_or_was_asserted_by:
range: Asserter
inlined: true
required: false
description: >-
The agent responsible for making this assertion.
MIGRATED from asserted_by (Rule 53) - changed from string to Asserter
class for richer provenance tracking.
examples:
- value:
has_or_had_identifier: https://nde.nl/ontology/hc/asserter/primary-presence-analyzer
has_or_had_label: primary-presence-analyzer
asserter_type: AUTOMATED_SYSTEM
asserter_version: "1.0"
description: Automated system asserter
- value:
has_or_had_identifier: https://nde.nl/ontology/hc/asserter/jane-doe
has_or_had_label: Jane Doe
asserter_type: HUMAN_ANALYST
asserter_contact: jane.doe@heritage-org.nl
description: Human analyst asserter
was_asserted_by: was_asserted_by:
range: string range: string
required: false required: false

View file

@ -0,0 +1,118 @@
# Provenance - A single provenance statement tracking the origin and lineage of data
# Distinct from ProvenanceBlock which bundles multiple provenance sources
# Created per slot_fixes.yaml migration for: binding_provenance, xpath, type_hypothesis
# Creation date: 2026-01-14
id: https://nde.nl/ontology/hc/classes/Provenance
name: Provenance
title: Provenance
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
prov: http://www.w3.org/ns/prov#
dct: http://purl.org/dc/terms/
schema: http://schema.org/
xsd: http://www.w3.org/2001/XMLSchema#
imports:
- linkml:types
- ../slots/has_or_had_agent
- ../slots/temporal_extent
default_range: string
classes:
Provenance:
description: >-
A single provenance statement describing the origin, lineage, or derivation
of a piece of data.
**DISTINCTION FROM ProvenanceBlock**:
- `Provenance` represents a SINGLE provenance statement (one source, one activity)
- `ProvenanceBlock` bundles MULTIPLE provenance sources together
Use `Provenance` when:
- Tracking provenance of individual data elements
- Recording specific extraction or transformation activities
- Linking data to its source agent/entity
**ONTOLOGY MAPPING**:
- class_uri: prov:Activity (the extraction/derivation activity)
- Links to prov:Agent via has_or_had_agent
- Links to prov:Entity via used (source) and generated (result)
class_uri: prov:Activity
close_mappings:
- dct:ProvenanceStatement
- schema:Action
related_mappings:
- prov:Entity
- prov:Derivation
slots:
- has_or_had_agent
- temporal_extent
attributes:
source_entity:
range: uriorcurie
description: >-
URI of the source entity from which data was derived (prov:used).
slot_uri: prov:used
generated_entity:
range: uriorcurie
description: >-
URI of the entity generated by this provenance activity (prov:generated).
slot_uri: prov:generated
extraction_method:
range: string
description: >-
Method or process used to extract/derive the data.
Examples: "xpath_extraction", "api_query", "manual_entry"
confidence_score:
range: float
minimum_value: 0.0
maximum_value: 1.0
description: >-
Confidence score (0.0 to 1.0) indicating reliability of this provenance.
note:
range: string
description: >-
Human-readable note about this provenance statement.
slot_uri: prov:value
annotations:
custodian_types: '["*"]'
custodian_types_rationale: >-
Provenance tracking is universal across all custodian types.
custodian_types_primary: "*"
specificity_score: 0.15
specificity_rationale: >-
Very low specificity - provenance metadata applies universally.
examples:
- value: |
Provenance:
extraction_method: "xpath_extraction"
source_entity: "https://example.org/webpage/12345"
confidence_score: 0.95
note: "Extracted from archived HTML using XPath"
description: >-
Provenance for an XPath-extracted value from an archived webpage.
- value: |
Provenance:
has_or_had_agent:
agent_type: "software"
name: "glam-extractor-v2.1"
extraction_method: "api_scraping"
confidence_score: 0.85
description: >-
Provenance for API-scraped data with agent identification.

View file

@ -0,0 +1,332 @@
id: https://nde.nl/ontology/hc/class/Quantity
name: Quantity
title: Quantity Class
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
qudt: http://qudt.org/schema/qudt/
schema: http://schema.org/
dcterms: http://purl.org/dc/terms/
imports:
- linkml:types
- ../enums/QuantityTypeEnum
- ../slots/has_or_had_identifier
- ../slots/has_or_had_label
- ../slots/has_or_had_description
- ../slots/has_or_had_measurement_unit
- ../slots/has_or_had_methodology
- ../slots/temporal_extent
- ../slots/specificity_annotation
- ../slots/template_specificity
- ./MeasureUnit
- ./Methodology
- ./TimeSpan
- ./SpecificityAnnotation
- ./TemplateSpecificityScores
default_prefix: hc
classes:
Quantity:
class_uri: qudt:Quantity
description: >-
A quantified value with an optional unit of measurement and type.
**QUDT ALIGNMENT**:
Maps to `qudt:Quantity` - "A quantitative value expressed as a
number and a unit of measurement."
**TYPES OF QUANTITIES**:
| Type | Description | Example |
|------|-------------|---------|
| STAFF_COUNT | Number of employees | 42 employees |
| COLLECTION_SIZE | Number of items | 1.2 million objects |
| VISITOR_COUNT | Annual visitors | 2.5 million/year |
| BUDGET_AMOUNT | Financial value | €15 million |
| AREA | Physical space | 10,000 m² |
| DURATION | Time period | 6 months |
**USE CASES**:
1. **Staff Metrics**: Branch staff count, department size, FTE equivalents
2. **Collection Metrics**: Object counts, archive linear meters, digital items
3. **Visitor Metrics**: Annual attendance, daily capacity, peak visitors
4. **Financial Metrics**: Budget, revenue, acquisition costs
5. **Physical Metrics**: Floor area, gallery space, storage capacity
**WHY NOT JUST USE INTEGER?**
Simple integer fields like `branch_staff_count: 3` lose important context:
- What's the unit? (FTE? headcount? contractors included?)
- When was this measured? (provenance)
- Is this exact or estimated?
- What type of quantity is this?
The Quantity class captures this richness while remaining simple for basic use.
**EXAMPLE**:
```yaml
Quantity:
quantity_id: https://nde.nl/ontology/hc/quantity/nha-zaanstreek-staff-2025
quantity_value: 3
quantity_type: STAFF_COUNT
has_or_had_measurement_unit:
unit_type: VISITOR
unit_symbol: "visitors"
temporal_extent:
begin_of_the_begin: "2024-01-01T00:00:00Z"
end_of_the_end: "2024-12-31T23:59:59Z"
has_or_had_description: Staff assigned to Zaanstreek-Waterland branch
```
**RULE 53 COMPLIANT**: Updated with link_branch slots (has_or_had_measurement_unit,
temporal_extent, has_or_had_methodology) per slot_fixes.yaml revision for
visitor_count, view_count, unique_object_count, and unique_face_count migrations.
exact_mappings:
- qudt:Quantity
close_mappings:
- schema:QuantitativeValue
related_mappings:
- schema:numberOfEmployees
- schema:floorSize
- dcterms:extent
slots:
- has_or_had_identifier
- quantity_value
- quantity_type
- quantity_unit
- has_or_had_measurement_unit
- has_or_had_methodology
- temporal_extent
- has_or_had_description
- quantity_date
- is_estimate
- specificity_annotation
- template_specificity
slot_usage:
has_or_had_identifier:
range: uriorcurie
required: false
identifier: true
description: >-
Optional identifier for this quantity measurement.
examples:
- value: https://nde.nl/ontology/hc/quantity/nha-zaanstreek-staff-2025
description: Branch staff count measurement
quantity_value:
range: float
required: true
description: >-
The numeric value of the quantity.
examples:
- value: 3
description: 3 staff members
- value: 1200000
description: 1.2 million collection items
- value: 2500000
description: 2.5 million annual visitors
quantity_type:
range: QuantityTypeEnum
required: false
description: >-
The type of quantity being measured.
examples:
- value: STAFF_COUNT
- value: COLLECTION_SIZE
- value: VISITOR_COUNT
quantity_unit:
range: string
required: false
deprecated: >-
Use has_or_had_measurement_unit with MeasureUnit class instead.
Retained for backward compatibility with existing data.
description: >-
DEPRECATED: The unit of measurement as a simple string.
Prefer has_or_had_measurement_unit for structured unit data.
examples:
- value: FTE
description: Full-time equivalent employees
- value: headcount
description: Total number of people
- value: items
description: Collection item count
- value: linear meters
description: Archive extent
- value: EUR
description: Budget in euros
- value:
description: Floor area
has_or_had_measurement_unit:
range: MeasureUnit
required: false
inlined: true
description: >-
The structured unit of measurement for this quantity.
Provides richer semantics than the deprecated quantity_unit string.
RULE 53: Branch 1 slot from visitor_count migration.
examples:
- value:
unit_type: VISITOR
unit_symbol: "visitors"
description: Visitor count unit
- value:
unit_type: SQUARE_METER
unit_symbol: "m²"
description: Area unit
temporal_extent:
range: TimeSpan
required: false
inlined: true
description: >-
The time period over which this quantity was measured.
CIDOC-CRM temporal modeling with fuzzy boundaries.
RULE 53: Branch 2 slot from visitor_count migration.
examples:
- value:
begin_of_the_begin: "2024-01-01T00:00:00Z"
end_of_the_end: "2024-12-31T23:59:59Z"
description: Annual measurement period
has_or_had_methodology:
range: Methodology
required: false
inlined: true
description: >-
The methodology used to derive this quantity.
Essential for unique counts derived via entity resolution.
RULE 53: Branch 2 slot from unique_object_count/unique_face_count migration.
examples:
- value:
methodology_type: ENTITY_RESOLUTION
has_or_had_label: "ArcFace clustering"
confidence_threshold: 0.6
description: Face entity resolution methodology
- value:
methodology_type: OBJECT_TRACKING
has_or_had_label: "DeepSORT"
description: Multi-object tracking methodology
has_or_had_description:
range: string
required: false
description: >-
Description of what this quantity represents.
examples:
- value: Staff assigned to Zaanstreek-Waterland branch
- value: Annual visitor count for 2024
quantity_date:
range: date
required: false
description: >-
Date when this quantity was measured or is valid.
examples:
- value: '2025-01-01'
is_estimate:
range: boolean
required: false
ifabsent: 'false'
description: >-
Whether this quantity is an estimate rather than an exact count.
examples:
- value: false
description: Exact count
- value: true
description: Estimated value
comments:
- Quantity models quantified values with units and provenance
- Replaces simple integer fields with richer structured data
- Uses QUDT Quantity as primary ontology mapping
- Supports various quantity types (staff, collection, visitor, budget)
see_also:
- http://qudt.org/schema/qudt/Quantity
- https://schema.org/QuantitativeValue
examples:
- value:
has_or_had_identifier: https://nde.nl/ontology/hc/quantity/nha-zaanstreek-staff-2025
quantity_value: 3
quantity_type: STAFF_COUNT
has_or_had_measurement_unit:
unit_type: FTE
unit_symbol: "FTE"
has_or_had_label: "full-time equivalent"
has_or_had_description: Staff assigned to Zaanstreek-Waterland branch
quantity_date: '2025-01-01'
is_estimate: false
description: Branch staff count (preferred pattern with structured unit)
- value:
quantity_value: 650000
quantity_type: VISITOR_COUNT
has_or_had_measurement_unit:
unit_type: VISITOR
unit_symbol: "visitors"
temporal_extent:
begin_of_the_begin: "2023-02-10T00:00:00Z"
end_of_the_end: "2023-06-04T23:59:59Z"
has_or_had_description: Vermeer exhibition attendance
is_estimate: false
description: Exhibition visitor count with temporal extent (Rule 53 pattern)
- value:
quantity_value: 15
quantity_type: OBJECT_COUNT
has_or_had_measurement_unit:
unit_type: FACE
unit_symbol: "faces"
has_or_had_methodology:
methodology_type: ENTITY_RESOLUTION
has_or_had_label: "ArcFace clustering"
confidence_threshold: 0.6
has_or_had_description: Unique faces detected via entity resolution
is_estimate: false
description: Unique face count with methodology (Rule 53 pattern for unique_face_count)
- value:
quantity_value: 47
quantity_type: OBJECT_COUNT
has_or_had_measurement_unit:
unit_type: OBJECT
unit_symbol: "objects"
has_or_had_methodology:
methodology_type: OBJECT_TRACKING
has_or_had_label: "DeepSORT"
has_or_had_description: Unique objects tracked across video frames
is_estimate: false
description: Unique object count with methodology (Rule 53 pattern for unique_object_count)
- value:
quantity_value: 1200000
quantity_type: COLLECTION_SIZE
quantity_unit: items
has_or_had_description: Total collection size including artworks, documents, and photographs
is_estimate: true
description: Estimated collection size (deprecated string unit - backward compatible)
- value:
quantity_value: 2500000
quantity_type: VISITOR_COUNT
quantity_unit: visitors/year
has_or_had_description: Annual visitor count for 2024
quantity_date: '2024-12-31'
is_estimate: false
description: Annual visitor count (deprecated string unit - backward compatible)
slots:
quantity_value:
description: >-
The numeric value of the quantity.
range: float
slot_uri: qudt:numericValue
quantity_type:
description: >-
The type of quantity being measured.
range: QuantityTypeEnum
slot_uri: hc:quantityType
quantity_unit:
description: >-
The unit of measurement (if applicable).
range: string
slot_uri: qudt:unit
quantity_date:
description: >-
Date when this quantity was measured or is valid.
range: date
slot_uri: dcterms:date
is_estimate:
description: >-
Whether this quantity is an estimate rather than an exact count.
range: boolean
slot_uri: hc:isEstimate

View file

@ -0,0 +1,89 @@
# Scope - Coverage/scope information for collections, services, or institutions
# Created per slot_fixes.yaml migration for: typical_scope, type_scope
# Creation date: 2026-01-14
id: https://nde.nl/ontology/hc/classes/Scope
name: Scope
title: Scope
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
dct: http://purl.org/dc/terms/
schema: http://schema.org/
imports:
- linkml:types
- ../slots/has_or_had_type
default_range: string
classes:
Scope:
description: >-
Coverage or scope information for a collection, service, or institution.
**SCOPE DIMENSIONS**:
- **Temporal**: Time period covered (e.g., "1600-1900")
- **Spatial**: Geographic coverage (e.g., "Netherlands", "Amsterdam")
- **Subject**: Topic/subject areas (e.g., "Dutch Golden Age painting")
- **Material**: Types of materials (e.g., "photographs", "manuscripts")
**ONTOLOGY MAPPING**:
- class_uri: dct:Coverage (Dublin Core coverage concept)
class_uri: dct:Coverage
close_mappings:
- schema:Thing
slots:
- has_or_had_type
attributes:
scope_description:
range: string
description: >-
Human-readable description of the scope.
temporal_coverage:
range: string
description: >-
Time period covered (e.g., "1600-1900", "Medieval period").
spatial_coverage:
range: string
description: >-
Geographic coverage (e.g., "Netherlands", "Europe").
subject_coverage:
range: string
multivalued: true
description: >-
Subject areas covered.
material_coverage:
range: string
multivalued: true
description: >-
Types of materials covered.
annotations:
custodian_types: '["*"]'
custodian_types_rationale: >-
Scope information applicable to all custodian types.
custodian_types_primary: "*"
specificity_score: 0.3
specificity_rationale: >-
Low-moderate specificity - common metadata concept.
examples:
- value: |
Scope:
scope_description: "Dutch art from the Golden Age"
temporal_coverage: "1600-1700"
spatial_coverage: "Netherlands"
subject_coverage:
- "Painting"
- "Dutch Golden Age"
description: Scope for a Dutch Golden Age art collection.

View file

@ -0,0 +1,165 @@
# ScopeType - Abstract base class for scope type classifications
#
# Following the Type/Types naming convention (Rule 0b):
# - ScopeType.yaml: Abstract base class defining the type taxonomy
# - ScopeTypes.yaml: File containing all concrete subclasses
#
# Created per slot_fixes.yaml migration for: typical_scope, type_scope
# Creation date: 2026-01-14
# Rule compliance: 0b (Type/Types naming), 37 (specificity scores), 50 (ontology mapping)
id: https://nde.nl/ontology/hc/class/ScopeType
name: ScopeType
title: Scope Type Classification
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
skos: http://www.w3.org/2004/02/skos/core#
dct: http://purl.org/dc/terms/
schema: http://schema.org/
default_prefix: hc
imports:
- linkml:types
- ../slots/type_description
- ../slots/type_id
- ../slots/type_label
- ../slots/wikidata_entity
- ../slots/specificity_annotation
- ../slots/template_specificity
- ./SpecificityAnnotation
- ./TemplateSpecificityScores
classes:
ScopeType:
class_uri: skos:Concept
description: |
Abstract base class for scope type classifications in the heritage domain.
**DEFINITION**:
ScopeType represents CATEGORIES of scope/coverage dimensions, not individual
scope instances. Each subclass defines characteristics of a scope category
(temporal, spatial, subject, material, etc.).
**CRITICAL: TYPE vs INSTANCE**
| Aspect | ScopeType (This Class) | Scope (Instance Class) |
|--------|------------------------|------------------------|
| **Nature** | Classification/category | Individual scope |
| **Examples** | TEMPORAL, SPATIAL, SUBJECT | "1600-1700 Dutch painting" |
| **Properties** | Category metadata | Actual coverage values |
| **Cardinality** | ~5-10 types | Thousands of instances |
**SCOPE DIMENSIONS**:
1. **TEMPORAL**: Time-based coverage
- Century, Decade, Date Range, Era, Period
- Historical Period, Epoch
2. **SPATIAL**: Geographic coverage
- Country, Region, City, Continent
- Administrative Division, Geographic Feature
3. **SUBJECT**: Topic/domain coverage
- Art Movement, Historical Theme, Scientific Domain
- Cultural Topic, Social Issue
4. **MATERIAL**: Material type coverage
- Photographs, Manuscripts, Prints, Maps
- Audio Recordings, Video, 3D Objects
5. **LINGUISTIC**: Language coverage
- Script, Language Family, Dialect Region
6. **INSTITUTIONAL**: Organizational coverage
- Sector, Industry, Government Level
- International, National, Regional, Local
**ONTOLOGY ALIGNMENT**:
- **SKOS Concept**: Scope types are concepts in a controlled vocabulary
- **Dublin Core Coverage**: dct:Coverage for scope semantics
- **MODS Subject**: Library of Congress subject coverage model
**SUBCLASSES**:
See ScopeTypes.yaml for concrete scope type subclasses organized
by dimension: TEMPORAL, SPATIAL, SUBJECT, MATERIAL, LINGUISTIC, and
INSTITUTIONAL.
abstract: true
exact_mappings:
- skos:Concept
close_mappings:
- dct:Coverage
- schema:DefinedTerm
slots:
- specificity_annotation
- template_specificity
- type_description
- type_id
- type_label
- wikidata_entity
slot_usage:
type_id:
range: uriorcurie
required: true
identifier: true
pattern: "^https://nde\\.nl/ontology/hc/scope-type/[a-z-]+$"
examples:
- value: https://nde.nl/ontology/hc/scope-type/temporal
description: Temporal scope type
- value: https://nde.nl/ontology/hc/scope-type/spatial
description: Spatial scope type
type_label:
range: string
required: true
multivalued: true
examples:
- value: ["Temporal@en", "temporeel@nl", "zeitlich@de"]
description: Multilingual labels for temporal scope type
type_description:
range: string
required: false
examples:
- value: "Time-based scope dimension covering date ranges and historical periods"
description: Description of temporal scope type
wikidata_entity:
range: string
required: false
pattern: "^Q[0-9]+$"
annotations:
specificity_score: "0.35"
specificity_rationale: "Moderately low specificity - scope types are generic classification concepts."
template_specificity: '{"collection_discovery": 0.50, "archive_search": 0.45, "general_heritage": 0.35}'
comments:
- "Abstract base class - use specific subclasses (TemporalScope, SpatialScope, etc.)"
- "Represents SCOPE TYPES, not scope instances"
- "Scope.has_or_had_type references these type classes"
- "Follows Type/Types naming convention (Rule 0b)"
- "Organized by dimension: temporal, spatial, subject, material"
see_also:
- https://www.dublincore.org/specifications/dublin-core/dcmi-terms/#section-7
- https://www.w3.org/2004/02/skos/
examples:
- value:
type_id: https://nde.nl/ontology/hc/scope-type/temporal
type_label:
- Temporal@en
- temporeel@nl
type_description: "Time-based scope dimension"
description: "Temporal scope type with multilingual labels"

View file

@ -0,0 +1,262 @@
# ScopeTypes - Concrete scope type subclasses
#
# Following the Type/Types naming convention (Rule 0b):
# - ScopeType.yaml: Abstract base class defining the type taxonomy
# - ScopeTypes.yaml: File containing all concrete subclasses
#
# Created per slot_fixes.yaml migration for: typical_scope, type_scope
# Creation date: 2026-01-14
# Rule compliance: 0b (Type/Types naming), 37 (specificity scores), 50 (ontology mapping)
id: https://nde.nl/ontology/hc/class/ScopeTypes
name: ScopeTypes
title: Scope Type Subclasses
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
skos: http://www.w3.org/2004/02/skos/core#
dct: http://purl.org/dc/terms/
schema: http://schema.org/
default_prefix: hc
imports:
- linkml:types
- ./ScopeType
classes:
# =============================================================================
# TEMPORAL SCOPE TYPES
# =============================================================================
TemporalScope:
is_a: ScopeType
class_uri: dct:PeriodOfTime
description: |
Time-based scope dimension covering date ranges, historical periods, and eras.
**Examples**:
- "1600-1700" (date range)
- "Medieval period" (historical period)
- "19th century" (century scope)
exact_mappings:
- dct:PeriodOfTime
annotations:
specificity_score: "0.40"
specificity_rationale: "Moderately specific - temporal scoping is common across domains."
examples:
- value:
type_id: https://nde.nl/ontology/hc/scope-type/temporal
type_label: ["Temporal@en", "temporeel@nl"]
description: Temporal scope type instance
# =============================================================================
# SPATIAL SCOPE TYPES
# =============================================================================
SpatialScope:
is_a: ScopeType
class_uri: dct:Location
description: |
Geographic scope dimension covering countries, regions, cities, and areas.
**Examples**:
- "Netherlands" (country)
- "Noord-Holland" (region/province)
- "Amsterdam" (city)
- "Europe" (continent)
exact_mappings:
- dct:Location
close_mappings:
- schema:Place
annotations:
specificity_score: "0.40"
specificity_rationale: "Moderately specific - geographic scoping is common across domains."
examples:
- value:
type_id: https://nde.nl/ontology/hc/scope-type/spatial
type_label: ["Spatial@en", "ruimtelijk@nl"]
description: Spatial scope type instance
# =============================================================================
# SUBJECT SCOPE TYPES
# =============================================================================
SubjectScope:
is_a: ScopeType
class_uri: dct:subject
description: |
Topic/domain scope dimension covering subjects, themes, and disciplines.
**Examples**:
- "Dutch Golden Age painting" (art historical subject)
- "World War II" (historical theme)
- "Maritime history" (subject area)
exact_mappings:
- dct:subject
close_mappings:
- skos:Concept
annotations:
specificity_score: "0.45"
specificity_rationale: "Moderately specific - subject classification is domain-dependent."
examples:
- value:
type_id: https://nde.nl/ontology/hc/scope-type/subject
type_label: ["Subject@en", "onderwerp@nl"]
description: Subject scope type instance
# =============================================================================
# MATERIAL SCOPE TYPES
# =============================================================================
MaterialScope:
is_a: ScopeType
class_uri: dct:DCMIType
description: |
Material type scope dimension covering media types and object categories.
**Examples**:
- "Photographs" (visual material)
- "Manuscripts" (documentary material)
- "Audio recordings" (sound material)
- "3D objects" (physical objects)
exact_mappings:
- dct:DCMIType
close_mappings:
- schema:CreativeWork
annotations:
specificity_score: "0.50"
specificity_rationale: "More specific - material types are heritage-domain focused."
examples:
- value:
type_id: https://nde.nl/ontology/hc/scope-type/material
type_label: ["Material@en", "materiaal@nl"]
description: Material scope type instance
# =============================================================================
# LINGUISTIC SCOPE TYPES
# =============================================================================
LinguisticScope:
is_a: ScopeType
class_uri: dct:language
description: |
Language scope dimension covering languages, scripts, and dialects.
**Examples**:
- "Dutch" (language)
- "Arabic script" (writing system)
- "Low Saxon" (dialect/regional language)
exact_mappings:
- dct:language
annotations:
specificity_score: "0.40"
specificity_rationale: "Moderately specific - linguistic scoping is common."
examples:
- value:
type_id: https://nde.nl/ontology/hc/scope-type/linguistic
type_label: ["Linguistic@en", "taalkundig@nl"]
description: Linguistic scope type instance
# =============================================================================
# INSTITUTIONAL SCOPE TYPES
# =============================================================================
InstitutionalScope:
is_a: ScopeType
class_uri: schema:Organization
description: |
Organizational/sectoral scope dimension covering sectors and governance levels.
**Examples**:
- "Cultural heritage sector" (sector)
- "National level" (governance level)
- "Academic institutions" (institutional type)
close_mappings:
- schema:Organization
annotations:
specificity_score: "0.45"
specificity_rationale: "Moderately specific - institutional classification is heritage-relevant."
examples:
- value:
type_id: https://nde.nl/ontology/hc/scope-type/institutional
type_label: ["Institutional@en", "institutioneel@nl"]
description: Institutional scope type instance
# =============================================================================
# COLLECTION SCOPE TYPES
# =============================================================================
CollectionScope:
is_a: ScopeType
class_uri: schema:Collection
description: |
Collection-based scope dimension covering collection types and sizes.
**Examples**:
- "Small collection (<1000 items)" (size scope)
- "Research collection" (function scope)
- "Public access collection" (access scope)
close_mappings:
- schema:Collection
annotations:
specificity_score: "0.55"
specificity_rationale: "More specific - collection scoping is heritage-domain focused."
examples:
- value:
type_id: https://nde.nl/ontology/hc/scope-type/collection
type_label: ["Collection@en", "collectie@nl"]
description: Collection scope type instance
# =============================================================================
# FORMAT SCOPE TYPES
# =============================================================================
FormatScope:
is_a: ScopeType
class_uri: dct:format
description: |
Format scope dimension covering file formats and data standards.
**Examples**:
- "JPEG/TIFF" (image formats)
- "Dublin Core" (metadata standard)
- "EAD" (archival encoding)
exact_mappings:
- dct:format
annotations:
specificity_score: "0.50"
specificity_rationale: "More specific - format scoping is technical/domain focused."
examples:
- value:
type_id: https://nde.nl/ontology/hc/scope-type/format
type_label: ["Format@en", "formaat@nl"]
description: Format scope type instance

View file

@ -237,11 +237,20 @@ classes:
- value: '2020-01-01' - value: '2020-01-01'
policy_effective_to: policy_effective_to:
range: date range: date
policy_approved_by: is_or_was_approved_by:
range: string description: >-
Agent (person/organization) that approved this policy.
MIGRATED from policy_approved_by (2026-01-15) per Rule 39.
Range changed from string to Approver class for structured approval tracking.
range: Approver
required: false
examples: examples:
- value: Collections Committee - value:
- value: Director of Collections approver_name: Collections Committee
description: Committee approval
- value:
approver_name: Director of Collections
description: Individual approval
policy_review_date: policy_review_date:
range: date range: date
examples: examples:
@ -284,7 +293,8 @@ classes:
- EN_15757_2010 - EN_15757_2010
- EN_16893_2018 - EN_16893_2018
policy_effective_from: '2020-01-01' policy_effective_from: '2020-01-01'
policy_approved_by: Collections Committee is_or_was_approved_by:
approver_name: Collections Committee
policy_review_date: '2025-12-31' policy_review_date: '2025-12-31'
description: Museum art storage climate policy description: Museum art storage climate policy
- value: - value:
@ -313,6 +323,7 @@ classes:
- IMAGE_PERMANENCE_INSTITUTE - IMAGE_PERMANENCE_INSTITUTE
- ISO_TR_19815_2018 - ISO_TR_19815_2018
policy_effective_from: '2015-06-01' policy_effective_from: '2015-06-01'
policy_approved_by: General Rijksarchivaris is_or_was_approved_by:
approver_name: General Rijksarchivaris
policy_review_date: '2025-06-01' policy_review_date: '2025-06-01'
description: Archive cold storage policy for photographic materials description: Archive cold storage policy for photographic materials

View file

@ -195,12 +195,11 @@ classes:
unit_name: Archive Box 145 - WWII Ministry Records unit_name: Archive Box 145 - WWII Ministry Records
unit_type: ARCHIVE_BOX unit_type: ARCHIVE_BOX
unit_description: 'Acid-free archive box containing Ministry of Defense unit_description: 'Acid-free archive box containing Ministry of Defense
correspondence from 1940-1945. Handle with care.'
correspondence from 1940-1945. Handle with care.
'
row_number: '12' row_number: '12'
bay_number: '3' has_or_had_identifier:
- value: '3'
_type: BayNumber
shelf_number: 4 shelf_number: 4
part_of_zone: https://nde.nl/ontology/hc/zone/na-depot-a-standard part_of_zone: https://nde.nl/ontology/hc/zone/na-depot-a-standard
valid_from: '2020-03-15' valid_from: '2020-03-15'
@ -211,10 +210,7 @@ classes:
unit_name: Flat File Drawer 42 - Netherlands Maps unit_name: Flat File Drawer 42 - Netherlands Maps
unit_type: FLAT_FILE_DRAWER unit_type: FLAT_FILE_DRAWER
unit_description: 'Flat file drawer containing oversized maps of the unit_description: 'Flat file drawer containing oversized maps of the
Netherlands, 1850-1920. Climate-controlled environment.'
Netherlands, 1850-1920. Climate-controlled environment.
'
drawer_number: 42 drawer_number: 42
capacity_items: 50 capacity_items: 50
current_item_count: 38 current_item_count: 38

View file

@ -0,0 +1,112 @@
# TimeInterval - A duration or interval of time
# Created per slot_fixes.yaml migration for: update_frequency, typical_approval_time, total_revenue
# Creation date: 2026-01-14
id: https://nde.nl/ontology/hc/classes/TimeInterval
name: TimeInterval
title: TimeInterval
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
time: http://www.w3.org/2006/time#
schema: http://schema.org/
xsd: http://www.w3.org/2001/XMLSchema#
imports:
- linkml:types
default_range: string
classes:
TimeInterval:
description: >-
A duration or interval of time, representing a period rather than a point.
**DISTINCTION FROM TimeSpan**:
- `TimeSpan` represents a bounded period with begin/end points (CIDOC-CRM E52)
- `TimeInterval` represents a duration/interval (e.g., "2 weeks", "quarterly")
**USE CASES**:
- Update frequency: "updated weekly"
- Approval time: "typically 2-3 business days"
- Reporting period: "annual revenue for fiscal year"
**ONTOLOGY MAPPING**:
- class_uri: time:Duration (W3C Time Ontology)
- Supports ISO 8601 duration format (P1Y, P2M, P3D, PT4H)
class_uri: time:Duration
close_mappings:
- schema:Duration
related_mappings:
- time:Interval
- time:TemporalDuration
attributes:
duration_value:
range: string
description: >-
ISO 8601 duration string (e.g., P1Y, P2M, P7D, PT24H).
P = period, Y = years, M = months, D = days, T = time separator, H = hours
duration_description:
range: string
description: >-
Human-readable description of the duration.
Examples: "weekly", "monthly", "annual", "2-3 business days"
years:
range: integer
description: Number of years in the interval.
minimum_value: 0
months:
range: integer
description: Number of months in the interval.
minimum_value: 0
days:
range: integer
description: Number of days in the interval.
minimum_value: 0
hours:
range: integer
description: Number of hours in the interval.
minimum_value: 0
minutes:
range: integer
description: Number of minutes in the interval.
minimum_value: 0
annotations:
custodian_types: '["*"]'
custodian_types_rationale: >-
Time intervals applicable to all custodian types for various purposes.
custodian_types_primary: "*"
specificity_score: 0.25
specificity_rationale: >-
Low specificity - universal temporal concept.
examples:
- value: |
TimeInterval:
duration_value: "P7D"
duration_description: "weekly"
description: A one-week interval for update frequency.
- value: |
TimeInterval:
duration_value: "P1Y"
duration_description: "annual"
description: A one-year interval for revenue reporting.
- value: |
TimeInterval:
days: 3
duration_description: "2-3 business days"
description: Typical approval time interval.

View file

@ -18,6 +18,7 @@ imports:
- ../slots/template_specificity - ../slots/template_specificity
- ./SpecificityAnnotation - ./SpecificityAnnotation
- ./TemplateSpecificityScores - ./TemplateSpecificityScores
- ./Timestamp
default_range: string default_range: string
classes: classes:
TimeSpan: TimeSpan:

View file

@ -0,0 +1,151 @@
# Timestamp class
# A point in time with optional precision and calendar metadata
#
# Generation date: 2026-01-15
# Rule compliance: 0 (LinkML single source of truth), 38 (slot centralization), 53 (slot_fixes.yaml)
#
# This class supports 6 slot migrations per slot_fixes.yaml:
# - valid_to_geo
# - valid_to
# - valid_from_geo
# - valid_from
# - updated_at
# - unesco_inscription_year
#
# Ontological basis: OWL Time Instant (time:Instant)
id: https://nde.nl/ontology/hc/class/Timestamp
name: timestamp_class
title: Timestamp Class
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
time: http://www.w3.org/2006/time#
xsd: http://www.w3.org/2001/XMLSchema#
crm: http://www.cidoc-crm.org/cidoc-crm/
schema: http://schema.org/
default_prefix: hc
imports:
- linkml:types
- ../metadata
- ../slots/timestamp_value
- ../slots/timestamp_precision
- ../slots/calendar_system
- ../slots/specificity_annotation
- ../slots/template_specificity
- ./SpecificityAnnotation
- ./TemplateSpecificityScores
classes:
Timestamp:
class_uri: time:Instant
description: |
A point in time with optional precision and calendar metadata.
**Purpose**:
Timestamp provides a reusable class for representing temporal instants
with explicit precision indicators. This supports EDTF-style partial
dates (year-only, year-month, full date, datetime) and calendar system
annotation for non-Gregorian dates.
**Ontological Alignment**:
- **Primary**: `time:Instant` - OWL Time instant
- **Close**: `crm:E61_Time_Primitive` - CIDOC-CRM time primitive
- **Related**: `xsd:dateTime` - XML Schema dateTime
**Use Cases**:
- Beginning/ending of time spans (TimeSpan.begin_of_the_begin, etc.)
- Validity dates (valid_from, valid_to)
- Update timestamps (updated_at, created_at)
- Historical dates with varying precision
**Precision Levels**:
- year: "1995" (EDTF: "1995")
- month: "1995-06" (EDTF: "1995-06")
- day: "1995-06-15" (EDTF: "1995-06-15")
- datetime: "1995-06-15T10:30:00" (full precision)
**Replaces** (per slot_fixes.yaml):
- `valid_to_geo` → TimeSpan.end_of_the_end: Timestamp
- `valid_to` → TimeSpan.end_of_the_end: Timestamp
- `valid_from_geo` → TimeSpan.begin_of_the_begin: Timestamp
- `valid_from` → TimeSpan.begin_of_the_begin: Timestamp
- `updated_at` → was_last_updated_at: TimeSpan
- `unesco_inscription_year` → TimeSpan.begin_of_the_begin: Timestamp
exact_mappings:
- time:Instant
close_mappings:
- crm:E61_Time_Primitive
related_mappings:
- xsd:dateTime
- schema:DateTime
slots:
- timestamp_value
- timestamp_precision
- calendar_system
- specificity_annotation
- template_specificity
slot_usage:
timestamp_value:
description: |
The timestamp value as ISO 8601 string.
Precision determined by string format:
- "1995" = year precision
- "1995-06" = month precision
- "1995-06-15" = day precision
- "1995-06-15T10:30:00Z" = full datetime
range: string
required: true
pattern: "^-?\\d{4}(-\\d{2})?(-\\d{2})?(T\\d{2}:\\d{2}(:\\d{2})?(\\.\\d+)?(Z|[+-]\\d{2}:\\d{2})?)?$"
timestamp_precision:
description: |
Explicit precision level. Auto-derived from timestamp_value if not provided.
Values: year, month, day, hour, minute, second, millisecond
range: string
required: false
examples:
- value: year
- value: day
- value: second
calendar_system:
description: |
Calendar system for the timestamp. Default is Gregorian.
For historical or non-Western dates, specify the calendar.
range: string
required: false
examples:
- value: gregorian
- value: julian
- value: hebrew
- value: islamic
annotations:
custodian_types: '["*"]'
custodian_types_rationale: Generic timestamp class applicable to all types.
custodian_types_primary: null
specificity_score: 0.15
specificity_rationale: Very broadly applicable generic class for temporal points.
examples:
- value: |
timestamp_value: "1995"
timestamp_precision: year
description: "Year-only timestamp (e.g., founding year)"
- value: |
timestamp_value: "2024-06-15"
timestamp_precision: day
calendar_system: gregorian
description: "Full date timestamp"
- value: |
timestamp_value: "2024-06-15T14:30:00Z"
timestamp_precision: second
calendar_system: gregorian
description: "Full datetime timestamp"

View file

@ -0,0 +1,144 @@
# TransferEvent class
# Custody or ownership transfer event
#
# Generation date: 2026-01-15
# Rule compliance: 0 (LinkML single source of truth), 38 (slot centralization), 53 (slot_fixes.yaml)
#
# This class supports 4 slot migrations per slot_fixes.yaml:
# - transfer_to_collection_date → is_or_was_transferred + TransferEvent
# - transfer_policy → is_or_was_transferred + TransferEvent
# - transfer_location_text → is_or_was_transferred + TransferEvent
# - transfer_location → is_or_was_transferred + TransferEvent
id: https://nde.nl/ontology/hc/class/TransferEvent
name: transfer_event_class
title: TransferEvent Class
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
crm: http://www.cidoc-crm.org/cidoc-crm/
rico: https://www.ica.org/standards/RiC/ontology#
prov: http://www.w3.org/ns/prov#
schema: http://schema.org/
default_prefix: hc
imports:
- linkml:types
- ../metadata
- ../slots/temporal_extent
- ../slots/starts_or_started_at_location
- ../slots/ends_or_ended_at_location
- ../slots/has_or_had_description
- ../slots/has_or_had_policy
- ../slots/specificity_annotation
- ../slots/template_specificity
- ./TimeSpan
- ./Location
- ./TransferPolicy
- ./Description
- ./SpecificityAnnotation
- ./TemplateSpecificityScores
classes:
TransferEvent:
class_uri: crm:E10_Transfer_of_Custody
description: |
Event representing transfer of custody, ownership, or physical location.
**Purpose**:
TransferEvent models significant transfers in heritage contexts:
- Collection transfers between institutions
- Relocation of holdings
- Custody changes (legal guardianship)
- Ownership changes
**Ontological Alignment**:
- **Primary**: `crm:E10_Transfer_of_Custody` - CIDOC-CRM custody transfer
- **Close**: `rico:TransferEvent` - RiC-O transfer event
- **Related**: `prov:Activity` - PROV-O activity (general activity)
**Key Components**:
- `temporal_extent`: When the transfer occurred (TimeSpan)
- `starts_or_started_at_location`: Origin location
- `ends_or_ended_at_location`: Destination location
- `has_or_had_policy`: Transfer policy governing the transfer
- `has_or_had_description`: Narrative description
**Replaces** (per slot_fixes.yaml):
- `transfer_to_collection_date` (simple date)
- `transfer_policy` (simple string)
- `transfer_location` (simple string)
- `transfer_location_text` (simple string)
exact_mappings:
- crm:E10_Transfer_of_Custody
close_mappings:
- rico:TransferEvent
related_mappings:
- prov:Activity
- schema:TransferAction
slots:
- temporal_extent
- starts_or_started_at_location
- ends_or_ended_at_location
- has_or_had_description
- has_or_had_policy
- specificity_annotation
- template_specificity
slot_usage:
temporal_extent:
description: |
When the transfer occurred. Can be a single date or date range.
range: TimeSpan
required: false
inlined: true
starts_or_started_at_location:
description: |
Origin location - where the transferred items came from.
range: Location
required: false
inlined: true
ends_or_ended_at_location:
description: |
Destination location - where the transferred items went to.
range: Location
required: false
inlined: true
has_or_had_description:
description: |
Narrative description of the transfer event.
range: Description
required: false
inlined: true
has_or_had_policy:
description: |
Policy that governed this transfer.
range: TransferPolicy
required: false
inlined: true
annotations:
custodian_types: '["*"]'
custodian_types_rationale: Transfer events apply to all heritage custodian types.
custodian_types_primary: null
specificity_score: 0.5
specificity_rationale: Specialized event type for custody/ownership changes.
examples:
- value: |
temporal_extent:
begin_of_the_begin:
timestamp_value: "2020-01-15T00:00:00Z"
starts_or_started_at_location:
location_name: "Old Storage Facility"
ends_or_ended_at_location:
location_name: "New Archive Building"
has_or_had_description:
description_text: "Transfer of historical photographs to new climate-controlled facility"
description: "Collection relocation transfer"

View file

@ -0,0 +1,101 @@
# TransferPolicy class
# Policy governing custody or ownership transfers
#
# Generation date: 2026-01-15
# Rule compliance: 0 (LinkML single source of truth), 38 (slot centralization), 53 (slot_fixes.yaml)
#
# Supports migration: transfer_policy → is_or_was_transferred + TransferEvent + has_or_had_policy + TransferPolicy
id: https://nde.nl/ontology/hc/class/TransferPolicy
name: transfer_policy_class
title: TransferPolicy Class
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
rico: https://www.ica.org/standards/RiC/ontology#
dcterms: http://purl.org/dc/terms/
odrl: http://www.w3.org/ns/odrl/2/
default_prefix: hc
imports:
- linkml:types
- ../metadata
- ../slots/policy_name
- ../slots/policy_text
- ../slots/has_or_had_description
- ../slots/specificity_annotation
- ../slots/template_specificity
- ./Description
- ./SpecificityAnnotation
- ./TemplateSpecificityScores
classes:
TransferPolicy:
class_uri: odrl:Policy
description: |
Policy governing custody or ownership transfers.
**Purpose**:
TransferPolicy captures the rules and conditions under which
heritage materials may be transferred between institutions,
including donor restrictions and legal requirements.
**Ontological Alignment**:
- **Primary**: `odrl:Policy` - ODRL policy (rights/rules)
- **Close**: `rico:RecordResourceTransferRule` - RiC-O transfer rule
- **Related**: `dcterms:RightsStatement` - rights/access statement
**Use Cases**:
- Donor restrictions on collection transfers
- Deaccessioning policies
- Inter-institutional loan agreements
- Government archive transfer regulations
exact_mappings:
- odrl:Policy
close_mappings:
- rico:RecordResourceTransferRule
related_mappings:
- dcterms:RightsStatement
slots:
- policy_name
- policy_text
- has_or_had_description
- specificity_annotation
- template_specificity
slot_usage:
policy_name:
description: |
Name or title of the transfer policy.
range: string
required: false
policy_text:
description: |
Full text of the policy.
range: string
required: false
has_or_had_description:
description: |
Summary description of the policy.
range: Description
required: false
inlined: true
annotations:
custodian_types: '["*"]'
custodian_types_rationale: Transfer policies apply to all heritage types.
custodian_types_primary: null
specificity_score: 0.55
specificity_rationale: Specialized policy type for transfer governance.
examples:
- value: |
policy_name: "Donor Transfer Restriction"
policy_text: "Materials may not be transferred to institutions outside the Netherlands without donor consent."
description: "Donor-imposed transfer restriction"

View file

@ -0,0 +1,121 @@
# URL class
# Structured URL representation with type and metadata
#
# Generation date: 2026-01-15
# Rule compliance: 0 (LinkML single source of truth), 38 (slot centralization), 53 (slot_fixes.yaml)
#
# This class supports 4 slot migrations per slot_fixes.yaml:
# - website → has_or_had_url + URL
# - url → has_or_had_url + URL
# - vendor_url → has_or_had_url + URL
# - was_archived_at → is_or_was_webarchived_at + URL
id: https://nde.nl/ontology/hc/class/URL
name: url_class
title: URL Class
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
dcterms: http://purl.org/dc/terms/
prov: http://www.w3.org/ns/prov#
default_prefix: hc
imports:
- linkml:types
- ../metadata
- ../slots/url_value
- ../slots/url_type
- ../slots/language
- ../slots/specificity_annotation
- ../slots/template_specificity
- ./SpecificityAnnotation
- ./TemplateSpecificityScores
classes:
URL:
class_uri: schema:URL
description: |
Structured representation of a URL with type classification and metadata.
**Purpose**:
URL provides a reusable class for representing web addresses with
additional context about what type of URL it is (website, API, archive, etc.)
and optional language/locale information.
**Ontological Alignment**:
- **Primary**: `schema:URL` - Schema.org URL datatype
- **Close**: `dcterms:URI` - Dublin Core URI
- **Related**: `prov:Entity` - Provenance entity (for archived URLs)
**Use Cases**:
- Institution websites: `has_or_had_url` with type "website"
- API endpoints: `has_or_had_url` with type "api"
- Web archive snapshots: `is_or_was_webarchived_at` with archive URL
- Vendor/supplier sites: `has_or_had_url` with type "vendor"
**Replaces** (per slot_fixes.yaml):
- `website` (simple string URL)
- `url` (simple string URL)
- `vendor_url` (simple string URL)
- `was_archived_at` (simple string URL)
exact_mappings:
- schema:URL
close_mappings:
- dcterms:URI
related_mappings:
- prov:Entity
slots:
- url_value
- url_type
- language
- specificity_annotation
- template_specificity
slot_usage:
url_value:
description: |
The actual URL string (e.g., https://example.org/).
range: uri
required: true
url_type:
description: |
Classification of the URL type (website, api, archive, etc.).
range: string
required: false
language:
description: |
Language/locale of the content at this URL.
ISO 639-1 code, optionally with region (e.g., "en", "nl-NL").
range: string
required: false
pattern: "^[a-z]{2}(-[A-Z]{2})?$"
annotations:
custodian_types: '["*"]'
custodian_types_rationale: URLs apply to all heritage custodian types.
custodian_types_primary: null
specificity_score: 0.15
specificity_rationale: Generic URL class applicable across all contexts.
examples:
- value: |
url_value: "https://www.rijksmuseum.nl/"
url_type: website
language: nl
description: "Official website URL for Rijksmuseum"
- value: |
url_value: "https://api.rijksmuseum.nl/api/nl/collection"
url_type: api
language: nl
description: "API endpoint for Rijksmuseum collection"
- value: |
url_value: "https://web.archive.org/web/20240101/https://example.org/"
url_type: webarchive
description: "Web archive snapshot URL"

View file

@ -0,0 +1,175 @@
# UpdateFrequency - Structured frequency/periodicity for data updates
# Created per slot_fixes.yaml migration for: update_frequency
# Creation date: 2026-01-14
#
# REVISION FROM slot_fixes.yaml (lines 1893-1910):
# - label: has_or_had_frequency (slot)
# - label: UpdateFrequency (class) ← THIS FILE
# - link_branch 1: has_or_had_quantity → Quantity
# - link_branch 2: has_or_had_time_interval → TimeInterval
id: https://nde.nl/ontology/hc/classes/UpdateFrequency
name: UpdateFrequency
title: UpdateFrequency
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
dcterms: http://purl.org/dc/terms/
dcat: http://www.w3.org/ns/dcat#
schema: http://schema.org/
time: http://www.w3.org/2006/time#
imports:
- linkml:types
- ./Quantity
- ./TimeInterval
- ../slots/has_or_had_quantity
- ../slots/has_or_had_time_interval
default_range: string
classes:
UpdateFrequency:
description: >-
Structured representation of how often a device, system, or data source
sends updates or refreshes data.
**WHY A DEDICATED CLASS?**
Update frequency is more than a simple string - it has:
- **Quantity**: How many updates (e.g., "5" in "every 5 minutes")
- **Time Interval**: The period (e.g., "minutes" in "every 5 minutes")
- **Trigger-based**: Some updates are event-driven, not time-based
**SLOT_FIXES.YAML REVISION** (lines 1893-1910):
- Branch 1: has_or_had_quantity → Quantity (numeric value)
- Branch 2: has_or_had_time_interval → TimeInterval (duration)
**ONTOLOGY MAPPING**:
- class_uri: dcterms:Frequency (Dublin Core)
- Dublin Core `accrualPeriodicity` uses Frequency for collection update rates
**USE CASES**:
- IoT sensors: "Every 5 minutes", "Hourly", "Real-time"
- Data feeds: "Daily", "Weekly", "Monthly"
- Event-driven: "On proximity trigger", "On change"
**EXAMPLES**:
- Climate sensor: 5 updates per minute
- Beacon: On proximity trigger (no time interval)
- Database sync: Daily at midnight
class_uri: dcterms:Frequency
exact_mappings:
- dcterms:Frequency
- dcat:frequency
close_mappings:
- schema:Schedule
related_mappings:
- time:TemporalEntity
slots:
- has_or_had_quantity
- has_or_had_time_interval
attributes:
frequency_description:
range: string
description: >-
Human-readable description of the update frequency.
Examples: "Every 5 minutes", "Hourly", "Real-time", "On proximity trigger"
is_event_driven:
range: boolean
description: >-
True if updates are triggered by events rather than time intervals.
Examples: beacon proximity triggers, change detection, user actions.
ifabsent: "false"
trigger_type:
range: string
description: >-
Type of event that triggers updates (when is_event_driven is true).
Examples: "proximity", "change", "request", "threshold"
slot_usage:
has_or_had_quantity:
range: Quantity
inlined: true
description: >-
The numeric quantity component of the frequency.
For "every 5 minutes", this would be a Quantity with value 5.
examples:
- value: |
has_or_had_quantity:
numeric_value: 5
has_or_had_measurement_unit:
unit_symbol: "updates"
description: 5 updates per interval
has_or_had_time_interval:
range: TimeInterval
inlined: true
description: >-
The time interval/period component of the frequency.
For "every 5 minutes", this would be a TimeInterval representing minutes.
examples:
- value: |
has_or_had_time_interval:
duration_value: "PT1M"
duration_description: "per minute"
description: Per-minute interval
annotations:
custodian_types: '["*"]'
custodian_types_rationale: >-
Update frequency applicable to all custodian types with IoT or data systems.
custodian_types_primary: "*"
specificity_score: 0.35
specificity_rationale: >-
Moderate specificity - relevant to custodians with digital/IoT infrastructure.
examples:
- value: |
UpdateFrequency:
frequency_description: "Every 5 minutes"
has_or_had_quantity:
numeric_value: 5
has_or_had_time_interval:
duration_value: "PT1M"
duration_description: "minute"
description: Climate sensor updating every 5 minutes.
- value: |
UpdateFrequency:
frequency_description: "Hourly"
has_or_had_quantity:
numeric_value: 1
has_or_had_time_interval:
duration_value: "PT1H"
duration_description: "hour"
description: Hourly update frequency.
- value: |
UpdateFrequency:
frequency_description: "On proximity trigger"
is_event_driven: true
trigger_type: "proximity"
description: Event-driven beacon updates (no time interval).
- value: |
UpdateFrequency:
frequency_description: "Real-time"
is_event_driven: true
trigger_type: "continuous"
description: Real-time streaming updates.
comments:
- Created from slot_fixes.yaml migration (2026-01-14)
- Replaces simple string update_frequency slot
- Supports both time-based and event-driven frequencies
- Uses Dublin Core Frequency class for semantic alignment

View file

@ -5,6 +5,8 @@ imports:
- linkml:types - linkml:types
- ./VideoAnnotation - ./VideoAnnotation
- ./VideoTimeSegment - ./VideoTimeSegment
- ./Quantity
- ./Methodology
- ../slots/person_id - ../slots/person_id
- ../slots/has_average_scene_duration_seconds - ../slots/has_average_scene_duration_seconds
- ../slots/cut_count - ../slots/cut_count
@ -12,6 +14,7 @@ imports:
- ../slots/has_or_had_detected_landmark - ../slots/has_or_had_detected_landmark
- ../slots/has_or_had_detected_logo - ../slots/has_or_had_detected_logo
- ../slots/has_or_had_detected_object - ../slots/has_or_had_detected_object
- ../slots/has_or_had_quantity
- ../slots/detection_level - ../slots/detection_level
- ../slots/dissolve_count - ../slots/dissolve_count
- ../slots/face_bbox - ../slots/face_bbox
@ -60,8 +63,6 @@ imports:
- ../slots/total_characters_extracted - ../slots/total_characters_extracted
- ../slots/tracking_ids_assigned - ../slots/tracking_ids_assigned
- ../slots/transition_types_detected - ../slots/transition_types_detected
- ../slots/unique_face_count
- ../slots/unique_object_count
- ./SpecificityAnnotation - ./SpecificityAnnotation
- ./TemplateSpecificityScores - ./TemplateSpecificityScores
- ../enums/DetectionLevelEnum - ../enums/DetectionLevelEnum
@ -299,14 +300,13 @@ classes:
- has_or_had_detected_landmark - has_or_had_detected_landmark
- has_or_had_detected_logo - has_or_had_detected_logo
- has_or_had_detected_object - has_or_had_detected_object
- has_or_had_quantity
- includes_object_tracking - includes_object_tracking
- linked_to_collection - linked_to_collection
- object_classes_detected - object_classes_detected
- specificity_annotation - specificity_annotation
- template_specificity - template_specificity
- tracking_ids_assigned - tracking_ids_assigned
- unique_face_count
- unique_object_count
slot_usage: slot_usage:
has_or_had_detected_object: has_or_had_detected_object:
range: DetectedObject range: DetectedObject
@ -340,20 +340,34 @@ classes:
examples: examples:
- value: '[{label: ''Rijksmuseum building'', wikidata_id: ''Q190804''}]' - value: '[{label: ''Rijksmuseum building'', wikidata_id: ''Q190804''}]'
description: Detected landmark with Wikidata link description: Detected landmark with Wikidata link
unique_object_count: has_or_had_quantity:
range: integer range: Quantity
multivalued: true
required: false required: false
minimum_value: 0 inlined_as_list: true
description: >-
Quantities for unique object/face counts with methodology tracking.
RULE 53: Replaces unique_object_count and unique_face_count slots.
Use has_or_had_measurement_unit to specify OBJECT or FACE unit type.
Use has_or_had_methodology to document entity resolution approach.
examples: examples:
- value: 15 - value:
description: 15 unique objects identified quantity_value: 15
unique_face_count: has_or_had_measurement_unit:
range: integer unit_type: OBJECT
required: false has_or_had_methodology:
minimum_value: 0 methodology_type: ENTITY_RESOLUTION
examples: has_or_had_label: "DeepSORT tracking + embedding clustering"
- value: 3 description: 15 unique objects identified via entity resolution
description: 3 unique people identified - value:
quantity_value: 3
has_or_had_measurement_unit:
unit_type: FACE
has_or_had_methodology:
methodology_type: ENTITY_RESOLUTION
has_or_had_label: "ArcFace clustering"
confidence_threshold: 0.6
description: 3 unique people identified via face clustering
object_classes_detected: object_classes_detected:
range: string range: string
multivalued: true multivalued: true

View file

@ -7,7 +7,7 @@ imports:
- ./SocialMediaPostTypes - ./SocialMediaPostTypes
- ../slots/language - ../slots/language
- ../slots/has_aspect_ratio - ../slots/has_aspect_ratio
- ../slots/available_caption_languages # REMOVED 2026-01-15: ../slots/available_caption_languages - migrated to has_available_caption_language
- ../slots/caption_available - ../slots/caption_available
- ../slots/comment_author - ../slots/comment_author
- ../slots/comment_author_channel_id - ../slots/comment_author_channel_id
@ -36,7 +36,9 @@ imports:
- ../slots/template_specificity - ../slots/template_specificity
- ../slots/video_category_id - ../slots/video_category_id
- ../slots/video_comment - ../slots/video_comment
- ../slots/view_count - ../slots/has_or_had_quantity
- ./Quantity
# MIGRATED 2026-01-15: ../slots/view_count → ../slots/has_or_had_quantity per Rule 53
- ./SpecificityAnnotation - ./SpecificityAnnotation
- ./TemplateSpecificityScores - ./TemplateSpecificityScores
- ../slots/definition - ../slots/definition
@ -103,7 +105,7 @@ classes:
| caption | - | schema:caption | | caption | - | schema:caption |
| view_count | - | schema:interactionStatistic | | view_count | - | schema:interactionStatistic (via Quantity) |
**PLATFORM SUPPORT**: **PLATFORM SUPPORT**:
@ -193,7 +195,7 @@ classes:
- wikidata:Q604644 - wikidata:Q604644
slots: slots:
- has_aspect_ratio - has_aspect_ratio
- available_caption_languages - has_available_caption_language
- caption_available - caption_available
- comment_count - comment_count
- comments_fetched - comments_fetched
@ -214,7 +216,7 @@ classes:
- template_specificity - template_specificity
- video_category_id - video_category_id
- video_comment - video_comment
- view_count - has_or_had_quantity
slot_usage: slot_usage:
duration: duration:
range: string range: string
@ -275,12 +277,19 @@ classes:
- en - en
- de - de
description: Captions available in Dutch, English, German description: Captions available in Dutch, English, German
view_count: has_or_had_quantity:
range: integer range: Quantity
required: false inlined: true
minimum_value: 0 description: >-
View count for video. RULE 53: Replaces deprecated view_count with
structured Quantity class supporting measurement unit (VIEW) and
temporal extent for point-in-time observation.
examples: examples:
- value: 132 - value:
numeric_value: 132
has_or_had_measurement_unit: VIEW
temporal_extent:
begin_of_the_begin: "2025-12-01T23:16:22Z"
description: 132 views at observation time description: 132 views at observation time
like_count: like_count:
range: integer range: integer

View file

@ -0,0 +1,94 @@
# VisitingScholar - Visiting scholar/researcher programs accepted by institution
# Created per slot_fixes.yaml migration for: accepts_or_accepted_visiting_scholar
# Creation date: 2026-01-14
id: https://nde.nl/ontology/hc/classes/VisitingScholar
name: VisitingScholar
title: VisitingScholar
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
imports:
- linkml:types
default_range: string
classes:
VisitingScholar:
description: >-
Information about visiting scholar or researcher programs accepted by an institution.
**CONTEXT**:
Many heritage institutions accept visiting researchers who need access to
collections, archives, or special materials for academic research.
**PROGRAM TYPES**:
- Short-term research visits
- Fellowship programs
- Residencies
- Affiliated researcher positions
Used with `accepts_or_accepted` slot to indicate researcher access programs.
class_uri: schema:ResearchProject
close_mappings:
- schema:ScholarlyArticle
attributes:
program_type:
range: string
required: true
description: >-
Type of visiting program (e.g., "fellowship", "residency", "short_term_visit").
duration:
range: string
description: >-
Typical duration of visits (e.g., "1-4 weeks", "3-12 months").
eligibility:
range: string
multivalued: true
description: >-
Eligibility requirements (e.g., "PhD candidates", "University affiliates").
application_process:
range: string
description: >-
Description of the application process.
stipend_available:
range: boolean
description: >-
Whether financial support/stipend is available.
annotations:
custodian_types: '["A", "L", "R", "M"]'
custodian_types_rationale: >-
Visiting scholar programs primarily at archives, libraries, research centers, museums.
custodian_types_primary: "A"
specificity_score: 0.75
specificity_rationale: >-
High specificity - specific to research access programs.
examples:
- value: |
VisitingScholar:
program_type: "fellowship"
duration: "3-6 months"
eligibility:
- "PhD candidates"
- "Post-doctoral researchers"
stipend_available: true
description: Fellowship program for researchers.
- value: |
VisitingScholar:
program_type: "short_term_visit"
duration: "1-4 weeks"
application_process: "Submit research proposal via email"
description: Short-term research visit program.

View file

@ -0,0 +1,134 @@
# WikiDataEntry class
# Reference to a Wikidata entity for alignments and equivalences
#
# Generation date: 2026-01-15
# Rule compliance: 0 (LinkML single source of truth), 38 (slot centralization), 53 (slot_fixes.yaml)
#
# This class supports 5 slot migrations per slot_fixes.yaml:
# - wikidata_mapping
# - wikidata_equivalent
# - wikidata_class
# - wikidata_alignment
# - wikidata
#
# NOTE: Similar to WikidataEntity but designed as migration target for slot_fixes.yaml
id: https://nde.nl/ontology/hc/class/WikiDataEntry
name: wikidata_entry_class
title: WikiDataEntry Class
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
wikibase: http://wikiba.se/ontology#
wd: http://www.wikidata.org/entity/
schema: http://schema.org/
skos: http://www.w3.org/2004/02/skos/core#
prov: http://www.w3.org/ns/prov#
default_prefix: hc
imports:
- linkml:types
- ../metadata
- ../slots/wikidata_qid
- ../slots/wikidata_label
- ../slots/wikidata_description
- ../slots/language
- ../slots/specificity_annotation
- ../slots/template_specificity
- ./SpecificityAnnotation
- ./TemplateSpecificityScores
classes:
WikiDataEntry:
class_uri: wikibase:Item
description: |
Reference to a Wikidata entity (Q-item) for alignments and equivalences.
**Purpose**:
WikiDataEntry provides a reusable class for representing Wikidata entity
references with Q-number identifier, label, and description.
Used for ontology alignments, equivalence mappings, and classification.
**Ontological Alignment**:
- **Primary**: `wikibase:Item` - Wikibase item class
- **Close**: `schema:Thing` - general web entity
- **Related**: `skos:Concept` - controlled vocabulary concept
**Use Cases**:
- Ontology alignment: `wikidata_alignment` → relates schema class to Wikidata Q
- Equivalence: `wikidata_equivalent` → marks semantic equivalence
- Classification: `wikidata_class` → instance_of relationship
- General mapping: `wikidata_mapping` → related concept
**Replaces** (per slot_fixes.yaml):
- `wikidata_mapping` (string Q-number)
- `wikidata_equivalent` (string Q-number)
- `wikidata_class` (string Q-number)
- `wikidata_alignment` (string Q-number)
- `wikidata` (string Q-number)
exact_mappings:
- wikibase:Item
close_mappings:
- schema:Thing
related_mappings:
- skos:Concept
- prov:Entity
slots:
- wikidata_qid
- wikidata_label
- wikidata_description
- language
- specificity_annotation
- template_specificity
slot_usage:
wikidata_qid:
description: |
The Wikidata Q-number identifier (e.g., Q12345).
range: string
required: true
pattern: "^Q[0-9]+$"
wikidata_label:
description: |
Human-readable label from Wikidata.
range: string
required: false
wikidata_description:
description: |
Description from Wikidata.
range: string
required: false
language:
description: |
Language code for the label and description.
Default: "en"
range: string
required: false
pattern: "^[a-z]{2}(-[A-Z]{2})?$"
annotations:
custodian_types: '["*"]'
custodian_types_rationale: Generic Wikidata reference class applicable to all types.
custodian_types_primary: null
specificity_score: 0.2
specificity_rationale: Broadly applicable generic class for Wikidata links.
examples:
- value: |
wikidata_qid: "Q33506"
wikidata_label: "museum"
wikidata_description: "institution that holds and displays collections"
language: en
description: "Wikidata reference for 'museum' concept"
- value: |
wikidata_qid: "Q190804"
wikidata_label: "Rijksmuseum"
wikidata_description: "Dutch national museum in Amsterdam"
language: en
description: "Wikidata reference for specific institution"

View file

@ -0,0 +1,91 @@
# WikiDataIdentifier - A Wikidata Q-number identifier
# Created per slot_fixes.yaml migration for: wikidata_id, wikidata_entity_id, wikidata_entity
# Creation date: 2026-01-14
id: https://nde.nl/ontology/hc/classes/WikiDataIdentifier
name: WikiDataIdentifier
title: WikiDataIdentifier
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
wikidata: http://www.wikidata.org/entity/
schema: http://schema.org/
dct: http://purl.org/dc/terms/
imports:
- linkml:types
default_range: string
classes:
WikiDataIdentifier:
description: >-
A Wikidata entity identifier (Q-number) that uniquely identifies an entity
in the Wikidata knowledge base.
**DISTINCTION FROM WikiDataEntry**:
- `WikiDataIdentifier` is for simple Q-number storage (identifier only)
- `WikiDataEntry` includes full entity data (label, description, claims)
Use `WikiDataIdentifier` when:
- Only storing the Q-number reference
- Linking to Wikidata without caching entity data
**FORMAT**: Q followed by digits (e.g., Q190804 for Rijksmuseum)
**URL PATTERN**: https://www.wikidata.org/wiki/Q{number}
class_uri: dct:Identifier
close_mappings:
- schema:PropertyValue
- wikidata:Q43649390 # Wikidata identifier
attributes:
qid:
range: string
required: true
pattern: "^Q[0-9]+$"
description: >-
The Wikidata Q-number (e.g., Q190804).
Must start with 'Q' followed by one or more digits.
url:
range: uri
description: >-
Full URL to the Wikidata entity page.
Auto-derivable from qid: https://www.wikidata.org/wiki/{qid}
label:
range: string
description: >-
Human-readable label for the entity (optional cache).
May be language-specific.
retrieved_at:
range: datetime
description: >-
Timestamp when this identifier was retrieved/verified.
annotations:
custodian_types: '["*"]'
custodian_types_rationale: >-
Wikidata identifiers applicable to all custodian types.
custodian_types_primary: "*"
specificity_score: 0.3
specificity_rationale: >-
Low specificity - universal identifier type.
examples:
- value: |
WikiDataIdentifier:
qid: "Q190804"
url: "https://www.wikidata.org/wiki/Q190804"
label: "Rijksmuseum"
description: Wikidata identifier for the Rijksmuseum.
- value: |
WikiDataIdentifier:
qid: "Q1526131"
label: "Biblioteca Nacional do Brasil"
description: Wikidata identifier for the National Library of Brazil.

View file

@ -0,0 +1,101 @@
# XPath - An XPath expression for locating elements in HTML/XML documents
# Created per slot_fixes.yaml migration for: xpath
# Creation date: 2026-01-14
id: https://nde.nl/ontology/hc/classes/XPath
name: XPath
title: XPath
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
prov: http://www.w3.org/ns/prov#
schema: http://schema.org/
xsd: http://www.w3.org/2001/XMLSchema#
imports:
- linkml:types
default_range: string
classes:
XPath:
description: >-
An XPath expression used to locate a specific element within an HTML or XML document.
**CRITICAL PROVENANCE FIELD**:
XPath expressions provide the essential link between extracted data values and their
original source location in archived documents. Without an XPath, a claim extracted
from a webpage is unverifiable.
**FORMAT**: Standard XPath 1.0 expressions
**EXAMPLE**: `/html[1]/body[1]/div[6]/div[1]/table[3]/tbody[1]/tr[1]/td[1]/p[6]`
**USAGE CONTEXT**:
Used with `has_or_had_provenance_path` slot to link provenance records to
specific locations in source documents.
class_uri: prov:Location
close_mappings:
- schema:xpath
related_mappings:
- prov:atLocation
attributes:
expression:
range: string
required: true
description: >-
The XPath expression string.
Example: /html[1]/body[1]/div[6]/div[1]/table[3]/tbody[1]/tr[1]/td[1]/p[6]
pattern: "^/.*"
matched_text:
range: string
description: >-
The text content found at this XPath location.
Used for verification and debugging.
match_score:
range: float
minimum_value: 0.0
maximum_value: 1.0
description: >-
Confidence score (0.0 to 1.0) for the XPath match.
1.0 = exact match, <1.0 = fuzzy match.
source_document:
range: uriorcurie
description: >-
URI or path to the source document where this XPath applies.
Example: web/GHCID/example.org/rendered.html
annotations:
custodian_types: '["*"]'
custodian_types_rationale: >-
XPath provenance is relevant for any custodian type where web content
is extracted and archived.
custodian_types_primary: "*"
specificity_score: 0.7
specificity_rationale: >-
High specificity - only relevant for web-extracted data with HTML archival.
examples:
- value: |
XPath:
expression: "/html[1]/body[1]/div[6]/div[1]/table[3]/tbody[1]/tr[1]/td[1]/p[6]"
matched_text: "Historische Vereniging Nijeveen"
match_score: 1.0
source_document: "web/0021/historischeverenigingnijeveen.nl/rendered.html"
description: >-
XPath extraction pointing to an institution name in archived HTML.
- value: |
XPath:
expression: "//meta[@property='og:title']/@content"
matched_text: "Amsterdam Museum - Official Website"
match_score: 0.95
description: >-
XPath to OpenGraph metadata in a webpage header.

View file

@ -0,0 +1,31 @@
id: https://nde.nl/ontology/hc/enum/AsserterTypeEnum
name: AsserterTypeEnum
title: Asserter Type Enum
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
prov: http://www.w3.org/ns/prov#
foaf: http://xmlns.com/foaf/0.1/
imports:
- linkml:types
default_prefix: hc
enums:
AsserterTypeEnum:
description: >-
Type of agent making an assertion.
enum_uri: hc:AsserterTypeEnum
permissible_values:
HUMAN_ANALYST:
description: Human expert or analyst making a judgment.
meaning: foaf:Person
AUTOMATED_SYSTEM:
description: Software system or script performing automated analysis.
meaning: prov:SoftwareAgent
AI_AGENT:
description: AI/ML model or agent making an assertion.
meaning: prov:SoftwareAgent
ORGANIZATION:
description: Organization or institution making a formal assertion.
meaning: foaf:Organization
UNKNOWN:
description: Asserter type is not specified or cannot be determined.

View file

@ -0,0 +1,169 @@
id: https://nde.nl/ontology/hc/enum/MeasureUnitEnum
name: measure_unit_enum
title: Measure Unit Enum
description: >-
Enumeration of measurement units for area, length, and related quantities.
**RULE 53 COMPLIANT**: Supports the MeasureUnit class for standardized
unit representation in Area and other measurement classes.
**STANDARDS ALIGNMENT**:
- ISO 80000-1 (Quantities and units)
- QUDT (Quantities, Units, Dimensions and Types)
- UCUM (Unified Code for Units of Measure)
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
qudt: http://qudt.org/vocab/unit/
ucum: http://unitsofmeasure.org/ucum/
imports:
- linkml:types
default_prefix: hc
enums:
MeasureUnitEnum:
description: >-
Standard measurement units for heritage custodian facility metrics.
Covers area (m², hectares, acres), length (m, km, linear meters),
and related quantities for buildings, sites, and collections.
permissible_values:
# Area units
SQUARE_METER:
description: Square meter (m²) - SI unit for area
meaning: qudt:M2
annotations:
ucum_code: m2
unit_type: area
conversion_to_m2: 1.0
SQUARE_KILOMETER:
description: Square kilometer (km²)
meaning: qudt:KiloM2
annotations:
ucum_code: km2
unit_type: area
conversion_to_m2: 1000000.0
HECTARE:
description: Hectare (ha) - 10,000 m²
meaning: qudt:HA
annotations:
ucum_code: har
unit_type: area
conversion_to_m2: 10000.0
ACRE:
description: Acre - 4,046.86 m² (imperial)
meaning: qudt:AC
annotations:
ucum_code: "[acr_us]"
unit_type: area
conversion_to_m2: 4046.8564224
SQUARE_FOOT:
description: Square foot (ft²) - imperial area unit
meaning: qudt:FT2
annotations:
ucum_code: "[sft_i]"
unit_type: area
conversion_to_m2: 0.09290304
# Length units
METER:
description: Meter (m) - SI unit for length
meaning: qudt:M
annotations:
ucum_code: m
unit_type: length
KILOMETER:
description: Kilometer (km)
meaning: qudt:KiloM
annotations:
ucum_code: km
unit_type: length
LINEAR_METER:
description: Linear meter - for archival shelf measurement
meaning: qudt:M
annotations:
ucum_code: m
unit_type: length
usage_context: archival_shelving
FOOT:
description: Foot (ft) - imperial length unit
meaning: qudt:FT
annotations:
ucum_code: "[ft_i]"
unit_type: length
# Special units for heritage context
RUNNING_METER:
description: Running meter - linear extent of collection material
meaning: qudt:M
annotations:
ucum_code: m
unit_type: length
usage_context: collection_extent
SHELF_METER:
description: Shelf meter - archival/library shelving measurement
meaning: qudt:M
annotations:
ucum_code: m
unit_type: length
usage_context: storage_capacity
# Count units (Rule 53: link_branch migration for visitor_count, view_count)
VISITOR:
description: Visitor count unit - for attendance metrics
meaning: hc:VisitorUnit
annotations:
ucum_code: "1"
unit_type: count
usage_context: visitor_metrics
VIEW:
description: View count unit - for digital content metrics (videos, pages)
meaning: hc:ViewUnit
annotations:
ucum_code: "1"
unit_type: count
usage_context: digital_metrics
ITEM:
description: Item count unit - for collection object counts
meaning: hc:ItemUnit
annotations:
ucum_code: "1"
unit_type: count
usage_context: collection_metrics
FTE:
description: Full-time equivalent - for staff measurement
meaning: hc:FTEUnit
annotations:
ucum_code: "1"
unit_type: count
usage_context: staff_metrics
HEADCOUNT:
description: Headcount - total number of individuals
meaning: hc:HeadcountUnit
annotations:
ucum_code: "1"
unit_type: count
usage_context: staff_metrics
OBJECT:
description: Object count unit - for museum/archive object counts
meaning: hc:ObjectUnit
annotations:
ucum_code: "1"
unit_type: count
usage_context: collection_metrics
FACE:
description: Face count unit - for unique faces in photo collections
meaning: hc:FaceUnit
annotations:
ucum_code: "1"
unit_type: count
usage_context: digital_metrics
# Unknown/unspecified
UNKNOWN:
description: Unit not specified or unknown
annotations:
unit_type: unknown

View file

@ -0,0 +1,82 @@
id: https://nde.nl/ontology/hc/enum/MethodologyTypeEnum
name: methodology_type_enum
title: Methodology Type Enum
description: >-
Enumeration of methodology types for measurement derivation.
**RULE 53 COMPLIANT**: Created for unique_object_count and unique_face_count
migration per slot_fixes.yaml revision (lines 1951-1994).
**SLOT_FIXES.YAML REFERENCE**:
The revision specifies `value: entity_resolution` for both unique_object_count
and unique_face_count, indicating these counts are derived via entity resolution
(deduplication) methodologies.
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
imports:
- linkml:types
default_prefix: hc
enums:
MethodologyTypeEnum:
description: >-
Types of methodologies used to derive measurements or observations.
**PRIMARY USE CASE**: Video annotation unique counts
When counting unique objects or faces in video, different methodologies
produce different results. This enum captures the approach used.
permissible_values:
ENTITY_RESOLUTION:
description: >-
Deduplication via feature matching and clustering.
Used to count unique entities across multiple observations.
Example: Counting unique faces by clustering face embeddings.
annotations:
slot_fixes_value: entity_resolution
typical_use: unique_object_count, unique_face_count
OBJECT_TRACKING:
description: >-
Multi-object tracking across video frames.
Maintains identity of objects as they move through scenes.
Example: DeepSORT, ByteTrack tracking algorithms.
annotations:
typical_use: video_object_annotation
MANUAL_COUNT:
description: >-
Human manual counting or annotation.
May involve multiple reviewers for accuracy.
annotations:
typical_use: ground_truth_annotation
STATISTICAL_SAMPLING:
description: >-
Count derived from statistical sampling methodology.
Extrapolated from sample to estimate total population.
annotations:
typical_use: visitor_estimates, large_collection_counts
AUTOMATED_DETECTION:
description: >-
Automated detection without deduplication.
Raw detection counts that may include duplicates.
annotations:
typical_use: raw_detection_counts
HYBRID:
description: >-
Combination of automated and manual methodologies.
Automated detection with manual verification/correction.
annotations:
typical_use: quality_assured_annotation
UNKNOWN:
description: >-
Methodology not specified or unknown.

View file

@ -0,0 +1,43 @@
id: https://nde.nl/ontology/hc/enum/QuantityTypeEnum
name: QuantityTypeEnum
title: Quantity Type Enum
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
qudt: http://qudt.org/schema/qudt/
schema: http://schema.org/
imports:
- linkml:types
default_prefix: hc
enums:
QuantityTypeEnum:
description: >-
Type of quantity being measured.
enum_uri: hc:QuantityTypeEnum
permissible_values:
STAFF_COUNT:
description: Number of staff members or employees.
meaning: schema:numberOfEmployees
COLLECTION_SIZE:
description: Number of items in a collection.
meaning: schema:size
VISITOR_COUNT:
description: Number of visitors (annual, daily, etc.).
meaning: schema:numberOfAttendees
BUDGET_AMOUNT:
description: Financial amount (budget, revenue, cost).
meaning: schema:amount
AREA:
description: Physical area or floor space.
meaning: schema:floorSize
DURATION:
description: Time duration or period.
meaning: schema:duration
LINEAR_EXTENT:
description: Linear measurement (e.g., archive meters).
meaning: qudt:Length
CAPACITY:
description: Maximum capacity (seats, storage, etc.).
meaning: schema:maximumAttendeeCapacity
OTHER:
description: Other type of quantity not listed.

View file

@ -0,0 +1,67 @@
# accepts_or_accepted - Generic slot for things an institution accepts
# Created per slot_fixes.yaml migration for: accepts_or_accepted_external_work,
# accepts_or_accepted_payment_method, accepts_or_accepted_visiting_scholar
# Creation date: 2026-01-14
id: https://nde.nl/ontology/hc/slot/accepts_or_accepted
name: accepts_or_accepted_slot
title: Accepts Or Accepted Slot
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
imports:
- linkml:types
default_prefix: hc
slots:
accepts_or_accepted:
description: >-
Generic slot for things an institution accepts or has accepted.
**TEMPORAL SEMANTICS** (RiC-O style):
The "accepts_or_accepted" naming indicates policies can change:
- Payment methods may be added/removed
- External work acceptance policies change
- Visiting scholar programs may start/end
**USE CASES**:
- Payment methods accepted (credit cards, cash, digital)
- External work (conservation, digitization contracts)
- Visiting scholars (research programs)
**RANGE**:
This is a generic slot - use slot_usage in classes to constrain
the range to specific types (ExternalWork, PaymentMethod, VisitingScholar).
range: string
slot_uri: schema:acceptedPaymentMethod
multivalued: true
close_mappings:
- schema:acceptedPaymentMethod
annotations:
custodian_types: '["*"]'
custodian_types_rationale: >-
Acceptance policies applicable to various custodian types.
custodian_types_primary: "*"
specificity_score: 0.5
specificity_rationale: >-
Moderate specificity - depends on context of what is accepted.
examples:
- value: |
accepts_or_accepted:
- "credit_card"
- "debit_card"
- "cash"
description: Payment methods accepted by institution.
comments:
- Created from slot_fixes.yaml migration (2026-01-14)
- Generic slot for acceptance-related relationships
- Constrain range via slot_usage in specific classes

View file

@ -1,15 +0,0 @@
id: https://nde.nl/ontology/hc/slot/annual_participants
name: annual_participants_slot
title: Annual Participants Slot
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
imports:
- linkml:types
default_prefix: hc
slots:
annual_participants:
description: "[AUTO-GENERATED STUB] Annual Participants"
range: string
slot_uri: hc:annualParticipants

View file

@ -0,0 +1,33 @@
id: https://nde.nl/ontology/hc/slot/applies_or_applied_to_call
name: applies_or_applied_to_call_slot
title: Applies Or Applied To Call Slot
prefixes:
dcterms: http://purl.org/dc/terms/
hc: https://nde.nl/ontology/hc/
linkml: https://w3id.org/linkml/
schema: http://schema.org/
rico: https://www.ica.org/standards/RiC/ontology#
imports:
- linkml:types
default_prefix: hc
slots:
applies_or_applied_to_call:
description: >-
The funding call or opportunity that this requirement applies (or applied) to.
Uses RiC-O style temporal naming to indicate the relationship may be
current or historical.
range: uriorcurie
slot_uri: rico:appliesOrAppliedTo
exact_mappings:
- schema:isRelatedTo
close_mappings:
- dcterms:relation
- rico:isOrWasRelatedTo
annotations:
custodian_types: '["*"]'
custodian_types_rationale: >-
Applicable to all heritage custodian types for funding requirements.
custodian_types_primary: M
specificity_score: 0.6
specificity_rationale: >-
Moderately specific slot for funding requirement tracking.

View file

@ -1,28 +0,0 @@
id: https://nde.nl/ontology/hc/slot/applies_to_call
name: applies_to_call_slot
title: Applies To Call Slot
prefixes:
dcterms: http://purl.org/dc/terms/
hc: https://nde.nl/ontology/hc/
linkml: https://w3id.org/linkml/
schema: http://schema.org/
imports:
- linkml:types
default_prefix: hc
slots:
applies_to_call:
description: >-
Call or announcement that something applies to.
range: string
slot_uri: schema:isRelatedTo
close_mappings:
- schema:isRelatedTo
- dcterms:relation
annotations:
custodian_types: '["*"]'
custodian_types_rationale: >-
Applicable to all heritage custodian types.
custodian_types_primary: M
specificity_score: 0.5
specificity_rationale: >-
Moderately specific slot.

View file

@ -0,0 +1,26 @@
id: https://nde.nl/ontology/hc/slot/approximation_level
name: approximation_level_slot
title: Approximation Level Slot
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
imports:
- linkml:types
default_prefix: hc
slots:
approximation_level:
description: >-
Level of approximation/uncertainty for a value.
See ApproximationLevelEnum for valid values:
- EXACT: Known with certainty
- APPROXIMATE: Close but not exact
- ESTIMATED: Calculated/inferred
- UNCERTAIN: Significant doubt
- UNKNOWN: Cannot be determined
range: string
slot_uri: hc:approximationLevel
annotations:
specificity_score: 0.30
specificity_rationale: >-
Approximation level is broadly useful for expressing uncertainty.

View file

@ -0,0 +1,21 @@
# ARCHIVED 2026-01-15: Migrated to has_or_had_annual_participant_count
# Reason: RiC-O style temporal naming convention (Rule 39)
# Replacement: has_or_had_annual_participant_count
# Affected classes: EducationCenter
id: https://nde.nl/ontology/hc/slot/annual_participants
name: annual_participants_slot
title: Annual Participants Slot (ARCHIVED)
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
imports:
- linkml:types
default_prefix: hc
slots:
annual_participants:
description: "[ARCHIVED] Annual Participants - Use has_or_had_annual_participant_count instead"
range: string
slot_uri: hc:annualParticipants
deprecated: true
deprecated_element_has_exact_replacement: has_or_had_annual_participant_count

View file

@ -0,0 +1,27 @@
# ARCHIVED 2026-01-15: Migrated to applies_or_applied_to_call
# Reason: RiC-O style temporal naming convention (Rule 39)
# Replacement: applies_or_applied_to_call
# Affected classes: FundingRequirement
id: https://nde.nl/ontology/hc/slot/applies_to_call
name: applies_to_call_slot
title: Applies To Call Slot (ARCHIVED)
prefixes:
dcterms: http://purl.org/dc/terms/
hc: https://nde.nl/ontology/hc/
linkml: https://w3id.org/linkml/
schema: http://schema.org/
imports:
- linkml:types
default_prefix: hc
slots:
applies_to_call:
description: >-
[ARCHIVED] Call or announcement that something applies to.
Use applies_or_applied_to_call instead.
range: string
slot_uri: schema:isRelatedTo
deprecated: true
deprecated_element_has_exact_replacement: applies_or_applied_to_call
close_mappings:
- schema:isRelatedTo
- dcterms:relation

View file

@ -1,3 +1,11 @@
# ARCHIVED: 2026-01-15
# REASON: Migrated to has_area_in_hectare slot
# MIGRATION: Migration 34 - area_hectares -> has_area_in_hectare
# AFFECTED CLASS: OutdoorSite
# NOTES: Original slot used string range, new slot uses float range
# slot_fixes.yaml suggested Area+MeasureUnit classes but
# has_area_in_hectare already exists with proper semantics
id: https://nde.nl/ontology/hc/slot/area_hectares id: https://nde.nl/ontology/hc/slot/area_hectares
name: area_hectares_slot name: area_hectares_slot
title: Area Hectares Slot title: Area Hectares Slot

View file

@ -1,3 +1,11 @@
# ARCHIVED: 2026-01-15
# REASON: Migrated to has_arrangement_note (RiC-O style naming convention)
# MIGRATION: slot_fixes.yaml entry for arrangement_notes
# AFFECTED CLASS: CustodianArchive.yaml
# NEW SLOT: has_arrangement_note (multivalued)
#
# Original slot definition preserved below for reference:
# ---
id: https://nde.nl/ontology/hc/slot/arrangement_notes id: https://nde.nl/ontology/hc/slot/arrangement_notes
name: arrangement_notes_slot name: arrangement_notes_slot
title: Arrangement Notes Slot title: Arrangement Notes Slot

View file

@ -1,3 +1,11 @@
# ARCHIVED: 2026-01-15
# REASON: Migrated to has_available_caption_language (RiC-O style naming convention)
# MIGRATION: slot_fixes.yaml entry for available_caption_languages
# AFFECTED CLASS: VideoPost.yaml
# NEW SLOT: has_available_caption_language (multivalued string)
#
# Original slot definition preserved below for reference:
# ---
id: https://nde.nl/ontology/hc/slot/available_caption_languages id: https://nde.nl/ontology/hc/slot/available_caption_languages
name: available_caption_languages_slot name: available_caption_languages_slot
title: Available Caption Languages Slot title: Available Caption Languages Slot

View file

@ -1,6 +1,13 @@
# ARCHIVED 2026-01-15: beneficiary_group
# Migrated to: has_or_had_beneficiary (RiC-O style naming)
# Reason: Slot naming convention compliance (Rule 39)
# Session: session-2026-01-15-slot-migrations
#
# Original slot preserved below for reference:
id: https://nde.nl/ontology/hc/slot/beneficiary_group id: https://nde.nl/ontology/hc/slot/beneficiary_group
name: beneficiary_group_slot name: beneficiary_group_slot
title: Beneficiary Groups Slot title: Beneficiary Groups Slot (ARCHIVED)
prefixes: prefixes:
linkml: https://w3id.org/linkml/ linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/ hc: https://nde.nl/ontology/hc/
@ -10,42 +17,30 @@ imports:
default_prefix: hc default_prefix: hc
slots: slots:
beneficiary_group: beneficiary_group:
description: 'Who benefits from the organization''s programs and services. description: >-
ARCHIVED: Use has_or_had_beneficiary instead.
Who benefits from the organization's programs and services.
Identifies target populations: Identifies target populations:
- **Heritage organizations**: Museums, archives, libraries, societies - **Heritage organizations**: Museums, archives, libraries, societies
- **Heritage professionals**: Conservators, curators, archivists, educators - **Heritage professionals**: Conservators, curators, archivists, educators
- **Local communities**: Residents near heritage sites, indigenous peoples - **Local communities**: Residents near heritage sites, indigenous peoples
- **Policy makers**: Government officials, legislators, planners - **Policy makers**: Government officials, legislators, planners
- **Students and researchers**: Academic community, early-career professionals - **Students and researchers**: Academic community, early-career professionals
- **General public**: Tourists, volunteers, heritage enthusiasts - **General public**: Tourists, volunteers, heritage enthusiasts
- **Property owners**: Private owners of heritage buildings - **Property owners**: Private owners of heritage buildings
- **Emergency responders**: First responders, military, disaster relief - **Emergency responders**: First responders, military, disaster relief
Beneficiary identification clarifies organizational impact. Beneficiary identification clarifies organizational impact.
Examples: Examples:
- "Heritage organizations, Local communities, Policy makers, General public" - "Heritage organizations, Local communities, Policy makers, General public"
- "Conservation professionals, Students, Heritage property owners" - "Conservation professionals, Students, Heritage property owners"
- "Museums and libraries, Heritage managers, Volunteers" - "Museums and libraries, Heritage managers, Volunteers"
- "Indigenous communities, Cultural rights holders, Traditional practitioners" - "Indigenous communities, Cultural rights holders, Traditional practitioners"
'
range: string range: string
multivalued: true multivalued: true
slot_uri: schema:audience slot_uri: schema:audience
deprecated: "Use has_or_had_beneficiary instead"
deprecated_element_has_exact_replacement: has_or_had_beneficiary

View file

@ -1,3 +1,11 @@
# ARCHIVED: 2026-01-14
# REASON: Migrated to has_or_had_head per Rule 53 (Full Slot Migration)
# NEW SLOT: has_or_had_head.yaml with org:hasMember slot_uri and Person range
# MIGRATION SESSION: session-2026-01-14-final-migrations
#
# Original slot used custom hc:branchHead predicate with string range.
# New slot uses W3C ORG standard pattern with Person class for better semantics.
id: https://nde.nl/ontology/hc/slot/branch_head id: https://nde.nl/ontology/hc/slot/branch_head
name: branch_head_slot name: branch_head_slot
title: Branch Head Slot title: Branch Head Slot
@ -20,3 +28,4 @@ slots:
' '
range: string range: string
slot_uri: hc:branchHead slot_uri: hc:branchHead
deprecated: "ARCHIVED 2026-01-14: Use has_or_had_head instead"

View file

@ -0,0 +1,40 @@
# =============================================================================
# ARCHIVED SLOT: building_floor_area_sqm
# =============================================================================
# Archive Date: 2026-01-15
# Archived By: session-2026-01-15-area-migration
# Reason: Migrated to generic has_or_had_area slot with Area class per Rule 53.
# The bespoke slot violated the principle that slots should use generic
# predicates that can be reused across multiple classes.
#
# Migration Target (per slot_fixes.yaml):
# - Slot: has_or_had_area (generic)
# - Class: Area (with area_value, has_or_had_unit, measurement_date, etc.)
# - Enum: MeasureUnitEnum (SQUARE_METER, HECTARE, ACRE, etc.)
#
# Classes Updated:
# - HistoricBuilding.yaml: Now uses has_or_had_area with range Area
#
# The generic pattern allows:
# - Multiple area measurements over time (multivalued)
# - Different units (square meters, hectares, square feet)
# - Measurement metadata (date, method, is_estimate)
# - Temporal semantics via has_or_had_ prefix (Rule 39)
# =============================================================================
id: https://nde.nl/ontology/hc/slot/building_floor_area_sqm
name: building_floor_area_sqm_slot
title: Building Floor Area Sqm Slot
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
imports:
- linkml:types
default_prefix: hc
slots:
building_floor_area_sqm:
description: 'Floor area of building in square meters.
'
range: float
slot_uri: hc:buildingFloorAreaSqm

View file

@ -0,0 +1,55 @@
# =============================================================================
# ARCHIVED SLOT: has_area_in_hectare
# =============================================================================
# Archive Date: 2026-01-15
# Archived By: session-2026-01-15-area-migration
# Reason: CORRECTED - This bespoke slot was incorrectly created in a previous
# session. It violated Rule 53 (Full Slot Migration) which requires
# using GENERIC predicates from slot_fixes.yaml, NOT domain-specific ones.
#
# Migration Target (per slot_fixes.yaml):
# - Slot: has_or_had_area (generic)
# - Class: Area (with area_value, has_or_had_unit, measurement_date, etc.)
# - Enum: MeasureUnitEnum (HECTARE, SQUARE_METER, ACRE, etc.)
#
# Classes Updated:
# - OutdoorSite.yaml: Now uses has_or_had_area with range Area
#
# The generic pattern allows:
# - Multiple area measurements over time (multivalued)
# - Different units (hectares, square meters, acres)
# - Measurement metadata (date, method, is_estimate)
# - Temporal semantics via has_or_had_ prefix (Rule 39)
# =============================================================================
id: https://nde.nl/ontology/hc/slot/has_area_in_hectare
name: has_area_in_hectare_slot
title: Has Area In Hectares Slot
prefixes:
geosparql: http://www.opengis.net/ont/geosparql#
hc: https://nde.nl/ontology/hc/
linkml: https://w3id.org/linkml/
schema: http://schema.org/
imports:
- linkml:types
default_prefix: hc
slots:
has_area_in_hectare:
description: 'Area of outdoor site in hectares.
Schema.org: size for area measurement.
'
range: float
slot_uri: schema:size
close_mappings:
- schema:size
related_mappings:
- geosparql:hasGeometry
annotations:
custodian_types: '["*"]'
custodian_types_rationale: Applicable to all heritage custodian types.
custodian_types_primary: M
specificity_score: 0.5
specificity_rationale: Moderately specific slot.

View file

@ -0,0 +1,32 @@
# ARCHIVED: 2026-01-15
# REASON: Migrated to is_or_was_approved_by + Approver class (Rule 39, Rule 53)
# REPLACEMENT: is_or_was_approved_by with range Approver
# MIGRATION: Migration 30 - approved_by family consolidation
#
# This slot was specific to StorageConditionPolicy. It has been replaced by
# the generic is_or_was_approved_by slot which uses the Approver class for
# structured approval tracking with temporal semantics.
#
# Original slot preserved below for reference.
id: https://nde.nl/ontology/hc/slot/policy_approved_by
name: policy_approved_by_slot
title: Policy Approved By Slot (ARCHIVED)
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
imports:
- linkml:types
default_prefix: hc
slots:
policy_approved_by:
description: |
ARCHIVED: 2026-01-15
REPLACEMENT: is_or_was_approved_by with range Approver
Original description:
Person or body that approved this policy.
range: string
slot_uri: hc:policyApprovedBy
deprecated: "Use is_or_was_approved_by with Approver class instead"
deprecated_element_has_exact_replacement: is_or_was_approved_by

View file

@ -0,0 +1,52 @@
# ARCHIVED: 2026-01-15
# REASON: Migrated to is_or_was_approved_by + Approver class (Rule 39, Rule 53)
# REPLACEMENT: is_or_was_approved_by with range Approver
# MIGRATION: Migration 30 - approved_by family consolidation
#
# This slot was used in Budget class. It has been replaced by the generic
# is_or_was_approved_by slot which uses the Approver class for structured
# approval tracking with temporal semantics following RiC-O naming conventions.
#
# Original slot preserved below for reference.
id: https://nde.nl/ontology/hc/slot/was_approved_by
name: was_approved_by_slot
title: Was Approved By Slot (ARCHIVED)
prefixes:
dcterms: http://purl.org/dc/terms/
hc: https://nde.nl/ontology/hc/
linkml: https://w3id.org/linkml/
prov: http://www.w3.org/ns/prov#
schema: http://schema.org/
imports:
- linkml:types
default_prefix: hc
slots:
was_approved_by:
description: |
ARCHIVED: 2026-01-15
REPLACEMENT: is_or_was_approved_by with range Approver
Original description:
Governance body or authority that approved budget.
**Examples**:
- "Board of Directors"
- "Executive Committee"
- "Ministry of Culture"
- "City Council"
range: string
slot_uri: prov:wasAttributedTo
exact_mappings:
- prov:wasAttributedTo
close_mappings:
- dcterms:creator
- prov:wasInfluencedBy
annotations:
custodian_types: '["*"]'
custodian_types_rationale: Applicable to all heritage custodian types.
custodian_types_primary: M
specificity_score: 0.5
specificity_rationale: Moderately specific slot.
deprecated: "Use is_or_was_approved_by with Approver class instead"
deprecated_element_has_exact_replacement: is_or_was_approved_by

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