glam/schemas/20251121/linkml/modules/classes/VideoSubtitle.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

375 lines
10 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_average_entry_duration_seconds
- ../slots/default_position
- ../slots/entry_count
- ../slots/includes_music_description
- ../slots/includes_sound_description
- ../slots/includes_speaker_identification
- ../slots/is_or_was_created_through # MIGRATED: was ../slots/is_auto_generated (2026-01-15)
- ../slots/is_closed_caption
- ../slots/is_sdh
- ../slots/raw_subtitle_content
- ../slots/specificity_annotation
- ../slots/subtitle_format
- ../slots/template_specificity
- ../slots/has_or_had_identifier # MIGRATED: was ../slots/track_id (2026-01-14)
- ./TrackIdentifier # Added for has_or_had_identifier migration
- ../slots/has_or_had_label # was: track_name - migrated per Rule 53
- ./SpecificityAnnotation
- ./TemplateSpecificityScores
- ./AutoGeneration # Added for is_or_was_created_through migration (2026-01-15)
- ../enums/SubtitlePositionEnum
- ../enums/SubtitleFormatEnum
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#
default_prefix: hc
classes:
VideoSubtitle:
is_a: VideoTranscript
class_uri: hc:VideoSubtitle
abstract: false
description: 'Time-coded caption/subtitle content for video.
**DEFINITION**:
VideoSubtitle represents caption/subtitle tracks that provide time-coded
text synchronized with video playback. It extends VideoTranscript because
subtitles contain complete transcription PLUS temporal synchronization.
**INHERITANCE FROM VideoTranscript**:
VideoSubtitle inherits all transcript capabilities:
- `full_text`: Complete subtitle text concatenated
- `segments`: Time-coded entries (REQUIRED for subtitles)
- `includes_timestamps`: Always true for subtitles
- `content_language`: Language of subtitle text
- All provenance from VideoTextContent
And adds subtitle-specific properties:
- `subtitle_format`: SRT, VTT, TTML, SBV, ASS
- `is_closed_caption`: CC vs regular subtitles
- `is_sdh`: Subtitles for Deaf/Hard-of-Hearing
- `includes_sound_descriptions`: Non-speech audio descriptions
**SCHEMA.ORG ALIGNMENT**:
Maps to `schema:caption` property:
> "For downloadable machine formats (closed caption, subtitles etc.)
> use the MediaObject.encodingFormat property."
**SUBTITLE vs CAPTION vs TRANSCRIPT**:
| Type | Time-coded | Purpose | Audience |
|------|------------|---------|----------|
| Transcript | Optional | Reading, search | Everyone |
| Subtitle | Required | Language translation | Hearing viewers |
| Caption (CC) | Required | Accessibility | Deaf/HoH viewers |
| SDH | Required | Full accessibility | Deaf viewers, noisy environments |
**SDH (Subtitles for Deaf/Hard-of-Hearing)**:
SDH differs from regular subtitles by including:
- Speaker identification: "(John) Hello"
- Sound effects: "[door slams]", "[music playing]"
- Music descriptions: "♪ upbeat jazz ♪"
- Emotional cues: "[laughing]", "[whispering]"
**SUBTITLE FORMATS**:
| Format | Extension | Features | Use Case |
|--------|-----------|----------|----------|
| SRT | .srt | Simple, universal | Most video players |
| VTT | .vtt | W3C standard, styling | HTML5 video, web |
| TTML | .ttml/.dfxp | XML, rich styling | Broadcast, streaming |
| SBV | .sbv | YouTube native | YouTube uploads |
| ASS | .ass | Advanced styling | Anime, complex layouts |
**SRT FORMAT EXAMPLE**:
```
1
00:00:00,000 --> 00:00:03,500
Welcome to the Rijksmuseum.
2
00:00:03,500 --> 00:00:08,200
Today we''ll explore the Night Watch gallery.
```
**VTT FORMAT EXAMPLE**:
```
WEBVTT
00:00:00.000 --> 00:00:03.500
Welcome to the Rijksmuseum.
00:00:03.500 --> 00:00:08.200
Today we''ll explore the Night Watch gallery.
```
**HERITAGE INSTITUTION CONTEXT**:
Subtitles are critical for heritage video accessibility:
1. **Accessibility Compliance**: WCAG 2.1, Section 508
2. **Multilingual Access**: Translate for international audiences
3. **Silent Viewing**: Social media, public displays, quiet spaces
4. **Search Discovery**: Subtitle text is indexed by platforms
5. **Preservation**: Text outlasts video format obsolescence
**YOUTUBE API INTEGRATION**:
Subtitle tracks from YouTube API populate:
- `subtitle_format`: Typically VTT or SRT
- `generation_method`: PLATFORM_PROVIDED or ASR_AUTOMATIC
- `content_language`: From track language code
- `is_or_was_created_through`: YouTube auto-caption flag
**SEGMENTS ARE REQUIRED**:
Unlike VideoTranscript where segments are optional, VideoSubtitle
REQUIRES the `segments` slot to be populated with VideoTimeSegment
entries that include start_seconds, end_seconds, and segment_text.
'
exact_mappings:
- schema:caption
close_mappings:
- ma:CaptioningFormat
related_mappings:
- schema:transcript
slots:
- has_average_entry_duration_seconds
- default_position
- entry_count
- includes_music_description
- includes_sound_description
- includes_speaker_identification
- is_or_was_created_through # MIGRATED: was is_auto_generated (2026-01-15)
- is_closed_caption
- is_sdh
- raw_subtitle_content
- specificity_annotation
- subtitle_format
- template_specificity
- has_or_had_identifier # MIGRATED: was track_id (2026-01-14)
- has_or_had_label # was: track_name
slot_usage:
has_or_had_segment:
required: true
includes_timestamp:
ifabsent: 'true'
subtitle_format:
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: # MIGRATED: was is_auto_generated (2026-01-15)
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: # was: track_name
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: # MIGRATED from track_id (2026-01-14)
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
default_position:
range: SubtitlePositionEnum
required: false
ifabsent: string(BOTTOM)
examples:
- value: BOTTOM
description: Standard bottom caption position
entry_count:
range: integer
required: false
minimum_value: 0
examples:
- value: 127
description: 127 caption cues in this track
has_average_entry_duration_seconds:
range: float
required: false
minimum_value: 0.0
examples:
- value: 3.2
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/