glam/schemas/20251121/linkml/modules/classes/Person.yaml
2025-12-21 00:01:54 +01:00

334 lines
13 KiB
YAML

# Person - Person Hub Class
# =============================================================================
# An abstract hub class for individual persons in the Heritage Custodian ontology.
# Serves as the central connection point for all PersonObservation entities.
#
# DESIGN RATIONALE:
# - Hub pattern: Person contains minimal data, acts as connection point
# - PersonObservation entities attach via refers_to_person
# - Enables linking same person across multiple custodians/roles/sources
# - Parallel architecture to Custodian hub
#
# CIDOC-CRM ALIGNMENT:
# - Person → crm:E21_Person (individual human)
# - E21_Person is subclass of E39_Actor (shared with Custodian)
# - Key properties:
# - P48_has_preferred_identifier → person_id
# - P11i_participated_in → Event (via participated_in_events)
#
# PICO ALIGNMENT:
# - Person hub → pico:Person (abstract identity)
# - PersonObservation → pico:PersonObservation (evidence-based data)
# - The hub/observation split is the core PICO pattern
# =============================================================================
id: https://nde.nl/ontology/hc/class/Person
name: Person
title: Person Hub Class
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
crm: http://www.cidoc-crm.org/cidoc-crm/
prov: http://www.w3.org/ns/prov#
schema: http://schema.org/
pico: https://personsincontext.org/model#
foaf: http://xmlns.com/foaf/0.1/
dcterms: http://purl.org/dc/terms/
skos: http://www.w3.org/2004/02/skos/core#
default_prefix: hc
imports:
- linkml:types
# Slot imports
- ../slots/person_id
- ../slots/preferred_label
- ../slots/participated_in_events
- ../slots/has_person_observation
- ../slots/created
- ../slots/modified
# Class imports
- ./Event
classes:
Person:
class_uri: crm:E21_Person
description: |
An abstract hub class that serves as the central connection point for all
information about an individual person. The Person itself contains minimal
information - essentially just its persistent identifier (person_id) and
preferred name - and acts as a node to which all observations attach.
This hub pattern allows multiple observations from different sources to be
connected to a single logical person without asserting which observation
is "correct" or "primary".
**HUB ARCHITECTURE**:
```
PersonObservation ──refers_to_person──> Person ──participated_in_events──> Event
│ ↑
│ │
(source: LinkedIn 2024) (source: Annual Report 2020)
│ │
└───────────────────────────────────┘
Multiple observations → Single hub
```
- The Person hub is identified by: https://nde.nl/ontology/hc/person/{person-slug}
- All PersonObservations refer to the hub via refers_to_person
- The hub persists while observations and interpretations evolve
**DISTINCTION FROM PersonObservation**:
| Aspect | Person (Hub) | PersonObservation |
|--------|--------------|-------------------|
| **Purpose** | Abstract identity | Evidence-based data |
| **Contains** | Minimal: ID, preferred name | Rich: role, affiliation, dates |
| **Temporal** | Timeless identity | Point-in-time snapshot |
| **Source** | Canonical | From specific source |
| **Count** | One per person | Many per person |
**USE CASES**:
1. **Cross-Custodian Career Tracking**:
Person worked at Rijksmuseum (observation 1), then at Van Gogh Museum (observation 2).
Both observations link to same Person hub.
2. **Source Reconciliation**:
LinkedIn says "Director", annual report says "General Director".
Both are valid observations of the same Person.
3. **Event Participation**:
Person participated in merger event, relocation event, etc.
Events link to Person hub, not individual observations.
**PICO ALIGNMENT**:
The PiCo (Persons in Context) ontology establishes this hub/observation pattern:
- `pico:Person`: The abstract identity (hub) - this class
- `pico:PersonObservation`: Evidence-based data about a person
Key relationships:
- PersonObservation → Person via pico:observationOf (refers_to_person)
- Person → PersonObservation via pico:hasObservation (inverse)
**CIDOC-CRM ALIGNMENT**:
Maps to crm:E21_Person which is defined as:
"This class comprises real persons who live or are assumed to have lived."
E21_Person is a subclass of:
- E39_Actor (shared superclass with organizations)
- E20_Biological_Object
Key relationships:
- P48_has_preferred_identifier → person_id
- P11i_participated_in → Event (via participated_in_events)
**RELATIONSHIP TO Custodian**:
Person and Custodian are parallel hub classes, both subclasses of crm:E39_Actor:
```
crm:E39_Actor
├── crm:E21_Person (Person hub)
│ └── PersonObservation refers to Person
└── crm:E74_Group (Custodian hub)
└── CustodianObservation refers to Custodian
```
A Custodian can BE a Person (private collector), but typically:
- Person = individual human
- Custodian = organization/group/institution
**EXAMPLE - Director with Multiple Roles**:
```yaml
Person:
person_id: "https://nde.nl/ontology/hc/person/taco-dibbits"
preferred_name: "Taco Dibbits"
participated_in_events:
- "https://nde.nl/ontology/hc/event/dibbits-appointed-director-2020"
# Observations from different sources:
PersonObservation: # From LinkedIn
person_name: "Taco Dibbits"
role_title: "General Director"
unit_affiliation: "Executive Board"
refers_to_person: "https://nde.nl/ontology/hc/person/taco-dibbits"
observation_source: "LinkedIn profile, 2025-01-15"
PersonObservation: # From annual report
person_name: "T.J.S. Dibbits"
role_title: "Algemeen Directeur"
refers_to_person: "https://nde.nl/ontology/hc/person/taco-dibbits"
observation_source: "Rijksmuseum Jaarverslag 2023"
```
**EXAMPLE - Person Across Multiple Institutions**:
```yaml
Person:
person_id: "https://nde.nl/ontology/hc/person/maria-garcia"
preferred_name: "Maria Garcia"
participated_in_events:
- "https://nde.nl/ontology/hc/event/garcia-curator-appointment-2015"
- "https://nde.nl/ontology/hc/event/garcia-director-appointment-2022"
PersonObservation: # Earlier role
role_title: "Curator of European Art"
unit_affiliation: "Rijksmuseum"
role_start_date: "2015-03-01"
role_end_date: "2021-12-31"
refers_to_person: "https://nde.nl/ontology/hc/person/maria-garcia"
PersonObservation: # Current role
role_title: "Director"
unit_affiliation: "Mauritshuis"
role_start_date: "2022-01-01"
refers_to_person: "https://nde.nl/ontology/hc/person/maria-garcia"
```
exact_mappings:
- crm:E21_Person
- pico:Person
- foaf:Person
close_mappings:
- schema:Person
- prov:Person
broad_mappings:
- crm:E39_Actor
- prov:Agent
- foaf:Agent
slots:
- person_id
- preferred_name
- has_person_observation
- participated_in_events
- created
- modified
slot_usage:
person_id:
slot_uri: dcterms:identifier
description: |
The persistent identifier for this Person hub.
Format: https://nde.nl/ontology/hc/person/{person-slug}
Example: https://nde.nl/ontology/hc/person/taco-dibbits
range: uriorcurie
required: true
identifier: true
pattern: "^https://nde\\.nl/ontology/hc/person/[a-z0-9-]+$"
preferred_name:
slot_uri: skos:prefLabel
description: |
The preferred name for this person - the canonical form used for display.
This is the PREFERRED name, not necessarily the full legal name.
Other name forms appear in PersonObservation entries.
**EXAMPLES**:
- "Taco Dibbits" (preferred)
- NOT: "Taco Jacobus Sergio Dibbits" (full legal)
- NOT: "T.J.S. Dibbits" (formal abbreviation)
range: string
required: false
participated_in_events:
description: |
Events in which this person participated.
This enables bidirectional navigation:
- Event → Person: "Who participated in this event?"
- Person → Event: "What events did this person participate in?"
**EXAMPLES**:
- Appointment events (hired, promoted)
- Organizational events (merger where person was involved)
- Career milestones (retirement, award)
range: Event
multivalued: true
required: false
has_person_observation:
slot_uri: pico:hasObservation
description: |
All PersonObservation entities that refer to this Person hub.
This is the inverse of `refers_to_person` and enables bidirectional navigation:
- PersonObservation → Person via `refers_to_person`
- Person → PersonObservation via `has_person_observation`
**NAVIGATION PATTERN**:
```
Person ──has_person_observation──> PersonObservation[1..n]
<──refers_to_person────────
```
**USE CASES**:
- Retrieve all observations about a person
- Find all sources that mention this person
- Track career across multiple institutions
**NOTE**: This slot is populated automatically via the inverse relationship.
When a PersonObservation sets `refers_to_person`, this slot is updated.
range: PersonObservation
multivalued: true
required: false
inlined: false
comments:
- "Person is the hub class for individual humans in the HC ontology"
- "PersonObservation entities attach to Person via refers_to_person"
- "Parallel architecture to Custodian hub class"
- "Enables linking same person across multiple institutions and sources"
- "preferred_name is minimal - rich data lives in PersonObservation"
- "participated_in_events links person to life/career events"
examples:
- value:
person_id: "https://nde.nl/ontology/hc/person/taco-dibbits"
preferred_name: "Taco Dibbits"
participated_in_events:
- "https://nde.nl/ontology/hc/event/dibbits-appointed-director-2020"
has_person_observation:
- "https://nde.nl/ontology/hc/observation/dibbits-linkedin-2025"
- "https://nde.nl/ontology/hc/observation/dibbits-rijksmuseum-annual-report-2024"
description: "Director of Rijksmuseum as Person hub with multiple observations"
- value:
person_id: "https://nde.nl/ontology/hc/person/jan-de-vries-1985"
preferred_name: "Jan de Vries"
description: "Person with disambiguator (birth year)"
- value:
person_id: "https://nde.nl/ontology/hc/person/maria-garcia"
preferred_name: "Maria Garcia"
has_person_observation:
- "https://nde.nl/ontology/hc/observation/garcia-rijksmuseum-2015"
- "https://nde.nl/ontology/hc/observation/garcia-mauritshuis-2022"
participated_in_events:
- "https://nde.nl/ontology/hc/event/garcia-curator-appointment-2015"
- "https://nde.nl/ontology/hc/event/garcia-director-appointment-2022"
description: "Person with career spanning multiple institutions - observations from each role"
# Local slot definition for preferred_name (if not already globally defined for Person)
# This ensures Person has a name slot even if the global slot has different semantics
slots:
preferred_name:
slot_uri: skos:prefLabel
description: |
The preferred (canonical) name for this entity.
Used for display purposes and as the primary label.
range: string
required: false
exact_mappings:
- skos:prefLabel
- foaf:name
- schema:name