glam/schemas/20251121/linkml/modules/classes/PersonConnection.yaml
kempersc dfa667c90f Fix LinkML schema for valid RDF generation with proper slot_uri
Summary:
- Create 46 missing slot definition files with proper slot_uri values
- Add slot imports to main schema (01_custodian_name_modular.yaml)
- Fix YAML examples sections in 116+ class and slot files
- Fix PersonObservation.yaml examples section (nested objects → string literals)

Technical changes:
- All slots now have explicit slot_uri mapping to base ontologies (RiC-O, Schema.org, SKOS)
- Eliminates malformed URIs like 'custodian/:slot_name' in generated RDF
- gen-owl now produces valid Turtle with 153,166 triples

New slot files (46):
- RiC-O slots: rico_note, rico_organizational_principle, rico_has_or_had_holder, etc.
- Scope slots: scope_includes, scope_excludes, archive_scope
- Organization slots: organization_type, governance_authority, area_served
- Platform slots: platform_type_category, portal_type_category
- Social media slots: social_media_platform_category, post_type_*
- Type hierarchy slots: broader_type, narrower_types, custodian_type_broader
- Wikidata slots: wikidata_equivalent, wikidata_mapping

Generated output:
- schemas/20251121/rdf/01_custodian_name_modular_20260107_134534_clean.owl.ttl (6.9MB)
- Validated with rdflib: 153,166 triples, no malformed URIs
2026-01-07 13:48:03 +01:00

277 lines
9.7 KiB
YAML

