glam/schemas/20251121/linkml/modules/classes/SocialMediaProfile.yaml
kempersc fc405445c6 Refactor and update schema definitions
- Removed obsolete slots: `has_or_had_custodian_observation`, `provider`, and `specificity_annotation`.
- Updated `has_or_had_score` slot to use `SpecificityScore` class and modified its description and examples.
- Added new slots: `end_seconds`, `end_time`, `has_archive_path`, `has_or_had_custodian_name`, `protocol_name`, and `protocol_version`.
- Introduced a script `check_annotation_types.py` to validate the presence and structure of `custodian_types` in YAML files.
- Added a script `update_specificity.py` to automate updates related to `SpecificityAnnotation` to `SpecificityScore`.
2026-02-01 19:55:38 +01:00

225 lines
12 KiB
YAML

id: https://nde.nl/ontology/hc/class/social-media-profile
name: social_media_profile_class
title: SocialMediaProfile Class
imports:
- linkml:types
- ../slots/cover_image_url
- ../slots/created_date
- ../slots/has_or_had_engagement_metric
- ../slots/has_or_had_score
- ../slots/is_or_was_categorized_as
- ../slots/is_or_was_derived_from
- ../slots/is_or_was_generated_by
- ../slots/is_primary_digital_presence
- ../slots/language
- ../slots/metrics_observed_date
- ../slots/platform_name
- ../slots/platform_type
- ../slots/post_count
- ../slots/profile_description
- ../slots/profile_image_url
- ../slots/refers_to_custodian
- ../slots/social_media_profile_id
- ../slots/temporal_extent
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
foaf: http://xmlns.com/foaf/0.1/
dcterms: http://purl.org/dc/terms/
prov: http://www.w3.org/ns/prov#
crm: http://www.cidoc-crm.org/cidoc-crm/
skos: http://www.w3.org/2004/02/skos/core#
wd: http://www.wikidata.org/entity/
default_prefix: hc
classes:
SocialMediaProfile:
is_a: ReconstructedEntity
class_uri: foaf:OnlineAccount
description: "Represents a social media account or profile maintained by a heritage custodian.\n\n**FOAF ONTOLOGY ALIGNMENT**:\n\nMaps to `foaf:OnlineAccount` - \"An online account.\"\n\nKey FOAF properties used:\n- `foaf:accountName` - Username/handle on the platform\n- `foaf:accountServiceHomepage` - Homepage of the service provider (e.g., https://twitter.com)\n- `foaf:account` - Inverse property linking Agent to OnlineAccount\n\n**RELATIONSHIP TO DIGITAL PLATFORM HIERARCHY**:\n\nSocial media profiles exist in a three-tier digital presence model:\n\n```\n1. DigitalPlatform (PRIMARY digital presence)\n - Main website, primary API, flagship platform\n - Example: rijksmuseum.nl\n - Links to Custodian via refers_to_custodian\n \n2. AuxiliaryDigitalPlatform (SECONDARY digital properties)\n - Project sites, exhibition microsites, specialized tools\n - Example: Rijksstudio, Night Watch Experience\n - Links to DigitalPlatform via is_auxiliary_of\n \n3. SocialMediaProfile (THIRD-PARTY\
\ presence) - THIS CLASS\n - Accounts on external social media services\n - Example: @rijksmuseum on Instagram, Facebook, X\n - Links to BOTH Custodian AND optionally DigitalPlatform/AuxiliaryDigitalPlatform\n```\n\n**WHY SOCIAL MEDIA IS DISTINCT FROM AUXILIARY PLATFORMS**:\n\nUnlike AuxiliaryDigitalPlatform (owned/operated digital properties), social media profiles:\n- Are hosted on THIRD-PARTY platforms (not custodian-controlled)\n- Have standardized URL patterns per platform\n- Provide follower/engagement metrics\n- Subject to platform terms of service\n- Can be verified/authenticated by platform\n\n**RELATIONSHIP TO CUSTODIAN vs DIGITAL PLATFORM**:\n\nSocial media profiles can link to:\n\n1. **Custodian directly** (`refers_to_custodian`):\n - When social media is the PRIMARY or ONLY digital presence\n - Example: Small local heritage society with Facebook page as main presence\n \n2. **DigitalPlatform** (`associated_digital_platform`):\n - When social media SUPPORTS\
\ the main website\n - Example: Rijksmuseum Instagram supports rijksmuseum.nl\n \n3. **AuxiliaryDigitalPlatform** (`associated_auxiliary_platform`):\n - When social media is for a SPECIFIC project/exhibition\n - Example: Instagram account for a temporary exhibition\n\n**DECISION RULES**:\n\n\"Is social media this custodian's MAIN way to profile itself online?\"\n\n- **YES** \u2192 Link SocialMediaProfile directly to Custodian\n - is_primary_digital_presence: true\n - associated_digital_platform: null\n - Example: Local heritage group with only Facebook\n \n- **NO** \u2192 Link SocialMediaProfile to DigitalPlatform/AuxiliaryDigitalPlatform\n - is_primary_digital_presence: false\n - associated_digital_platform: (main website)\n - Example: Museum Instagram supporting main website\n\n**TEMPORAL VALIDITY**:\n\nSocial media profiles have lifecycles:\n- Account creation date\n- Account deactivation/deletion date\n- Platform migration (e.g., Twitter \u2192 X)\n- Account suspension/recovery\n\
\n**METRICS AND ANALYTICS**:\n\nSocial media profiles can track:\n- Follower/subscriber count\n- Post count\n- Engagement metrics\n- Verification status\n\nThese metrics are OBSERVATIONAL and should be timestamped.\n\n**Example - Museum with Social Media Supporting Website**:\n```yaml\nCustodian:\n has_or_had_identifier: \"https://nde.nl/ontology/hc/nl-nh-ams-m-rm-q190804\"\n preferred_label: \"Rijksmuseum\"\n \n digital_platform:\n - platform_name: \"Rijksmuseum Website\"\n homepage_web_address: \"https://www.rijksmuseum.nl/\"\n \n social_media_profiles:\n - platform_type: INSTAGRAM\n account_name: \"rijksmuseum\"\n profile_url: \"https://www.instagram.com/rijksmuseum/\"\n is_primary_digital_presence: false # Website is primary\n associated_digital_platform: \".../platform/rijksmuseum-website\"\n follower_count: 1200000\n verified: true\n \n - platform_type: X_TWITTER\n account_name: \"rijksmuseum\"\n profile_url: \"https://x.com/rijksmuseum\"\
\n is_primary_digital_presence: false\n associated_digital_platform: \".../platform/rijksmuseum-website\"\n```\n\n**Example - Local Society with Social Media as Primary Presence**:\n```yaml\nCustodian:\n has_or_had_identifier: \"https://nde.nl/ontology/hc/nl-fr-123-s-hvn\"\n preferred_label: \"Historische Vereniging Nijeveen\"\n \n digital_platform: null # No formal website\n \n social_media_profiles:\n - platform_type: FACEBOOK\n account_name: \"HistorischeVerenigingNijeveen\"\n profile_url: \"https://www.facebook.com/HistorischeVerenigingNijeveen\"\n is_primary_digital_presence: true # Facebook IS their main presence\n associated_digital_platform: null\n follower_count: 450\n```\n"
exact_mappings:
- foaf:OnlineAccount
close_mappings:
- schema:ContactPoint
- schema:SocialMediaPosting
- crm:E73_Information_Object
related_mappings:
- foaf:account
- schema:sameAs
- dcterms:identifier
slots:
- cover_image_url
- created_date
- has_or_had_engagement_metric
- is_primary_digital_presence
- language
- metrics_observed_date
- platform_name
- platform_type
- post_count
- profile_description
- profile_image_url
- refers_to_custodian
- social_media_profile_id
- has_or_had_score
- temporal_extent
- is_or_was_derived_from
- is_or_was_generated_by
slot_usage:
social_media_profile_id:
range: uriorcurie
required: true
identifier: true
examples:
- value: https://nde.nl/ontology/hc/social-media/rijksmuseum-instagram
platform_type:
range: uriorcurie
required: true
examples:
- value: INSTAGRAM
- value: FACEBOOK
platform_name:
range: string
required: false
examples:
- value: Instagram
- value: Mastodon (glammr.us)
profile_description:
range: string
required: false
examples:
- value: The museum of the Netherlands. Open daily 9-17h.
is_primary_digital_presence:
range: boolean
required: false
ifabsent: 'false'
examples:
- value: false
- value: true
post_count:
range: integer
required: false
examples:
- value: 2500
has_or_had_engagement_metric:
range: EngagementMetric
inlined: true
multivalued: true
examples:
- value:
has_or_had_type: Engagement Rate
has_or_had_value: 2.5
has_or_had_unit: '%'
metrics_observed_date:
range: datetime
required: false
examples:
- value: '2025-11-29T12:00:00Z'
profile_image_url:
range: uri
required: false
examples:
- value: https://instagram.com/p/rijksmuseum/avatar.jpg
cover_image_url:
range: uri
required: false
examples:
- value: https://facebook.com/rijksmuseum/cover.jpg
created_date:
range: date
required: false
examples:
- value: '2012-03-15'
temporal_extent:
range: TimeSpan
inlined: true
required: false
examples:
- value:
begin_of_the_begin: '2012-03-15'
- value:
begin_of_the_begin: '2012-03-15'
end_of_the_end: '2024-06-01'
language:
range: string
required: false
examples:
- value: nl
- value: en
is_or_was_derived_from:
range: CustodianObservation
multivalued: true
required: false
is_or_was_generated_by:
range: ReconstructionActivity
required: false
refers_to_custodian:
range: Custodian
required: true
examples:
- value: https://nde.nl/ontology/hc/nl-nh-ams-m-rm-q190804
comments:
- SocialMediaProfile models THIRD-PARTY social media accounts
- Distinct from DigitalPlatform (owned websites) and AuxiliaryDigitalPlatform (owned project sites)
- FOAF foaf:OnlineAccount as primary ontology alignment
- Supports both 'social media as primary presence' and 'social media supporting website' patterns
- Metrics (followers, posts) are observational and require timestamp
- Platform-specific subclasses (FacebookProfile, InstagramProfile, etc.) can extend this base class
- Links to Custodian via foaf:account pattern
see_also:
- http://xmlns.com/foaf/0.1/OnlineAccount
- http://xmlns.com/foaf/0.1/account
- https://schema.org/ContactPoint
- https://schema.org/sameAs
examples:
- value:
social_media_profile_id: https://nde.nl/ontology/hc/social-media/rijksmuseum-instagram
platform_type: INSTAGRAM
account_name: rijksmuseum
profile_url: https://www.instagram.com/rijksmuseum
profile_description: 'The museum of the Netherlands. Open daily 9-17h. #Rijksmuseum'
is_primary_digital_presence: false
post_count: 3500
has_or_had_engagement_metric:
- has_or_had_type: Engagement Rate
has_or_had_value: 2.5
has_or_had_unit: '%'
metrics_observed_date: '2025-11-29T12:00:00Z'
associated_digital_platform: https://nde.nl/ontology/hc/platform/rijksmuseum-website
account_status: ACTIVE
language: en
refers_to_custodian: https://nde.nl/ontology/hc/nl-nh-ams-m-rm-q190804
- value:
social_media_profile_id: https://nde.nl/ontology/hc/social-media/hvn-facebook
platform_type: FACEBOOK
account_name: HistorischeVerenigingNijeveen
profile_url: https://www.facebook.com/HistorischeVerenigingNijeveen
profile_description: Historische Vereniging Nijeveen - preserving local heritage since 1985
is_primary_digital_presence: true
post_count: 320
metrics_observed_date: '2025-11-29T10:00:00Z'
associated_digital_platform: null
account_status: ACTIVE
language: nl
refers_to_custodian: https://nde.nl/ontology/hc/nl-dr-nvn-s-hvn
- value:
social_media_profile_id: https://nde.nl/ontology/hc/social-media/rijksmuseum-x
platform_type: X_TWITTER
account_name: rijksmuseum
profile_url: https://x.com/rijksmuseum
is_primary_digital_presence: false
post_count: 12500
metrics_observed_date: '2025-11-29T12:00:00Z'
associated_digital_platform: https://nde.nl/ontology/hc/platform/rijksmuseum-website
created_date: '2009-02-05'
account_status: ACTIVE
language: en
refers_to_custodian: https://nde.nl/ontology/hc/nl-nh-ams-m-rm-q190804
annotations:
specificity_score: 0.1
specificity_rationale: Generic utility class/slot created during migration
custodian_types: "['*']"