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/has_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 - has_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