glam/frontend/public/schemas/20251121/linkml/modules/classes/VideoPost.yaml
kempersc 53c6dbc2d9 feat(schema): Migrate temporal slots and introduce new pattern classes
Major slot migrations following slot_fixes.yaml revisions:
- TimeSpan: begin_of_the_begin, begin_of_the_end, end_of_the_begin, end_of_the_end
- Quantity: has_or_had_measurement_unit with MeasureUnit class
- Description: has_or_had_description with Description class
- URL, WikiData, Timestamp, Location, Provenance pattern classes

New slots for RiC-O compliance:
- Temporal: has_or_had_time_interval, calendar_system
- Transfer: is_or_was_transferred, has_or_had_policy
- Location: starts/ends_or_started/ended_at_location
- Provenance: has_or_had_provenance_path, is_or_was_webarchived_at

Archive deprecated slots per Rule 53 workflow.
2026-01-14 20:01:55 +01:00

425 lines
11 KiB
YAML

id: https://nde.nl/ontology/hc/class/VideoPost
name: video_post_class
title: Video Post Class
imports:
- linkml:types
- ./SocialMediaPost
- ./SocialMediaPostTypes
- ../slots/language
- ../slots/has_aspect_ratio
# REMOVED 2026-01-15: ../slots/available_caption_languages - migrated to has_available_caption_language
- ../slots/caption_available
- ../slots/comment_author
- ../slots/comment_author_channel_id
- ../slots/comment_count
- ../slots/comment_id
- ../slots/comment_like_count
- ../slots/comment_published_at
- ../slots/has_or_had_comment_reply
- ../slots/comment_reply_count
- ../slots/comment_text
- ../slots/comment_updated_at
- ../slots/comments_fetched
- ../slots/default_audio_language
- ../slots/default_language
- ../slots/dislike_count
- ../slots/duration
- ../slots/favorite_count
- ../slots/frame_rate
- ../slots/is_embeddable
- ../slots/is_licensed_content
- ../slots/is_made_for_kid
- ../slots/like_count
- ../slots/live_broadcast_content
- ../slots/metrics_observed_at
- ../slots/specificity_annotation
- ../slots/template_specificity
- ../slots/video_category_id
- ../slots/video_comment
- ../slots/has_or_had_quantity
- ./Quantity
# MIGRATED 2026-01-15: ../slots/view_count → ../slots/has_or_had_quantity per Rule 53
- ./SpecificityAnnotation
- ./TemplateSpecificityScores
- ../slots/definition
- ../slots/has_available_caption_language
- ../enums/VideoDefinitionEnum
- ../enums/LiveBroadcastStatusEnum
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
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#
wd: http://www.wikidata.org/entity/
default_prefix: hc
classes:
VideoPost:
is_a: SocialMediaPost
class_uri: as:Video
abstract: false
description: 'Concrete class for video content with platform-specific properties.
**DEFINITION**:
VideoPost is a specialized SocialMediaPost for video content. It extends
the base post class with video-specific slots for duration, resolution,
captions, and engagement metrics.
**EXTENDS**: SocialMediaPost
This class adds:
- Video technical properties (duration, definition, aspect ratio)
- Caption and subtitle availability
- Engagement metrics (views, likes, comments)
- Platform-specific fields (YouTube category, live broadcast status)
- Temporal markers (chapters, segments)
**ONTOLOGY MAPPINGS**:
| Property | Activity Streams | Schema.org |
|----------|------------------|------------|
| Class | as:Video | schema:VideoObject |
| duration | as:duration | schema:duration |
| definition | - | schema:videoQuality |
| caption | - | schema:caption |
| view_count | - | schema:interactionStatistic (via Quantity) |
**PLATFORM SUPPORT**:
| Platform | Duration Limit | Resolution | Captions |
|----------|----------------|------------|----------|
| YouTube | 12 hours (verified) | Up to 8K | VTT, SRT |
| Vimeo | Varies by plan | Up to 8K | VTT, SRT |
| Facebook | 4 hours | Up to 4K | Auto-generated |
| TikTok | 10 minutes | 1080p | Auto-generated |
| Instagram Reels | 90 seconds | 1080p | Auto-generated |
**HERITAGE INSTITUTION USE CASES**:
| Content Type | Typical Duration | Platform |
|--------------|------------------|----------|
| Virtual tours | 10-30 min | YouTube |
| Conservation docs | 5-20 min | YouTube, Vimeo |
| Curator interviews | 15-60 min | YouTube |
| Object spotlights | 2-5 min | YouTube, Instagram |
| Short clips | 15-60 sec | TikTok, Reels |
| Live recordings | 30-120 min | YouTube |
**METRICS OBSERVATION**:
Video metrics (views, likes, comments) are observational data that change
constantly. Each metric reading should include:
- `metrics_observed_at`: When metrics were recorded
- `retrieval_timestamp`: When API call was made
**RELATIONSHIP TO VideoPostType**:
- VideoPost is a **concrete post instance** with video content
- VideoPostType is a **type classification** for categorizing posts
- A VideoPost typically has `post_types: [VideoPostType]`
- But may also have multiple types: `[LiveStreamPostType, VideoPostType]`
**CAPTION AND SUBTITLE DISTINCTION**:
Related classes for textual content derived from video:
- VideoSubtitle: Time-coded text (SRT/VTT format)
- VideoTranscript: Full text without timestamps
- VideoAnnotation: Computer vision derived content
See VideoTextContent hierarchy for detailed modeling.
'
exact_mappings:
- as:Video
- schema:VideoObject
close_mappings:
- crm:E73_Information_Object
related_mappings:
- wikidata:Q34508
- wikidata:Q604644
slots:
- has_aspect_ratio
- has_available_caption_language
- caption_available
- comment_count
- comments_fetched
- default_audio_language
- default_language
- definition
- dislike_count
- duration
- favorite_count
- frame_rate
- is_embeddable
- is_licensed_content
- is_made_for_kid
- like_count
- live_broadcast_content
- metrics_observed_at
- specificity_annotation
- template_specificity
- video_category_id
- video_comment
- has_or_had_quantity
slot_usage:
duration:
range: string
required: false
pattern: ^P(T(\d+H)?(\d+M)?(\d+S)?)?$
examples:
- value: PT10M59S
description: 10 minutes and 59 seconds
- value: PT1H30M
description: 1 hour 30 minutes
definition:
range: VideoDefinitionEnum
required: false
examples:
- value: hd
description: High definition (720p/1080p)
has_aspect_ratio:
range: string
required: false
examples:
- value: '16:9'
description: Standard widescreen
- value: '9:16'
description: Vertical format for Shorts/Reels
frame_rate:
range: float
required: false
examples:
- value: 30.0
description: 30 frames per second
caption_available:
range: boolean
required: false
examples:
- value: true
description: Video has captions available
- value: false
description: No captions available
default_language:
range: string
required: false
examples:
- value: nl
description: Dutch language content
default_audio_language:
range: string
required: false
examples:
- value: nl
description: Dutch audio track
has_available_caption_language:
range: string
multivalued: true
required: false
examples:
- value:
- nl
- en
- de
description: Captions available in Dutch, English, German
has_or_had_quantity:
range: Quantity
inlined: true
description: >-
View count for video. RULE 53: Replaces deprecated view_count with
structured Quantity class supporting measurement unit (VIEW) and
temporal extent for point-in-time observation.
examples:
- value:
numeric_value: 132
has_or_had_measurement_unit: VIEW
temporal_extent:
begin_of_the_begin: "2025-12-01T23:16:22Z"
description: 132 views at observation time
like_count:
range: integer
required: false
minimum_value: 0
examples:
- value: 2
description: 2 likes at observation time
dislike_count:
range: integer
required: false
minimum_value: 0
comment_count:
range: integer
required: false
minimum_value: 0
examples:
- value: 0
description: No comments at observation time
favorite_count:
range: integer
required: false
minimum_value: 0
metrics_observed_at:
range: datetime
required: false
examples:
- value: '2025-12-01T23:16:22.294232+00:00'
description: Metrics observed December 1, 2025
video_category_id:
range: string
required: false
examples:
- value: '22'
description: 'YouTube: People & Blogs'
- value: '27'
description: 'YouTube: Education'
live_broadcast_content:
range: LiveBroadcastStatusEnum
required: false
examples:
- value: none
description: Standard video (not live)
- value: live
description: Currently broadcasting
is_licensed_content:
range: boolean
required: false
is_embeddable:
range: boolean
required: false
is_made_for_kid:
range: boolean
required: false
comments_fetched:
range: integer
required: false
minimum_value: 0
examples:
- value: 0
description: No comments fetched
video_comment:
range: VideoComment
multivalued: true
required: false
inlined: true
comments:
- Extends SocialMediaPost with video-specific properties
- Maps to as:Video and schema:VideoObject
- Metrics are observational - always include metrics_observed_at
- Caption availability signals but not content (see VideoSubtitle)
- YouTube is primary platform for heritage institution video content
see_also:
- https://www.w3.org/ns/activitystreams#Video
- https://schema.org/VideoObject
- https://developers.google.com/youtube/v3/docs/videos
VideoComment:
class_uri: schema:Comment
description: 'A comment on a video post.
Models user-generated comments with author, text, timestamp,
and engagement metrics. Supports nested reply threads.
'
exact_mappings:
- schema:Comment
- as:Note
slots:
- comment_author
- comment_author_channel_id
- comment_id
- comment_like_count
- comment_published_at
- has_or_had_comment_reply
- comment_reply_count
- comment_text
- comment_updated_at
- specificity_annotation
- template_specificity
slot_usage:
comment_id:
range: string
required: true
comment_author:
range: string
required: true
comment_author_channel_id:
range: string
required: false
comment_text:
range: string
required: true
comment_published_at:
range: datetime
required: true
comment_updated_at:
range: datetime
required: false
comment_like_count:
range: integer
required: false
minimum_value: 0
comment_reply_count:
range: integer
required: false
minimum_value: 0
has_or_had_comment_reply:
range: VideoComment
multivalued: true
required: false
inlined: true