271 lines
11 KiB
YAML
271 lines
11 KiB
YAML
id: https://nde.nl/ontology/hc/class/VideoSubtitle
|
|
name: video_subtitle_class
|
|
title: Video Subtitle Class
|
|
imports:
|
|
- linkml:types
|
|
- ./VideoTranscript
|
|
- ./VideoTimeSegment
|
|
- ../slots/has_or_had_mean
|
|
- ./MeanValue
|
|
- ../slots/has_or_had_unit
|
|
- ./Unit
|
|
- ../slots/has_or_had_caption
|
|
- ./Caption
|
|
- ../slots/has_or_had_alignment
|
|
- ./Alignment
|
|
- ../slots/has_or_had_quantity
|
|
- ./Quantity
|
|
- ../slots/includes_music_description
|
|
- ../slots/includes_sound_description
|
|
- ../slots/includes_speaker_identification
|
|
- ../slots/is_or_was_created_through
|
|
- ../slots/is_closed_caption
|
|
- ../slots/is_sdh
|
|
- ../slots/raw_subtitle_content
|
|
- ../slots/specificity_annotation
|
|
- ../slots/has_or_had_format
|
|
- ../slots/has_or_had_score
|
|
- ../slots/has_or_had_identifier
|
|
- ./TrackIdentifier
|
|
- ../slots/has_or_had_label
|
|
- ./SpecificityAnnotation
|
|
- ./TemplateSpecificityScore
|
|
- ./TemplateSpecificityType
|
|
- ./TemplateSpecificityTypes
|
|
- ./AutoGeneration
|
|
- ../enums/SubtitlePositionEnum
|
|
- ../enums/SubtitleFormatEnum
|
|
- ../slots/has_or_had_segment
|
|
- ../slots/includes_timestamp
|
|
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#
|
|
ma: http://www.w3.org/ns/ma-ont#
|
|
rdfs: http://www.w3.org/2000/01/rdf-schema#
|
|
org: http://www.w3.org/ns/org#
|
|
xsd: http://www.w3.org/2001/XMLSchema#
|
|
default_prefix: hc
|
|
classes:
|
|
VideoSubtitle:
|
|
is_a: VideoTranscript
|
|
class_uri: hc:VideoSubtitle
|
|
abstract: false
|
|
description: "Time-coded caption/subtitle content for video.\n\n**DEFINITION**:\n\nVideoSubtitle represents caption/subtitle tracks that provide time-coded\ntext synchronized with video playback. It extends VideoTranscript because\nsubtitles contain complete transcription PLUS temporal synchronization.\n\n**INHERITANCE FROM VideoTranscript**:\n\nVideoSubtitle inherits all transcript capabilities:\n- `full_text`: Complete subtitle text concatenated\n- `segments`: Time-coded entries (REQUIRED for subtitles)\n- `includes_timestamps`: Always true for subtitles\n- `content_language`: Language of subtitle text\n- All provenance from VideoTextContent\n\nAnd adds subtitle-specific properties:\n- `has_or_had_format`: SRT, VTT, TTML, SBV, ASS\n- `is_closed_caption`: CC vs regular subtitles\n- `is_sdh`: Subtitles for Deaf/Hard-of-Hearing\n- `includes_sound_descriptions`: Non-speech audio descriptions\n\n**SCHEMA.ORG ALIGNMENT**:\n\nMaps to `schema:caption` property:\n> \"For downloadable machine\
|
|
\ formats (closed caption, subtitles etc.)\n> use the MediaObject.encodingFormat property.\"\n\n**SUBTITLE vs CAPTION vs TRANSCRIPT**:\n\n| Type | Time-coded | Purpose | Audience |\n|------|------------|---------|----------|\n| Transcript | Optional | Reading, search | Everyone |\n| Subtitle | Required | Language translation | Hearing viewers |\n| Caption (CC) | Required | Accessibility | Deaf/HoH viewers |\n| SDH | Required | Full accessibility | Deaf viewers, noisy environments |\n\n**SDH (Subtitles for Deaf/Hard-of-Hearing)**:\n\nSDH differs from regular subtitles by including:\n- Speaker identification: \"(John) Hello\"\n- Sound effects: \"[door slams]\", \"[music playing]\"\n- Music descriptions: \"\u266A upbeat jazz \u266A\"\n- Emotional cues: \"[laughing]\", \"[whispering]\"\n\n**SUBTITLE FORMATS**:\n\n| Format | Extension | Features | Use Case |\n|--------|-----------|----------|----------|\n| SRT | .srt | Simple, universal | Most video players |\n| VTT | .vtt | W3C standard,\
|
|
\ styling | HTML5 video, web |\n| TTML | .ttml/.dfxp | XML, rich styling | Broadcast, streaming |\n| SBV | .sbv | YouTube native | YouTube uploads |\n| ASS | .ass | Advanced styling | Anime, complex layouts |\n\n**SRT FORMAT EXAMPLE**:\n\n```\n1\n00:00:00,000 --> 00:00:03,500\nWelcome to the Rijksmuseum.\n\n2\n00:00:03,500 --> 00:00:08,200\nToday we'll explore the Night Watch gallery.\n```\n\n**VTT FORMAT EXAMPLE**:\n\n```\nWEBVTT\n\n00:00:00.000 --> 00:00:03.500\nWelcome to the Rijksmuseum.\n\n00:00:03.500 --> 00:00:08.200\nToday we'll explore the Night Watch gallery.\n```\n\n**HERITAGE INSTITUTION CONTEXT**:\n\nSubtitles are critical for heritage video accessibility:\n\n1. **Accessibility Compliance**: WCAG 2.1, Section 508\n2. **Multilingual Access**: Translate for international audiences\n3. **Silent Viewing**: Social media, public displays, quiet spaces\n4. **Search Discovery**: Subtitle text is indexed by platforms\n5. **Preservation**: Text outlasts video format obsolescence\n\
|
|
\n**YOUTUBE API INTEGRATION**:\n\nSubtitle tracks from YouTube API populate:\n- `has_or_had_format`: Typically VTT or SRT\n- `generation_method`: PLATFORM_PROVIDED or ASR_AUTOMATIC\n- `content_language`: From track language code\n- `is_or_was_created_through`: YouTube auto-caption flag\n\n**SEGMENTS ARE REQUIRED**:\n\nUnlike VideoTranscript where segments are optional, VideoSubtitle\nREQUIRES the `segments` slot to be populated with VideoTimeSegment\nentries that include start_seconds, end_seconds, and segment_text.\n"
|
|
exact_mappings:
|
|
- schema:caption
|
|
close_mappings:
|
|
- ma:CaptioningFormat
|
|
related_mappings:
|
|
- schema:transcript
|
|
slots:
|
|
- has_or_had_mean
|
|
- has_or_had_unit
|
|
- has_or_had_caption
|
|
- has_or_had_alignment
|
|
- has_or_had_quantity
|
|
- includes_music_description
|
|
- includes_sound_description
|
|
- includes_speaker_identification
|
|
- is_or_was_created_through
|
|
- is_closed_caption
|
|
- is_sdh
|
|
- raw_subtitle_content
|
|
- specificity_annotation
|
|
- has_or_had_format
|
|
- has_or_had_score
|
|
- has_or_had_identifier
|
|
- has_or_had_label
|
|
slot_usage:
|
|
has_or_had_segment:
|
|
required: true
|
|
includes_timestamp:
|
|
ifabsent: 'true'
|
|
has_or_had_format:
|
|
description: 'The subtitle format for this video subtitle track.
|
|
|
|
Values: SRT, VTT, TTML, SBV, ASS
|
|
|
|
'
|
|
range: SubtitleFormatEnum
|
|
required: true
|
|
examples:
|
|
- value: VTT
|
|
description: WebVTT format (W3C standard)
|
|
- value: SRT
|
|
description: SubRip format (most common)
|
|
raw_subtitle_content:
|
|
range: string
|
|
required: false
|
|
examples:
|
|
- value: 'WEBVTT
|
|
|
|
|
|
00:00:00.000 --> 00:00:03.500
|
|
|
|
Welcome to the museum.
|
|
|
|
'
|
|
description: Complete VTT file content
|
|
is_closed_caption:
|
|
range: boolean
|
|
required: false
|
|
ifabsent: 'false'
|
|
examples:
|
|
- value: true
|
|
description: This is a closed caption track
|
|
is_sdh:
|
|
range: boolean
|
|
required: false
|
|
ifabsent: 'false'
|
|
examples:
|
|
- value: true
|
|
description: SDH subtitle track
|
|
includes_sound_description:
|
|
range: boolean
|
|
required: false
|
|
ifabsent: 'false'
|
|
examples:
|
|
- value: true
|
|
description: Contains sound effect descriptions
|
|
includes_music_description:
|
|
range: boolean
|
|
required: false
|
|
ifabsent: 'false'
|
|
examples:
|
|
- value: true
|
|
description: Contains music descriptions
|
|
includes_speaker_identification:
|
|
range: boolean
|
|
required: false
|
|
ifabsent: 'false'
|
|
examples:
|
|
- value: true
|
|
description: Subtitle text includes speaker labels
|
|
is_or_was_created_through:
|
|
description: Whether this subtitle was auto-generated (e.g., YouTube ASR)
|
|
range: boolean
|
|
required: false
|
|
ifabsent: 'false'
|
|
examples:
|
|
- value: true
|
|
description: YouTube auto-generated caption
|
|
has_or_had_label:
|
|
range: string
|
|
required: false
|
|
examples:
|
|
- value: English (auto-generated)
|
|
description: YouTube auto-caption track name
|
|
track_id:
|
|
description: Platform-specific identifier for this subtitle track (DEPRECATED - use has_or_had_identifier)
|
|
range: string
|
|
deprecated: Use has_or_had_identifier with TrackIdentifier range instead
|
|
required: false
|
|
examples:
|
|
- value: en.3OWxR1w4QfE
|
|
description: YouTube caption track ID
|
|
has_or_had_identifier:
|
|
description: Platform-specific identifier for this subtitle track
|
|
range: TrackIdentifier
|
|
required: false
|
|
inlined: true
|
|
examples:
|
|
- value: '{"platform": "YouTube", "has_or_had_code": "en.3OWxR1w4QfE"}'
|
|
description: YouTube caption track identifier
|
|
has_or_had_caption:
|
|
description: 'MIGRATED from default_position per slot_fixes.yaml (Rule 53, 2026-01-24).
|
|
|
|
Caption configuration for this subtitle track.
|
|
|
|
Uses Caption class with has_or_had_alignment for positioning.
|
|
|
|
'
|
|
range: Caption
|
|
inlined: true
|
|
required: false
|
|
examples:
|
|
- value:
|
|
is_available: true
|
|
caption_format: VTT
|
|
description: VTT caption available
|
|
has_or_had_alignment:
|
|
description: 'MIGRATED from default_position per slot_fixes.yaml (Rule 53, 2026-01-24).
|
|
|
|
Default positioning for subtitle display on screen.
|
|
|
|
Uses Alignment class for structured representation.
|
|
|
|
'
|
|
range: Alignment
|
|
inlined: true
|
|
required: false
|
|
examples:
|
|
- value:
|
|
vertical_alignment: bottom
|
|
horizontal_alignment: center
|
|
description: Standard bottom-center caption position (default)
|
|
- value:
|
|
vertical_alignment: top
|
|
horizontal_alignment: center
|
|
description: Top-center position for dual subtitle scenarios
|
|
- value:
|
|
vertical_alignment: bottom
|
|
horizontal_alignment: left
|
|
description: Bottom-left positioning
|
|
has_or_had_quantity:
|
|
range: Quantity
|
|
required: false
|
|
inlined: true
|
|
description: Number of subtitle entries (caption cues). MIGRATED from entry_count per Rule 53 (2026-01-26).
|
|
examples:
|
|
- value:
|
|
quantity_value: 127
|
|
has_or_had_unit:
|
|
has_or_had_label: entries
|
|
description: 127 caption cues in this track
|
|
has_or_had_mean:
|
|
description: 'Average duration of subtitle entries.
|
|
|
|
MIGRATED from has_average_entry_duration_seconds per Rule 53.
|
|
|
|
Uses MeanValue class.
|
|
|
|
'
|
|
range: MeanValue
|
|
inlined: true
|
|
examples:
|
|
- value:
|
|
has_or_had_value: 3.2
|
|
has_or_had_unit:
|
|
has_or_had_label: seconds
|
|
description: Average 3.2 seconds per caption
|
|
rules:
|
|
- postconditions:
|
|
description: 'segments must be populated for VideoSubtitle.
|
|
|
|
This is enforced by making segments required in slot_usage.
|
|
|
|
'
|
|
comments:
|
|
- Time-coded caption/subtitle content
|
|
- Extends VideoTranscript - subtitles ARE transcripts plus time codes
|
|
- 'Supports multiple formats: SRT, VTT, TTML, SBV, ASS'
|
|
- 'Accessibility metadata: CC, SDH, sound/music descriptions'
|
|
- Critical for heritage video accessibility compliance
|
|
see_also:
|
|
- https://schema.org/caption
|
|
- https://www.w3.org/TR/webvtt1/
|
|
- https://developer.mozilla.org/en-US/docs/Web/API/WebVTT_API
|
|
- https://www.3playmedia.com/learn/popular-topics/closed-captioning/
|
|
annotations:
|
|
specificity_score: 0.1
|
|
specificity_rationale: Generic utility class/slot created during migration
|
|
custodian_types: "['*']"
|
|
custodian_types_rationale: Universal utility concept
|