我在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/),发现了以下内容:
<p>
元素具有隐式持续时间,该持续时间在其所有子项都变为非活动状态时结束(根据endsync
= 所有并行timeContainers),因此其隐含的持续时间也是无限期的。由此我推断&#34;此文字不得出现&#34;应该从15s开始到20s结束,第三个<p>
永远不应该变为活动状态。
测试似乎表明第二个<p>
的隐式持续时间应为0。
我哪里错了?
答案 0 :(得分:2)
你没错;我同意你的结论 - 另见我在Explanation of W3C TTML timing attributes
的解释你给我的例子我相信解决了:
This text must appear at 5 seconds<br/>and be remain visible to 10 seconds,
This text must not appear.
元数据描述似乎不正确。
TTML1 §10.4 Timing intervals说:
- body,div,p或span元素的隐式持续时间根据(1)元素是并行或顺序时间容器来确定,(2)10.2.4 timeContainer定义的默认endync语义,(3)适用于这些时间容器的[SMIL 2.1]的语义。
在这种情况下,div元素是(显式)seq
时间容器,p元素是(隐式)par
时间容器。 par
timeContainer的隐式持续时间在SMIL 2.1中定义为
par的隐含持续时间
par的隐式持续时间由endsync控制。默认情况下,par的隐式持续时间由endsync =“last”语义定义。隐式持续时间以子元素的最后一个活动结束结束。
但是,TTML1指定endsync
的适用值为"all"
,这意味着par timeContainer的隐式持续时间实际上是'直到其父timeContainer结束'。
为了完整性,seq
timeContainer的隐式dur在SMIL 2.1中定义为
seq容器的隐含持续时间
- seq的隐式持续时间以seq的最后一个子节点的活动结束结束。
- 如果seq的任何子节点具有无限活动持续时间,则seq的隐式持续时间也是无限期的。
这当然不适用于此,因为所有seq timeContainers都明确指定了持续时间。
我已将此测试添加为“不良”测试,以解决https://www.w3.org/AudioVideo/TT/tracker/issues/265
中的错误测试的问题