feat: Migrate and enhance currency and area slots; introduce Currency class

This commit is contained in:
kempersc 2026-01-14 16:58:25 +01:00
parent 6da794ee38
commit 8902f0e082
10 changed files with 391 additions and 90 deletions

View file

@ -1,12 +1,12 @@
{
"generated": "2026-01-14T15:04:09.918Z",
"generated": "2026-01-14T15:54:10.748Z",
"schemaRoot": "/schemas/20251121/linkml",
"totalFiles": 2883,
"totalFiles": 2888,
"categoryCounts": {
"main": 4,
"class": 683,
"enum": 147,
"slot": 2045,
"class": 689,
"enum": 149,
"slot": 2042,
"module": 4
},
"categories": [
@ -165,6 +165,11 @@
"path": "modules/classes/Approver.yaml",
"category": "class"
},
{
"name": "ApproximationStatus",
"path": "modules/classes/ApproximationStatus.yaml",
"category": "class"
},
{
"name": "ArchitecturalArchive",
"path": "modules/classes/ArchitecturalArchive.yaml",
@ -275,6 +280,11 @@
"path": "modules/classes/ArticlesOfAssociation.yaml",
"category": "class"
},
{
"name": "Asserter",
"path": "modules/classes/Asserter.yaml",
"category": "class"
},
{
"name": "AssociationArchive",
"path": "modules/classes/AssociationArchive.yaml",
@ -300,6 +310,11 @@
"path": "modules/classes/AudiovisualArchiveRecordSetTypes.yaml",
"category": "class"
},
{
"name": "Author",
"path": "modules/classes/Author.yaml",
"category": "class"
},
{
"name": "AutoGeneration",
"path": "modules/classes/AutoGeneration.yaml",
@ -380,6 +395,16 @@
"path": "modules/classes/BiologicalObject.yaml",
"category": "class"
},
{
"name": "BirthDate",
"path": "modules/classes/BirthDate.yaml",
"category": "class"
},
{
"name": "BirthPlace",
"path": "modules/classes/BirthPlace.yaml",
"category": "class"
},
{
"name": "BOLDIdentifier",
"path": "modules/classes/BOLDIdentifier.yaml",
@ -2430,6 +2455,11 @@
"path": "modules/classes/PublicationEntry.yaml",
"category": "class"
},
{
"name": "Quantity",
"path": "modules/classes/Quantity.yaml",
"category": "class"
},
{
"name": "RadioArchive",
"path": "modules/classes/RadioArchive.yaml",
@ -3486,6 +3516,11 @@
"path": "modules/enums/ArchiveProcessingStatusEnum.yaml",
"category": "enum"
},
{
"name": "AsserterTypeEnum",
"path": "modules/enums/AsserterTypeEnum.yaml",
"category": "enum"
},
{
"name": "AudioEventTypeEnum",
"path": "modules/enums/AudioEventTypeEnum.yaml",
@ -3991,6 +4026,11 @@
"path": "modules/enums/ProvenanceEventTypeEnum.yaml",
"category": "enum"
},
{
"name": "QuantityTypeEnum",
"path": "modules/enums/QuantityTypeEnum.yaml",
"category": "enum"
},
{
"name": "ReadingRoomAnnexReasonEnum",
"path": "modules/enums/ReadingRoomAnnexReasonEnum.yaml",
@ -4248,8 +4288,8 @@
"category": "slot"
},
{
"name": "approximate",
"path": "modules/slots/approximate.yaml",
"name": "approximation_level",
"path": "modules/slots/approximation_level.yaml",
"category": "slot"
},
{
@ -4262,26 +4302,6 @@
"path": "modules/slots/arrangement_notes.yaml",
"category": "slot"
},
{
"name": "asserted_by",
"path": "modules/slots/asserted_by.yaml",
"category": "slot"
},
{
"name": "authors",
"path": "modules/slots/authors.yaml",
"category": "slot"
},
{
"name": "auxiliary_places",
"path": "modules/slots/auxiliary_places.yaml",
"category": "slot"
},
{
"name": "auxiliary_platforms",
"path": "modules/slots/auxiliary_platforms.yaml",
"category": "slot"
},
{
"name": "available_caption_languages",
"path": "modules/slots/available_caption_languages.yaml",
@ -4322,16 +4342,6 @@
"path": "modules/slots/bio_type_classification.yaml",
"category": "slot"
},
{
"name": "birth_date",
"path": "modules/slots/birth_date.yaml",
"category": "slot"
},
{
"name": "birth_place",
"path": "modules/slots/birth_place.yaml",
"category": "slot"
},
{
"name": "borrower",
"path": "modules/slots/borrower.yaml",
@ -4352,16 +4362,6 @@
"path": "modules/slots/branch_head.yaml",
"category": "slot"
},
{
"name": "branch_service_area",
"path": "modules/slots/branch_service_area.yaml",
"category": "slot"
},
{
"name": "branch_staff_count",
"path": "modules/slots/branch_staff_count.yaml",
"category": "slot"
},
{
"name": "budget_currency",
"path": "modules/slots/budget_currency.yaml",
@ -7677,11 +7677,6 @@
"path": "modules/slots/has_authentication_required_flag.yaml",
"category": "slot"
},
{
"name": "has_author",
"path": "modules/slots/has_author.yaml",
"category": "slot"
},
{
"name": "has_authority_file_abbreviation",
"path": "modules/slots/has_authority_file_abbreviation.yaml",
@ -8147,6 +8142,16 @@
"path": "modules/slots/has_or_had_audit_status.yaml",
"category": "slot"
},
{
"name": "has_or_had_author",
"path": "modules/slots/has_or_had_author.yaml",
"category": "slot"
},
{
"name": "has_or_had_auxiliary_entities",
"path": "modules/slots/has_or_had_auxiliary_entities.yaml",
"category": "slot"
},
{
"name": "has_or_had_based_on_observation",
"path": "modules/slots/has_or_had_based_on_observation.yaml",
@ -8227,6 +8232,11 @@
"path": "modules/slots/has_or_had_data_service_endpoint.yaml",
"category": "slot"
},
{
"name": "has_or_had_date_of_birth",
"path": "modules/slots/has_or_had_date_of_birth.yaml",
"category": "slot"
},
{
"name": "has_or_had_depositing_organization",
"path": "modules/slots/has_or_had_depositing_organization.yaml",
@ -8537,6 +8547,11 @@
"path": "modules/slots/has_or_had_period.yaml",
"category": "slot"
},
{
"name": "has_or_had_place_of_birth",
"path": "modules/slots/has_or_had_place_of_birth.yaml",
"category": "slot"
},
{
"name": "has_or_had_portal_data_source",
"path": "modules/slots/has_or_had_portal_data_source.yaml",
@ -8582,6 +8597,11 @@
"path": "modules/slots/has_or_had_provenance_event.yaml",
"category": "slot"
},
{
"name": "has_or_had_quantity",
"path": "modules/slots/has_or_had_quantity.yaml",
"category": "slot"
},
{
"name": "has_or_had_registered_dataset",
"path": "modules/slots/has_or_had_registered_dataset.yaml",
@ -8672,6 +8692,11 @@
"path": "modules/slots/has_or_had_series.yaml",
"category": "slot"
},
{
"name": "has_or_had_service_area",
"path": "modules/slots/has_or_had_service_area.yaml",
"category": "slot"
},
{
"name": "has_or_had_short_code",
"path": "modules/slots/has_or_had_short_code.yaml",
@ -9492,6 +9517,11 @@
"path": "modules/slots/is_or_was_approved_by.yaml",
"category": "slot"
},
{
"name": "is_or_was_approximate",
"path": "modules/slots/is_or_was_approximate.yaml",
"category": "slot"
},
{
"name": "is_or_was_archive_department_of",
"path": "modules/slots/is_or_was_archive_department_of.yaml",
@ -9507,6 +9537,11 @@
"path": "modules/slots/is_or_was_archived_in.yaml",
"category": "slot"
},
{
"name": "is_or_was_asserted_by",
"path": "modules/slots/is_or_was_asserted_by.yaml",
"category": "slot"
},
{
"name": "is_or_was_associated_with",
"path": "modules/slots/is_or_was_associated_with.yaml",
@ -11437,11 +11472,6 @@
"path": "modules/slots/platform_url.yaml",
"category": "slot"
},
{
"name": "policy_approved_by",
"path": "modules/slots/policy_approved_by.yaml",
"category": "slot"
},
{
"name": "policy_authority",
"path": "modules/slots/policy_authority.yaml",
@ -14257,11 +14287,6 @@
"path": "modules/slots/warehouse_security_level.yaml",
"category": "slot"
},
{
"name": "was_approved_by",
"path": "modules/slots/was_approved_by.yaml",
"category": "slot"
},
{
"name": "was_archived_at",
"path": "modules/slots/was_archived_at.yaml",

View file

@ -1,5 +1,5 @@
{
"generated": "2026-01-14T15:54:10.748Z",
"generated": "2026-01-14T15:58:26.520Z",
"schemaRoot": "/schemas/20251121/linkml",
"totalFiles": 2888,
"categoryCounts": {

View file

@ -13,7 +13,10 @@ imports:
- ../slots/has_approval_date
- ../slots/has_or_had_acquisition_budget
- ../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_label
# REMOVED - migrated to has_or_had_status with range BudgetStatus (Rule 53)
@ -97,7 +100,9 @@ classes:
- has_or_had_acquisition_budget
- has_approval_date
- 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_label
# MIGRATED from budget_status to has_or_had_status (Rule 53)
@ -209,13 +214,33 @@ classes:
examples:
- value: 45000000.0
description: EUR 45 million annual budget
budget_currency:
range: string
# REMOVED - migrated to has_or_had_currency (Rule 53)
# 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
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:
- value: EUR
description: Euro currency
- value: USD
- value:
currency_code: EUR
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
operating_budget:
range: decimal
@ -327,7 +352,10 @@ classes:
fiscal_year_start: '2024-01-01'
fiscal_year_end: '2024-12-31'
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
capital_budget: 3000000.0
acquisition_budget: 2000000.0
@ -356,7 +384,10 @@ classes:
fiscal_year_start: '2024-04-01'
fiscal_year_end: '2025-03-31'
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
capital_budget: 500000.0
personnel_budget: 5200000.0

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

@ -15,7 +15,8 @@ imports:
- ../slots/outdoor_site_type
- ../slots/bio_type_classification
- ../slots/feature_type_classification
- ../slots/area_hectares
# REMOVED 2026-01-15: ../slots/area_hectares - migrated to has_area_in_hectare
- ../slots/has_area_in_hectare
- ../slots/has_or_had_artwork_count
- ../slots/plant_species_count
- ../slots/has_or_had_animal_species_count
@ -63,8 +64,8 @@ classes:
\ 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\
\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:\
\ 25\n artwork_count: 160\n ```\n\n2. **Historic Estate Grounds**:\n ```yaml\n OutdoorSite:\n outdoor_site_name:\
\n outdoor_site_name: \"Kröller-Müller Beeldentuin\"\n feature_type_classification: SCULPTURE_GARDEN\n has_area_in_hectare:\
\ 25\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\
\ 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\
@ -83,7 +84,7 @@ classes:
- has_or_had_accessibility_feature
- has_or_had_admission_fee
- has_or_had_animal_species_count
- area_hectares
- has_area_in_hectare
- has_or_had_artwork_count
- bio_type_classification
- conservation_status
@ -240,8 +241,8 @@ classes:
National Park.
outdoor_site_type: SCULPTURE_GARDEN
feature_type_classification: SCULPTURE_GARDEN
area_hectares: 25.0
artwork_count: 160
has_area_in_hectare: 25.0
has_or_had_artwork_count: 160
is_open_to_public: true
admission_fee: Included with museum ticket
opening_hours: Tu-Su 10:00-17:00
@ -255,7 +256,7 @@ classes:
outdoor_site_description: Formal baroque gardens restored to 17th-century design. Part of royal palace complex.
outdoor_site_type: FORMAL_GARDEN
bio_type_classification: GARDEN
area_hectares: 650.0
has_area_in_hectare: 650.0
is_open_to_public: true
admission_fee: Included with palace ticket
seasonal_hours: Summer 10:00-18:00; Winter 10:00-16:00
@ -267,7 +268,7 @@ classes:
outdoor_site_description: Archaeological park on site of Roman fort Matilo with reconstructed structures.
outdoor_site_type: ARCHAEOLOGICAL_SITE
feature_type_classification: ARCHAEOLOGICAL_SITE
area_hectares: 3.5
has_area_in_hectare: 3.5
is_open_to_public: true
admission_fee: Free
period_covered: Roman period (50-400 CE)

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
name: area_hectares_slot
title: Area Hectares Slot

View file

@ -0,0 +1,37 @@
id: https://nde.nl/ontology/hc/slot/has_or_had_currency
name: has_or_had_currency_slot
title: Has Or Had Currency Slot
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
qudt: http://qudt.org/schema/qudt/
imports:
- linkml:types
default_prefix: hc
slots:
has_or_had_currency:
description: >-
Currency associated with monetary values. Uses RiC-O temporal
naming pattern to indicate the currency may be current or historical.
**Schema.org**: schema:currency for currency designation.
**ISO 4217**: Standard currency codes (EUR, USD, GBP, etc.)
Can represent the currency for budgets, financial statements,
acquisition costs, and other monetary amounts.
range: Currency
slot_uri: schema:currency
exact_mappings:
- schema:currency
close_mappings:
- qudt:currencyCode
annotations:
custodian_types: '["*"]'
custodian_types_rationale: Currency can be associated with any heritage custodian type.
custodian_types_primary: M
specificity_score: 0.3
specificity_rationale: >-
Generic currency slot applicable across many contexts where
monetary values need currency designation.

View file

@ -18,7 +18,6 @@
"archive_branches.yaml",
"archive_series.yaml",
"archived_at.yaml",
"area_hectares.yaml",
"arrangement_notes.yaml",
"asserted_by.yaml",
"audio_event_segments.yaml",

View file

@ -461,10 +461,10 @@ fixes:
- original_slot_id: https://nde.nl/ontology/hc/slot/area_hectares
processed:
status: false
timestamp: null
session: null
notes: "Requires Area and MeasureUnit classes"
status: true
timestamp: "2026-01-15T00:00:00Z"
session: "migration-34"
notes: "Migrated to existing has_area_in_hectare slot (float range). Simpler than Area+MeasureUnit class approach."
revision:
- label: has_or_had_area
type: slot
@ -1167,10 +1167,10 @@ fixes:
- original_slot_id: https://nde.nl/ontology/hc/slot/budget_currency
processed:
status: false
timestamp: null
session: null
notes: "Requires Currency class creation"
status: true
timestamp: '2026-01-14T23:45:00Z'
session: "session-2026-01-14-slot-migrations"
notes: "FULLY MIGRATED: Created has_or_had_currency slot and Currency class. Budget.yaml updated with new imports, slots, and slot_usage. Old budget_currency slot archived to archive/budget_currency_archived_20260114.yaml. Currency class supports ISO 4217 codes, symbols, and historical currencies."
revision:
- label: has_or_had_currency
type: slot
@ -2192,4 +2192,31 @@ fixes:
type: slot
- label: ISO639-3Identifier
type: class
-
- original_slot_id: https://nde.nl/ontology/hc/slot/type_id
revision:
- label: has_or_had_identifier
type: slot
- label: Identifier
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/type_hypothesis
revision:
- label: has_or_had_provenance
type: slot
- label: Provenance
type: class
- label: asserts_or_asserted
type: slot
- label: Hypothesis
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/type_description
revision:
- label: has_or_had_description
type: slot
- label: Description
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/type
revision:
- label: has_or_had_type
type: slot
- label: ResourceType
type: class