glam/schemas/20251121/linkml/modules/classes/WorkExperience.yaml
kempersc 767fb8ca80 feat(schema): Add LinkedIn profile and person modeling schema
Person Identity Classes:
- PersonName: Full name modeling with components (given_name, surname_prefix,
  base_surname, patronym, initials) following Dutch naming conventions
- PersonConnection: Professional network connections with heritage relevance scoring
- ConnectionNetwork: Network-level analysis and statistics

LinkedIn Profile Schema:
- LinkedInProfile: Complete professional profile structure
- WorkExperience: Employment history with heritage institution detection
- EducationCredential: Academic background and qualifications
- LanguageProficiency: Language skills with ISO 639-1 codes

Supporting Classes:
- ExtractionMetadata: Provenance tracking for extracted profile data
- HeritageRelevance: GLAMORCUBESFIXPHDNT type scoring and classification

Slots (17 person-related slots):
- Name components: given_name, base_surname, surname_prefix, patronym, initials
- Identity: age, birth_date, birth_place, death_place, gender_identity, pronouns
- Professional: occupation, religion
- References: literal_name, name_specification, has_person_name, extraction_metadata

Enums:
- HeritageTypeEnum: GLAMORCUBESFIXPHDNT type codes for heritage relevance
2025-12-16 20:04:59 +01:00

245 lines
7.5 KiB
YAML

# Work Experience Class
# Career history entries with temporal information
id: https://nde.nl/ontology/hc/class/WorkExperience
name: work_experience_class
title: Work Experience Class
version: 1.0.0
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
org: http://www.w3.org/ns/org#
prov: http://www.w3.org/ns/prov#
crm: http://www.cidoc-crm.org/cidoc-crm/
xsd: http://www.w3.org/2001/XMLSchema#
imports:
- linkml:types
- ../metadata
- TimeSpan
default_range: string
classes:
WorkExperience:
class_uri: schema:OrganizationRole
description: |
A single work experience entry from a person's career history.
Models employment positions with job title, employer, dates, and location.
Uses simplified date representation (not full TimeSpan) since LinkedIn
data typically has precise month/year values.
**Schema.org Alignment**:
- Represents a schema:OrganizationRole (role at an organization)
- Related to org:Membership (W3C Organization Ontology)
**Use Cases**:
- LinkedIn profile experience entries
- CV/resume work history
- Staff affiliation tracking
**Example JSON Structure**:
```json
{
"title": "Staff Adviseur",
"company": "The Dutch Inspectorate of Education",
"dates": "Apr 2025 - Present",
"location": "Utrecht, Netherlands"
}
```
**Heritage Relevance**:
- Each work experience can be tagged for heritage sector relevance
- Links to CustodianName if employer is a known heritage custodian
exact_mappings:
- schema:OrganizationRole
close_mappings:
- org:Membership
- crm:E7_Activity
related_mappings:
- schema:EmployeeRole
- prov:Association
slots:
- job_title
- employer_name
- employer_linkedin_url
- employment_dates_raw
- employment_start_date
- employment_end_date
- is_current_position
- work_location
- job_description
- heritage_employer
slot_usage:
job_title:
description: |
The job title or role held at this position.
Schema.org: schema:roleName
slot_uri: schema:roleName
range: string
required: true
examples:
- value: "Staff Adviseur"
description: "Dutch job title"
- value: "Senior Curator, Asian Art"
description: "Curatorial role with specialization"
employer_name:
description: |
Name of the employing organization.
Schema.org: schema:name of the schema:Organization
slot_uri: schema:memberOf
range: string
required: true
examples:
- value: "The Dutch Inspectorate of Education"
description: "Full organization name"
- value: "Rijksmuseum"
description: "Heritage institution employer"
employer_linkedin_url:
description: |
LinkedIn company page URL for the employer.
slot_uri: schema:url
range: uri
pattern: "^https://www\\.linkedin\\.com/company/[a-z0-9-]+/?$"
examples:
- value: "https://www.linkedin.com/company/rijksmuseum"
employment_dates_raw:
description: |
Raw date string as extracted from LinkedIn.
Format varies: "Apr 2025 - Present", "2020 - 2023", etc.
Preserved for provenance; use parsed fields for queries.
slot_uri: schema:description
range: string
examples:
- value: "Apr 2025 - Present"
description: "Current position with start month"
- value: "Aug 2017 - Apr 2025"
description: "Completed position with month precision"
- value: "2015 - 2020"
description: "Year-only precision"
employment_start_date:
description: |
Parsed start date of employment (ISO 8601).
May be year-only (YYYY) or month-precision (YYYY-MM).
slot_uri: schema:startDate
range: date
examples:
- value: "2025-04"
description: "April 2025 start"
- value: "2017"
description: "Year-only precision"
employment_end_date:
description: |
Parsed end date of employment (ISO 8601).
Null/absent indicates current position.
slot_uri: schema:endDate
range: date
examples:
- value: "2025-04"
description: "Ended April 2025"
- value: null
description: "Current position (ongoing)"
is_current_position:
description: |
Whether this is the person's current position.
True if employment_dates_raw contains "Present" or end_date is null.
slot_uri: schema:activeStatus
range: boolean
ifabsent: "false"
examples:
- value: true
description: "Currently employed at this position"
work_location:
description: |
Location of the work position (city, region, country).
Raw string as extracted; use Location class for structured data.
slot_uri: schema:workLocation
range: string
examples:
- value: "Utrecht, Netherlands"
description: "City and country"
- value: "Amsterdam, Noord-Holland, Netherlands"
description: "City, region, country"
job_description:
description: |
Description of responsibilities and achievements (if available).
Often not present in LinkedIn basic profile data.
slot_uri: schema:description
range: string
heritage_employer:
description: |
Whether the employer is a known heritage custodian.
If true, employer_name should match a CustodianName.
slot_uri: hc:heritageRelevant
range: boolean
ifabsent: "false"
comments:
- "Set to true if employer is museum, archive, library, etc."
- "Links to HeritageTypeEnum for classification"
comments:
- "Inlined in LinkedInProfile.experience[] as multivalued list"
- "Preserves raw LinkedIn date formats for provenance"
- "Current positions have is_current_position=true and null end_date"
- "heritage_employer enables filtering for heritage sector careers"
see_also:
- "https://schema.org/OrganizationRole"
- "https://www.w3.org/TR/vocab-org/#class-membership"
slots:
job_title:
description: "Job title or role held at this position"
range: string
employer_name:
description: "Name of the employing organization"
range: string
employer_linkedin_url:
description: "LinkedIn company page URL for the employer"
range: uri
employment_dates_raw:
description: "Raw date string as extracted from LinkedIn"
range: string
employment_start_date:
description: "Parsed start date of employment"
range: date
employment_end_date:
description: "Parsed end date of employment"
range: date
is_current_position:
description: "Whether this is a current position"
range: boolean
work_location:
description: "Location of the work position"
range: string
job_description:
description: "Description of responsibilities and achievements"
range: string
heritage_employer:
description: "Whether employer is a known heritage custodian"
range: boolean