glam/schemas/20251121/linkml/modules/classes/LinkedInProfile.yaml
kempersc fcd1c21c63 Add aliases and enhance slot definitions across various modules
- Added new aliases for existing slots to improve clarity and usability, including:
  - has_deadline: has_embargo_end_date
  - has_extent: has_extent_text
  - has_fonds: has_fond
  - has_laboratory: conservation_lab
  - has_language: has_iso_code639_1, has_iso_code639_3
  - has_legal_basis: legal_basis
  - has_light_exposure: max_light_lux
  - has_measurement_unit: has_unit
  - has_note: has_custodian_observation
  - has_occupation: occupation
  - has_operating_hours: has_operating_hours
  - has_position: position
  - has_quantity: has_artwork_count, link_count
  - has_roadmap: review_date
  - has_skill: skill
  - has_speaker: speaker_label
  - has_specification: specification_url
  - has_statement: rights_statement_url, rights_statement
  - has_type: custodian_only
  - has_user_category: serves_visitors_only
  - hold_record_set: record_count
  - identified_by: has_index_number
  - in_period: has_period
  - in_place: has_place
  - in_series: has_series
  - measure: has_measurement
  - measured_on: measurement_date
  - organized_by: has_organizer
  - originate_from: has_origin
  - part_of: suborganization_of
  - published_on: has_publication_date
  - receive_investment: has_investment
  - related_to: connection_heritage_type
  - require: preservation_requirement
  - safeguarded_by: current_keeper, record_holder_note
  - state: states_or_stated
  - take_comission: takes_or_took_comission
  - take_place_at: takes_or_took_place_at
  - transmit_through: transmits_or_transmitted_through
  - warrant: warrants_or_warranted

- Introduced a new slot definition for evaluated_through to capture evaluation methodologies and review statuses.
2026-02-14 14:41:49 +01:00

289 lines
No EOL
9.4 KiB
YAML

