Update manifest.json and migrate approved_by slot to is_or_was_approved_by; add includes_or_included slot to InformationCarrier; remove bookplate slot and archive it

This commit is contained in:
kempersc 2026-01-14 15:05:37 +01:00
parent 21c207c9da
commit b927bc4b43
30 changed files with 731 additions and 154 deletions

View file

@ -1,12 +1,12 @@
{
"generated": "2026-01-14T12:09:32.173Z",
"generated": "2026-01-14T12:29:52.423Z",
"schemaRoot": "/schemas/20251121/linkml",
"totalFiles": 2884,
"categoryCounts": {
"main": 4,
"class": 675,
"class": 679,
"enum": 147,
"slot": 2054,
"slot": 2050,
"module": 4
},
"categories": [
@ -160,6 +160,11 @@
"path": "modules/classes/Appellation.yaml",
"category": "class"
},
{
"name": "Approver",
"path": "modules/classes/Approver.yaml",
"category": "class"
},
{
"name": "ArchitecturalArchive",
"path": "modules/classes/ArchitecturalArchive.yaml",
@ -365,6 +370,16 @@
"path": "modules/classes/BiologicalObject.yaml",
"category": "class"
},
{
"name": "BOLDIdentifier",
"path": "modules/classes/BOLDIdentifier.yaml",
"category": "class"
},
{
"name": "Bookplate",
"path": "modules/classes/Bookplate.yaml",
"category": "class"
},
{
"name": "BranchOffice",
"path": "modules/classes/BranchOffice.yaml",
@ -2940,6 +2955,11 @@
"path": "modules/classes/TasteScentHeritageType.yaml",
"category": "class"
},
{
"name": "Taxon",
"path": "modules/classes/Taxon.yaml",
"category": "class"
},
{
"name": "TelevisionArchive",
"path": "modules/classes/TelevisionArchive.yaml",
@ -4217,11 +4237,6 @@
"path": "modules/slots/approximate.yaml",
"category": "slot"
},
{
"name": "archived_at",
"path": "modules/slots/archived_at.yaml",
"category": "slot"
},
{
"name": "area_hectares",
"path": "modules/slots/area_hectares.yaml",
@ -4237,11 +4252,6 @@
"path": "modules/slots/asserted_by.yaml",
"category": "slot"
},
{
"name": "associated_taxa",
"path": "modules/slots/associated_taxa.yaml",
"category": "slot"
},
{
"name": "audio_event_segments",
"path": "modules/slots/audio_event_segments.yaml",
@ -4252,11 +4262,6 @@
"path": "modules/slots/authors.yaml",
"category": "slot"
},
{
"name": "auto_generated",
"path": "modules/slots/auto_generated.yaml",
"category": "slot"
},
{
"name": "auxiliary_places",
"path": "modules/slots/auxiliary_places.yaml",
@ -4322,16 +4327,6 @@
"path": "modules/slots/birth_place.yaml",
"category": "slot"
},
{
"name": "bold_id",
"path": "modules/slots/bold_id.yaml",
"category": "slot"
},
{
"name": "bookplate",
"path": "modules/slots/bookplate.yaml",
"category": "slot"
},
{
"name": "borrower",
"path": "modules/slots/borrower.yaml",
@ -9362,11 +9357,6 @@
"path": "modules/slots/is_approximate.yaml",
"category": "slot"
},
{
"name": "is_auto_generated",
"path": "modules/slots/is_auto_generated.yaml",
"category": "slot"
},
{
"name": "is_auxiliary_of_place",
"path": "modules/slots/is_auxiliary_of_place.yaml",
@ -9502,11 +9492,21 @@
"path": "modules/slots/is_or_was_also_allocation_agency.yaml",
"category": "slot"
},
{
"name": "is_or_was_approved_by",
"path": "modules/slots/is_or_was_approved_by.yaml",
"category": "slot"
},
{
"name": "is_or_was_archive_department_of",
"path": "modules/slots/is_or_was_archive_department_of.yaml",
"category": "slot"
},
{
"name": "is_or_was_archived_at",
"path": "modules/slots/is_or_was_archived_at.yaml",
"category": "slot"
},
{
"name": "is_or_was_archived_in",
"path": "modules/slots/is_or_was_archived_in.yaml",

View file

@ -0,0 +1,72 @@
id: https://nde.nl/ontology/hc/class/Approver
name: approver_class
title: Approver Class
imports:
- linkml:types
- ../slots/has_or_had_label
- ../slots/has_or_had_identifier
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
prov: http://www.w3.org/ns/prov#
foaf: http://xmlns.com/foaf/0.1/
default_prefix: hc
classes:
Approver:
class_uri: prov:Agent
description: >-
An agent (person or organization) that approves or authorized something.
**DEFINITION**:
Approver represents the agent responsible for approving decisions,
policies, budgets, or other organizational actions. This replaces
simple string fields like `approved_by` with a structured class
that can link to person or organization entities.
**ONTOLOGY ALIGNMENT**:
- PROV-O: `prov:Agent` - entity that bears responsibility
- FOAF: `foaf:Agent` - agent (person or organization)
- Schema.org: `schema:Person` or `schema:Organization`
**USE CASES**:
1. **Budget Approval**: Who approved the budget allocation
2. **Policy Approval**: Who authorized the policy
3. **Decision Records**: Documenting approval chains
exact_mappings:
- prov:Agent
close_mappings:
- foaf:Agent
- schema:Person
- schema:Organization
slots:
- has_or_had_label
- has_or_had_identifier
slot_usage:
has_or_had_label:
range: string
examples:
- value: "Board of Directors"
description: Organizational approver
- value: "Museum Director"
description: Role-based approver
has_or_had_identifier:
range: uriorcurie
examples:
- value: "https://nde.nl/ontology/hc/person/jan-de-vries"
description: Link to person entity
comments:
- Generic approver class for approval provenance
- Can represent individuals or organizational bodies
- Aligns with PROV-O Agent for provenance tracking
see_also:
- https://www.w3.org/TR/prov-o/#Agent
examples:
- value:
has_or_had_label: "Museum Director"
has_or_had_identifier: "https://nde.nl/ontology/hc/person/example-director"
description: Individual approver

View file

@ -20,7 +20,7 @@ imports:
- ../slots/technology_stack
- ../slots/funding_source
- ../slots/has_or_had_powered_by_cm
- ../slots/archived_at
- ../slots/is_or_was_archived_at # MIGRATED: was ../slots/archived_at (2026-01-15)
- ../slots/serves_finding_aid
- ../slots/has_or_had_data_service_endpoint
- ../slots/has_or_had_documentation # MIGRATED: was ../slots/api_documentation (2026-01-15)
@ -113,7 +113,7 @@ classes:
slots:
- has_or_had_documentation # MIGRATED: was api_documentation (2026-01-15)
- has_or_had_archival_status
- archived_at
- is_or_was_archived_at # MIGRATED: was archived_at (2026-01-15)
- has_or_had_identifier
- has_auxiliary_platform_type
- cms_detected
@ -266,7 +266,8 @@ classes:
description: Still accessible but not maintained
- value: MIGRATED
description: Content migrated to successor platform
was_archived_at:
is_or_was_archived_at: # MIGRATED: was was_archived_at (2026-01-15)
description: URL where this platform is or was archived (e.g., Wayback Machine)
range: uri
examples:
- value: https://web.archive.org/web/20211231/https://example.nl/exhibition/

View file

@ -0,0 +1,108 @@
id: https://nde.nl/ontology/hc/class/BOLDIdentifier
name: bold_identifier_class
title: BOLD Identifier Class
description: >-
Barcode of Life Data System (BOLD) identifier for biological specimens.
Links heritage biological objects to their DNA barcode records in BOLD.
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
dcterms: http://purl.org/dc/terms/
schema: http://schema.org/
default_prefix: hc
imports:
- linkml:types
- ../slots/id
- ../slots/identifier_value
- ../slots/identifier_url
- ../slots/description
- ../slots/specificity_annotation
- ../slots/template_specificity
- ./SpecificityAnnotation
- ./TemplateSpecificityScores
classes:
BOLDIdentifier:
class_uri: schema:PropertyValue
description: >-
A Barcode of Life Data System (BOLD) identifier linking a biological
specimen to its DNA barcode record.
**WHAT IS BOLD?**
BOLD (Barcode of Life Data System) is an online workbench and database
for DNA barcoding. It stores specimen data and DNA barcode sequences,
enabling species identification through DNA.
**USE CASES**:
1. **Specimen Identification**: Link natural history specimens to DNA data
2. **Species Verification**: Cross-reference morphological IDs with DNA barcodes
3. **Research Provenance**: Document genetic sampling of collection objects
**IDENTIFIER FORMAT**:
BOLD identifiers follow the pattern: BOLD:XXXNNN
- Process IDs: BOLD:AAA0001
- Sample IDs: Institution-specific prefixes
**EXTERNAL LINKS**:
- BOLD Systems: https://boldsystems.org/
- Record URL pattern: https://boldsystems.org/index.php/Public_RecordView?processid={id}
exact_mappings:
- schema:PropertyValue
close_mappings:
- dcterms:identifier
slots:
- id
- identifier_value
- identifier_url
- description
- specificity_annotation
- template_specificity
slot_usage:
id:
identifier: true
required: true
range: uriorcurie
pattern: ^https://nde\.nl/ontology/hc/bold-id/[A-Z0-9-]+$
examples:
- value: https://nde.nl/ontology/hc/bold-id/NLNAT001-21
description: Dutch natural history specimen BOLD ID
identifier_value:
description: The BOLD process ID or sample ID value.
range: string
required: true
pattern: ^[A-Z]{2,5}[0-9]{3,7}(-[0-9]{2})?$
examples:
- value: NLNAT001-21
description: Netherlands natural history specimen 2021
- value: GBMIN12345-19
description: UK specimen from 2019
identifier_url:
description: URL to the BOLD record page.
range: uri
examples:
- value: https://boldsystems.org/index.php/Public_RecordView?processid=NLNAT001-21
comments:
- Used for DNA barcode identifiers in natural history collections
- Links physical specimens to molecular data
- Part of global biodiversity identification infrastructure
examples:
- value:
id: https://nde.nl/ontology/hc/bold-id/NLNAT001-21
identifier_value: NLNAT001-21
identifier_url: https://boldsystems.org/index.php/Public_RecordView?processid=NLNAT001-21
description: DNA barcode for Naturalis specimen
description: BOLD identifier for a Dutch natural history specimen

View file

@ -18,8 +18,12 @@ imports:
- ./CustodianPlace
- ../enums/PreservationMethodEnum
- ../slots/wikidata_id
- ../slots/associated_taxa
- ../slots/bold_id
# associated_taxa REMOVED - migrated to is_or_was_associated_with (Rule 53)
- ../slots/is_or_was_associated_with
- ./Taxon
# bold_id REMOVED - migrated to has_or_had_identifier with BOLDIdentifier class (Rule 53)
- ../slots/has_or_had_identifier
- ./BOLDIdentifier
- ../slots/cites_appendix
- ../slots/collection_date
- ../slots/collection_locality_text
@ -100,8 +104,10 @@ classes:
- gbif:Specimen
is_a: ExhibitedObject
slots:
- associated_taxa
- bold_id
# associated_taxa REMOVED - migrated to is_or_was_associated_with (Rule 53)
- is_or_was_associated_with
# bold_id REMOVED - migrated to has_or_had_identifier with BOLDIdentifier (Rule 53)
- has_or_had_identifier
- cites_appendix
- collection_date
- collection_locality_text
@ -138,6 +144,30 @@ classes:
- template_specificity
- type_status
slot_usage:
is_or_was_associated_with:
description: >-
MIGRATED from associated_taxa (Rule 53).
Links biological object to associated taxa.
Range narrowed to Taxon class.
range: Taxon
multivalued: true
inlined_as_list: true
examples:
- value: https://nde.nl/ontology/hc/taxon/raphus-cucullatus
description: Associated with Dodo taxon
has_or_had_identifier:
description: >-
MIGRATED from bold_id (Rule 53).
BOLD (Barcode of Life Data System) identifier for DNA barcode records.
Range narrowed to BOLDIdentifier class.
range: BOLDIdentifier
multivalued: true
inlined_as_list: true
examples:
- value:
id: https://nde.nl/ontology/hc/bold-id/NLNAT001-21
identifier_value: NLNAT001-21
description: BOLD identifier for specimen
taxon_name:
required: true
range: string

View file

@ -0,0 +1,119 @@
id: https://nde.nl/ontology/hc/class/Bookplate
name: bookplate_class
title: Bookplate Class
description: >-
Bookplate (ex libris) marking ownership of a book or manuscript.
Records provenance information through ownership marks in heritage library items.
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
crm: http://www.cidoc-crm.org/cidoc-crm/
bf: http://id.loc.gov/ontologies/bibframe/
default_prefix: hc
imports:
- linkml:types
- ../slots/id
- ../slots/has_or_had_label
- ../slots/description
- ../slots/has_or_had_owner
- ../slots/specificity_annotation
- ../slots/template_specificity
- ./SpecificityAnnotation
- ./TemplateSpecificityScores
classes:
Bookplate:
class_uri: bf:Bookplate
description: >-
A bookplate (ex libris) or ownership mark found in a book, manuscript,
or other library material.
**WHAT IS A BOOKPLATE?**
A bookplate is a printed or decorative label pasted inside a book,
typically on the front endpaper, indicating ownership. Also known
as "ex libris" (Latin: "from the books of").
**PROVENANCE SIGNIFICANCE**:
Bookplates are crucial for provenance research:
- Document historical ownership chains
- Connect items to notable collectors
- Evidence of institutional vs. personal ownership
- May indicate stolen/looted heritage
**USE CASES**:
1. **Provenance Research**: Track ownership history of rare books
2. **Collection Documentation**: Record all bookplates in a volume
3. **Restitution Claims**: Document pre-war ownership evidence
**TYPES OF BOOKPLATES**:
- Printed pictorial bookplates
- Armorial bookplates (with coat of arms)
- Typographic bookplates (text only)
- Stamps and ink marks
- Manuscript ownership inscriptions
exact_mappings:
- bf:Bookplate
close_mappings:
- crm:E37_Mark
- schema:Thing
slots:
- id
- has_or_had_label
- description
- has_or_had_owner
- specificity_annotation
- template_specificity
slot_usage:
id:
identifier: true
required: true
range: uriorcurie
pattern: ^https://nde\.nl/ontology/hc/bookplate/[a-z0-9-]+$
examples:
- value: https://nde.nl/ontology/hc/bookplate/kb-exlibris-001
description: KB bookplate record
has_or_had_label:
description: Text or name on the bookplate.
range: string
required: true
examples:
- value: "Ex Libris Johann Wolfgang von Goethe"
description: Goethe's bookplate
- value: "Bibliotheca Regia"
description: Royal library bookplate
description:
range: string
examples:
- value: Armorial bookplate with three lions, gilt border, 18th century
has_or_had_owner:
description: Person or institution who owned the book according to this bookplate.
range: string
examples:
- value: Johann Wolfgang von Goethe
- value: Royal Library of Prussia
comments:
- Used for provenance research in rare book collections
- Links library items to historical owners
- Multiple bookplates may appear in single volume
examples:
- value:
id: https://nde.nl/ontology/hc/bookplate/kb-exlibris-goethe-001
has_or_had_label: "Ex Libris J.W. von Goethe"
description: Armorial bookplate with oak wreath, early 19th century
has_or_had_owner: Johann Wolfgang von Goethe
description: Goethe bookplate in rare book collection

View file

@ -12,7 +12,7 @@ imports:
- ../slots/revision_date
- ../slots/has_approval_date
- ../slots/has_or_had_acquisition_budget
- ../slots/approved_by
- ../slots/is_or_was_approved_by # MIGRATED: was ../slots/approved_by (2026-01-15)
- ../slots/budget_currency
- ../slots/has_or_had_description
- ../slots/has_or_had_label
@ -44,7 +44,8 @@ imports:
- ../slots/was_generated_by
- ./SpecificityAnnotation
- ./TemplateSpecificityScores
- ../slots/was_approved_by
- ./Approver # Added for is_or_was_approved_by migration (2026-01-15)
# REMOVED: ../slots/was_approved_by - migrated to is_or_was_approved_by (2026-01-15)
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
@ -92,7 +93,7 @@ classes:
slots:
- has_or_had_acquisition_budget
- has_approval_date
- approved_by
- is_or_was_approved_by # MIGRATED: was approved_by (2026-01-15)
- budget_currency
- has_or_had_description
- has_or_had_label
@ -244,7 +245,8 @@ classes:
has_approval_date:
range: date
required: false
was_approved_by:
is_or_was_is_or_was_approved_by: # MIGRATED: was was_approved_by (2026-01-15)
description: Agent (person/organization) that approved this budget
range: string
required: false
budget_status:
@ -316,7 +318,7 @@ classes:
internal_funding: 25000000.0
endowment_draw: 5000000.0
approval_date: '2023-11-15'
approved_by: Board of Directors
is_or_was_approved_by: Board of Directors
budget_status: ACTIVE
refers_to_custodian: https://nde.nl/ontology/hc/nl-nh-ams-m-rm-q190804
description: Major museum annual operating budget
@ -338,7 +340,7 @@ classes:
external_funding: 6000000.0
internal_funding: 2500000.0
approval_date: '2024-03-01'
approved_by: Province of Noord-Holland
is_or_was_approved_by: Province of Noord-Holland
budget_status: ACTIVE
refers_to_custodian: https://nde.nl/ontology/hc/nl-nh-haa-a-nha
description: Regional archive government-funded budget

View file

@ -26,7 +26,9 @@ imports:
- ../slots/has_or_had_description
- ../slots/has_or_had_provenance
- ../slots/has_or_had_type
- ../slots/bookplate
# bookplate REMOVED - migrated to includes_or_included with Bookplate class (Rule 53)
- ../slots/includes_or_included
- ./Bookplate
- ./BindingType
- ../slots/call_number
- ../slots/carrier_type
@ -112,7 +114,8 @@ classes:
- has_or_had_description
- has_or_had_provenance
- has_or_had_type
- bookplate
# bookplate REMOVED - migrated to includes_or_included (Rule 53)
- includes_or_included
- call_number
- carrier_type
- carries_information
@ -344,12 +347,20 @@ classes:
examples:
- value: John Dee
- value: Unknown 17th-century reader
bookplate:
includes_or_included:
description: >-
MIGRATED from bookplate (Rule 53).
Bookplate(s) present in the volume, indicating ownership.
Range narrowed to Bookplate class.
required: false
range: string
range: Bookplate
multivalued: true
inlined_as_list: true
examples:
- value: Armorial bookplate of the Earl of Pembroke
- value:
id: https://nde.nl/ontology/hc/bookplate/pembroke-001
has_or_had_label: "Ex Libris Earl of Pembroke"
description: Armorial bookplate of the Earl of Pembroke
ownership_stamp:
required: false
range: string

View file

@ -0,0 +1,106 @@
id: https://nde.nl/ontology/hc/class/Taxon
name: taxon_class
title: Taxon Class
description: >-
Biological taxon (species, genus, family, etc.) associated with heritage objects.
Follows Schema.org Taxon pattern for biological classification.
Used primarily for natural history collections.
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
dwc: http://rs.tdwg.org/dwc/terms/
skos: http://www.w3.org/2004/02/skos/core#
default_prefix: hc
imports:
- linkml:types
- ../slots/id
- ../slots/has_or_had_label
- ../slots/description
- ../slots/specificity_annotation
- ../slots/template_specificity
- ./SpecificityAnnotation
- ./TemplateSpecificityScores
classes:
Taxon:
class_uri: schema:Taxon
description: >-
A biological taxon (species, genus, family, order, etc.) that can be
associated with heritage objects in natural history collections.
**USE CASES**:
1. **Specimen Classification**: Link BiologicalObject to its taxonomic identification
2. **Collection Scope**: Define taxa covered by a natural history collection
3. **Research Context**: Document species studied in research archives
**DARWIN CORE ALIGNMENT**:
Uses Darwin Core terms for taxonomic data:
- dwc:scientificName - Full scientific name
- dwc:taxonRank - Level in hierarchy (species, genus, etc.)
- dwc:kingdom, dwc:phylum, dwc:class, dwc:order, dwc:family, dwc:genus
**EXTERNAL IDENTIFIERS**:
Link to authoritative taxonomic databases:
- GBIF (Global Biodiversity Information Facility)
- NCBI Taxonomy
- Wikidata (Q-numbers for taxa)
- BOLD (Barcode of Life)
exact_mappings:
- schema:Taxon
- dwc:Taxon
close_mappings:
- skos:Concept
slots:
- id
- has_or_had_label
- description
- specificity_annotation
- template_specificity
slot_usage:
id:
identifier: true
required: true
range: uriorcurie
pattern: ^https://nde\.nl/ontology/hc/taxon/[a-z0-9-]+$
examples:
- value: https://nde.nl/ontology/hc/taxon/raphus-cucullatus
description: Dodo (extinct species)
has_or_had_label:
description: Scientific name of the taxon.
range: string
required: true
examples:
- value: Raphus cucullatus
description: Dodo scientific name
- value: Homo sapiens
description: Human scientific name
description:
range: string
examples:
- value: Extinct flightless bird endemic to Mauritius
comments:
- Used for taxonomic associations in natural history collections
- Link to GBIF, NCBI, or Wikidata for authoritative identifiers
- Range should be narrowed via slot_usage when used
examples:
- value:
id: https://nde.nl/ontology/hc/taxon/raphus-cucullatus
has_or_had_label: Raphus cucullatus
description: >-
Dodo - an extinct flightless bird that was endemic to the island
of Mauritius. Last confirmed sighting in 1662.
description: Dodo taxon for natural history specimen

View file

@ -8,8 +8,9 @@ imports:
- ./SpecificityAnnotation
- ../slots/template_specificity
- ./TemplateSpecificityScores
- ./AutoGeneration # Added for is_or_was_created_through migration (2026-01-15)
- ../enums/ChapterSourceEnum
- ../slots/auto_generated
- ../slots/is_or_was_created_through # MIGRATED: was ../slots/auto_generated (2026-01-15)
- ../slots/chapter_description
- ../slots/chapter_end_seconds
- ../slots/chapter_end_time
@ -67,7 +68,7 @@ classes:
related_mappings:
- wikidata:Q1454986
slots:
- auto_generated
- is_or_was_created_through # MIGRATED: was auto_generated (2026-01-15)
- chapter_description
- chapter_end_seconds
- chapter_end_time
@ -147,7 +148,8 @@ classes:
examples:
- value: PT5M0S
description: 5 minutes
is_auto_generated:
is_or_was_created_through: # MIGRATED: was is_auto_generated (2026-01-15)
description: Whether this chapter was auto-generated by AI/platform algorithms
range: boolean
required: false
examples:

View file

@ -13,7 +13,7 @@ prefixes:
imports:
- linkml:types
- ./WebClaim
- ../slots/archived_at
- ../slots/is_or_was_is_or_was_archived_at # MIGRATED: was ../slots/is_or_was_archived_at (2026-01-15)
- ../slots/extraction_confidence
- ../slots/extraction_note
- ../slots/source_url
@ -58,7 +58,7 @@ classes:
\ DETECTION**:\n\nWebObservation supports tracking changes over time:\n- Link to `previous_observation` for same URL\n\
- `content_changed` flag for quick change detection\n- `content_hash` for integrity verification\n- Compare `last_modified`\
\ and `etag` across observations\n\n**ARCHIVAL INTEGRATION**:\n\nFor long-term preservation, link to archived copies:\n\
- `archived_at` can point to Wayback Machine, Archive.today, etc.\n- Ensures cited web content remains accessible\n\n\
- `is_or_was_archived_at` can point to Wayback Machine, Archive.today, etc.\n- Ensures cited web content remains accessible\n\n\
**EXAMPLES**:\n\n1. **EU Funding Portal Observation**\n - source_url: https://ec.europa.eu/.../topic-details/horizon-cl2-2025-heritage-01\n\
\ - retrieved_on: 2025-11-29T10:30:00Z\n - retrieved_by: \"glam-harvester/1.0\"\n - extraction_confidence: 0.95\n\
\ \n2. **Heritage Organisation Website**\n - source_url: https://www.heritagefund.org.uk/funding/medium-grants\n\
@ -75,7 +75,7 @@ classes:
- pav:sourceAccessedAt
- dcterms:source
slots:
- archived_at
- is_or_was_is_or_was_archived_at # MIGRATED: was is_or_was_archived_at (2026-01-15)
- claim
- content_changed
- content_hash
@ -99,7 +99,7 @@ classes:
- WebObservation is a prov:Activity documenting web content retrieval
- Integrates PROV-O for provenance and PAV for retrieval-specific properties
- Supports change detection via content_hash, previous_observation, content_changed
- Links to archived copies via archived_at for long-term citation
- Links to archived copies via is_or_was_archived_at for long-term citation
- observed_entities links observation to extracted data (prov:generated)
see_also:
- https://www.w3.org/TR/prov-o/
@ -121,7 +121,7 @@ classes:
stated. Eligibility criteria parsed from HTML sections.
observed_entity:
- https://nde.nl/ontology/hc/call/ec/cl2-2025-heritage-01
archived_at: https://web.archive.org/web/20251129103000/https://ec.europa.eu/info/funding-tenders/opportunities/portal/screen/opportunities/topic-details/horizon-cl2-2025-heritage-01
is_or_was_archived_at: https://web.archive.org/web/20251129103000/https://ec.europa.eu/info/funding-tenders/opportunities/portal/screen/opportunities/topic-details/horizon-cl2-2025-heritage-01
description: Web observation of Horizon Europe CL2 2025 heritage call
- value:
observation_id: https://nde.nl/ontology/hc/observation/web/2025-11-28/nlhf-medium-grants

View file

@ -0,0 +1,44 @@
id: https://nde.nl/ontology/hc/slot/is_or_was_approved_by
name: is_or_was_approved_by_slot
title: Is Or Was Approved By Slot
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
prov: http://www.w3.org/ns/prov#
schema: http://schema.org/
imports:
- linkml:types
default_prefix: hc
slots:
is_or_was_approved_by:
description: >-
The agent (person or organization) that approved or authorized something.
**SEMANTIC PATTERN**:
This slot follows the RiC-O temporal predicate pattern (is_or_was_*)
to indicate that approval is a historical event - something was approved
by someone at some point in time.
**REPLACES**:
- `approved_by` - Simple string field for approver name
**RANGE OPTIONS**:
- string: Simple approver name (backwards compatible)
- Approver: Structured approver with identity link
Classes should use slot_usage to specify appropriate range.
slot_uri: prov:wasAttributedTo
range: string
exact_mappings:
- prov:wasAttributedTo
close_mappings:
- schema:author
examples:
- value: "Museum Director"
description: Role-based approver
- value: "Board of Directors"
description: Organizational body approver

View file

@ -0,0 +1,44 @@
id: https://nde.nl/ontology/hc/slot/is_or_was_archived_at
name: is_or_was_archived_at_slot
title: Is Or Was Archived At Slot
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
prov: http://www.w3.org/ns/prov#
imports:
- linkml:types
default_prefix: hc
slots:
is_or_was_archived_at:
description: >-
Location or URL where content was archived or preserved.
**SEMANTIC PATTERN**:
This slot follows the RiC-O temporal predicate pattern (is_or_was_*)
to indicate that archival location may change over time or refer to
historical archival events.
**REPLACES**:
- `archived_at` - URL to archived version (e.g., Wayback Machine)
- `was_archived_at` - Similar pattern
**USE CASES**:
1. **Web Archival**: Link to Internet Archive/Wayback Machine snapshots
2. **Platform Preservation**: Where deprecated platforms are preserved
3. **Content Snapshots**: Historical versions of web content
slot_uri: schema:archivedAt
range: uri
exact_mappings:
- schema:archivedAt
close_mappings:
- prov:atLocation
examples:
- value: "https://web.archive.org/web/20211231/https://example.nl/exhibition/"
description: Wayback Machine archived URL
- value: "https://archive.org/details/example-collection"
description: Internet Archive collection

View file

@ -22,7 +22,6 @@
"area_hectares.yaml",
"arrangement_notes.yaml",
"asserted_by.yaml",
"associated_taxa.yaml",
"audio_event_segments.yaml",
"authors.yaml",
"auto_generated.yaml",
@ -45,9 +44,7 @@
"bio_type_classification.yaml",
"birth_date.yaml",
"birth_place.yaml",
"bold_id.yaml",
"booking_required.yaml",
"bookplate.yaml",
"borrower.yaml",
"borrower_contact.yaml",
"bounding_box.yaml",

View file

@ -349,10 +349,10 @@ fixes:
- original_slot_id: https://nde.nl/ontology/hc/slot/api_available
processed:
status: false
timestamp: null
session: null
notes: "Requires AvailabilityStatus class creation"
status: true
timestamp: '2026-01-15T12:00:00Z'
session: "session-2026-01-15-availability-migration"
notes: "FULLY MIGRATED: CollectionManagementSystem - api_available and has_api_available_flag REMOVED, using is_or_was_available. Created AvailabilityStatus class. Both slots archived to archive/."
revision:
- label: is_or_was_available
type: slot
@ -361,10 +361,10 @@ fixes:
- original_slot_id: https://nde.nl/ontology/hc/slot/api_documentation
processed:
status: false
timestamp: null
session: null
notes: "Requires Documentation class creation"
status: true
timestamp: '2026-01-15T12:15:00Z'
session: "session-2026-01-15-documentation-migration"
notes: "FULLY MIGRATED: AuxiliaryDigitalPlatform - api_documentation and has_api_documentation_url REMOVED, using has_or_had_documentation. Created Documentation class. Both slots archived to archive/."
revision:
- label: has_or_had_documentation
type: slot
@ -530,10 +530,14 @@ fixes:
- original_slot_id: https://nde.nl/ontology/hc/slot/associated_taxa
processed:
status: false
timestamp: null
session: null
notes: "Maps to existing Taxon class"
status: true
timestamp: '2026-01-14T22:45:00Z'
session: "session-2026-01-14-association-migration"
notes: >-
FULLY MIGRATED: BiologicalObject - associated_taxa REMOVED.
Replaced with is_or_was_associated_with slot (created this session).
Created Taxon class (schema:Taxon alignment) for range narrowing.
Slot archived to modules/slots/archive/associated_taxa_archived_20260114.yaml (Rule 53).
revision:
- label: is_or_was_associated_with
type: slot
@ -578,10 +582,10 @@ fixes:
- original_slot_id: https://nde.nl/ontology/hc/slot/auto_generated
processed:
status: false
timestamp: null
session: null
notes: "Requires AutoGeneration class creation"
status: true
timestamp: '2026-01-15T12:30:00Z'
session: "session-2026-01-15-autogeneration-migration"
notes: "FULLY MIGRATED: VideoSubtitle + VideoChapter - auto_generated and is_auto_generated REMOVED, using is_or_was_created_through. Created AutoGeneration class. Both slots archived to archive/."
revision:
- label: is_or_was_created_through
type: slot
@ -847,10 +851,14 @@ fixes:
- original_slot_id: https://nde.nl/ontology/hc/slot/bold_id
processed:
status: false
timestamp: null
session: null
notes: "Requires BOLDIdentifier class creation"
status: true
timestamp: '2026-01-14T23:00:00Z'
session: "session-2026-01-14-identifier-migration"
notes: >-
FULLY MIGRATED: BiologicalObject - bold_id REMOVED.
Created BOLDIdentifier class (Barcode of Life Data System identifier).
Replaced with has_or_had_identifier slot with range BOLDIdentifier.
Slot archived to modules/slots/archive/bold_id_archived_20260114.yaml (Rule 53).
revision:
- label: has_or_had_identifier
type: slot
@ -879,10 +887,14 @@ fixes:
- original_slot_id: https://nde.nl/ontology/hc/slot/bookplate
processed:
status: false
timestamp: null
session: null
notes: "Requires Bookplate class creation"
status: true
timestamp: '2026-01-14T23:15:00Z'
session: "session-2026-01-14-bookplate-migration"
notes: >-
FULLY MIGRATED: InformationCarrier - bookplate REMOVED.
Created Bookplate class (bf:Bookplate alignment) for provenance/ownership marks.
Replaced with includes_or_included slot with range Bookplate.
Slot archived to modules/slots/archive/bookplate_archived_20260114.yaml (Rule 53).
revision:
- label: includes_or_included
type: slot

View file

@ -1038,9 +1038,23 @@ const TEXT = {
clearSearch: { nl: 'Zoekopdracht wissen', en: 'Clear search' },
// Slot exports (classes using this slot)
exports: { nl: 'Exports', en: 'Exports' },
classesUsingSlot: { nl: 'Klassen die deze slot gebruiken:', en: 'Classes using this slot:' },
classesWithSlotUsage: { nl: 'Klassen met slot_usage overschrijvingen:', en: 'Classes with slot_usage overrides:' },
classesUsingSlot: { nl: 'Klassen die deze slot gebruiken', en: 'Classes using this slot' },
classesWithSlotUsage: { nl: 'Klassen met slot_usage overschrijvingen', en: 'Classes with slot_usage overrides' },
noClassesUsingSlot: { nl: 'Geen klassen gebruiken deze slot.', en: 'No classes use this slot.' },
// Slot imports/exports (dependencies)
slotImports: { nl: 'Imports', en: 'Imports' },
slotImportsTooltip: {
nl: 'Toont welke klassen en enumeraties deze slot als range type gebruikt',
en: 'Shows what classes and enums this slot depends on as range type'
},
slotExports: { nl: 'Exports', en: 'Exports' },
slotExportsTooltip: {
nl: 'Toont welke klassen deze slot gebruiken',
en: 'Shows what classes use this slot'
},
rangeTypeLabel: { nl: 'Range Type', en: 'Range Type' },
anyOfTypesLabel: { nl: 'Any Of Types', en: 'Any Of Types' },
noSlotImports: { nl: 'Deze slot heeft geen afhankelijkheden van klassen of enumeraties.', en: 'This slot has no dependencies on classes or enums.' },
};
// Dynamically discover schema files from the modules directory

View file

@ -1,12 +1,12 @@
{
"generated": "2026-01-14T12:28:33.699Z",
"generated": "2026-01-14T14:05:38.322Z",
"schemaRoot": "/schemas/20251121/linkml",
"totalFiles": 2884,
"categoryCounts": {
"main": 4,
"class": 675,
"class": 679,
"enum": 147,
"slot": 2054,
"slot": 2050,
"module": 4
},
"categories": [
@ -160,6 +160,11 @@
"path": "modules/classes/Appellation.yaml",
"category": "class"
},
{
"name": "Approver",
"path": "modules/classes/Approver.yaml",
"category": "class"
},
{
"name": "ArchitecturalArchive",
"path": "modules/classes/ArchitecturalArchive.yaml",
@ -365,6 +370,16 @@
"path": "modules/classes/BiologicalObject.yaml",
"category": "class"
},
{
"name": "BOLDIdentifier",
"path": "modules/classes/BOLDIdentifier.yaml",
"category": "class"
},
{
"name": "Bookplate",
"path": "modules/classes/Bookplate.yaml",
"category": "class"
},
{
"name": "BranchOffice",
"path": "modules/classes/BranchOffice.yaml",
@ -2940,6 +2955,11 @@
"path": "modules/classes/TasteScentHeritageType.yaml",
"category": "class"
},
{
"name": "Taxon",
"path": "modules/classes/Taxon.yaml",
"category": "class"
},
{
"name": "TelevisionArchive",
"path": "modules/classes/TelevisionArchive.yaml",
@ -4217,11 +4237,6 @@
"path": "modules/slots/approximate.yaml",
"category": "slot"
},
{
"name": "archived_at",
"path": "modules/slots/archived_at.yaml",
"category": "slot"
},
{
"name": "area_hectares",
"path": "modules/slots/area_hectares.yaml",
@ -4237,11 +4252,6 @@
"path": "modules/slots/asserted_by.yaml",
"category": "slot"
},
{
"name": "associated_taxa",
"path": "modules/slots/associated_taxa.yaml",
"category": "slot"
},
{
"name": "audio_event_segments",
"path": "modules/slots/audio_event_segments.yaml",
@ -4252,11 +4262,6 @@
"path": "modules/slots/authors.yaml",
"category": "slot"
},
{
"name": "auto_generated",
"path": "modules/slots/auto_generated.yaml",
"category": "slot"
},
{
"name": "auxiliary_places",
"path": "modules/slots/auxiliary_places.yaml",
@ -4322,16 +4327,6 @@
"path": "modules/slots/birth_place.yaml",
"category": "slot"
},
{
"name": "bold_id",
"path": "modules/slots/bold_id.yaml",
"category": "slot"
},
{
"name": "bookplate",
"path": "modules/slots/bookplate.yaml",
"category": "slot"
},
{
"name": "borrower",
"path": "modules/slots/borrower.yaml",
@ -9362,11 +9357,6 @@
"path": "modules/slots/is_approximate.yaml",
"category": "slot"
},
{
"name": "is_auto_generated",
"path": "modules/slots/is_auto_generated.yaml",
"category": "slot"
},
{
"name": "is_auxiliary_of_place",
"path": "modules/slots/is_auxiliary_of_place.yaml",
@ -9502,11 +9492,21 @@
"path": "modules/slots/is_or_was_also_allocation_agency.yaml",
"category": "slot"
},
{
"name": "is_or_was_approved_by",
"path": "modules/slots/is_or_was_approved_by.yaml",
"category": "slot"
},
{
"name": "is_or_was_archive_department_of",
"path": "modules/slots/is_or_was_archive_department_of.yaml",
"category": "slot"
},
{
"name": "is_or_was_archived_at",
"path": "modules/slots/is_or_was_archived_at.yaml",
"category": "slot"
},
{
"name": "is_or_was_archived_in",
"path": "modules/slots/is_or_was_archived_in.yaml",

View file

@ -12,7 +12,7 @@ imports:
- ../slots/revision_date
- ../slots/has_approval_date
- ../slots/has_or_had_acquisition_budget
- ../slots/approved_by
- ../slots/is_or_was_approved_by # MIGRATED: was ../slots/approved_by (2026-01-15)
- ../slots/budget_currency
- ../slots/has_or_had_description
- ../slots/has_or_had_label
@ -44,7 +44,8 @@ imports:
- ../slots/was_generated_by
- ./SpecificityAnnotation
- ./TemplateSpecificityScores
- ../slots/was_approved_by
- ./Approver # Added for is_or_was_approved_by migration (2026-01-15)
# REMOVED: ../slots/was_approved_by - migrated to is_or_was_approved_by (2026-01-15)
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
@ -92,7 +93,7 @@ classes:
slots:
- has_or_had_acquisition_budget
- has_approval_date
- approved_by
- is_or_was_approved_by # MIGRATED: was approved_by (2026-01-15)
- budget_currency
- has_or_had_description
- has_or_had_label
@ -244,7 +245,8 @@ classes:
has_approval_date:
range: date
required: false
was_approved_by:
is_or_was_is_or_was_approved_by: # MIGRATED: was was_approved_by (2026-01-15)
description: Agent (person/organization) that approved this budget
range: string
required: false
budget_status:
@ -316,7 +318,7 @@ classes:
internal_funding: 25000000.0
endowment_draw: 5000000.0
approval_date: '2023-11-15'
approved_by: Board of Directors
is_or_was_approved_by: Board of Directors
budget_status: ACTIVE
refers_to_custodian: https://nde.nl/ontology/hc/nl-nh-ams-m-rm-q190804
description: Major museum annual operating budget
@ -338,7 +340,7 @@ classes:
external_funding: 6000000.0
internal_funding: 2500000.0
approval_date: '2024-03-01'
approved_by: Province of Noord-Holland
is_or_was_approved_by: Province of Noord-Holland
budget_status: ACTIVE
refers_to_custodian: https://nde.nl/ontology/hc/nl-nh-haa-a-nha
description: Regional archive government-funded budget

View file

@ -347,12 +347,20 @@ classes:
examples:
- value: John Dee
- value: Unknown 17th-century reader
bookplate:
includes_or_included:
description: >-
MIGRATED from bookplate (Rule 53).
Bookplate(s) present in the volume, indicating ownership.
Range narrowed to Bookplate class.
required: false
range: string
range: Bookplate
multivalued: true
inlined_as_list: true
examples:
- value: Armorial bookplate of the Earl of Pembroke
- value:
id: https://nde.nl/ontology/hc/bookplate/pembroke-001
has_or_had_label: "Ex Libris Earl of Pembroke"
description: Armorial bookplate of the Earl of Pembroke
ownership_stamp:
required: false
range: string

View file

@ -31,7 +31,7 @@ imports:
- ../slots/light_max_lux
- ../slots/particulate_max
- ../slots/pest_management_required
- ../slots/policy_approved_by
- ../slots/is_or_was_approved_by # MIGRATED: was ../slots/policy_approved_by (2026-01-15)
- ../slots/policy_description
- ../slots/policy_effective_from
- ../slots/policy_effective_to
@ -46,6 +46,7 @@ imports:
- ../slots/uv_filtered_required
- ./SpecificityAnnotation
- ./TemplateSpecificityScores
- ./Approver # Added for is_or_was_approved_by migration (2026-01-15)
classes:
StorageConditionPolicy:
class_uri: odrl:Policy
@ -91,7 +92,7 @@ classes:
- note
- particulate_max
- pest_management_required
- policy_approved_by
- is_or_was_approved_by # MIGRATED: was policy_approved_by (2026-01-15)
- policy_description
- policy_effective_from
- policy_effective_to

View file

@ -45,7 +45,6 @@
"birth_date.yaml",
"birth_place.yaml",
"booking_required.yaml",
"bookplate.yaml",
"borrower.yaml",
"borrower_contact.yaml",
"bounding_box.yaml",

View file

@ -887,10 +887,14 @@ fixes:
- original_slot_id: https://nde.nl/ontology/hc/slot/bookplate
processed:
status: false
timestamp: null
session: null
notes: "Requires Bookplate class creation"
status: true
timestamp: '2026-01-14T23:15:00Z'
session: "session-2026-01-14-bookplate-migration"
notes: >-
FULLY MIGRATED: InformationCarrier - bookplate REMOVED.
Created Bookplate class (bf:Bookplate alignment) for provenance/ownership marks.
Replaced with includes_or_included slot with range Bookplate.
Slot archived to modules/slots/archive/bookplate_archived_20260114.yaml (Rule 53).
revision:
- label: includes_or_included
type: slot

View file

@ -1456,25 +1456,26 @@ async def add_manual_candidate(request: AddCandidateRequest):
message=f"Candidate {linkedin_slug} already exists for this profile"
)
# Fetch LinkedIn profile using Exa API (if available)
# Fetch LinkedIn profile using configured providers (exa, linkup, or both)
linkedin_url = f"https://www.linkedin.com/in/{linkedin_slug}"
profile_data = None
entity_filepath = None
exa_response = None
fetch_response = None
provider_used = None
if EXA_API_KEY:
exa_response = await fetch_linkedin_profile_exa(linkedin_url)
if exa_response:
profile_data = parse_linkedin_profile_from_exa(exa_response)
# Save entity profile file
source_info = {
'linkedin_url': linkedin_url,
'wcms_name': wcms_data.get('wcms_name', ''),
'wcms_institution': wcms_data.get('wcms_email_domain', '')
}
entity_filepath = await save_entity_profile(
linkedin_slug, profile_data, exa_response, source_info
)
fetch_response = await fetch_linkedin_profile(linkedin_url)
if fetch_response:
provider_used = fetch_response.get('provider', 'unknown')
profile_data = parse_linkedin_profile_from_exa(fetch_response) # Parser works for both providers
# Save entity profile file
source_info = {
'linkedin_url': linkedin_url,
'wcms_name': wcms_data.get('wcms_name', ''),
'wcms_institution': wcms_data.get('wcms_email_domain', '')
}
entity_filepath = await save_entity_profile(
linkedin_slug, profile_data, fetch_response, source_info
)
# Generate a PPID for the LinkedIn candidate
# Format: ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_NAME-SLUG
@ -1516,7 +1517,7 @@ async def add_manual_candidate(request: AddCandidateRequest):
"display_name": display_name,
"name_romanized": None,
"name_tokens": [t.upper() for t in display_name.split()],
"source": "exa_extraction" if profile_data else "manual_entry"
"source": f"{provider_used}_extraction" if profile_data else "manual_entry"
},
"linkedin_slug": linkedin_slug,
"linkedin_headline": headline,
@ -1527,7 +1528,7 @@ async def add_manual_candidate(request: AddCandidateRequest):
"email_domain_matches_employer": False,
"employer_name_overlap": [],
"confidence_score": 0.6 if profile_data else 0.5, # Higher if we got profile data
"match_signals": ["manual_entry", "exa_profile_fetched"] if profile_data else ["manual_entry"],
"match_signals": ["manual_entry", f"{provider_used}_profile_fetched"] if profile_data else ["manual_entry"],
"requires_review": True,
"reviewed": False,
"review_decision": None,