id: https://nde.nl/ontology/hc/class/PersonConnection
name: person_connection_class
title: Person Connection 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/
dct: http://purl.org/dc/terms/
imports:
- linkml:types
- ../metadata
- ../enums/HeritageTypeEnum
- ../slots/class_metadata_slots
default_range: string
classes:
PersonConnection:
class_uri: schema:Person
description: |
A single connection entry from a person's LinkedIn network.
Represents one person in another person's connection list, including
their relationship degree, professional headline, and heritage sector
classification.
**Relationship to ConnectionNetwork**:
- ConnectionNetwork contains an array of PersonConnection entries
- Each PersonConnection represents one network connection
- connection_id links back to the target profile
**Connection Degrees**:
- 1st: Direct connection (mutual connection)
- 2nd: Connected through one mutual connection
- 3rd+: Connected through two or more people
**Name Types** (per AGENTS.md Rule 17):
- full: Complete first and last name visible
- abbreviated: Contains single initial (e.g., "Amy B.", "S. Buse")
- anonymous: Privacy-hidden profile ("LinkedIn Member")
exact_mappings:
- schema:Person
close_mappings:
- foaf:Person
related_mappings:
- schema:knows
slots:
- connection_degree
- connection_headline
- connection_heritage_relevant
- connection_heritage_type
- connection_id
- connection_linkedin_url
- connection_location
- connection_name
- connection_organization
- mutual_connections_text
- name_type
- specificity_annotation
- template_specificity
slot_usage:
connection_id:
description: |
Unique identifier for this connection entry.
Format: {target_slug}_conn_{index:04d}_{name_slug}
The connection_id enables:
- Deduplication across connection lists
- Linking to full profile if extracted later
- Tracking same person across multiple target profiles
slot_uri: dct:identifier
range: string
required: true
pattern: ^[a-z0-9-]+_conn_[0-9]{4}_[a-z0-9_]+$
examples:
- value: giovannafossati_conn_0042_amy_b
description: 'Connection #42 from Giovanna Fossati''s network'
- value: rijksmuseum_staff_0001_jan_van_berg
description: Staff member from Rijksmuseum
connection_name:
description: |
Name of the connected person as displayed on LinkedIn.
May be abbreviated ("Amy B.") or anonymous ("LinkedIn Member")
depending on privacy settings.
slot_uri: schema:name
range: string
required: true
examples:
- value: Maddalena Ghiotto
description: Full name visible
- value: Amy B.
description: Abbreviated last name
- value: LinkedIn Member
description: Anonymous/privacy-protected
name_type:
description: |
Classification of the name visibility level.
Per AGENTS.md Rule 17:
- full: Complete first and last name
- abbreviated: Contains single initial (e.g., "Amy B.")
- anonymous: Privacy-hidden profile ("LinkedIn Member")
slot_uri: hc:nameType
range: NameTypeEnum
required: true
examples:
- value: full
description: Complete name visible
- value: abbreviated
description: Partial name (privacy setting)
connection_degree:
description: |
LinkedIn connection degree relative to the viewer.
**Important**: The degree is relative to the VIEWER (person conducting
the search), NOT the target profile being analyzed. See AGENTS.md Rule 17.
Values:
- 1st: Direct mutual connection
- 2nd: One person between viewer and connection
- 3rd+: Two or more people between
slot_uri: hc:connectionDegree
range: ConnectionDegreeEnum
required: true
examples:
- value: 2nd
description: Second-degree connection
connection_headline:
description: |
Professional headline/tagline from the connection's profile.
Contains current job title and/or professional identity.
slot_uri: schema:jobTitle
range: string
examples:
- value: Archiving nerd in the digital era.
- value: Senior Curator at Rijksmuseum
- value: PhD candidate Critical audiovisual heritage
connection_location:
description: |
Location as displayed on the connection's profile.
Format varies: "City, Region, Country" or "Country" only.
slot_uri: schema:homeLocation
range: string
examples:
- value: Utrecht, Utrecht, Netherlands
- value: Netherlands
- value: Amsterdam, North Holland, Netherlands
connection_organization:
description: |
Primary organization extracted from headline (when identifiable).
May be absent if headline doesn't clearly indicate organization.
slot_uri: schema:memberOf
range: string
examples:
- value: Vrije Universiteit Amsterdam
- value: Digital Infrastructure department of the KNAW Humanities Cluster
connection_heritage_relevant:
description: |
Whether this connection is professionally relevant to heritage sectors.
Determined by analyzing headline for heritage-related keywords.
slot_uri: hc:heritageRelevant
range: boolean
required: true
examples:
- value: true
description: Works in museum, archive, library, etc.
- value: false
description: No apparent heritage sector connection
connection_heritage_type:
description: |
Single-letter heritage type code if heritage_relevant is true.
Uses GLAMORCUBESFIXPHDNT taxonomy (G,L,A,M,O,R,C,U,B,E,S,F,I,X,P,H,D,N,T).
slot_uri: hc:heritageType
range: HeritageTypeEnum
examples:
- value: A
description: Archive sector
- value: M
description: Museum sector
- value: D
description: Digital heritage
connection_linkedin_url:
description: |
LinkedIn profile URL for this connection (if extractable).
May be absent for privacy-restricted or abbreviated name profiles.
slot_uri: schema:url
range: uri
pattern: ^https://www\.linkedin\.com/in/[a-z0-9-]+/?$
examples:
- value: https://www.linkedin.com/in/maddalena-ghiotto-12345
mutual_connections_text:
description: |
Raw mutual connections text from LinkedIn.
Format: "X mutual connections" or "Name and X others"
Preserved for network analysis.
slot_uri: schema:description
range: string
examples:
- value: Thomas van Maaren, Bob Coret, and 4 other mutual connections
- value: 12 mutual connections
specificity_annotation:
range: SpecificityAnnotation
inlined: true
template_specificity:
range: TemplateSpecificityScores
inlined: true
comments:
- Inlined in ConnectionNetwork.connections[] as multivalued list
- connection_id enables deduplication across multiple connection lists
- name_type classification per AGENTS.md Rule 17
- connection_degree is relative to VIEWER, not target profile
see_also:
- https://schema.org/Person
- https://schema.org/knows
enums:
NameTypeEnum:
description: |
Classification of name visibility level in LinkedIn data.
Per AGENTS.md Rule 17.
permissible_values:
full:
description: Complete first and last name visible
meaning: schema:Text
abbreviated:
description: Contains single initial (e.g., 'Amy B.', 'S. Buse')
meaning: schema:Text
anonymous:
description: Privacy-hidden profile ('LinkedIn Member')
meaning: schema:Text
ConnectionDegreeEnum:
description: |
LinkedIn connection degree values.
Indicates network distance from the viewer.
permissible_values:
1st:
description: Direct mutual connection
meaning: schema:knows
2nd:
description: Connected through one mutual connection
meaning: schema:knows
3rd+:
description: Connected through two or more people
meaning: schema:knows
slots:
connection_id:
description: Unique identifier for this connection entry
range: string
connection_name:
description: Name of the connected person
range: string
name_type:
description: Classification of name visibility level
range: NameTypeEnum
connection_degree:
description: LinkedIn connection degree (1st, 2nd, 3rd+)
range: ConnectionDegreeEnum
connection_headline:
description: Professional headline from connection's profile
range: string
connection_location:
description: Location from connection's profile
range: string
connection_organization:
description: Primary organization from headline
range: string
connection_heritage_relevant:
description: Whether connection is heritage-sector relevant
range: boolean
connection_heritage_type:
description: Heritage type code if heritage_relevant
range: HeritageTypeEnum
connection_linkedin_url:
description: LinkedIn profile URL for connection
range: uri
mutual_connections_text:
description: Raw mutual connections text
range: string