如何计算 TTML 中 par 和 seq timeContainers 的隐式持续时间?
How to compute implicit durations for par and seq timeContainers in TTML?
我在 http://www.w3.org/2008/12/dfxp-testsuite/web-framework/START.html (MediaSeqTiming002) 的 TTML 测试套件中摘录了以下内容:
<body timeContainer="par">
<div timeContainer="seq" dur="40s">
<div timeContainer="seq" dur="20s">
<metadata>
<ttm:desc>default duration for elements in this context is 0</ttm:desc>
</metadata>
<p begin="00:00:05:00" dur="5s">This text must appear at 5 seconds<br/>and be remain visible to 10 seconds,</p>
<p begin="00:00:05:00">This text must not appear.</p>
<p dur="00:00:05:00">This text must appear at 15 seconds<br/>and be remain visible to 20 seconds,</p>
</div>
[...]
</div>
</body>
第二个 <p>
元素的文本(第 8 行)的要求是否正确?
我分析了 TTML 规范 (http://www.w3.org/TR/ttaf1-dfxp/) 并发现以下内容:
- "This text must not appear" 是并行 timeContainer 内的匿名跨度,因此根据 10.4(第一个项目符号),其隐式持续时间为 不确定.
- 包含上述文本的
<p>
元素有一个隐含的持续时间,当它的所有子元素都变得不活动时结束(根据并行的 endsync
=all timeContainers),所以它的隐式持续时间也是不确定的。
由此我推断 "This text must not appear" 应该从 15 秒开始到 20 秒结束,第三个 <p>
永远不应该激活。
测试似乎表明第二个 <p>
的隐式持续时间应为 0。
我哪里错了?
你没有错;我同意你的结论 - 另请参阅我在 Explanation of W3C TTML timing attributes
的解释
我相信你给出的例子可以解析为:
- 0 秒到 5 秒:未显示
- 5 秒到 10 秒:
This text must appear at 5 seconds<br/>and be remain visible to 10 seconds,
- 10 秒到 15 秒:未显示任何内容
- 15 秒到 20 秒:
This text must not appear.
- 20 秒后:未显示
元数据描述似乎不正确。
分析
TTML1 §10.4 Timing intervals 说:
- The implicit duration of a body, div, p, or span element is determined in accordance to (1) whether the element is a parallel or sequential time container, (2) the default endsync semantics defined above by 10.2.4 timeContainer, and (3) the semantics of [SMIL 2.1] as applied to these time containers.
在这种情况下,div 元素是(明确地)seq
时间容器,而 p 元素是(隐含地)par
时间容器。 par
timeContainer 的隐式持续时间在 SMIL 2.1 中定义为
Implicit duration of par
The implicit duration of a par is controlled by endsync. By default, the implicit duration of a par is defined by the endsync="last" semantics. The implicit duration ends with the last active end of the child elements.
但是 TTML1 指定 endsync
的适用值为 "all"
,这意味着 par timeContainer 的隐式持续时间实际上是 'until its parent timeContainer ends'.
为了完整性,seq
timeContainer 的隐式 dur 在 SMIL 2.1 中定义为
Implicit duration of seq containers
- The implicit duration of a seq ends with the active end of the last child of the seq.
- If any child of a seq has an indefinite active duration, the implicit duration of the seq is also indefinite.
这当然不适用于此处,因为所有 seq timeContainer 都明确指定了持续时间。
解决错误的测试
我已将此测试作为 'bad' 一个添加到 https://www.w3.org/AudioVideo/TT/tracker/issues/265
的不良测试的包罗万象的问题中
我在 http://www.w3.org/2008/12/dfxp-testsuite/web-framework/START.html (MediaSeqTiming002) 的 TTML 测试套件中摘录了以下内容:
<body timeContainer="par">
<div timeContainer="seq" dur="40s">
<div timeContainer="seq" dur="20s">
<metadata>
<ttm:desc>default duration for elements in this context is 0</ttm:desc>
</metadata>
<p begin="00:00:05:00" dur="5s">This text must appear at 5 seconds<br/>and be remain visible to 10 seconds,</p>
<p begin="00:00:05:00">This text must not appear.</p>
<p dur="00:00:05:00">This text must appear at 15 seconds<br/>and be remain visible to 20 seconds,</p>
</div>
[...]
</div>
</body>
第二个 <p>
元素的文本(第 8 行)的要求是否正确?
我分析了 TTML 规范 (http://www.w3.org/TR/ttaf1-dfxp/) 并发现以下内容:
- "This text must not appear" 是并行 timeContainer 内的匿名跨度,因此根据 10.4(第一个项目符号),其隐式持续时间为 不确定.
- 包含上述文本的
<p>
元素有一个隐含的持续时间,当它的所有子元素都变得不活动时结束(根据并行的endsync
=all timeContainers),所以它的隐式持续时间也是不确定的。
由此我推断 "This text must not appear" 应该从 15 秒开始到 20 秒结束,第三个 <p>
永远不应该激活。
测试似乎表明第二个 <p>
的隐式持续时间应为 0。
我哪里错了?
你没有错;我同意你的结论 - 另请参阅我在 Explanation of W3C TTML timing attributes
的解释我相信你给出的例子可以解析为:
- 0 秒到 5 秒:未显示
- 5 秒到 10 秒:
This text must appear at 5 seconds<br/>and be remain visible to 10 seconds,
- 10 秒到 15 秒:未显示任何内容
- 15 秒到 20 秒:
This text must not appear.
- 20 秒后:未显示
元数据描述似乎不正确。
分析
TTML1 §10.4 Timing intervals 说:
- The implicit duration of a body, div, p, or span element is determined in accordance to (1) whether the element is a parallel or sequential time container, (2) the default endsync semantics defined above by 10.2.4 timeContainer, and (3) the semantics of [SMIL 2.1] as applied to these time containers.
在这种情况下,div 元素是(明确地)seq
时间容器,而 p 元素是(隐含地)par
时间容器。 par
timeContainer 的隐式持续时间在 SMIL 2.1 中定义为
Implicit duration of par
The implicit duration of a par is controlled by endsync. By default, the implicit duration of a par is defined by the endsync="last" semantics. The implicit duration ends with the last active end of the child elements.
但是 TTML1 指定 endsync
的适用值为 "all"
,这意味着 par timeContainer 的隐式持续时间实际上是 'until its parent timeContainer ends'.
为了完整性,seq
timeContainer 的隐式 dur 在 SMIL 2.1 中定义为
Implicit duration of seq containers
- The implicit duration of a seq ends with the active end of the last child of the seq.
- If any child of a seq has an indefinite active duration, the implicit duration of the seq is also indefinite.
这当然不适用于此处,因为所有 seq timeContainer 都明确指定了持续时间。
解决错误的测试
我已将此测试作为 'bad' 一个添加到 https://www.w3.org/AudioVideo/TT/tracker/issues/265
的不良测试的包罗万象的问题中