glam/schemas/20251121/linkml/modules/classes/SocialMediaPost.yaml
kempersc 6c3fa6b5a3 Remove deprecated slots and add new slot definitions for enhanced data modeling
- Deleted obsolete slot definitions for work_location and workshop_space.
- Introduced new TaxonName class to represent scientific taxonomic names with detailed attributes.
- Archived existing slots related to surname_prefix, target_name, taxon_name, terminal_count, text_region_count, title, title_proper, total_chapter, total_characters_extracted, total_connections_extracted, track_name, transcript_format, traveling_venue, type_label, type_status, typical_responsibility, unesco_domain, unesco_inscription_year, unesco_list_status, uniform_title, unit_name, used_by_custodian, uv_filtered_required, valid_from_geo, valid_to_geo, validation_status, variant_of_name, verification_date, viability_status, within_auxiliary_place, and within_place.
- Updated slot descriptions and structures to improve clarity and compliance with standards.
2026-01-15 11:42:35 +01:00

236 lines
10 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

id: https://nde.nl/ontology/hc/class/SocialMediaPost
name: social_media_post_class
title: Social Media Post Class
imports:
- linkml:types
- ./SocialMediaProfile
- ./SocialMediaPlatformType
- ./SocialMediaPostType
- ./TimeSpan
- ./WebObservation
- ../slots/language
- ../slots/has_or_had_api_endpoint
- ../slots/description
- ../slots/platform_type
- ../slots/has_or_had_label # was: title - migrated per Rule 53
- ../slots/has_api_version
- ../slots/content_category
- ../slots/is_official_content
- ../slots/post_id
- ../slots/has_or_had_post_type
- ../slots/post_url
- ../slots/posted_by_profile
- ../slots/published_at
- ../slots/retrieval_timestamp
- ../slots/specificity_annotation
- ../slots/tag
- ../slots/template_specificity
- ../slots/thumbnail_url
- ../slots/updated_at
- ./SpecificityAnnotation
- ./TemplateSpecificityScores
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#
as: https://www.w3.org/ns/activitystreams#
default_prefix: hc
classes:
SocialMediaPost:
class_uri: as:Object
abstract: false
description: "Concrete class for social media posts/content items.\n\n**DEFINITION**:\n\nSocialMediaPost represents a\
\ discrete piece of content published on a social media\nplatform. This includes videos, images, text posts, stories,\
\ carousels, threads,\nand other content types. Each post is published by a SocialMediaProfile (account/channel).\n\n\
**CRITICAL: MULTIVALUED POST TYPES**:\n\nA single SocialMediaPost can have **multiple** post types via the `post_types`\
\ slot.\nThis reflects the reality that social media content often combines formats:\n\n| Post Example | Primary Type\
\ | Secondary Types |\n|--------------|--------------|-----------------|\n| Instagram carousel with videos | CarouselPostType\
\ | ImagePostType, VideoPostType |\n| Twitter thread with images | ThreadPostType | TextPostType, ImagePostType |\n\
| YouTube Live archived as video | LiveStreamPostType | VideoPostType |\n| Podcast with video recording | AudioPostType\
\ | VideoPostType |\n| Story highlight (saved) | StoryPostType | ImagePostType, VideoPostType |\n\n**TYPE ORDERING CONVENTION**:\n\
- First type in list = primary/dominant format\n- Subsequent types = secondary characteristics\n- Order matters for\
\ display and categorization\n\n**CRITICAL: POST vs PROFILE vs PLATFORM**:\n\n| Class | Represents | Example | Cardinality\
\ |\n|-------|------------|---------|-------------|\n| SocialMediaPlatformType | Platform category | YouTube | ~25 types\
\ |\n| SocialMediaProfile | Account/channel | @rijksmuseum | Thousands |\n| **SocialMediaPost** | Individual content\
\ | A video, post | Millions |\n\n**ACTIVITY STREAMS 2.0 ALIGNMENT**:\n\nMaps to `as:Object` from W3C Activity Streams\
\ 2.0 vocabulary:\n- as:Object is the base type for content in social media\n- Individual posts may also map to as:Video,\
\ as:Image, as:Note based on post_types\n- Enables federation with ActivityPub-based platforms (Mastodon, PeerTube)\n\
\n**HERITAGE INSTITUTION CONTEXT**:\n\nSocial media content from heritage institutions includes:\n\n1. **Official content**\
\ (posted by the institution):\n - Collection highlights (ImagePostType)\n - Exhibition announcements (TextPostType)\n\
\ - Educational videos (VideoPostType)\n - Behind-the-scenes content (ShortVideoPostType, StoryPostType)\n - Event\
\ recordings (LiveStreamPostType → VideoPostType)\n - Curator interviews (VideoPostType, AudioPostType)\n - Multi-image\
\ collection stories (CarouselPostType)\n\n2. **Third-party content** (about the institution):\n - Visitor videos/photos\n\
\ - News coverage\n - Academic discussions\n - Review content\n\n3. **User-generated content** (mentions):\n \
\ - Tagged posts\n - Check-ins\n - Comments/discussions\n\n**PROVENANCE TRACKING**:\n\nContent items are OBSERVATIONAL\
\ data retrieved via:\n- Platform APIs (YouTube Data API, Twitter API, etc.)\n- Web scraping (when API unavailable)\n\
- Manual archival\n\nEach content record includes:\n- `retrieval_timestamp`: When content was fetched\n- `api_endpoint`:\
\ Which API/method was used\n- `metrics_observed_date`: When engagement metrics were recorded\n\n**TEMPORAL CONSIDERATIONS**:\n\
\nContent has multiple temporal dimensions:\n- `published_at`: When originally posted\n- `updated_at`: Last modification\
\ by author\n- `retrieval_timestamp`: When we fetched it\n- `metrics_observed_date`: When metrics (views, likes) were\
\ recorded\n\nEngagement metrics change constantly; always record observation timestamp.\n\n**SUBCLASSES FOR SPECIALIZED\
\ CONTENT**:\n\nWhile SocialMediaPost can represent any content with post_types,\nspecialized subclasses provide additional\
\ platform-specific slots:\n\n- **VideoPost**: YouTube, TikTok, Vimeo videos (duration, definition, captions)\n- **ImagePost**:\
\ Instagram, Pinterest posts (dimensions, alt_text) [future]\n- **TextPost**: Twitter/X, Mastodon posts (character_count)\
\ [future]\n- **StoryPost**: Instagram/Facebook stories (ephemeral, segments) [future]\n"
exact_mappings:
- as:Object
close_mappings:
- schema:CreativeWork
- crm:E73_Information_Object
related_mappings:
- schema:SocialMediaPosting
- dcterms:BibliographicResource
slots:
- has_or_had_api_endpoint
- has_api_version
- content_category
- description
- is_official_content
- language
- platform_type
- post_id
- has_or_had_post_type
- post_url
- posted_by_profile
- published_at
- retrieval_timestamp
- specificity_annotation
- tag
- template_specificity
- thumbnail_url
- has_or_had_label # was: title
- updated_at
slot_usage:
post_id:
range: string
required: true
identifier: true
examples:
- value: FbIoC-Owy-M
description: YouTube video ID
- value: '1234567890123456789'
description: Twitter/X tweet ID
post_url:
range: uri
required: true
pattern: ^https?://
examples:
- value: https://www.youtube.com/watch?v=FbIoC-Owy-M
description: YouTube video URL
has_or_had_post_type:
range: SocialMediaPostType
multivalued: true
required: true
inlined: false
examples:
- value: '[VideoPostType]'
description: Standard video content
- value: '[CarouselPostType, ImagePostType, VideoPostType]'
description: Instagram carousel with mixed media
platform_type:
range: SocialMediaPlatformType
required: true
inlined: false
examples:
- value: YouTube
description: Posted on YouTube
posted_by_profile:
range: SocialMediaProfile
required: false
inlined: false
examples:
- value: https://nde.nl/ontology/hc/social-media/nationaal-onderduikmuseum-youtube
description: Museum's YouTube channel profile
has_or_had_label: # was: title
range: string
required: false
examples:
- value: De Vrijheidsroute (aflevering 3) Zevenaar, Duiven, Westervoort
description: YouTube video title
description:
range: string
required: false
examples:
- value: De videoreeks De Vrijheidsroute is gebaseerd op de gelijknamige fietsroute...
description: YouTube video description
published_at:
range: datetime
required: true
examples:
- value: '2025-07-30T18:05:15Z'
description: Published July 30, 2025
updated_at:
range: datetime
required: false
examples:
- value: '2025-08-01T10:30:00Z'
description: Last edited August 1, 2025
language:
range: string
required: false
examples:
- value: nl
description: Dutch language content
tag:
range: string
multivalued: true
required: false
examples:
- value:
- 80 jaar vrijheid
- wo2
- vrijheidsroute
description: YouTube video tags
thumbnail_url:
range: uri
required: false
examples:
- value: https://i.ytimg.com/vi/FbIoC-Owy-M/hqdefault.jpg
description: YouTube video thumbnail
is_official_content:
range: boolean
required: false
ifabsent: 'true'
examples:
- value: true
description: Posted by official museum channel
content_category:
range: string
required: false
examples:
- value: '22'
description: YouTube category ID for People & Blogs
retrieval_timestamp:
range: datetime
required: true
examples:
- value: '2025-12-01T23:16:22.294232+00:00'
description: Retrieved December 1, 2025
has_or_had_api_endpoint:
range: string
required: false
examples:
- value: https://www.googleapis.com/youtube/v3
description: YouTube Data API v3
has_api_version:
range: string
required: false
examples:
- value: v3
description: YouTube API version 3
comments:
- Concrete class for social media posts
- post_types is MULTIVALUED - a post can have multiple content types
- First type in post_types list is the primary format
- Use specialized subclasses (VideoPost) for platform-specific properties
- Activity Streams 2.0 alignment enables ActivityPub federation
- Metrics are observational - always include retrieval_timestamp
see_also:
- https://www.w3.org/ns/activitystreams#Object
- https://schema.org/CreativeWork
- https://schema.org/SocialMediaPosting