1

我从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/)并发现以下内容:

  • “此文本不得出现”是并行 timeContainer 内的匿名跨度,因此根据 10.4(第一个项目符号),其隐式持续时间是不确定的。
  • 包含上述文本的<p>元素有一个隐含的持续时间,当它的所有子元素都变为非活动状态时结束(根据并行 timeContainers 的endsync= all),因此它的隐含持续时间也是不确定的。

由此我推断“此文本不得出现”应该从 15s 开始并在 20s 结束,并且第三个<p>永远不应该激活。

测试似乎表明第二个的隐含持续时间<p>应该是 0。

我哪里错了?

4

1 回答 1

2

你没有错;我同意你的结论 - 另见我在解释 W3C TTML 时间属性的解释

我相信你给出的例子可以解决:

  • 0s 到 5s:没有显示
  • 5秒到10秒:This text must appear at 5 seconds<br/>and be remain visible to 10 seconds,
  • 10s 到 15s:没有显示
  • 15秒到20秒:This text must not appear.
  • 20 多岁以后:没有显示

元数据描述似乎不正确。

分析

TTML1 §10.4 时间间隔说:

  • body、div、p 或 span 元素的隐式持续时间根据 (1) 元素是并行时间容器还是顺序时间容器,(2) 上面由 10.2.4 timeContainer 定义的默认 endsync 语义,以及 ( 3) [SMIL 2.1] 的语义应用于这些时间容器。

在这种情况下, div 元素是(显式)seq时间容器,而 p 元素是(隐式)par时间容器。partimeContainer的隐式持续时间在SMIL 2.1中定义为

面值的隐含持续时间

par 的隐式持续时间由 endsync 控制。默认情况下,par 的隐式持续时间由 endsync="last" 语义定义。隐式持续时间以子元素的最后一个活动结束结束。

但是 TTML1 指定的适用值endsyncis "all",这意味着 par timeContainer 的隐式持续时间实际上是“直到其父 timeContainer 结束”。

seq为了完整起见, timeContainer的隐式 dur在SMIL 2.1中定义为

seq 容器的隐式持续时间

  • 序列的隐式持续时间以序列的最后一个孩子的活动结束结束。
  • 如果 seq 的任何子节点具有不确定的活动持续时间,则 seq 的隐含持续时间也是不确定的。

这当然不适用于这里,因为所有 seq timeContainers 都明确指定了持续时间。

解决错误的测试

我已将此测试作为“坏”测试添加到https://www.w3.org/AudioVideo/TT/tracker/issues/265的坏测试的包罗万象的问题中

于 2015-05-13T10:49:49.837 回答