id: https://nde.nl/ontology/hc/class/LinkedInProfile
name: linkedin_profile_class
title: LinkedIn Profile 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/
prov: http://www.w3.org/ns/prov#
dct: http://purl.org/dc/terms/
imports:
- linkml:types
- ../metadata
- ../slots/has_text
- ../slots/emphasize
- ../slots/estimate
- ../slots/assessed_as
- ../slots/has_contact_details
- ../slots/has_description
- ../slots/has_language
- ../slots/has_metadata
- ../slots/has_method
- ../slots/has_provenance
- ../slots/has_score
- ../slots/has_source
- ../slots/has_title
- ../slots/indicate
- ../slots/assessed_on
- ../slots/has_raw_data
- ../slots/has_confidence_measure
- ../slots/proficient_in
- ../slots/maximum_of_maximum
- ../slots/fabricate
- ../slots/has_content
- ../slots/has_image
- ../slots/has_url
- ../slots/refer_to
- ../slots/has_name
- ../slots/20260202_matang/skill
- ../slots/employed_by
- ../slots/temporal_extent
# default_range: string
classes:
LinkedInProfile:
class_uri: schema:ProfilePage
description: "Complete LinkedIn profile extraction for a person.\n\nModels the content of person entity JSON files stored at\n`data/custodian/person/entity/*.json`. This is the root class\nfor LinkedIn profile data extracted via Exa API or HTML parsing.\n\n**Relationship to PersonObservation**:\n- PersonObservation.linkedin_profile_path references the file containing\n this LinkedInProfile data\n- PersonObservation.linkedin_profile_url links to the source URL\n- This class models the CONTENT of that file\n\n**Relationship to SocialMediaProfile**:\n- SocialMediaProfile (in same schema) is for CUSTODIAN social media accounts\n (e.g., Rijksmuseum's Instagram, Nationaal Archief's Twitter)\n- LinkedInProfile is for PERSON LinkedIn profiles (staff members)\n- These are complementary, not overlapping classes\n\n**Data Flow**:\n```\nLinkedIn URL \u2192 Exa API \u2192 JSON file \u2192 LinkedInProfile (this class)\n \u2191\nPersonObservation.linkedin_profile_path\
\ references this file\n```\n"
exact_mappings:
- schema:ProfilePage
close_mappings:
- foaf:PersonalProfileDocument
- schema:Person
slots:
- has_provenance
- assessed_as
- has_content
- employed_by
- has_score
- has_contact_details
slot_usage:
has_provenance:
# range: string
required: true
inlined: false # Fixed invalid inline for primitive type
has_content:
range: LinkedInProfileData
required: true
inlined: true
assessed_as:
range: HeritageRelevanceAssessment
inlined: true
employed_by:
# range: string
pattern: ^[a-z0-9-]+$
examples:
- value: the-dutch-inspectorate-of-education
- value: rijksmuseum
has_contact_details:
range: WhatsAppProfile
inlined: true
comments:
- This is the root class for person entity JSON files
- PersonObservation.linkedin_profile_path references files containing this data
- See AGENTS.md Rule 20 for person entity file requirements
- See AGENTS.md Rule 27 for person-custodian data architecture
see_also:
- https://schema.org/ProfilePage
- https://nde.nl/ontology/hc/class/PersonObservation
- https://nde.nl/ontology/hc/class/SocialMediaProfile
annotations:
specificity_score: 0.1
specificity_rationale: Generic utility class/slot created during migration
custodian_types: "['*']"
LinkedInProfileData:
class_uri: schema:Person
description: 'Core profile data extracted from a LinkedIn profile.
Contains the person''s professional information including:
- Basic info (name, has_title, 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:
- has_text
- indicate
- has_title
- has_language
- has_raw_data
- has_image
- has_url
- refer_to
- has_name
- skill
- has_score
slot_usage:
has_name:
# range: string
required: true
examples:
- value: Sander Hulleman
- value: Jan van der Berg
has_url:
range: uri
pattern: ^https://www\.linkedin\.com/in/[a-z0-9-]+/?$
examples:
- value: https://www.linkedin.com/in/sander-hulleman-5017b9105
has_title:
# range: string
examples:
- value: Stafadviseur PO
- value: Senior Curator | Rijksmuseum
- value: Digital Archivist | Heritage Data Specialist
refer_to:
# range: string
examples:
- value: Arnhem, Gelderland, Netherlands
- value: Amsterdam, Netherlands
has_text:
# range: string
examples:
- value: "246 connections \u2022 248 followers"
- value: 500+ connections
has_description:
# range: string
inlined: false # Fixed invalid inline for primitive type
examples:
- value:
description_text: Experienced curator with a focus on...
has_raw_data:
# range: string
multivalued: true
examples:
- value:
- English - Native or bilingual
- Dutch - Native or bilingual
has_language:
# range: string
multivalued: true
inlined_as_list: false # Fixed invalid inline for primitive type
has_image:
range: uri
pattern: ^https://media\.licdn\.com/.*$
examples:
- value: https://media.licdn.com/dms/image/v2/C4E03AQHoGyR6G0kphA/profile-displayphoto-shrink_200_200/...
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
WhatsAppEnrichment:
class_uri: hc:WhatsAppEnrichment
description: 'WhatsApp business likelihood enrichment data.
Added by enrichment scripts to assess whether a person is likely
to use WhatsApp for professional/business communication.
**Assessment Factors**:
- Digital technology indicators in profile
- Role type (customer-facing, technical, etc.)
- Industry/sector norms
- Geographic region (WhatsApp prevalence varies)
'
slots:
- indicate
- has_score
slot_usage:
indicate:
range: DigitalProfessionalAssessment
inlined: true
DigitalProfessionalAssessment:
class_uri: hc:DigitalProfessionalAssessment
description: 'Assessment of a person''s digital/technology proficiency.
'
slots:
- estimate
- emphasize
- proficient_in
- has_score
slot_usage:
proficient_in:
range: boolean
emphasize:
range: DigitalProficiency
inlined: true
multivalued: true
examples:
- value:
has_label: Python
has_type: PROGRAMMING_LANGUAGE
estimate:
range: DigitalConfidence
inlined: true
required: false
examples:
- value:
has_score: 0.85
has_type: PROFICIENCY_INFERENCE
has_description: High confidence inferred from technical skills
WhatsAppLikelihood:
class_uri: hc:WhatsAppLikelihood
description: 'Likelihood score for WhatsApp business usage.
'
slots:
- assessed_on
- has_confidence_measure
- has_confidence_measure
- has_confidence_measure
- has_confidence_measure
- maximum_of_maximum
- has_score
slot_usage:
has_confidence_measure:
range: integer
minimum_value: 0
maximum_value: 100
maximum_of_maximum:
range: integer
has_confidence_measure:
# range: string
has_confidence_measure:
range: float
minimum_value: 0.0
maximum_value: 1.0
has_confidence_measure:
# range: string
multivalued: true
assessed_on:
range: TimeSpan
inlined: true
examples:
- value:
start_of_the_start: '2024-01-01T12:00:00Z'
WhatsAppEnrichmentMetadata:
class_uri: hc:WhatsAppEnrichmentMetadata
description: 'Metadata about the WhatsApp enrichment process.
'
slots:
- has_provenance
- has_source
- fabricate
- has_score
slot_usage:
has_source:
range: DataSource
inlined: true
examples:
- value:
has_label: LinkedIn Profile
has_code: LINKEDIN
has_description: Public LinkedIn profile data
fabricate:
range: boolean
has_provenance:
# range: string
inlined: false # Fixed invalid inline for primitive type
examples:
- value:
extraction_date: '2025-01-14T12:00:00Z'
note: Verified production data from LinkedIn profile