- Updated manifest.json with new generated timestamp. - Added close mappings to APIRequest and Administration classes. - Renamed slots in AccessPolicy to has_or_had_embargo_end_date and has_or_had_embargo_reason. - Changed class_uri for Accumulation to rico:AccumulationRelation and updated description. - Added exact mappings to Altitude, AppellationType, and ArchitecturalStyle classes. - Removed deprecated slots from CollectionManagementSystem and updated has_or_had_type. - Added new slots for has_or_had_embargo_end_date and has_or_had_embargo_reason. - Updated slot definitions for has_or_had_assessment, has_or_had_sequence_index, and others with new URIs and mappings. - Removed unused slots end_seconds and end_time. - Added new slot definitions for has_or_had_exhibition_type, has_or_had_extent_text, and is_or_was_documented_by.
253 lines
11 KiB
YAML
253 lines
11 KiB
YAML
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_endpoint
|
|
- ../classes/APIEndpoint
|
|
- ../slots/has_or_had_description
|
|
- ../slots/platform_type
|
|
- ../slots/has_or_had_label
|
|
- ../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/is_or_was_published_at
|
|
- ./PublicationEvent
|
|
- ./TimeSpan
|
|
- ../slots/retrieval_timestamp
|
|
- ../slots/specificity_annotation
|
|
- ../slots/is_or_was_categorized_as
|
|
- ./Tag
|
|
- ../slots/has_or_had_score
|
|
- ../slots/has_or_had_url
|
|
- ../slots/was_last_updated_at
|
|
- ./SpecificityAnnotation
|
|
- ./TemplateSpecificityScore
|
|
- ./TemplateSpecificityType
|
|
- ./TemplateSpecificityTypes
|
|
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 \u2192 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- `is_or_was_published_at`: When originally posted\\n- `was_last_updated_at`: Last modification\\\n \\ 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_endpoint
|
|
- has_api_version
|
|
- content_category
|
|
- has_or_had_description
|
|
- is_official_content
|
|
- language
|
|
- platform_type
|
|
- post_id
|
|
- has_or_had_post_type
|
|
- post_url
|
|
- posted_by_profile
|
|
- is_or_was_published_at
|
|
- retrieval_timestamp
|
|
- specificity_annotation
|
|
- is_or_was_categorized_as
|
|
- has_or_had_score
|
|
- has_or_had_url
|
|
- has_or_had_label
|
|
- was_last_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:
|
|
range: string
|
|
required: false
|
|
examples:
|
|
- value: "De Vrijheidsroute (aflevering 3) \u2013 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
|
|
is_or_was_published_at:
|
|
range: PublicationEvent
|
|
required: true
|
|
inlined: true
|
|
description: 'Publication event with temporal extent. For precise timestamps,
|
|
|
|
set all four TimeSpan boundaries to the same instant.
|
|
|
|
'
|
|
examples:
|
|
- value:
|
|
temporal_extent:
|
|
begin_of_the_begin: '2025-07-30T18:05:15Z'
|
|
end_of_the_begin: '2025-07-30T18:05:15Z'
|
|
begin_of_the_end: '2025-07-30T18:05:15Z'
|
|
end_of_the_end: '2025-07-30T18:05:15Z'
|
|
description: Published July 30, 2025 (precise timestamp)
|
|
was_last_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
|
|
is_or_was_categorized_as:
|
|
range: Tag
|
|
multivalued: true
|
|
inlined_as_list: true
|
|
required: false
|
|
description: 'Tags, hashtags, or keywords associated with the post.
|
|
|
|
MIGRATED from tag slot per slot_fixes.yaml (Rule 53/56, 2026-01-16).
|
|
|
|
'
|
|
examples:
|
|
- value:
|
|
- tag_value: 80 jaar vrijheid
|
|
is_hashtag: false
|
|
tag_platform: YouTube
|
|
- tag_value: wo2
|
|
is_hashtag: false
|
|
tag_platform: YouTube
|
|
- tag_value: vrijheidsroute
|
|
is_hashtag: false
|
|
tag_platform: YouTube
|
|
description: YouTube video tags (migrated to structured Tag format)
|
|
has_or_had_url:
|
|
range: uri
|
|
required: false
|
|
description: 'Thumbnail URL for this social media post.
|
|
|
|
MIGRATED from thumbnail_url slot per slot_fixes.yaml (Rule 53, 2026-01-15).
|
|
|
|
'
|
|
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_endpoint:
|
|
range: APIEndpoint
|
|
inlined: true
|
|
description: 'API endpoint used to retrieve this post.
|
|
|
|
MIGRATED from has_or_had_api_endpoint per Rule 53.
|
|
|
|
'
|
|
examples:
|
|
- value:
|
|
has_or_had_url: https://www.googleapis.com/youtube/v3
|
|
has_or_had_description: YouTube Data API v3
|
|
description: YouTube API endpoint
|
|
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
|
|
annotations:
|
|
specificity_score: 0.1
|
|
specificity_rationale: Generic utility class/slot created during migration
|
|
custodian_types: "['*']"
|
|
custodian_types_rationale: Universal utility concept
|