glam/schemas/20251121/linkml/modules/classes/LinkedInProfileData.yaml
kempersc 174a420c08
All checks were successful
Deploy Frontend / build-and-deploy (push) Successful in 3m57s
refactor(schema): centralize 1515 inline slot definitions per Rule 48
- Remove inline slot definitions from 144 class files
- Create 7 new centralized slot files in modules/slots/:
  - custodian_type_broader.yaml
  - custodian_type_narrower.yaml
  - custodian_type_related.yaml
  - definition.yaml
  - finding_aid_access_restriction.yaml
  - finding_aid_description.yaml
  - finding_aid_temporal_coverage.yaml
- Add centralize_inline_slots.py automation script
- Update manifest with new timestamp

Rule 48: Class files must NOT define inline slots - all slots
must be imported from modules/slots/ directory.

Note: Pre-existing IdentifierFormat duplicate class definition
(in Standard.yaml and IdentifierFormat.yaml) not addressed in
this commit - requires separate schema refactor.
2026-01-11 22:02:14 +01:00

234 lines
6.5 KiB
YAML

id: https://nde.nl/ontology/hc/class/LinkedInProfileData
name: linkedin_profile_data_class
title: LinkedIn Profile Data Class
version: 1.0.0
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
foaf: http://xmlns.com/foaf/0.1/
imports:
- linkml:types
- ./WorkExperience
- ./EducationCredential
- ./LanguageProficiency
- ./SpecificityAnnotation
- ./TemplateSpecificityScores
- ../slots/specificity_annotation
- ../slots/template_specificity
- ../slots/has_or_had_about_text
- ../slots/connections_text
- ../slots/education
- ../slots/experience
- ../slots/headline
- ../slots/has_or_had_language
- ../slots/languages_raw
- ../slots/profile_image_url
- ../slots/profile_linkedin_url
- ../slots/profile_location
- ../slots/profile_name
- ../slots/skill
default_range: string
classes:
LinkedInProfileData:
class_uri: schema:Person
description: 'Core profile data extracted from a LinkedIn profile.
Contains the person''s professional information including:
- Basic info (name, headline, location, connections)
- About/summary text
- Career history (experience array)
- Education history (education array)
- Skills and languages
- Profile image URL
**Note on Data Representation**:
- Raw strings are preserved for provenance (e.g., connections text)
- Nested objects use defined classes (WorkExperience, EducationCredential)
- Skills are simple strings (not structured objects)
- Languages may be raw strings or LanguageProficiency objects
'
exact_mappings:
- schema:Person
close_mappings:
- foaf:Person
slots:
- about_text
- connections_text
- education
- experience
- headline
- has_or_had_language
- languages_raw
- profile_image_url
- profile_linkedin_url
- profile_location
- profile_name
- skill
- specificity_annotation
- template_specificity
slot_usage:
profile_name:
description: 'Full name of the person as displayed on LinkedIn.
'
slot_uri: schema:name
range: string
required: true
examples:
- value: Sander Hulleman
- value: Jan van der Berg
profile_linkedin_url:
description: 'LinkedIn profile URL for this person.
Duplicated from extraction_metadata for convenience.
'
slot_uri: schema:url
range: uri
pattern: ^https://www\.linkedin\.com/in/[a-z0-9-]+/?$
examples:
- value: https://www.linkedin.com/in/sander-hulleman-5017b9105
headline:
description: 'Professional headline/tagline from LinkedIn.
Typically includes current job title and/or professional identity.
'
slot_uri: schema:jobTitle
range: string
examples:
- value: Stafadviseur PO
description: Dutch job title
- value: Senior Curator | Rijksmuseum
description: Title with organization
- value: Digital Archivist | Heritage Data Specialist
description: Multiple roles
profile_location:
description: 'Location as displayed on LinkedIn profile.
Format varies: "City, Region, Country" or "City, Country"
'
slot_uri: schema:homeLocation
range: string
examples:
- value: Arnhem, Gelderland, Netherlands
- value: Amsterdam, Netherlands
connections_text:
description: 'Raw connections/followers text from LinkedIn.
Format: "X connections • Y followers"
Preserved as-is for provenance.
'
slot_uri: schema:description
range: string
examples:
- value: 246 connections • 248 followers
- value: 500+ connections
has_or_had_about_text:
description: 'About/summary section text from LinkedIn profile.
May be absent if person hasn''t written a summary.
'
slot_uri: schema:description
range: string
examples:
- value: Third year student at Stenden University...
experience:
description: 'Work experience entries from LinkedIn.
Array of WorkExperience objects with job title, company, dates, location.
'
range: WorkExperience
multivalued: true
inlined_as_list: true
education:
description: 'Education entries from LinkedIn.
Array of EducationCredential objects with school, degree, years.
'
range: EducationCredential
multivalued: true
inlined_as_list: true
skill:
description: 'Skills listed on LinkedIn profile.
Simple string array (not structured objects).
'
slot_uri: schema:knowsAbout
range: string
multivalued: true
examples:
- value:
- education
- teaching
- curriculum development
languages_raw:
description: 'Raw language strings as extracted from LinkedIn.
Format: "Language - Proficiency level"
Use this when storing unprocessed data.
'
range: string
multivalued: true
examples:
- value:
- English - Native or bilingual
- Dutch - Native or bilingual
has_or_had_language:
description: 'Parsed language proficiency entries.
Array of LanguageProficiency objects with language name, code, level.
Use this when storing processed/structured data.
'
range: LanguageProficiency
multivalued: true
inlined_as_list: true
profile_image_url:
description: 'URL to the LinkedIn profile photo.
Should be the actual CDN URL (media.licdn.com), not overlay page.
See AGENTS.md Rule 16 for photo URL requirements.
'
slot_uri: schema:image
range: uri
pattern: ^https://media\.licdn\.com/.*$
examples:
- value: https://media.licdn.com/dms/image/v2/C4E03AQHoGyR6G0kphA/profile-displayphoto-shrink_200_200/...
specificity_annotation:
range: SpecificityAnnotation
inlined: true
template_specificity:
range: TemplateSpecificityScores
inlined: true
comments:
- Inlined within LinkedInProfile as profile_data
- experience and education use inlined_as_list for JSON array representation
- languages_raw preserves original strings; languages has parsed objects
- profile_image_url must be CDN URL per AGENTS.md Rule 16