Skip to content
Novus Examples
ttml297 B

TTML — Intentionally Corrupt: Unclosed Element

An intentionally corrupt TTML document with an unclosed p element, making it not well-formed XML. Any conforming XML parser must reject it outright — which is exactly the useful property, since it distinguishes real XML parsing from regex-based caption scraping that would happily extract both cues.

Preview — first 10 linesttml
<?xml version="1.0" encoding="UTF-8"?>
<tt xmlns="http://www.w3.org/ns/ttml" xml:lang="en">
  <body>
    <div>
      <p begin="00:00:01.000" end="00:00:03.000">First paragraph is closed</p>
      <p begin="00:00:03.500" end="00:00:06.000">This paragraph is never closed
    </div>
  </body>
</tt>

Specifications

Corruption
unclosed <p> element
Well Formed
no
Parser
any conforming XML parser must reject

What is a .ttml file?

TTML (Timed Text Markup Language, .ttml, also called DFXP) is a W3C XML format for timed text and captions. It wraps timed paragraphs in a tt document with styling and layout regions, and underlies broadcast and streaming caption profiles like IMSC, SMPTE-TT, and EBU-TT.

How to use this file

Use an example .ttml file to test XML caption parsers, TTML/IMSC players, and conversion to or from SRT, VTT, and SCC.

How to use this file for testing

“TTML — Intentionally Corrupt: Unclosed Element” is a deterministic Novus Examples fixture for Subtitle parsing, Video QA. The same captions across SubRip, WebVTT, ASS/SSA, SBV, and TTML, plus a synced LRC lyric file — for testing subtitle parsers, players, burn-in tools, and format converters against known timings.

Documented properties for this file: TTML · 297 bytes. Compare results against paired or grouped companions on this page when present (clean↔damaged, searchable↔scanned, or format twins) so scores stay reproducible across runs.

Download the file once, keep the path stable in CI or local scripts, and treat the spec table as the contract: dimensions, seeds, field lists, and roles are intentional. Corrupt or invalid samples are labelled as such — expect parsers to fail loudly rather than silently accept them.

Media fixtures are short and synthetic by design. Prefer waveform or transcript ground truth in the same group when measuring ASR, trim, upscale, or sync tools; do not assume broadcast-quality masters.

Parse the cues and check timings against the documented count; the same captions ship across subtitle formats so you can diff a converter against a known target.

Code examples

<video controls src="clip.mp4">
  <track kind="captions" srclang="en" label="English" src="unclosed-tag.ttml" default>
</video>

Generated by generation/video_timedtext.py. Free for any use, no attribution required — license.