W3C

定时文本标记语言 2 (TTML2)

W3C 推荐标准 2018年11月08日

本版本:
https://www.w3.org/TR/2018/REC-ttml2-20181108/
最新版本:
https://www.w3.org/TR/ttml2/
上一版本:
https://www.w3.org/TR/2018/PR-ttml2-20181004/
编辑:
Glenn Adams, Skynav
Cyril Concolato, Netflix
贡献作者:
Glenn Adams, Skynav
Cyril Concolato, Netflix
Mike Dolan, 受邀专家
Sean Hayes, Microsoft
Frans de Jong, 欧洲广播联盟
Dae Kim, Netflix
Pierre-Anthony Lemieux, MovieLabs
Nigel Megitt, 英国广播公司
Dave Singer, Apple Computer
Jerry Smith, Microsoft
Andreas Tai, Institut für Rundfunktechnik GmbH

请参阅本文档的勘误表, 其中可能 包含规范性更正。


摘要

本文档根据定时文本标记语言(TTML)第 2 版(也称为 TTML2)的词汇及其语义来规定该语言。

定时文本标记语言是一种内容类型,用于表示定时文本媒体,以便在创作系统之间进行交换。定时文本是与计时信息具有内在或外在关联的文本信息。

它旨在用于在目前用于字幕和说明字幕功能的传统分发内容格式之间,对定时文本信息进行转码或交换。

除了用于在传统分发内容格式之间进行交换之外,TTML 内容还可直接用作分发格式, 例如,提供一种标准内容格式,以便从 [HTML 5.2] 文档中的 <track> 元素,或 [SMIL 3.0] 文档中的 <text><textstream> 媒体元素进行引用。

本文档状态

本节描述本文档在其发布时的状态。其他文档可能会取代本文档。当前 W3C 出版物列表以及本技术报告的最新修订版,可在 https://www.w3.org/TR/ 的 W3C 技术报告索引中找到。

这是定时文本标记语言 2(TTML2) W3C 推荐标准, 由 定时文本(TT)工作组 作为 W3C Web 视频活动的一部分制定, 并遵循 W3C 流程中规定的程序。 本文档的作者列于本文档的页眉中。

实现报告 表明该规范是可实现的。 从 TTML1 第 3 版 [TTML1] 起所有更改的累积摘要,可在 定时文本标记语言 2(TTML2)更改摘要中获得。 影响语言语法的更改简表可见于 U 从 TTML1 起的词汇更改

欢迎通过提交 GitHub issue 或发送电子邮件至 public-tt@w3.org订阅归档) 对本文档发表评论,邮件主题行应以 [ttml2] 开头。

本文档已经由 W3C 成员、软件开发者以及其他 W3C 组和相关方审阅, 并由主管作为 W3C 推荐标准认可。它是一份稳定文档,可用作参考材料,或被其他文档引用。 W3C 在制定推荐标准中的作用是引起对该规范的关注,并促进其广泛部署。 这增强了 Web 的功能性和互操作性。

本文档由一个依据 W3C 专利政策运作的小组制作。 W3C 维护着一份与该小组交付成果相关的任何专利披露的 公开列表;该页面还包含披露专利的说明。 实际知晓某项专利且认为该专利包含 必要权利要求 的个人,必须依照 W3C 专利政策第 6 节披露该信息。

本文档受 2018 年 2 月 1 日 W3C 流程文档管辖。

1 引言

除非另有规定,本节及其小节均为非规范性内容。

定时文本标记语言(TTML)第 2 版,也称为 TTML2, 提供了一种标准化表示,用于表示特定的 文本信息子集,并由作者或创作系统为其关联样式、布局和计时语义, 以便进行交换和处理。

TTML 明确设计为仅满足 [TTAF1-REQ] 所确立并在 M 要求中概述的一组有限要求。特别是,仅满足那些服务于 与现有传统分发系统进行交换这一需求的要求。

除了用于在传统分发内容 格式之间进行交换外,TTML 内容还可直接用作分发格式,例如提供一种标准内容格式, 可由 [HTML 5.2] 文档中的 <track> 元素,或 [SMIL 3.0] 文档中的 <text><textstream> 媒体元素引用。TTML 的某些 属性支持内容的 可流式处理性,如 R 流式 TTML 内容中所述。

注:

虽然 TTML 并非明确设计用于直接(嵌入式)集成到 HTML 或 SMIL 文档实例中,但并不排除此类集成。

注:

在某些使用上下文中,可能适合采用 动画内容来描绘与定时文本文档实例所表达的相同内容的 手语表示。TTML 机制并未 明确处理此用例,但可由某些 外部多媒体集成技术(如 SMIL)处理。

注:

在本规范的早期草案中,TTML 被称为 DFXP(Distribution Format Exchange Profile)。出于历史原因,后一术语保留在 某些上下文中,例如 profile 名称和指示符。

1.1 系统模型

TTML 的使用旨在运行于更广泛的定时文本 创作、转码、分发和呈现机制上下文中,这些机制基于 图 1 – 系统模型所描绘的系统模型,其中定时 文本标记语言 充当一组异构 创作系统之间的双向交换格式,并在按需经过转码 或编译为目标分发格式后,充当到 一组异构分发格式的单向交换格式;其中一个 特定分发格式是 TTML 内容文档。

文中描述了两类处理器。创作系统和验证处理器 是转换处理器的示例;转码系统和渲染处理器 是呈现处理器的示例。TTML Profile 文档可与 TTML 内容文档或处理器关联,使各自能够表达 可用、被禁止或必需的特性。总体而言,这允许以形式化语言表达 从创作到呈现这一链路的约束。

处理器可以实现到 TTML 中间文档的已定义映射。 该系统模型描绘了一个这样的渲染处理器,它进一步将这些文档映射为 HTML 和 CSS 片段,这些片段可插入到 [HTML 5.2] 文档中, 以便由用户代理 显示。

图 1 – 系统模型
系统模型

1.2 文档示例

一个 TTML 文档实例由一个 tt 文档元素组成,该元素包含 一个头部和一个主体,其中头部指定文档级元数据、样式 定义和布局定义,而主体指定文本内容,该文本内容混合了 对样式和布局信息的引用以及内联样式和计时信息。

示例片段 – TTML 文档结构
<tt xml:lang="" xmlns="http://www.w3.org/ns/ttml">
  <head>
    <metadata/>
    <styling/>
    <layout/>
  </head>
  <body/>
</tt>

文档级元数据可指定文档标题、描述 和版权信息。此外,还可以指定来自 其他命名空间的任意元数据。

示例片段 – TTML 元数据
<metadata xmlns:ttm="http://www.w3.org/ns/ttml#metadata">
  <ttm:title>Timed Text TTML Example</ttm:title>
  <ttm:copyright>The Authors (c) 2006</ttm:copyright>
</metadata>

样式信息可以样式规范 定义的形式指定,这些定义由布局和内容信息引用, 与内容信息内联指定,或二者兼有。

示例片段 – TTML 样式中,定义了四组样式 规范, 其中一组作为默认样式集合。

示例片段 – TTML 样式
<styling xmlns:tts="http://www.w3.org/ns/ttml#styling">
  <!-- s1 specifies default color, font, and text alignment -->
  <style xml:id="s1"
    tts:color="white"
    tts:fontFamily="proportionalSansSerif"
    tts:fontSize="22px"
    tts:textAlign="center"
  />
  <!-- alternative using yellow text but otherwise the same as style s1 -->
  <style xml:id="s2" style="s1" tts:color="yellow"/>
  <!-- a style based on s1 but justified to the right -->
  <style xml:id="s1Right" style="s1" tts:textAlign="end" />
  <!-- a style based on s2 but justified to the left -->
  <style xml:id="s2Left" style="s2" tts:textAlign="start" />
</styling>

布局信息定义一个或多个区域,内容 旨在呈现到这些区域中。区域定义可引用一个或 多个样式规范集,以允许流入该 区域的内容继承这些样式。 在 示例片段 – TTML 布局中,区域定义 引用样式规范 s1,并以特定内联 样式增强;这些样式共同允许流入该区域的内容 从该区域的样式继承(在内容上尚未显式指定样式,或尚未通过 内容层级继承样式的情况下)。

示例片段 – TTML 布局
<layout xmlns:tts="http://www.w3.org/ns/ttml#styling">
  <region xml:id="subtitleArea"
    style="s1"
    tts:extent="560px 62px"
    tts:padding="5px 3px"
    tts:backgroundColor="black"
    tts:displayAlign="after"
  />
</layout>

文档实例的内容在其主体中表达, 该主体按块级和内联文本元素组织。 内容元素的层级组织在 确定空间和时间关系方面起主要作用。例如,在 示例片段 – TTML 主体中,每个段落(p 元素) 都按指定的词法顺序流入其目标区域;此外, 每个段落的活动时间间隔会根据适用的时间包含语义, 依据其父级或兄弟级进行计时 — 在此情况下,division 父级(默认)被解释为并行时间 容器。

示例片段 – TTML 主体
<body region="subtitleArea">
  <div>
    <p xml:id="subtitle1" begin="0.76s" end="3.45s">
      It seems a paradox, does it not,
    </p>
    <p xml:id="subtitle2" begin="5.0s" end="10.0s">
      that the image formed on<br/>
      the Retina should be inverted?
    </p>
    <p xml:id="subtitle3" begin="10.0s" end="16.0s" style="s2">
      It is puzzling, why is it<br/>
      we do not see things upside-down?
    </p>
    <p xml:id="subtitle4" begin="17.2s" end="23.0s">
      You have never heard the Theory,<br/>
      then, that the Brain also is inverted?
    </p>
    <p xml:id="subtitle5" begin="23.0s" end="27.0s" style="s2">
      No indeed! What a beautiful fact!
    </p>
    <p xml:id="subtitle6a" begin="28.0s" end="34.6s" style="s2Left">
      But how is it proved?
    </p>
    <p xml:id="subtitle6b" begin="28.0s" end="34.6s" style="s1Right">
      Thus: what we call
    </p>
    <p xml:id="subtitle7" begin="34.6s" end="45.0s" style="s1Right">
      the vertex of the Brain<br/>
      is really its base
    </p>
    <p xml:id="subtitle8" begin="45.0s" end="52.0s" style="s1Right">
      and what we call its base<br/>
      is really its vertex,
    </p>
    <p xml:id="subtitle9a" begin="53.5s" end="58.7s">
      it is simply a question of nomenclature.
    </p>
    <p xml:id="subtitle9b" begin="53.5s" end="58.7s" style="s2">
      How truly delightful!
    </p>
  </div>
</body>

第一个字幕 字幕 1 – 时间间隔 [0.76, 3.45) 在 0.76 到 3.45 秒的时间间隔内呈现。 此 字幕从其呈现到的区域继承字体族、字体大小、 前景色和文本对齐方式。由于段落上未显式指定区域, 因此由指定区域的最近祖先确定 目标区域。还应注意,由于区域定义上指定了 tts:displayAlign="after", 内容呈现在包含区域的底部(后边缘)。

注:

记号“[X,Y]”表示从 XY 的闭 区间,包括 XY; “[X,Y)”表示从 XY 的右半开 区间,包括 X 但不包括 Y; “(X,Y]”表示从 XY 的左半开 区间,不包括 X 但包括 Y; “(X,Y)”表示从 XY 的开 区间,不包括 XY

注:

在此示例中,p 元素用作呈现性 元素,而不是语义元素,即语言学意义上的段落。 由作者决定使用哪些 TTML 元素来传达 预期含义。例如,此示例可改写为在 span 元素上使用计时,以保持 语义段落的完整性。

字幕 1 – 时间间隔 [0.76, 3.45)
字幕 1

第二个字幕继续使用默认样式,但它包含 两行文本,中间有作者指定的换行。注意 使用 tts:textAlign="center" 指定段落在 内联推进方向上的对齐方式所产生的效果。

字幕 2 – 时间间隔 [5.0, 10.0)
字幕 2

第三个字幕继续使用一种变体样式,该样式用不同颜色覆盖默认样式的 前景色。

字幕 3 – 时间间隔 [10.0, 16.0)
字幕 3

第四个字幕恢复为默认样式。

字幕 4 – 时间间隔 [17.2, 23.0)
字幕 4

第五个字幕继续,再次使用一种变体样式,该样式 用不同颜色覆盖默认样式的前景色。

字幕 5 – 时间间隔 [23.0, 27.0)
字幕 5

在下一个活动时间间隔内,两个不同的字幕同时处于活动状态, 表达每个字幕的段落使用不同样式,从而覆盖默认样式的颜色和段落 文本对齐方式。注意,流顺序由元素在内容层级中出现的词法 顺序确定。

字幕 6a 和 6b – 时间间隔 [28.0, 34.6)
字幕 6a 和 6b

下一个字幕以类似方式指定,使用 样式覆盖,使段落在 内联推进方向上右(端)对齐。

字幕 7 – 时间间隔 [34.6, 45.0)
字幕 7a 和 7b

第八个字幕使用与前一个 字幕相同的样式覆盖,以保持 段落右(端)对齐。

字幕 8 – 时间间隔 [47.3, 49.0)
字幕 8

在最后(第九个)活动时间间隔内,两个不同的 字幕再次同时处于活动状态,但对第二个段落应用了不同 样式以覆盖默认颜色。 注意,流顺序由 元素在内容层级中出现的词法顺序确定。

字幕 9a 和 9b – 时间间隔 [53.5, 58.7)
字幕 9a 和 9b

上面显示的示例展示了可使用 TTML 创作的主要信息类型: 元数据、样式、布局、计时和内容。在典型情况下, 样式和布局信息会在 文档实例中分别指定。内容信息 以层级方式表达,体现空间(流)和 计时信息的组织。内容直接或间接引用样式和布局信息, 并可指定对样式的内联覆盖。

2 定义

2.1 缩略语

BPD

块推进维度

DAR

显示宽高比

DFXP

分发格式交换 Profile

IPD

内联推进维度

ISD

中间同步文档

PAR

像素宽高比

SAR

存储宽高比

TT

定时文本

TTML

定时文本标记语言

TTAF

定时文本创作格式

TTWG

定时文本工作组

2.2 术语

[绝对维度]

表示 水平轴垂直轴上长度的标量值。

[抽象文档实例]

精简 xml 信息集表示的抽象数据集实例。

[抽象文档类型]

定义一类 XML 信息集 [XML InfoSet] 的约束集合。

[匿名 profile]

参见未指示 profile

[匿名 span]

一个 span 元素,它不存在于 文档实例中,而是在 11.3.1.3 中间同步 文档构造11.3.1.4 同步流处理 步骤期间,由 [construct anonymous spans] 过程合成并插入到对应的 抽象文档实例中。

[区域]

一组可寻址的逻辑像素,表示 某个输出介质上一平面的有界矩形区域中的视觉内容, 如 [XSL-FO 1.1]矩形 区域》§4.2 所定义。 也称为 ,尤其是在 [CSS2][HTML 5.2] 上下文中。

[属性信息项]

XML 文档的每个指定或默认属性都对应一个属性 信息 项,如 [XML InfoSet] §2.3 所定义。

[音频定义上下文]

指定 audio 元素作为 可共享定义的上下文,该定义可由另一个 audio 元素 在音频呈现上下文中引用。

[音频生成元素]

音频呈现上下文中的 audio 元素,或 其字符内容用于生成语音数据资源span 元素。

[音频呈现上下文]

指定 audio 元素用于 呈现(渲染)的上下文。此类 audio 元素 可以通过在 source 子元素内使用 data 元素来内联指定音频数据, 也可以引用在 音频定义上下文中指定的另一个 audio 元素,或二者兼用。

[音频资源]

包含编码或未编码音频 采样的数据资源

[音频流]

音频采样序列。

[背景绘制矩形]

文档坐标空间中的矩形, 背景呈现产物(例如颜色或图像)相对于它被 (可能)裁剪和绘制;更 具体地说,是三种矩形之一:边框矩形、内边距矩形或 内容矩形, 它们属于与背景关联的元素所生成的区域。由 tts:backgroundClip 属性指定的 样式属性计算值决定适用哪个 矩形。

[背景定位 矩形]

文档坐标空间中的矩形, 背景呈现产物(例如颜色或图像)相对于它被 定位或调整尺寸;更 具体地说,是三种矩形之一:边框矩形、内边距矩形或 内容矩形, 它们属于与背景关联的元素所生成的区域。由 tts:backgroundOrigin 属性指定的 样式属性计算值决定 适用哪个矩形。

[基线 profile]

ttp:profile 元素的 use 属性引用的 profile, 它作为一组基线(初始)规范,用于填充 引用它的 profile。

[块区域]

[XSL-FO 1.1]块区域》§4.4 定义的一种基本 区域类型,其子级 要么全部由块区域组成(如果该块区域不是 行区域), 要么全部由内联区域组成(如果该块区域是 行区域)。

[块显示]

块显示是一组布局语义,可在 某些上下文中应用于内容元素,其中子区域按块推进 方向顺序组合。

注:

[CSS2] 中, 当 CSS display 属性以 block 值应用于 内容元素进行呈现处理时, 表示块显示。在 [XSL-FO 1.1] 中,组合 fo:block 元素时 发生块显示。

[块推进维度]

块推进轴上的相对维度, 即沿正向块推进 方向, 缩写为 bpdBPD

[块推进方向]

某个格式化上下文中块区域推进所采取的方向。在 水平书写模式上下文中, 块推进方向通常为自上而下;而在 垂直书写模式上下文中, 它通常为自右向左或自左向右。

[内置数据资源]

一种数据资源,其内容由 内容处理器提供,而不是由 定时文本内容文档 实例提供,并通过 source 元素或 source 元素的 src 属性,或嵌入 内容元素引用。

[字符信息项]

XML 文档中出现的每个数据字符都对应一个字符信息 项,如 [XML InfoSet] §2.6 所定义。

[分块数据嵌入]

一种 data 元素,它通过使用 子 chunk 元素, 直接嵌入 嵌入数据资源实际字节的表示。

[组合 profile]

一种 profile,其关联 profile 实例的组合 规范集组件的 constituents 组件包含 多于一个非 null 指示符。

[计算单元格尺寸]

通过将根容器区域的宽度 除以单元格列数,即 水平轴上的单元格数量,并将 根容器区域的高度除以 单元格行数,即垂直 轴上的单元格数量,而计算出的单元格尺寸(范围),其中单元格列数和行数由 ttp:cellResolution 参数属性确定。

注:

根容器 区域的宽度和高度对应于 根容器区域空间范围的 宽度和高度,如 H.2 分辨率所指定; 因此,计算单元格尺寸以逻辑像素表示。

[计算样式集]

一种样式集,包含由 10.4.4.3 计算样式集 处理确定的计算样式值。

[条件化元素]

本规范中定义或供本规范使用的任何元素类型,只要它允许指定 condition 属性, 该属性的求值 决定该元素已定义语义是适用还是被忽略。如果不存在此类 属性,则该元素的语义始终适用。

[条件排除(或包含)]

如果条件化 元素的条件表达式求值 为 false,则称该元素及其后代元素被 条件排除。 如果一个元素没有被条件排除,则称其被 条件包含

注:

一个被条件包含但不允许使用或未 指定 condition 属性的元素,可称为 无条件包含元素。

当一个元素被条件排除时,除非另有规定,其所有 语义都会被忽略;关于这一点,请参见 condition 中关于条件排除的详细 语义。

注:

对于某些元素,例如 style 元素, 条件排除会导致该元素的部分而非全部语义被忽略, 在这种情况下,此行为会被明确描述。

[内容元素]

内容 模块定义的任何元素类型,以及 由音频模块图像模块定义、并分别出现在 音频呈现上下文图像呈现上下文中的任何元素类型。

注:

tthead 元素类型 定义于 8.1 内容元素 词汇, 但有意不纳入上述定义的范围,而是纳入 表 5-3 – 元素词汇DocumentHead 模块的定义。

[内容图像]

一种包含语义上重要内容的 图像资源,例如表示字幕渲染的光栅图像。

[内容处理器]

能够导入(接收)定时文本标记语言 内容,以便转换、呈现或以其他方式处理该内容的处理系统。

[内容 profile]

一种 profile,满足:(1) 关联 profile 实例的 type 组件值为 content,并且 (2) 规定定时文本标记语言内容 不得、必须或可以使用哪些 特性扩展集合。

[内容区域]

执行呈现处理时,内容被渲染到其中的逻辑矩形区域。 当上下文无歧义时简称为区域;每个内容区域 由显式指定或隐含的 region 元素定义, 该元素定义内容区域相对于 根容器区域的范围, 以及其他样式和时间特征。

[数据绑定上下文]

指定 data 元素用于 语义绑定(关联)的上下文。此类 data 元素 可以通过在 source 子元素内使用 data 元素来内联指定数据, 也可以引用在 数据定义上下文中指定的另一个 data 元素,或二者兼用。 在此(或任何) 上下文中仅存在 data 元素本身并不隐含任何 呈现(渲染) 语义。

[元数据的数据绑定上下文]

父级为 metadata 元素的 data 元素。

[source 的数据绑定上下文]

父级为 source 元素的 data 元素。

[数据定义上下文]

指定 data 元素作为 可共享定义的上下文,该定义可由另一个 data 元素 在数据绑定上下文中引用,即 父级为 resources 元素的 data 元素。

[data 元素]

Data 模块定义的任何元素类型。

[数据资源]

使用data 元素表示或引用的任意数据资源。例如, 数据资源可用于在 定时文本内容文档 实例中嵌入或引用音频片段、字体、图像或 任意应用数据。

[默认处理器 profile]

一种默认处理器 profile,在没有 已声明或推断的 处理器 profile时用于计算 有效处理器 profile;该默认处理器 profile 由 construct default processor profile 过程确定。

[默认区域]

一种默认的 out-of-line 区域, 在没有 显式指定 out-of-line region 元素时隐含,即 当没有 region 元素被指定为 layout 元素的子级时。

[已指示 profile]

一种 profile,通过 designator 属性或某个 profile 规范中的说明文本,与 <profile-designator> 关联。

[显示宽高比]

参见 DAR 的定义。

[文档坐标空间]

一种逻辑坐标空间,用于确定 根容器区域的宽高比和分辨率,该根容器区域用于格式化和呈现 文档实例;更多内容参见 H 根容器区域语义

[文档实例]

定时文本文档实例

[文档交换上下文]

内容 处理器外部的隐含上下文或环境, 文档交换在其中发生,并且带外协议或规范 可在其中定义某些行为默认值,例如隐含 profile。

[文档处理上下文]

内容 处理器内部的隐含上下文或环境, 文档处理在其中发生,并且带外协议或规范 可在其中定义某些行为默认值,例如建立或创建 合成文档同步基准

[文档时间坐标 空间]

计算出的时间表达式在 文档实例中据以解释的时间坐标系统; 更多内容参见 7.2.11 ttp:timeBase

[有效内容 profile]

在应用任何显式或隐式 profile 及 profile 规范组合方法之后, 从由 TTML 文档实例显式或隐式引用或分配的所有 内容 profile集合计算出的 内容 profile; 关于它,参见 construct effective content profile 过程。 对给定文档 实例执行验证时, 此验证会使用文档的 有效内容 profile

[有效处理器 profile]

在应用任何显式或隐式 profile 及 profile 规范组合方法之后, 从由 TTML 文档实例显式或隐式引用或分配的所有 处理器 profile集合计算出的 处理器 profile; 关于它,参见 construct effective processor profile 过程。 在确定内容处理器 能否处理给定文档实例时, 此确定会 使用文档的有效 处理器 profile

[有效验证 profile]

用于选择验证处理期间要使用的 schema(或 schema 集合)的 profile, 由 construct effective validation profile 过程确定。

[有效验证 schema]

验证 处理期间使用的一组 schema, 由 construct effective validation schemas 过程确定。

注:

由于没有 schema 语言能捕获本规范所定义的 TTML 内容的所有约束, 预计验证型内容处理器会采用额外的 内置、程序化(基于代码的)schema。

[元素信息项]

XML 文档中出现的每个元素都对应一个元素信息 项,如 [XML InfoSet] §2.2 所定义。

[嵌入内容元素]

Audio 模块Data 模块Font 模块Image 模块定义的任何元素类型。

[嵌入内容资源]

音频资源数据 资源字体资源图像资源

[嵌入数据资源]

嵌入在 定时文本内容文档 实例中的数据资源,通过 data 元素表示,无论 该 data 元素是否表示 数据资源的 实际字节,或引用 外部数据资源

[空数据资源]

一种数据资源,不包含可渲染内容,并且 进一步而言, 如果尝试将此资源解析为一系列内容采样,则不会产生任何采样。

[包围文档实例]

包围或以其他方式 包含被包围特性或组件的 文档实例

[交换 profile]

一种服务于一组内容交换需求的内容 profile。

[扩展]

在另一份(公开或私有) 规范中定义并标记(使用扩展指示)的语法或语义表达式或能力。

[扩展规范]

扩展相关的约束或要求规范,通常由 ttp:extension 元素表达。

[外部数据资源]

位于 定时文本内容文档 实例外部的数据资源,通过 source 元素或 source 元素的 src 属性,或嵌入 内容元素引用。

[外部源]

(1) 引用外部数据资源source 元素或 src 属性, 或 (2) 被引用的 外部数据资源

[特性]

在本规范(或本规范过去或 未来修订版)中定义并标记(使用特性指示)的语法或语义表达式或能力。

[特性规范]

特性相关的约束或要求规范,通常由 ttp:feature 元素表达。

[强制字幕]

即使字幕(或说明字幕)未启用,也旨在始终显示的字幕(或说明字幕)。 强制字幕(说明字幕) 用于防止开放式说明字幕化,即将与外语或异族语言相关的字幕(说明字幕) 或对媒体中出现的文本(例如标牌)的翻译 烧录进画面。

[字体定义上下文]

指定 font 元素作为 可共享定义的上下文,该定义可由 字体选择过程间接引用。

[字体选择过程]

呈现 处理器使用的内部过程,其目的是选择 一组作者定义字体和平台字体,以便在布局和呈现 处理期间使用;该 过程的输入参数包括字体相关属性的计算值、 各个字体的能力以及正在呈现的文本内容。

[字体资源]

一种数据资源,包含字体信息,例如 字符到字形映射数据、字形轮廓或图像、 字形度量,以及字符到字形映射和渲染过程中使用的其他数据。

[高度]

垂直轴上的 绝对维度

注:

在某些例外情况下,术语 height 可指 水平轴, 更多内容参见 10.2.27 tts:lineHeight

[片段标识符]

<uri> 值的语法子集,遵守 [URI] §3.5 定义的 片段标识符语法。

[字形区域]

[XSL-FO 1.1]字形区域》§4.6.2 定义的一种 内联区域类型。 在本规范中,字形区域与一个或多个内容字符以及 来自特定字体的一个或多个字形相关联;呈现字形区域时渲染的正是这些 字形。间距字形区域是与 至少一个间距字形相关联的字形区域,即具有非零 advance(宽度或高度)的字形。 非间距字形区域 不是间距字形区域,即完全由非间距字形组成。

[字形区域后代]

一个字形区域,它是由使用上下文隐含的某个其他区域的后代区域。 例如,内联区域 I 的某个后代区域如果是 字形区域,则它是 I字形区域后代

[图像定义上下文]

指定 image 元素作为 可共享定义的上下文,该定义可由另一个 image 元素 在图像呈现上下文中引用。

[图像呈现上下文]

指定 image 元素用于 呈现(渲染)的上下文。此类 image 元素 可以通过在 source 子元素内使用 data 元素来内联指定图像数据, 也可以引用在 图像定义上下文中指定的另一个 image 元素,或二者兼用。

[图像资源]

包含光栅图像的数据资源

[推断处理器 profile]

construct inferred processor profile 过程确定的 处理器 profile,它可 作为用于执行 验证处理有效处理器 profile

[内联动画]

一个 animateset 元素, 它以内联方式定义为与 动画关联的 内容元素region 元素的直接子级。 内联动画元素与其父 内容 元素region 元素之间存在一对一关系。

[内联区域]

[XSL-FO 1.1]内联区域》§4.6 定义的一种 区域类型,其子级 全部由内联区域组成,例如 字形区域

[内联块显示]

内联块显示是一组布局语义,可在 某些上下文中应用于内容元素,其中生成的块区域被视为原子区域, 在内联布局上下文中组合,即该块 区域从外部看被视为其本身就是内联区域,但从内部看则被视为 块区域。

[内联显示]

内联显示是一组布局语义,可在 某些上下文中应用于内容元素,其中子区域按内联推进 方向顺序组合。

注:

[CSS2] 中, 当 CSS display 属性以 inline 值应用于 内容元素进行呈现处理时, 表示内联显示。在 [XSL-FO 1.1] 中,组合 fo:inline 元素时 发生内联显示。

[内联推进维度]

内联推进轴上的相对维度, 即沿正向内联推进 方向, 缩写为 ipdIPD

[内联推进方向]

某个格式化上下文中内联区域推进所采取的方向。在 水平书写模式上下文中, 内联推进方向通常为自左向右或自右向左;而在 垂直书写模式上下文中, 它通常为自上而下。

[inline region]

相对于要被选择进(定向到)该区域的某个 内容元素以内联方式定义的 区域。 内联区域可由某些 内容元素的 子 region 元素显式指定。 内联 region 元素与其 父内容元素之间存在一对一关系。内联区域被分配 其父元素的时间间隔作为其活动 时间间隔。没有 region 属性引用内联区域。

[中间同步 文档]

根据使用上下文,可以是 定时文本中间文档定时文本中间文档 实例, 其中根(文档)元素是 isd:isd 元素,并且它表示一个 与源 定时文本内容文档的内容、样式、布局和 计时相交的非重叠时间间隔。

[中间 同步文档序列]

根据使用上下文,可以是 定时文本中间文档定时文本中间文档 实例, 其中根(文档)元素是 isd:sequence 元素,并且它表示 一组 中间同步 文档实例的序列, 这些实例有效表示源 定时文本内容文档的内容、样式、布局和计时。

[中间文档语法]

一种形式化体系,用于 中间同步文档 序列中间同步文档的具体表示。

[内在块内容范围]

通过将一系列块级内容格式化到无界块 容器区域,并确定所得已格式化块 容器的宽度和高度而确定的范围,即宽度和高度。

[图像内在范围]

从图像自身内部信息(例如 图像像素数组的宽度和高度)确定的图像范围,即宽度和高度。

[内在内联内容 范围]

通过将一系列内联级内容格式化到无界内联 容器区域,并确定所得已格式化内联 容器的宽度和高度而确定的范围,即宽度和高度。

[更高层协议]

文档处理 上下文中的协议或过程, 它超出本规范范围。

[水平轴]

平行于地平面的轴。

[行区域]

[XSL-FO 1.1]行区域》§4.5 定义的一种 块区域类型,其子级 由一个或多个内联区域组成。

[元数据元素]

Metadata 模块定义的任何元素类型。

[嵌套 profile]

嵌套型 profile的组成 profile,即较高层级(祖先) ttp:profile 元素的后代 ttp:profile 元素之一。 给定 ttp:profile 可以同时作为 嵌套 profile嵌套型 profile

[嵌套型 profile]

一种通过引用一个或多个子 ttp:profile 元素而定义的 profile,其中 profile 组合方法决定如何组合来自多个子 ttp:profile 元素的 profile 规范。 与嵌套型 profile 关联的 profile 实例的 constituents 组件不是 null

[嵌套嵌入源]

一种 source 元素,它 指定一个子 data 元素,该元素嵌入 嵌入数据资源的 实际字节,无论是通过 简单数据嵌入还是 分块数据嵌入

[非组合 profile]

一种 profile,其关联 profile 实例的组合 规范集组件的 constituents 组件包含 不超过一个非 null 指示符。

[非内容图像]

一种不包含语义上 重要内容的图像资源,例如表示背景设计的光栅图像; 如果不呈现它,也不会影响语义上重要内容的呈现。

[非嵌套嵌入源]

一种 source 元素, 它指定一个子 data 元素,该元素不 嵌入 嵌入数据资源实际字节的表示。

[非嵌套型 profile]

一种未通过引用一个或多个子 ttp:profile 元素而定义的 profile,即 不包含子 ttp:profile 元素。 与非嵌套型 profile 关联的 profile 实例的 constituents 组件为 null

[out-of-line 动画]

一个 animateset 元素,它相对于 与动画关联的 内容元素region 元素以 out-of-line 方式定义。 out-of-line 动画作为 文档实例头部 (head 元素) 中 animation 元素的子级出现, 并指定一个 xml:id 属性, 该属性的值由关联的待动画化元素上的 animate 属性引用。被引用的 out-of-line 动画元素与引用它的 内容元素region 元素之间存在一对多关系。

[out-of-line 区域]

相对于与该区域关联(要被选择进入)的 内容元素以 out-of-line 方式定义的 region 元素。 out-of-line 区域作为 文档实例头部 (head 元素) 中 layout 元素的子级出现, 并指定一个 xml:id 属性, 该属性的值由关联元素上的 region 属性引用, 以便将该关联元素选择进该区域。被引用的 out-of-line 区域元素与引用它的 内容元素之间存在一对多关系。 如果没有显式指定 out-of-line 区域,则隐含一个 默认 out-of-line 区域

[覆盖内容 profile]

一种内容 profile,它被确定为覆盖所有 其他 对内容 profile的可能确定。

[覆盖处理器 profile]

一种处理器 profile,它被确定为覆盖所有 其他 对处理器 profile的可能确定。

[像素宽高比]

参见 PAR 的定义。

[呈现上下文]

参见呈现处理上下文

[呈现处理 上下文]

一个假想显示设备, 根 容器区域相关媒体对象区域在其上呈现。

[呈现上下文 坐标空间]

呈现 上下文关联的坐标空间。

注:

对于 呈现 处理器的给定实现, 显示像素逻辑像素文档坐标空间中关联后,可能与 呈现像素呈现上下文 坐标空间中完全对应; 但是,这种精确对应并非必须适用,并且特别是,这些坐标空间之间 (由实现定义)的映射 可能会受到像素宽高比、分辨率、色彩空间、 颜色采样深度以及其他实现特定属性变换的影响。

[呈现相关元素]

任何 (1) 包含或表达可呈现内容,或 (2) 影响 内容呈现的元素。前者示例包括所有 内容元素和某些 嵌入内容元素,尤其是 audio 以及 image。 后者示例包括内联 animateset。请特别注意, 元数据元素被排除在此定义之外。

[呈现处理器]

一种内容处理器,其目的是对 定时文本标记语言 内容进行布局、格式化和渲染, 即通过应用本规范定义的呈现语义来呈现该内容。

[处理器]

参见内容处理器

[处理器 profile]

一种 profile,满足:(1) 关联 profile 实例的 type 组件值为 processor,并且 (2) 规定内容处理器必须或可以实现(支持)哪些 特性扩展集合。

[profile]

特性扩展的集合;当被 interned(实例化)时,由 profile 实例状态对象表示。 profile 被类型化为内容 profile处理器 profile

[profile 定义文档]

根据使用上下文,可以是 定时文本 profile 文档定时文本 profile 文档 实例

[profile 片段标识符]

用于标记或引用内部定义的 profile片段标识符,其中 “内部”指位于 文档 实例内部。

[profile 处理]

执行 [abort if unsupported processor profile] 过程的过程;作为副作用, 它会确定 文档实例有效内容 profile(如需要)以及 有效处理器 profile

[profile 规范]

特性规范扩展规范 或其内部状态表示。

[精简 xml 信息集]

满足 B 精简 XML 信息集所指定约束的 XML 信息集 [XML InfoSet]

[region]

根容器区域内容区域;如果未加限定使用, 则指后者。

注:

虽然与文档呈现关联的根容器区域只有一个且唯一, 但本规范不限制随时间使用的内容区域数量 或给定时间使用的内容区域数量。不过,某些 内容 profile 会 指定此类限制。

[相关媒体对象]

文档实例关联或以其他方式相关的 (可能为 null 的)媒体对象。例如,一个聚合 音频/视频媒体 对象,文档实例为其提供说明字幕或字幕 信息,并且该 文档实例与其关联。

[相关媒体对象区域]

呈现处理 上下文中的一个区域,其中呈现非 null 的视觉 相关媒体对象

[相对维度]

按照适用的书写模式,表示内联或块推进轴上长度的标量值。

[根容器区域]

一个唯一的逻辑矩形区域,它建立一个坐标系统, 内容区域会被放置于其中并可选择地被裁剪; 另见 H 根容器区域 语义

注:

根容器区域没有边框或 内边距;因此,其边框、内边距和 内容矩形是共端的。

[根时间范围]

文档实例相对于某个外部应用或呈现上下文的时间开始和结束定义的时间范围(间隔)。

[简单数据嵌入]

一种 data 元素,它直接 嵌入 嵌入数据资源实际字节的表示,而不使用 子 chunk 元素。

[smpte 时间码]

其格式和语义由 [SMPTE ST 12-1]确立的时间码, 它可被嵌入或以其他方式关联到媒体内容中,例如 广播音频/视频流。

[带源数据嵌入]

一种 data 元素,它通过使用 子 source 元素间接 引用 嵌入数据资源的内容。

[指定样式集]

一种样式集,包含由 10.4.4.2 指定样式集 处理确定的指定样式值。

[语音数据资源]

一种数据资源,由 语音合成处理器 输出所生成的采样组成。

[语音合成处理器]

内容处理器的可选组件, 其功能是合成文本内容的音频语音渲染。

[存储宽高比]

参见 SAR 的定义。

[样式集]

样式属性集定义的 样式属性集。

[已样式化元素]

已经或可以与计算 样式集关联的元素。

[合成文档同步基准]

文档级 同步基准 [SMIL 3.0] §5.7.1,由 文档处理上下文根据 相关媒体对象或其他处理标准 合成或以其他方式建立。

[合成 smpte 文档 同步基准]

一种合成文档同步基准,由嵌入在 相关 媒体对象中或与其关联的 smpte 时间码 值构造,或由 文档处理 上下文以其他方式确定。

[时间上活动]

当所选时间基准的当前时间与该特性的 活动时间间隔相交时,语法或语义特性(例如元素或元素的呈现)即为 时间上活动

[时间上活动区域]

一个区域,它是 时间上 活动的。

[文本方向]

以旋转度数表征 字形区域方向的方式,其中 0° 表示 upright 方向, 90°,即顺时针 90 度,表示 sideways 方向; 另见 10.2.45 tts:textOrientation

[计时元素]

允许指定 begin 属性的任何元素类型。

[定时文本]

与计时信息具有内在或外在 关联的文本信息。

[定时文本创作系统]

能够导入和导出 定时文本标记语言内容的内容创作系统。

[定时文本内容文档]

一个抽象文档,它声称或确认是 TTML 内容文档类型有效抽象文档实例

[定时文本内容 文档实例]

定时文本内容 文档的具体实现, 另见 A 具体编码

[定时文本文档实例]

定时文本标记语言 文档的具体实现, 其中具体形式特定于引用上下文。 也称为 TTML 文档实例 或简称为文档实例

[定时文本中间 文档]

一个抽象文档,它声称或确认是 TTML 中间文档类型有效抽象文档实例

[定时文本 中间文档实例]

定时文本 中间文档的具体实现, 关于它,参见 A 具体编码

[定时文本标记语言]

一种内容类型,表示定时文本内容、此 内容的中间表示,或此内容或内容处理器的 profile。

[定时文本标记语言 文档]

一个抽象文档,它声称或确认是 有效抽象文档实例

[定时文本 profile 文档]

一个抽象文档,它声称或确认是 TTML Profile 文档类型有效抽象文档实例

[定时文本 profile 文档实例]

定时文本 profile 文档的具体实现, 关于它,参见 A 具体编码

[顶级 profile]

由作为 head 元素子级出现的 ttp:profile 元素定义的 profile

[转换处理器]

一种内容处理器,其目的是将 定时文本标记语言内容转换或以其他方式重写为 定时文本标记语言 或另一种(任意)内容格式。前者的一个示例是移除 或重写 TTML 特性以符合某个 TTML profile 的处理器。后者的一个示例是 将 TTML 翻译为完全不同的定时文本格式的处理器。由于本 规范未以其他方式定义转换处理的目标 profile 或格式, 因此本规范不再定义进一步的转换语义。

[未指示 profile]

一种未与 profile 指示符关联的 profile, 并且在该 profile 定义的上下文中被隐式引用。也 称为匿名 profile

[有效抽象文档 实例]

一个抽象文档实例,其有效性已被 评估并被认定为有效,如 4 文档类型所定义。

[验证处理]

验证 处理器执行的功能。

[验证处理器]

内容处理器的可选组件, 其功能是在执行 某些其他类型的处理之前,对候选 文档实例执行验证处理; 并且该验证处理包括执行 [validate document] 过程, 如 5.3 验证所定义。

[验证型内容处理器]

一种内容处理器,它实现 验证处理器 组件,作为执行其主要 内容处理器功能之前的预处理步骤。

注:

验证型内容处理器可以具有:(1) 验证(或 核验)文档实例的唯一功能, 在这种情况下,它可被视为验证型 转换处理器, 其输出指示有效性(或无效性);或 (2) 多个功能,其中第一个功能是验证(或核验)文档实例, 然后执行其作为 转换处理器呈现处理器的主要功能。

注:

当执行验证处理时,一致性验证型内容处理器 允许交错执行验证 处理和内容处理,前提是后者对于给定内容单元在时间上不先于 前者。

[垂直轴]

垂直于地平面的轴。

[宽度]

水平轴上的 绝对维度

[书写模式]

一个枚举型 token 集合,其中每个 token 指示内联和块向内容的 流动轴与流动方向的组合; 关于它,参见 10.2.51 tts:writingMode

2.3 文档约定

在本规范的规范性说明中,词语 mayshouldmust 定义如下:

may

一致性文档和/或 TTML 处理器被允许 按所描述的方式行事,但并非必须如此。

should

强烈建议一致性文档和/或 TTML 处理器 按所描述的方式行事,但并非必须如此。

must

一致性文档和/或 TTML 处理器必须 按所描述的方式行事;否则即为错误。

如果规范性规范语言采用祈使形式, 则应将其视为适用 must 一词。此外,如果规范性语言采用陈述形式, 且该语言受 must 约束, 则也应将其视为适用 must 一词。

注:

例如,短语“treat X as an error”和“consider X as an error”在使用上下文中应被解读为强制性要求。类似地,如果 规范 说明为“X must apply”、“X applies”或“X is mandatory”,且“X”进一步定义为“X is Y and Z”, 则通过传递闭包,该最后的陈述性短语在使用上下文中应被解读为“Y is mandatory”和 “Z is mandatory”。

XML 表示以及 其他相关术语的所有规范性语法定义均以浅黄橙色背景显示, 并标记为“XML Representation”或“Syntax Representation”, 如下所示:

XML 表示 – 元素信息项:example
<example
  count = xsd:integer
  size = ("large" | "medium" | "small" | "tiny" | "micro") : medium>
  Content: (all | any*)
</example>

在 XML 表示中,粗体属性名(例如上面的 count) 表示必需属性 信息项,其余为可选项。当某个属性 信息项具有枚举类型定义时,其值以 竖线分隔显示,如上面的 size;如果 存在默认值,则显示在冒号之后。当 属性信息项具有 [XML Schema Part 2] 中定义的内置简单 类型定义时,会给出指向其中定义的超链接。

除非本规范中明确定义,否则不允许使用未限定属性。

注:

N.1 元素派生外, 属性的(可能带命名空间限定的)名称 会加上前缀“@”(COMMERCIAL AT)字符,以便区分 属性和同名元素类型;在这种情况下, “@”字符并不旨在成为属性字面名称的一部分。 例如,@ttm:agentttm:agent 属性,而 ttm:agentttm:agent 元素。

浅黄橙色背景 显示的信息项为 deprecated(例如 上面所示 size 属性的 tiny 值)。 被标记为 deprecated 的信息项可以但不应出现在 TTML 文档实例中, 如果它确实出现, 验证型内容处理器应报告 警告。 以浅品红红色背景 显示的信息项为 obsoleted(例如 上面所示 size 属性的 micro 值)。 被标记为 obsoleted 的信息项不得出现在 TTML 文档实例中, 如果它确实出现, 验证型内容处理器应报告 错误。 对项的这些指示 也会在规范文本中明确指出。

信息项的允许内容以语法 片段显示,使用 Kleene 运算符 ?*+。其中每个元素名都是指向其 自身说明的超链接。

术语线性空白(LWSP)应解释为非空序列,该序列由 SPACE (U+0020)、TAB (U+0009)、CARRIAGE RETURN (U+000D) 或 LINE FEED (U+000A) 组成, 对应于 [XML 1.0] 所定义的产生式 [3] S

值语法表达式规范中使用以下约定:

  • 字面项(在引号内指定)出现时,必须完全按 指定出现 (不包括引号本身);

  • 串接(并列)项表示所有项都必须按所述顺序出现,例如 a b 表示项 ab 存在,且前者先于后者;

  • 竖线(|)分隔两个或多个备选项,其中必须且只能 出现一个;

  • 双竖线(||)分隔两个或多个选项,其中一个或多个 必须以任意顺序出现且不得重复, 并由 <lwsp> 分隔;

  • 开闭圆括号(())用于分组并解析运算符 优先级;

  • 开闭方括号([])用于表达字符类;

  • 开闭花括号({})以两种方式使用,通常可由上下文 充分判断哪一种 适用(如果不能,则周围说明会说明哪一种适用):

    • 用于表达重复次数或范围,其形式如下:

      • {count}

      • {minimum,maximum}

    • 用于表达字符集合,其中必须出现一个字符;此外, 集合可指定为集合差,例如 {char-{specials}}, 它表示所有 XML 字符减去一组特殊字符。

  • Kleene 运算符 ?*+ 分别表示 前一项的零个或一个、 零个或多个,以及一个或多个;

  • 运算符优先级(从最高到最低)如下,所有这些运算符均具有从左到右 结合性

    1. 分组

    2. 串接(并列)

    3. ||

    4. |

除满足 || 值语法的表达式之间必须出现的线性空白外,除非在值语法定义中通过出现 <lwsp> 非终结符明确标记, 否则不允许出现空白。

除非另有相反说明,术语 horizontalvertical 按 绝对意义解释,而不是相对于书写模式解释;同时 width 指沿水平轴的维度, height 指沿垂直轴的维度。所有例外均在文本中 明确注明。

本规范中未明确标记为 非规范性的所有内容均视为规范性内容。如果某节或附录 标题包含表达式“Non-Normative”,则该 节或附录整体被视为非规范性内容。

所有标记为 Note 的段落均视为非规范性内容。

示例代码片段以浅蓝绿色 背景显示,并标记为“Example Fragment”,如 下所示:

示例片段 – 示例
<tt xml:lang="" xmlns="http://www.w3.org/ns/ttml">
  <head>
    <metadata/>
    <styling/>
    <layout/>
  </head>
  <body/>
</tt>

注:

虽然此处所示的示例代码片段以格式良好的 XML 表达, 但并不旨在成为完整、有效的 TTML 文档; 相反,它们通常会被简写,以便聚焦于预期示例。特别是, 片段通常需要增加 额外元素和/或属性,以满足 TTML 文档一致性 要求。

除非另有规定,本规范中定义词汇的章节按字母顺序而非逻辑顺序定义词汇。

3 一致性

本节规定 TTML2 文档和处理器的一般一致性要求。

3.1 文档一致性

如果满足以下条件,则定时文本文档实例符合本 规范:

  1. 当在文档交换上下文中传输文档实例,且 媒体类型 [MIME Media Types] 标识所交换文档实例的内容类型时,则指定的 媒体类型为 application/ttml+xml,符合 [XML Media Types] §7,并且可出现可选的 profile 参数,其值符合 <profile-designator> 表达式。

  2. 文档实例是或可以表示为精简 xml 信息集, 如 B 精简 XML 信息集所定义。

  3. 对应于文档实例精简 xml 信息集是或可以 与 4 文档类型所定义的 抽象文档 类型之一关联。

  4. 对应于文档实例精简 xml 信息集是 关联 抽象文档类型有效抽象文档实例

  5. 精简 xml 信息集满足本规范定义的所有额外 强制性语法和 语义约束。此外,该信息集 应满足 [WCAG] 所指定的 Web 内容无障碍指南。

3.2 处理器一致性

本节根据 通用处理器一致性 以及两类专门处理器一致性: 转换处理器一致性呈现处理器一致性, 规定 TTML2 处理器的一致性要求。

注:

本节定义的一致性要求限定于操作 TTML 文档实例静态 表示的处理器。特别是, 修改 TTML 文档实例的处理器,例如 创作或编辑工具,不受本规范管辖;但其对 TTML 文档实例执行一系列修改后的最终 结果满足 3.1 文档一致性所定义的 TTML 内容形式有效性时, 相关部分除外。

3.2.1 通用处理器一致性

如果满足以下通用处理器条件,则 TTML2 内容处理器符合本规范:

  1. 处理器至少提供一种机制,用于在概念上 实例化一致性文档实例精简 xml 信息集 表示。

  2. 处理器执行profile 处理

    注:

    执行profile 处理意味着 某种程度的局部验证, 但不足以等同于执行下一个条目中所述的 [validate document] 过程。 特别是,预计实现会在使用 profile 相关词汇之前,名义上验证该词汇的语法表达以及适用于该词汇使用的任何基本语法或 语义约束。如果profile 处理在未检测到语法或语义约束的重大违反的情况下完成, 则可以由 [validate document] 过程执行更完整的验证。

  3. 如果处理器是验证型内容 处理器,则它

    1. 至少提供一种机制,将候选文档实例精简 xml 信息集表示 隐式或显式地关联到 4 文档 类型所定义的 抽象文档类型之一;并且

    2. 执行 [validate document] 过程。

    注:

    本规范不定义验证处理的执行与上一条中所述 profile 处理的执行之间的严格顺序。 特别是,这两个 处理步骤可以交错(或重复),使二者都在对 文档实例执行进一步(转换或呈现)处理之前完成。

    尽管如此,验证处理profile 处理之间存在隐含的顺序关系;具体而言,为了执行 验证处理,必须解析 有效验证 profile的值;为了解析该值, 必须解析 有效内容 profile的值,或者如果该 值为 null,则解析 有效处理器 profile的值;后二者的值在 profile 处理期间获得。

    注:

    作为交错执行验证 处理profile 处理的示例,请考虑以下 场景(按给定顺序):

    • 验证输入文档源的格式良好性(验证 处理);

    • 将输入文档源实例化为潜在有效的抽象文档 实例(一般处理);

    • 使用内置应用语义初始化验证状态 (验证处理);

    • 使用内置应用语义初始化 profile 状态(profile 处理);

    • 验证与验证相关的词汇(验证处理);

    • 使用有效的验证相关词汇更新验证状态 (验证处理);

    • 验证 profile 相关词汇(验证处理);

    • 使用有效的 profile 相关词汇更新 profile 状态(profile 处理);

    • 执行 [abort if unsupported processor profile] 过程的中止步骤(profile 处理);

    • 验证整个文档,并根据新的 profile 状态按需重新验证验证和 profile 词汇 (验证处理);

    • 如果处理未被中止,则继续执行转换或呈现 处理(一般处理)。

  4. 处理器不会 a priori 拒绝或中止 对一致性文档实例的处理, 除非:

    1. 处理器不支持声明为适用于该文档 实例的 TTML profile 所指定或隐含的某些必需 (强制)特性;或

    2. 执行 [validate document] 过程时发生 验证错误

  5. 处理器支持本规范定义的所有强制性处理语义。

    注:

    短语 mandatory semantics 指所有明确使用一致性 关键短语 mustmust not 的语义,以及任何 可从这些关键短语合理推断出的陈述性说明。

    注:

    特性扩展mandatory semantics 的支持,仅在该 特性扩展由 TTML 内容处理器支持时适用。

  6. 如果处理器支持本规范定义的某些可选处理语义, 则其支持方式应与已定义语义一致。

    注:

    短语 optional semantics 指所有明确使用一致性 关键短语 shouldshould notmaymay not 的语义, 以及任何可从这些关键短语合理推断出的陈述性说明。

3.2.2 转换处理器一致性

如果满足以下条件,则 TTML 内容处理器是符合一致性的 TTML2 转换处理器

  1. 处理器满足 3.2.1 通用处理器一致性 指定的所有要求。

  2. 处理器支持由 G.3 TTML2 转换 Profile 指定的 TTML 转换 profile。

  3. 处理器支持由 G.6 DFXP 转换 Profile 指定的 DFXP 转换 profile。

3.2.3 呈现处理器一致性

如果满足以下条件,则 TTML 内容处理器是符合一致性的 TTML2 呈现处理器

  1. 处理器满足 3.2.1 通用处理器一致性 指定的所有要求。

  2. 处理器支持由 G.2 TTML2 呈现 Profile指定的 TTML 呈现 profile。

  3. 处理器支持由 G.5 DFXP 呈现 Profile指定的 DFXP 呈现 profile。

  4. 处理器执行 11.3.1.3 中间 同步文档构造11.3.1.4 同步流 处理

注:

两个一致性呈现处理器在处理同一个一致性文档时,不要求产生相同的呈现。 例如,不同的呈现处理器可能使用不同字体、不同字体 光栅化器、不同换行算法, 以及本规范未规定行为的不同实现。

3.3 声明

任何关于 TTML 文档实例内容处理器一致性的合规声明,必须 引用实现合规性声明(ICS)。

实现合规性声明必须标识该规范中由 文档实例或内容处理器实现所满足的所有强制性 和可选特性。特别是,该声明必须 标识所使用或支持的 TTML 词汇 profile, 如 5.2 Profiling所定义;并且,如果使用或支持子集或 超集 profile,则必须说明该子集或超集 profile 中排除 或包含哪些特性。

注:

上文指定的 转换处理器一致性呈现处理器一致性的定义要求 这些类型的处理器各自支持(至少)两个特定 profile:一个由 [TTML1] 定义的类型特定 profile,以及一个由本规范定义的类型特定 profile。

尽管有此要求,仍然可以构造一个 TTML 内容处理器, 它执行转换或呈现处理功能,并满足 通用处理器一致性要求, 但既不支持 转换 处理器一致性呈现处理器一致性所要求的 profile, 而是 仅支持本规范范围之外定义的 profile。在这种情况下, 处理器可以声明符合 通用处理器 一致性,并进一步声明是 TTML 转换处理器或 TTML 呈现处理器, 但不得声明符合转换 处理器一致性呈现处理器一致性

作出合规声明的文档实例必须与以下之一关联:

  1. 一个非 null 的有效内容 profile, 它派生自显式指定的 ttp:contentProfiles 属性 或一个或多个顶级 内容 profile;或

  2. 一个非 null 的有效处理器 profile, 它派生自显式指定的 ttp:processorProfilesttp:profile 属性 或一个或多个顶级 处理器 profile

3.4 兼容性

本小节为非规范性内容。

3.4.1 向前兼容性

一致性 TTML1 处理器可能能够处理 TTML2 内容文档实例,前提是它 忽略未知词汇, 并忽略出现在一致性 TTML1 内容文档实例中不允许的上下文中的已知词汇; 但是,此类处理可能会丢弃或无法呈现内容,或可能以不同于预期的方式呈现内容, 而不是由一致性 TTML2 处理器处理时的预期结果。

注:

例如,如果 TTML1 处理器忽略 TTML2 中定义的 tts:ruby 属性, 则该处理器 仍可呈现使用 ruby 特性的 TTML2 内容,尽管不会按预期方式 呈现。类似地, 如果 TTML1 处理器遇到作为另一个 style 元素子级的 style 元素,则前一个 嵌套样式可能会被忽略(因为此设施未在 TTML1 中定义)。

3.4.2 向后兼容性

TTML2 设计为:

  • 一致性 TTML1 内容文档 实例 是一致性 TTML2 内容 文档实例

  • 一致性 TTML2 处理器处理一致性 TTML1 内容文档实例时, TTML2 处理器产生的输出处于 TTML1 允许的变化范围内;但是,如果遇到 deprecated 特性, 它可以发出警告。

4 文档类型

本节定义以下 TTML 抽象文档类型

每个抽象文档类型由以下 约束组成:

可以从有效性方面评估抽象文档实例, 并且如果满足以下条件,则认为它是有效抽象文档 实例:如果在

  1. 剪除所有名称不是关联抽象文档类型所定义 元素类型集合成员的元素信息 项之后,

  2. 从任何剩余元素中剪除字符 信息项子级,如果该元素的所有 字符子级都表示 XML 空白字符,且该元素类型 在关联抽象文档 类型中被定义为空,然后

  3. 剪除所有属性 信息项,这些项的扩展名满足:扩展名的命名空间 URI 未列于 表 5-1 – 命名空间中,或者若列于 表 5-1 – 命名空间中,却不是 关联抽象文档类型为其所属元素信息项使用 所定义的属性集合成员,

则文档元素是关联抽象文档 类型允许的文档 元素类型之一, 文档 元素的后代满足各自元素类型的内容 规范,所有必需属性均存在,并且每个属性的声明 值满足 关联抽象文档类型声明的类型。

注:

虽然一致性处理器不得 a priori 拒绝 一致性文档实例,但给定文档实例可能 由作者或创作工具约束,以满足更 严格的有效性定义。

注:

如下例所示,抽象 文档实例即使包含命名空间名列于 表 5-1 – 命名空间中但 本地名不属于本版本 规范所定义词汇的元素和属性,也可以是 有效抽象文档实例。 具体而言,元素 foo 和属性 tts:foo 分别由上述步骤 (1) 和 (3) 剪除, 因为它们不是关联抽象文档类型的成员,尽管它们的 命名空间名列于 表 5-1 – 命名空间中。

示例片段 – 元素和属性的剪除
<tt xml:lang="en" xmlns="http://www.w3.org/ns/ttml"
  xmlns:tts="http://www.w3.org/ns/ttml#styling">
  <body>
    <foo>Foo</foo>
    <div>
      <p tts:foo="bar">Bar</p>
    </div>
  </body>
</tt>

4.1 TTML 内容文档类型

TTML 内容文档类型是定时文本标记语言某个 profile 的抽象文档 类型, 旨在用于分发系统之间的交换。 此文档类型 根据 5 词汇中指定的元素和属性词汇定义。

本规范引用两类 schema,可用于验证 定时文本内容文档实例的超集/子集:

TTML 内容文档 实例的(根)文档元素必须是 tt 元素,如 8.1.1 tt所定义。

注:

本规范引用的 schema 不验证本规范定义的所有语法约束, 因此表示一致性 TTML 内容的超集。特别是,使用上述 引用 schema 之一进行验证可能导致有效性的假阳性指示。 例如,RNC 和 XSD schema 都规定 tts:fontFamily 属性必须 满足 xsd:string XSD 数据类型;但是,此数据类型是 允许与 tts:fontFamily 属性一起使用的值的超集。

此外,在外来命名空间中的元素上使用 xml:id 属性时, RNC schema 可能产生有效性的假阴性 指示,从而表示一致性 TTML 内容的子集。这是由于在 Relax NG schema 中表达涉及 xsd:ID 类型属性的通配符模式存在特定限制。注意,本规范将 文档实例的形式有效性定义为基于一个 抽象文档实例, 其中所有外来命名空间元素和属性都已移除。因此, 对该假阴性的例外报告不会影响 文档实例有效性的形式评估。

注:

本规范引用的 schema 旨在于 4 文档类型所指定的剪除步骤 (1)-(3) 应用之后使用。

注:

一致性通用处理器必须支持 定时文本内容文档的摄取和处理。

4.2 TTML 中间文档类型

TTML 中间文档类型是一种抽象文档 类型,旨在 用于表示 定时文本内容文档 的内容,其方式是以非层级(扁平)、时间上线性的 方式指示计时信息,并且 某些信息(例如样式事项)可以被解析或合并,以简化 后续处理。 此文档类型根据 J 中间文档语法5 词汇中指定的元素和属性词汇定义。

本规范引用两类 schema,可用于验证 定时文本中间文档 实例

TTML 中间同步文档实例的(根)文档元素必须是 isd:sequenceisd:isd 元素,如 J 中间文档语法所定义。

注:

一致性通用处理器不要求支持 定时文本中间文档的摄取或处理。

4.3 TTML Profile 文档类型

TTML Profile 文档类型是一种抽象文档 类型,旨在 用于定义和传达对 TTML 特性或 扩展的支持或使用约束。此文档类型 根据 5 词汇中指定的元素和属性词汇定义。

本规范引用两类 schema,可用于验证 定时文本 profile 文档实例

TTML Profile 文档 实例的(根)文档元素必须是 ttp:profile 元素,如 6.1.1 ttp:profile所定义。

注:

建议一致性通用处理器支持 定时文本 profile 文档的摄取或处理, 但并非必需。不过,声称支持 http://www.w3.org/ns/ttml/feature/#profile 特性的内容处理器 必须支持此项(即 定时文本 profile 文档的摄取和处理)。

5 词汇

本节定义定时文本标记语言(TTML)的 命名空间、profile 和词汇(作为元素和属性 目录),如下所示:

5.1 命名空间

定时文本标记语言(TTML)为元素和某些 全局属性采用了多个 XML 命名空间 [XML Namespaces 1.0]。下表指定了这组命名空间, 并指出本规范中使用的默认前缀以及 表示每个命名空间的规范性 URI。

表 5-1 – 命名空间
名称 前缀
TT tt: http://www.w3.org/ns/ttml
TT 参数 ttp: http://www.w3.org/ns/ttml#parameter
TT 样式 tts: http://www.w3.org/ns/ttml#styling
TT 音频样式 tta: http://www.w3.org/ns/ttml#audio
TT 元数据 ttm: http://www.w3.org/ns/ttml#metadata
TT 中间同步文档 isd: http://www.w3.org/ns/ttml#isd
TT Profile http://www.w3.org/ns/ttml/profile/
TT 特性 http://www.w3.org/ns/ttml/feature/
TT 扩展 http://www.w3.org/ns/ttml/extension/
TT 资源 http://www.w3.org/ns/ttml/resource/

所有 TTML 命名空间都是可变的 [NSState];这些命名空间中的所有未定义名称均保留供 W3C 未来标准化使用。

TT 样式命名空间(http://www.w3.org/ns/ttml#styling)和 TT 音频样式命名空间(http://www.w3.org/ns/ttml#audio)统称为 TT 样式命名空间。 特别是,如果规范文本引用后一集合, 则表示所讨论的词汇项位于 TT 样式命名空间或 TT 音频样式命名空间中。

注:

在特定文档实例中,不要求使用 上面所示的默认 前缀。可以使用满足 XML 命名空间 [XML Namespaces 1.0] 约束、 并与指定命名空间 URI 关联的任何前缀或命名空间绑定。

注:

如果本规范中使用了对元素类型的引用,并且该元素类型的名称 未以命名空间限定,则适用 TT 命名空间。

如果本规范中使用了对属性的引用,并且该属性的名称 未以命名空间限定,则该属性由其所用于的 元素类型隐式限定。也就是说,该属性位于所谓的 按元素类型 的命名空间分区 [NSOriginal] 中,其成员按照 它们所出现元素类型的定义进行解释。

对于上面定义的某些命名空间,如果本规范未在该命名空间中定义 XML 词汇(也不预期在本规范的 未来版本中定义),则默认前缀 指定为 。在这种情况下,使用 命名空间 URI 的目的并非定义 XML 词汇, 例如用于指示 profile、特性、扩展,以及用于 解引用标准 profile 定义。

5.2 Profiling

本节描述 TTML profiling 子系统以及适用于该子系统的高层要求。 本节末尾 有一个小节,其中包含 profile 规范示例以及这些 规范如何被引用和使用的示例。

5.2.1 引言

本小节为非规范性内容。

定时文本标记语言内容作者可以将给定 profile 用于两种 功能之一:(1) 声明 文档实例遵守一组关于 使用哪些词汇以及如何使用词汇的约束,或 (2) 声明处理器必须满足关于 如何处理内容的某些条件。前一种功能称为内容 profile,而 第二种称为处理器 profile

内容 profile用于允许作者在创作时声明, 作者打算对文档 实例应用哪些约束。此类 声明允许下游处理器执行内容验证或核验,并可指导或限制后续 内容转换或编辑,以保持对作者指定 内容 profile 的遵守。此外, 下游处理器可以使用内容 profile 声明,提前判断 其处理该内容 profile 所隐含特性的能力。

内容 profile 通过以下方式声明:(1) 在根 tt 元素上使用ttp:contentProfiles 属性,(2) 使用一个或多个类型为 content 的顶级ttp:profile 元素,或 (3) 这两种机制的组合。如果未声明,则不隐含任何内容 profile。

处理器 profile用于允许作者在创作时声明, 处理文档 实例时必须支持哪些处理;如果 处理器无法执行所指示的处理,则应中止处理。 此类声明允许下游 处理器避免处理无法以满足内容作者要求的方式处理的内容。

处理器 profile 通过以下方式声明:(1) 在根 tt 元素上使用ttp:processorProfiles 属性,(2) 使用一个或多个类型为 processorttp:profile 元素,或 (3) 在根 tt 元素上使用ttp:profile 属性。 如果未声明,则从已声明内容 profile 或 默认处理器 profile推断处理器 profile。

注:

一致性文档 实例并不要求通过ttp:profile 元素在内部声明处理器 profile, 也不要求通过 ttp:profilettp:processorProfiles 属性在内部引用处理器 profile。更具体地说,允许 文档 交换上下文通过私有约定、带外协议,或通过发送方与接收方共同使用 外部规范定义的处理器 profile,来确定适用的处理器 profile。

注:

当作者希望引用 TTML 内容的一个(或多个)标准预定义处理器 profile, 且不希望修改(通过超集化或子集化) 该 profile 时,预期使用 ttp:profilettp:processorProfiles 属性。这些属性也可以由作者用于指示使用 非标准 profile,在这种情况下,指定的<profile-designator> 表达 一个 URI,用于指示外部定义的profile 定义文档。 但是,并不要求一致性 TTML 内容处理器能够 解引用此类外部指定的 profile 定义。

相比之下,当作者希望使用修改后的预定义 profile, 或希望在文档实例中包含 一个不基于任何预定义 profile 的非标准 profile 定义时, 预期使用ttp:profile 元素。

通过指定某个特性或扩展为 required(强制),而该特性或扩展在底层基线 profile 中未指定,或在基线 profile 中指定为 optional(自愿), 即可对预定义 profile 进行超集化。 通过指定某个特性或扩展为 optional(自愿),而该特性或扩展在底层基线 profile 中指定为 required(强制), 即可对预定义 profile 进行子集化。

当通过子集化修改基线 profile 时,所得的派生 profile 称为 subtractive profile;当通过超集化修改时,所得 profile 称为 additive profile。 也可以定义一个同时为 subtractive 和 additive 的派生 profile。

内容作者不限于使用单个 profile,而可以引用同一类型的多个 profile,即多个内容 profile 和/或多个处理器 profile。 当引用多个 profile 时,其各自规范 会被组合,以形成适用于文档的单个有效内容 profile,以及在处理器处理该文档时适用于处理器的 单个有效处理器 profile。此外,作者不限于引用外部 定义的 profile,也可以在文档内内联定义一个或多个 profile。

5.2.2 Profile 示例

本小节为非规范性内容。

作者定义的、 从 TTML 呈现 profile 派生的 additive profile 示例 如下方 示例片段 – TTML Additive Profile所示。

示例片段 – TTML Additive Profile
<tt xml:lang="" xmlns="http://www.w3.org/ns/ttml">
 <head>
   <profile use="ttml2-presentation" xmlns="http://www.w3.org/ns/ttml#parameter">
     <features xml:base="http://www.w3.org/ns/ttml/feature/">
       <feature value="required">#fontStyle-italic</feature>
     </features>
   </profile>
 </head>
 <body/>
</tt>

注:

在上面的示例中,基线 profile 被声明为 TTML2 呈现 profile,随后通过将 #fontStyle-italic 特性设为 required(而不是 G.2 TTML2 呈现 Profile中定义的 optional)对其进行 additive 修改。还要注意 profile 元素上的默认 XMLNS 绑定被重置为 TT 参数命名空间。

5.2.3 Profile 指示符

profile 的引用方式有两种,取决于该 profile 是定义在引用文档外部, 还是以内联方式定义在引用文档内部。当在外部定义时,profile 通过 <absolute-profile-designator><relative-profile-designator> 表达式引用。 当在内部(内联)定义时,profile 要么被隐式引用, 要么通过<fragment-profile-designator> 表达式引用。

profile 指示符必须遵守 <uri> 值 语法。 如果 profile 指示符表示为相对 URI, 则必须使用 TT Profile 命名空间值作为 基 URI 将其绝对化。

所有以 TT Profile 命名空间作为前缀但未列于 表 5-2 – Profile中的 profile 指示符 均保留供未来标准化使用,并且不得出现在一致性 文档实例中。尽管存在此约束, profile 指示符并不局限于 表 5-2 – Profile中枚举的指示符集合, 而可以是任何可行地解引用为 TTML profile 定义 文档的 URI, 前提是它不使用 TT Profile 命名空间作为前缀。

5.2.3.1 标准指示符

定时文本标记语言(TTML)采用其 词汇和关联语义的多个 标准预定义 profile。

下表指定这组 profile,指出每个预定义 profile 的 规范性名称和指示符, 以及每个 profile 在 G 标准 Profile[TTML1] 或另一份 TTWG 规范中正式详细阐述的位置。

表 5-2 – Profile
名称 绝对指示符
DFXP Full http://www.w3.org/ns/ttml/profile/dfxp-full
DFXP Presentation http://www.w3.org/ns/ttml/profile/dfxp-presentation
DFXP Transformation http://www.w3.org/ns/ttml/profile/dfxp-transformation
SDP US http://www.w3.org/ns/ttml/profile/sdp-us
TTML2 Full http://www.w3.org/ns/ttml/profile/ttml2-full
TTML2 Presentation http://www.w3.org/ns/ttml/profile/ttml2-presentation
TTML2 Transformation http://www.w3.org/ns/ttml/profile/ttml2-transformation

注:

DFXP profile 的定义见 [TTML1]。SDP US profile 的定义见 [SDP US]

5.2.4 Profile 语义

5.2.4.1 Profile 状态对象概念

本节定义若干概念性状态对象,供随后定义的算法 (过程和函数)使用。并不要求 实现以此处指定的形式创建此类对象,而可以使用任何方便的 内部表示,只要其表示等价信息即可。

[profile 规范]

profile 规范 表示以下内部状态信息,它对应于 ttp:featurettp:extension 元素

designator

一个 <uri> 值,根据 type 指示特性或 扩展指示符

type

"feature" | "extension"

value

"optional" | "required" | "prohibited"

[组合 profile 规范集]

组合 profile 规范集 表示以下内部状态信息, 它对应于一组profile 规范, 并额外记录获得(或派生)这些规范的 组成 profile。

constituents

<absolute-profile-designator> 表达式的有序列表, 其中每个指示符指示一个组成 profile,即构成该组合 profile 规范集的 profile。

specifications

profile 规范的有序列表。

[空 profile 规范集]

一个组合 profile 规范集,其 constituentsspecifications 字段为空集

[profile 实例]

profile 实例表示以下内部状态 信息,它对应于一个ttp:profile 元素,无论该元素是 显式指定还是隐含的。

designator

一个<absolute-profile-designator> 表达式, 与该 profile 关联(并唯一标记该 profile)。

type

"content" | "processor"

combine

"leastRestrictive" | "mostRestrictive" | "replace"

use

null 或一个<profile-designator> 表达式, 指示作为此 profile 基线 profile 的 profile。

constituents

如果 profile 是嵌套型 profile,则为 <fragment-profile-designator> 表达式的有序列表,其中每个指示符指示一个 组成嵌套 profile;否则为 null

specifications

如果 profile 是非嵌套型 profile, 则为 profile 规范的有序列表;否则为 null

combined specification set

一个组合 profile 规范集, 表示组合由该 profile 指定或引用的规范后得到的结果。

5.2.4.2 内容 Profile 语义
[construct effective content profile]

每个 TTML 文档实例都与一个(可能为 null 的) 有效内容 profile关联,该 profile 可由 内容处理器用于执行以下任一(或全部)操作:

  1. 推断有效处理器 profile;

  2. 文档实例执行验证处理

  3. 约束对文档实例的转换处理, 以维护内容 profile 不变量。

有效内容 profile按照 以下过程构造:

  1. 如果文档处理 上下文确定某个特定的 覆盖内容 profile PO 将覆盖所有其他确定,则 有效内容 profilePO

    注:

    例如,符合本规范的 [EBU-TT-D] 文档 可以指定 ebuttm:conformsToStandard 元素,以表示 符合 [EBU-TT-D] 内容 profile。 在这种情况下,支持该 profile 的内容 处理器可以使用该元素的存在 作为覆盖项来确定有效内容 profile

  2. 否则,如果根 tt 元素上指定了 ttp:contentProfiles 属性,则 有效内容 profile为 通过组合所指示 profile 的组合 profile 规范集而生成的组合 profile 规范集,其中 适用根 tt 元素上 ttp:contentProfileCombination 属性指定(或默认值指定)的内容 profile 组合方法;

  3. 否则,如果定义了一个或多个顶级 内容 profile, 则 有效内容 profile为 通过组合所有此类 顶级 内容 profile的组合 profile 规范集而生成的 组合 profile 规范集,其中 适用根 tt 元素上 ttp:contentProfileCombination 属性指定(或默认值指定)的内容 profile 组合方法;

  4. 否则,有效内容 profilenull

为符合通用 处理器一致性, 在处理给定文档实例时, 有效内容 profile一旦被设置为 对 profile 实例的非 null 引用, 则在该处理持续期间保持为对常量profile 实例的常量引用。 同样,如果设置为 null 引用,则在该处理持续期间 保持为常量 null 引用。

5.2.4.3 处理器 Profile 语义
[abort if unsupported processor profile]
  1. EPP 设置为通过执行 construct effective processor profile 过程获得的有效处理器 profile

  2. 对于 EPP 的组合 profile 规范集中的每个 profile 规范 S, 执行以下步骤:

    1. 如果 Svalue 字段为 required,并且内容处理器 不支持 S,则中止文档实例的处理,除非被 最终用户或某个实现特定参数覆盖,且该参数可追溯到最终用户或用户/系统配置设置;

[construct effective processor profile]

每个 TTML 文档实例都与一个(非 null 的) 有效处理器 profile关联,该 profile 由 内容处理器用于确定其是否满足 内容作者所表示的最低处理要求。

有效处理器 profile按照 以下过程构造:

  1. 如果文档处理 上下文确定某个特定的 覆盖处理器 profile PO 将覆盖所有其他确定,则 有效处理器 profilePO

  2. 否则,如果根 tt 元素上指定了 ttp:processorProfiles 属性,则

    1. 如果 ttp:processorProfiles 属性使用 all(...) 函数语法指定,或 未使用函数语法,即仅作为指示符列表指定,则 有效处理器 profile为 通过组合所指示 profile 的组合 profile 规范集而生成的 组合 profile 规范集,其中 适用根 tt 元素上 ttp:processorProfileCombination 属性指定(或默认值指定)的内容 profile 组合方法;

    2. 否则,如果 ttp:processorProfiles 属性使用 any(...) 函数语法指定, 则对于每个被指示的 profile, 有效处理器 profile为 所指示 profile 列表中第一个由 内容处理器支持的 profile 的 组合 profile 规范集;

  3. 否则,如果定义了一个或多个顶级 处理器 profile, 则 有效处理器 profile 为通过组合所有此类 顶级 处理器 profile的组合 profile 规范集而生成的 组合 profile 规范集,其中 适用根 tt 元素上 ttp:processorProfileCombination 属性指定(或默认值指定)的处理器 profile 组合方法;

  4. 否则,如果根 tt 元素上指定了 ttp:profile 属性,则 有效处理器 profile 为该属性所指示 profile 的组合 profile 规范集;

  5. 否则,有效 处理器 profile为执行 construct inferred processor profile 过程的结果;

为符合通用 处理器一致性, 在处理给定文档实例时, 有效处理器 profile一旦被设置为 对 profile 实例的引用, 则在该处理持续期间保持为对常量profile 实例的常量引用。

[construct inferred processor profile]
  1. ECP 设置为有效 内容 profile

  2. 如果 ECP 不是 null,则执行以下步骤:

    1. 如果 ttp:inferProcessorProfileSource 参数的计算值为 combine,则 推断处理器 profile为将 infer processor profile 函数 应用于 ECP 的组合 profile 规范集所得结果;

    2. 否则,如果 ttp:inferProcessorProfileSource 参数的计算值为 first,则 推断处理器 profile为第一个推断处理器 profile IPP, 该 IPP 通过将infer processor profile 函数 应用于与 ECP 组合 profile 规范集的每个 constituent 关联的 profile 实例的组合规范集组件而生成, 且该 IPP内容处理器支持;

  3. 否则,推断处理器 profile为执行 construct default processor profile 过程的结果;

[infer processor profile](combined profile specification set CPSS)
  1. 将推断处理器 profile IPP 初始化为一个内容 profile, 其包含空的组合 profile 规范集;

  2. 对于组合 profile 规范集 CPSS 中的每个 profile 规范 S

    1. 根据 ttp:inferPresentationProfileMethod 参数的计算值和 表 6-2 – 推断处理器 Profile 方法, 将内容 profile 规范 S 映射为处理器 profile 规范 S' 

    2. S'  添加到 IPP 的组合 profile 规范集中;

  3. 返回 IPP 作为推断处理器 profile;

[construct default processor profile]
  1. 如果文档交换 上下文处理器 profile关联,或与可从中推断出 处理器 profile内容 profile关联,则 默认处理器 profile为 该处理器 profile

  2. 否则,如果内容处理器主要被表征为 呈现处理器,则 默认处理器 profile为 通过 intern TTML2 呈现 profile (http://www.w3.org/ns/ttml/profile/ttml2-presentation)构造的 profile 实例

  3. 否则,如果内容处理器主要被表征为 转换处理器,则 默认处理器 profile为 通过 intern TTML2 转换 profile (http://www.w3.org/ns/ttml/profile/ttml2-transformation)构造的 profile 实例

注:

旨在与 一个或多个不同版本的 TTML 一起使用的内容处理器, 可以基于 TTML 呈现或转换 profile 的未来版本选择 默认处理器 profile

5.3 验证

本节描述 TTML 验证子系统以及适用于该子系统的高层要求。

验证是由验证 处理器执行的一项可选功能, 当候选文档实例验证型 内容处理器消费或以其他方式处理时,可能会发生验证。如果此类处理 发生且出现异常条件,则可以中止处理,如下文进一步详述。

如果在验证处理期间中止处理, 则后果包括:

  • 非一致性文档可能只有一部分由转换处理器转换, 从而产生不完整转换;

  • 非一致性文档可能只有一部分由呈现处理器呈现, 从而产生不完整呈现。

如果作为验证 处理的结果而发生中止处理,则在 文档实例中停止进一步处理内容的位置 不由本规范定义。特别是,实现可以在遇到第一个验证错误时中止处理,或 可以在遇到任意数量的验证错误之后中止处理。因此, 从非一致性文档中消费的输入内容数量以及相应的(转换或 呈现)输出可能因实现而异。

5.3.1 验证语义

5.3.1.1 验证状态对象概念

本节定义若干概念性状态对象,供随后定义的 算法(过程和函数)使用。并不 要求实现以此处指定的形式创建此类对象,而可以使用 任何方便的内部表示, 只要其表示等价信息即可。

[validation exception]

validation exception 表示以下内部状态信息,它对应于在验证 处理期间发生的异常 条件

message

描述或表征该异常的任意(由实现定义的)字符串

type

error|warning

类型为 errorvalidation exception 称为 validation error, 而类型为 warningvalidation exception 称为 validation warning

除非适用更高层协议, (1) 如果检测到对本规范规定或禁止事项的违反, 则适用validation error 异常;并且 (2) 如果检测到对本规范建议或不建议事项的违反,则 适用validation warning

注:

此上下文中更高层协议的一个示例是由系统或最终用户定义的 文档处理上下文配置选项, 它会导致将 warning 视为 error,或反之亦然。

5.3.1.2 验证处理语义
[construct effective validation profile]
  1. 如果文档的有效内容 profile不是 null,则 有效验证 profile有效内容 profile

  2. 否则,有效 验证 profile有效处理器 profile

为符合通用 处理器一致性, 在处理给定文档实例时, 有效验证 profile一旦被设置为 对 profile 实例的引用, 则在该处理持续期间保持为对常量profile 实例的常量引用。

[construct effective validation schemas]
  1. 如果文档的有效 验证 profile与一个或多个 schema 关联,则有效验证 schema集合是这些关联 schema 的适当子集, 基于文档处理 上下文的要求确定;

  2. 否则,有效 验证 schema为由 文档处理 上下文选择的默认 schema 集合。

注:

什么构成适当的 schema 集合的确定并未由本规范正式定义;然而, 预期选择过程会使用:(1) 实现可用并支持的 schema 类型,以及 (2) 作为启发式,由 有效验证 profile确定的与 required 或 optional 特性关联的最高版本号。

[validate document]
  1. 如果验证被更高 层协议禁用, 或者ttp:validation 参数的计算值为 prohibited, 则退出此过程,除非最终用户或应用覆盖此 禁止;

  2. 如果ttp:validation 参数的计算值为 optional,并且 文档处理上下文 确定不执行可选验证, 则退出此过程;

  3. 否则,使用有效 验证 schema以及按需使用其他 验证工具,对文档一致性进行验证,使得

执行验证处理时, 适用以下语义:

  • 如果输入文档采用具体 XML 表示的形式,例如 附录 A 具体编码定义的具体形式, 则验证

    • 输入文档的编码字符按照文档解析出的字符编码是格式良好的;并且

    • 输入文档是格式良好的 XML 文档;并且

  • 验证输入文档相对于有效验证 schema是有效的; 并且

  • 验证输入文档遵守本规范定义且未由有效验证 schema直接表达的所有其他语法和语义 约束。

如果上述任一验证步骤检测到相对于规定(must)或禁止(must not)的 不一致状态,则适用 validation error 条件。如果上述任一验证步骤检测到相对于建议(should)或不建议 (should not)的不一致状态,则适用 validation warning 条件。

注:

由于有效验证 schema的确定 依赖于实现, 并且不要求有效验证 schema检测 每一种可能的validation error,因此执行 [validate document] 过程不一定会产生 validation exception;在这种情况下, 验证处理的结果 可被视为假阳性

例如,内容 profile可以通过 ttp:featurettp:extension 元素的 value 属性的 prohibited 值,禁止使用某个特性;但是, [validate document] 过程的某个特定实现可能无法在 文档实例中检测到这种被禁止的使用, 因而产生假阳性验证结果。

由于这些限制,[validate document] 过程的规范语言以是否检测到潜在的validation errorvalidation warning为前提,但并不强制检测所有可能的 validation errorvalidation warning

有关假阳性的更多信息,另见4.1 TTML 内容 文档类型下的第一条注。

5.4 目录

定时文本标记语言(TTML)的词汇 定义在以下主要目录(词汇划分)中:

核心目录定义 TTML 的基线核心词汇, 特别是 TTML 内容的词汇。扩展目录 作为 TTML 定义的核心词汇扩展的占位符。

5.4.1 核心目录

核心词汇目录旨在满足 TTML 的需要,同时为未来 profile 提供基线词汇。该词汇 划分为不同类别,并在以下章节中 详细指定:

文档 实例使用而指定的核心元素词汇枚举于 表 5-3 – 元素词汇

表 5-3 – 元素词汇
模块 元素
动画 animate, animation, set
音频 audio
内容 body, br, div, p, span
数据 chunk, data, resources, source
文档 tt
字体 font
头部 head
图像 image
布局 layout, region
元数据 metadata
元数据项 ttm:actor, ttm:agent, ttm:copyright, ttm:desc, ttm:item, ttm:name, ttm:title
Profile ttp:features, ttp:feature, ttp:extensions, ttp:extension, ttp:profile
样式 initial, styling, style

用于定义 TTML 元素类型内容模型的元素词汇组 枚举于 表 5-4 – 元素词汇组

表 5-4 – 元素词汇组
元素
Animation.class animate | set
Block.class div | p
Data.class data
Embedded.class audio, image
Font.class font
Inline.class span | br | #PCDATA
Layout.class region
Metadata.class metadata | ttm:agent | ttm:copyright | ttm:desc | ttm:item | ttm:title
Profile.class ttp:profile

为与核心词汇目录一起使用而指定的属性词汇 枚举于 表 5-5 – 属性词汇

表 5-5 – 属性词汇
模块 属性
动画绑定属性 animate
条件化属性 condition
核心属性 xml:base, xml:id, xml:lang, xml:space
数据属性 encoding, format, src, type
布局绑定属性 region
链接属性 xlink:arcrole, xlink:href, xlink:role, xlink:show, xlink:title
元数据属性 ttm:agent, ttm:role
参数属性 ttp:cellResolution, ttp:clockMode, ttp:displayAspectRatio, ttp:dropMode, ttp:frameRate, ttp:frameRateMultiplier, ttp:markerMode, ttp:pixelAspectRatio, ttp:subFrameRate, ttp:tickRate, ttp:timeBase,
Profile 属性 ttp:contentProfiles, ttp:contentProfileCombination, ttp:inferProcessorProfileMethod, ttp:inferProcessorProfileSource, ttp:permitFeatureNarrowing, ttp:permitFeatureWidening, ttp:processorProfiles, ttp:processorProfileCombination, ttp:profile, ttp:validation, ttp:validationAction
样式绑定属性 style
样式属性 tts:backgroundClip, tts:backgroundColor, tts:backgroundExtent, tts:backgroundImage, tts:backgroundOrigin, tts:backgroundPosition, tts:backgroundRepeat, tts:border, tts:bpd, tts:color, tts:direction, tts:disparity, tts:display, tts:displayAlign, tts:extent, tts:fontFamily, tts:fontKerning, tts:fontSelectionStrategy, tts:fontShear, tts:fontSize, tts:fontStyle, tts:fontVariant, tts:fontWeight, tts:ipd, tts:letterSpacing, tts:lineHeight, tts:lineShear, tts:luminanceGain, tts:opacity, tts:origin, tts:overflow, tts:padding, tts:position, tts:ruby, tts:rubyAlign, tts:rubyPosition, tts:rubyReserve, tts:shear, tts:showBackground, tts:textAlign, tts:textCombine, tts:textDecoration, tts:textEmphasis, tts:textOrientation, tts:textOutline, tts:textShadow, tts:unicodeBidi, tts:visibility, tts:wrapOption, tts:writingMode, tts:zIndex
计时属性 begin, dur, end, timeContainer

注:

上面表 5-5 – 属性 词汇中仅列出被定义为以下任一类的属性:(1) 全局属性,即命名空间限定属性,或 (2) 共享的元素特定属性,即未以命名空间限定但跨多个 元素类型共享的属性。

注:

TTML 定义的所有词汇一致地使用 所谓 lowerCamelCase 命名约定。在某些情况下,当名称基于另一份使用不同命名约定的规范时, 这会导致名称发生改变。

5.4.2 扩展目录

扩展词汇目录旨在供 TTML 的未来 profile 使用,本版本 TTML 不再进一步定义它。

除标准化扩展词汇之外,一致性 文档实例可以包含任意命名空间 限定元素,只要这些元素位于本规范定义用于使用的命名空间之外的任意命名空间中。 此外,一致性 文档实例可以在 TTML 定义的词汇上包含任意命名空间 限定属性,只要这些属性位于 本规范定义用于使用的命名空间之外的任意命名空间中。

6 Profile

本节规定核心词汇目录中的 profile 事项,其中 profile 事项应理解为表达与创作或处理 定时文本内容文档相关要求或可选性的信息。

6.1 Profile 元素词汇

以下元素均定义于 TT 参数命名空间中,用于指定适用于文档实例内容处理器的参数信息:

注:

本节的小节按逻辑顺序排列(从最高层构造到最低层构造)。

6.1.1 ttp:profile

ttp:profile 元素用于指定 内容 profile处理器 profile处理器 profile指定一组必需(强制)和可选(自愿)的特性与扩展, 内容处理器必须或可以支持这些特性与扩展,以便处理 使用(或可能使用)此类特性和 扩展的文档实例内容 profile指定一组被禁止、必需和可选的特性与扩展, 它们分别不得、必须和可以出现在声明遵守该 profile 的 文档实例中。

注:

featureextension 的区别在于其定义位置及其标记方式: 如果定义在本规范(或其未来修订版)中,并在 E 特性中以特性指示来标记, 则它被视为特性;如果定义在另一份规范中, 并在那里以扩展指示来标记,则它被视为扩展。 一般而言,特性预期由 W3C 标准流程定义, 而扩展预期由第三方定义。

本规范为 ttp:profile 元素定义了两个不同的使用上下文:

ttp:profile 元素出现在 TTML 文档实例中时, 其目的是表达作者意图,即 (1) 接收方内容处理器为了处理该文档,必须或可以支持哪些 特性和扩展;或 (2) 哪些特性和扩展不得、必须或可以 包含在该文档实例中或以其他方式由其使用。

ttp:profile 元素由 TTML profile 定义文档实例使用时, 它用于发布某个特定 TTML profile 的机器可读规范,TTML 文档实例可以引用该规范。 本规范在 G 标准 Profile中定义了若干标准Profile 定义文档

ttp:profile 元素接受零个或多个 Metadata.class 元素组中的元素作为子级, 后接 (1) 零个或多个 ttp:features 元素,再后接 零个或多个 ttp:extensions 元素,或 (2) 零个或多个 ttp:profile 元素。 当 ttp:profile 元素包含子 ttp:profile 元素时, 该子级称为 嵌套 profile,父级称为 嵌套型 profile; 否则称为非嵌套型 profile

XML 表示 – 元素信息项:ttp:profile
<ttp:profile
  combine = ("leastRestrictive" | "mostRestrictive" | "replace") : replace
  designator = xsd:string
  type = ("processor" | "content") : processor
  use = xsd:string
  xml:base = <uri>
  xml:id = ID
  Content: Metadata.class*, ((ttp:features*, ttp:extensions*)|ttp:profile*)
</ttp:profile>

type 属性用于确定 profile 是 内容 profile还是 处理器 profile。如果未指定, 则该 profile 被视为处理器 profile。 如果 ttp:profile 元素引用基线 profile嵌套 profile,则被引用 profile 的类型必须 与引用它的 profile 类型相同。例如,定义处理器 profilettp:profile 元素 只能引用其他 处理器 profile,不得引用内容 profile

combine 属性用于指定当多个规范分别适用于同一个特性或扩展时, 如何组合特性或扩展规范。

如果 combine 属性的值为 replace,则 词法上后出现的特性或扩展规范替换词法上先出现的 规范,其中规范元素按如下顺序排列:

  1. use 属性引用的基线 profile 定义的规范;

  2. 由后序遍历顺序中的后代 ttp:profile 元素定义的规范;

  3. 由后序遍历顺序中的后代 ttp:featurettp:extension 元素定义的规范。

如果值为 leastRestrictive,则适用限制性最小的规范值; 如果值为 mostRestrictive,则适用限制性最大的规范值。 限制性顺序如下(从最小到最大): optionalrequiredprohibited

如果未指定 combine 属性,则适用替换语义。

如果指定,designator 属性必须遵守 <absolute-profile-designator> 值语法。 designator 属性可以 指定在出现在 TTML 文档实例中的 ttp:profile 元素上; 如果未指定,则所定义的 profile 被视为未指示 profile。 designator 属性应 指定在出现在 TTML profile 定义文档实例中的 ttp:profile 元素上; 如果未指定,则定义上下文(例如外部规范)必须在其随附定义文本中指定 一个指示符。

如果指定,use 属性必须遵守 <uri> 值语法,并且还必须按照 5.2 Profiling指示一个 profile 指示符。在这种情况下, profile 指示符必须引用 (1) 由 6 Profile定义的标准预定义 profile 定义文档, 或 (2) 表示有效Profile 定义文档实例且可行地解引用的资源。 在任一情况下,被引用 profile 都作为指定它的 ttp:profile 元素的 基线 profile

如果未指定 use 属性,则 ttp:profile 元素的基线 profile 必须被视为空(null)profile,即不包含任何 特性或扩展规范的未指示 profile 定义。

profile P 的特性和扩展的组合 profile 规范集 CPSS 按以下有序规则确定,其中将规范 S 合并到 CPSS 中,意味着按照 combine 属性的指定值 (或默认值)应用组合方法;而将组合 规范集 CPSS'  合并到 CPSS 中,意味着将 CPSS'  的每个有序规范合并到 CPSS 中:

  1. CPSS 初始化为空集;

  2. 如果存在 use 属性,则将被引用基线 profile的组合规范集合并到 CPSS 中;

  3. 对于 P 的每个 ttp:profile 子级, 使用后序遍历,将该子 profile 的组合规范集合并到 CPSS 中;

  4. 对于 ttp:profile 元素的每个 ttp:featurettp:extension 子级, 使用后序遍历,将特性或扩展规范 合并到 CPSS 中。

一致性 TTML 处理器不要求能够 解引用不是G 标准 Profile所定义的标准预定义 profile 之一的 profile 定义文档。此外, 一致性 TTML 处理器可以使用每个标准预定义 profile 的内置静态 形式,从而不要求 解引用网络资源。

如果 TTML 处理器无法解引用非标准 profile 定义文档,则在没有最终用户显式覆盖 或某个可追溯到最终用户或 用户/系统配置设置的实现特定参数存在的情况下,它不得继续处理该 文档。如果 TTML 处理器因无法引用非标准profile 定义 文档而中止 文档实例的处理,则应给出某种 最终用户通知,除非最终用户或系统 已禁用此类通知,或处理器不允许 或不涉及最终用户干预。

一致性 TTML 处理器不要求能够支持组合 profile嵌套型 profile。如果 (1) 不支持组合 profile,并且对 profile的处理 将导致它被视为组合 profile,或 (2) 不支持嵌套型 profile,并且对 profile的处理 将导致它被视为嵌套型 profile, 则在没有最终用户显式覆盖 或某个可追溯到最终用户或用户/系统配置设置的实现特定参数存在的情况下,不得继续处理该 profile。如果 TTML 处理器因缺少对 组合 profile嵌套型 profile的支持而中止 文档实例的处理, 则应给出某种最终用户通知,除非最终用户或系统已禁用此类 通知, 或处理器不允许或不涉及最终用户干预。

注:

如果文档实例不要求支持 组合 profile,则它不应使用:

注:

如果文档实例不要求支持 嵌套型 profile,则它不应使用嵌套 profile

以下示例说明 ttp:profile 元素。

示例片段 – ttp:profile
<ttp:profile use="ttml2-presentation">
  <ttp:features xml:base="http://www.w3.org/ns/ttml/feature/">
    <ttp:feature>#text-outline</ttp:feature>
  </ttp:features>
</ttp:profile>

注:

在上面的示例中,TTML2 呈现 profile 被用作 基线 profile。随后通过要求支持 #text-outline 特性,对该基线 profile 进行超集化 (从而创建一个 additive 派生 profile)。

6.1.2 ttp:features

ttp:features 元素是一个容器元素,用于对 关于特性支持和使用要求的信息进行分组。

ttp:features 元素接受零个或多个 Metadata.class 元素组中的元素作为子级, 后接 零个或多个 ttp:feature 元素。

XML 表示 – 元素信息项:ttp:features
<ttp:features
  xml:base = <uri> : TT Feature Namespace
  xml:id = ID
  Content: Metadata.class*, ttp:feature*
</ttp:features>

如果指定,xml:base 属性必须 (1) 遵守 <uri> 值语法,(2) 表达遵守 [XML Base] 的绝对 URI,并且 (3) 表达由 E.1 特性指示定义的特性命名空间。 如果未指定,则适用 xml:base 属性的默认 值,即 TT Feature 命名空间。

xml:base 属性用于允许缩写由子 ttp:feature 元素表达的特性指示 URI。

6.1.3 ttp:feature

ttp:feature 元素用于指定 关于特定特性的支持和使用要求的信息。

XML 表示 – 元素信息项:ttp:feature
<ttp:feature
  extends = xsd:string
  restricts = xsd:string
  value = ("optional" | "required" | "use" | "prohibited") : 见下文说明
  xml:id = ID
  Content: #PCDATA
</ttp:feature>

ttp:feature 元素的子级必须表达一个非空的 字符信息项序列,其串接结果遵守 <uri> 值语法。

如果指定,extends 属性和/或 restricts 属性必须 (1) 遵守 <uri> 值语法,并且 (2) 表达由 E.1 特性指示定义的特性指示。

extends 属性可用于表明正在定义的特性 从语法或(和)语义角度来看,是 extends 属性所引用特性的真超集。 restricts 属性可用于表明正在定义的特性 从语法或(和)语义角度来看,是 restricts 属性所引用特性的真子集。 如果指定了 extends 属性,则不得在 ttp:feature 元素上 指定 restricts 属性;同样,如果指定了 restricts 属性,则不得指定 extends 属性。

如果由 (1) ttp:feature 元素内容、 (2) extends 属性,或 (3) restricts 属性表达的 URI 是相对 URI,则与最近祖先 ttp:features 元素的 xml:base 属性所表达的 特性命名空间值组合时,它必须表达一个 绝对 URI。在任一情况下(原始绝对 URI 或得到的 绝对化 URI),ttp:feature 元素所表达的 URI 还必须遵守 E.1 特性指示所定义的特性指示语法,并且 此外, 此 URI 中出现的具体指示,即特性指示中从片段标识符分隔符 “#” 开始的部分, 必须由本规范或其某个已发布版本(且已达到 REC 状态)定义。

如果由 ttp:feature 元素内容、 extends 属性或 restricts 属性表达的 URI 是相对 URI,则应在最近祖先 ttp:features 元素上指定 xml:base 属性。

value 属性根据 profile 类型指定对所指示特性的支持或使用 约束。

如果该 profile 是处理器 profile, 则适用以下语义:

  • 如果 value 属性的值 为 optional,则处理器可以但不需要 实现或以其他方式支持该特性以处理文档;

  • 如果值为 required,则执行以下步骤:

    1. 如果处理器实现或以其他方式支持该特性,则继续处理 文档;

    2. 否则,如果 (1) 此 ttp:feature 元素上指定了 extends 属性, (2) extends 属性的值指示一个由 处理器实现或以其他方式支持的特性,并且 (3) 根 tt 元素的 ttp:permitFeatureNarrowing 属性的计算值不是 false, 则继续处理文档;

    3. 否则,如果 (1) 此 ttp:feature 元素上指定了 restricts 属性, (2) restricts 属性的值指示一个由 处理器实现或以其他方式支持的特性,并且 (3) 根 tt 元素的 ttp:permitFeatureWidening 属性的计算值不是 false, 则继续处理文档;

    4. 否则,中止处理文档,除非被最终用户或 某个实现特定参数覆盖,且该参数可追溯到最终用户或用户/系统配置设置。

  • 如果未指定 value 属性,则必须将该特性规范 解释为已指定值 required

如果该 profile 是内容 profile, 则适用以下语义:

  • 如果 value 属性的值 为 optional,则该特性可以但不需要出现在 声称符合该 profile 的文档中;

  • 如果 value 属性的值 为 required,则该特性必须出现在 声称符合该 profile 的文档中;

  • 如果 value 属性的值 为 prohibited,则该特性不得出现在 声称符合该 profile 的文档中;

  • 如果未指定 value 属性,则必须将该特性规范 解释为已指定值 optional

value 属性的值 use 已废弃。如果它 出现在 profile 规范中,则必须将其解释为已指定 required

如果某个已定义(即标准化)或以其他方式众所周知的特性未由 内容 profile 中的 ttp:feature 元素指定,则必须将其解释为该特性 已以 value 属性等于 optional 的方式指定。 但是,如果未在处理器 profile 中指定,则不隐含 关于支持或不支持该特性的任何声明。

注:

特别是,如果某个特性未出现在内容 profile 定义中, 则不应将其解释为表示该特性(在文档实例中)的使用 不被允许或以其他方式被禁止。如果内容 profile 旨在禁止某个特性, 则应使用 prohibited 值指定它。

如果文档实例使用了 E.1 特性指示定义的特性,并且该文档的预期使用 要求识别和处理该特性,则 该文档必须在其声明或引用的 profile 之一中包含一个 required 特性规范。

以下示例说明 ttp:feature 元素。

示例片段 – ttp:feature
<ttp:profile use="http://www.w3.org/ns/ttml/profile/ttml2-presentation">
  <ttp:features xml:base="http://www.w3.org/ns/ttml/feature/">
    <ttp:feature value="required">#fontStyle-italic</ttp:feature>
    <ttp:feature value="required">#textDecoration-under</ttp:feature>
    <ttp:feature value="prohibited">#textOutline-blurred</ttp:feature>
  </ttp:features>
</ttp:profile>

注:

在上面的示例中,TTML 呈现 profile 被用作 基线 profile。随后通过三个 ttp:feature 元素修改该基线 profile,以便 (1) 对基线 profile 进行超集化(因为 #fontStyle-italic#textDecoration-under 均不是 TTML 呈现 profile 所要求的),并且 (2) 禁止使用 #textOutline-blurred 特性 (该特性在 TTML 呈现 profile 中是可选的)。

此示例的效果是表达作者意图: 必须支持斜体字体样式和文本下划线, 并且文档不得使用文本轮廓模糊。

6.1.4 ttp:extensions

ttp:extensions 元素是一个容器元素,用于对 关于扩展支持和使用要求的信息进行分组。

ttp:extensions 元素接受零个或多个 Metadata.class 元素组中的元素作为子级, 后接 零个或多个 ttp:extension 元素。

XML 表示 – 元素信息项:ttp:extensions
<ttp:extensions
  xml:base = <uri> : TT Extension Namespace
  xml:id = ID
  Content: Metadata.class*, ttp:extension*
</ttp:extensions>

如果指定,xml:base 属性必须 (1) 遵守 <uri> 值语法,(2) 表达遵守 [XML Base] 的绝对 URI,并且 (3) 表达由 F.1 扩展指示定义的扩展命名空间。 如果未指定,则适用 xml:base 属性的默认 值,即 TT Extension 命名空间。

xml:base 属性用于允许缩写由子 ttp:extension 元素表达的特性指示 URI。

6.1.5 ttp:extension

ttp:extension 元素用于指定 关于特定扩展的支持和使用要求的信息。

XML 表示 – 元素信息项:ttp:extension
<ttp:extension
  extends = xsd:string
  restricts = xsd:string
  value = ("optional" | "required" | "use" | "prohibited") : 见下文说明
  xml:id = ID
  Content: #PCDATA
</ttp:extension>

ttp:extension 元素的子级必须表达一个非空的 字符信息项序列,其串接结果遵守 <uri> 值语法。

如果指定,extends 属性和/或 restricts 属性必须 (1) 遵守 <uri> 值语法,并且 (2) 分别表达由 E.1 特性指示F.1 扩展指示定义的特性指示或扩展指示。

extends 属性可用于表明正在定义的扩展 从语法或(和)语义角度来看,是 extends 属性所引用的特性或扩展的真超集。 restricts 属性可用于表明正在定义的扩展 从语法或(和)语义角度来看,是 restricts 属性所引用的特性或扩展的真子集。 如果指定了 extends 属性,则不得在 ttp:extension 元素上 指定 restricts 属性;同样,如果指定了 restricts 属性,则不得指定 extends 属性。

如果由 (1) ttp:extension 元素内容、 (2) extends 属性,或 (3) restricts 属性表达的 URI 是相对 URI,则与最近祖先 ttp:extensions 元素的 xml:base 属性所表达的 扩展命名空间值组合时,它必须表达一个 绝对 URI。在任一情况下(原始绝对 URI 或得到的 绝对化 URI),ttp:extension 元素所表达的 URI 还必须遵守 F.1 扩展指示所定义的扩展指示语法, 而 extends 属性和/或 restricts 属性所表达的 URI 必须遵守 E.1 特性 指示F.1 扩展指示分别定义的特性指示 或扩展指示语法。

如果由 ttp:extension 元素内容、 extends 属性或 restricts 属性表达的 URI 是相对 URI,则应在最近祖先 ttp:extensions 元素上指定 xml:base 属性。

value 属性根据 profile 类型指定对所指示扩展的支持或使用 约束。

如果该 profile 是处理器 profile, 则适用以下语义:

  • 如果 value 属性的值 为 optional,则处理器可以但不需要 实现或以其他方式支持该扩展以处理文档;

  • 如果值为 required,则执行以下步骤:

    1. 如果处理器实现或以其他方式支持该扩展,则继续处理 文档;

    2. 否则,如果 (1) 此 ttp:extension 元素上指定了 extends 属性, (2) extends 属性的值指示一个由 处理器实现或以其他方式支持的扩展,并且 (3) 根 tt 元素的 ttp:permitFeatureNarrowing 属性的计算值不是 false, 则继续处理文档;

    3. 否则,如果 (1) 此 ttp:extension 元素上指定了 restricts 属性, (2) restricts 属性的值指示一个由 处理器实现或以其他方式支持的扩展,并且 (3) 根 tt 元素的 ttp:permitFeatureWidening 属性的计算值不是 false, 则继续处理文档;

    4. 否则,中止处理文档,除非被最终用户或 某个实现特定参数覆盖,且该参数可追溯到最终用户或用户/系统配置设置。

  • 如果未指定 value 属性,则必须将该扩展规范 解释为已指定值 required

如果该 profile 是内容 profile, 则适用以下语义:

  • 如果 value 属性的值 为 optional,则该扩展可以但不需要出现在 声称符合该 profile 的文档中;

  • 如果 value 属性的值 为 required,则该扩展必须出现在 声称符合该 profile 的文档中;

  • 如果 value 属性的值 为 prohibited,则该扩展不得出现在 声称符合该 profile 的文档中;

  • 如果未指定 value 属性,则必须将该扩展规范 解释为已指定值 optional

value 属性的值 use 已废弃。如果它 出现在 profile 规范中,则必须将其解释为已指定 required

如果某个众所周知的扩展未由 内容 profile 中的 ttp:extension 元素指定,则必须将其解释为该扩展 已以 value 属性等于 optional 的方式指定。 但是,如果未在处理器 profile 中指定,则不隐含 关于支持或不支持该扩展的任何声明。

注:

特别是,如果某个扩展未出现在内容 profile 定义中, 则不应将其解释为表示该扩展(在文档实例中)的使用 不被允许或以其他方式被禁止。如果内容 profile 旨在禁止某个扩展, 则应使用 prohibited 值指定它。

如果文档实例使用了 可由 F.1 扩展 指示指示的扩展,并且该文档的预期使用 要求识别和处理该扩展,则 文档必须在其声明或引用的 profile 之一中包含一个 required 扩展规范。

以下示例说明 ttp:extension 元素。

示例片段 – ttp:extension
<ttp:profile use="http://www.w3.org/ns/ttml/profile/ttml2-transformation">
  <ttp:extensions xml:base="http://example.org/ttml/extension/">
    <ttp:extension value="use">#prefilter-by-language</ttp:extension>
  </ttp:extensions>
</ttp:profile>

注:

在上面的示例中,TTML 转换 profile 被用作 基线 profile。随后通过指定必须支持和使用 在第三方命名空间中定义的私有扩展,对该基线 profile 进行超集化。

此示例的效果是表达作者意图: 接收方处理器必须支持 TTML 转换 profile,并且 还必须支持并启用第三方定义的扩展。

6.2 Profile 属性词汇

以下属性定义于 TT 参数命名空间中。

6.2.1 ttp:contentProfiles

ttp:contentProfiles 属性可由内容作者用于表达 定时文本标记语言(TTML)的一个或多个 内容 profile,其中 包围文档实例声称符合一组指定 内容 profile中的全部

如果指定,此属性的值必须遵守以下语法, 其中每个 profile-designator 项遵守 <uri> 值语法,并且 还按照 5.2 Profiling 遵守对 profile 指示符定义的约束。

语法表示 – ttp:contentProfiles
ttp:contentProfiles
  : designators
  | "all(" <lwsp> designators <lwsp> ")"

designators
  : designator (<lwsp> designator)*

designator
  : <profile-designator>

如果指示符列表被包含在函数语法 all(...) 中,或未使用 函数语法, 则声称符合所有被指示的内容 profile

如果指定了多个指示符,则每个指示符的绝对化形式必须 互不相同;也就是说, 转换为绝对化形式后,不允许重复指示符。

ttp:contentProfiles 属性仅在指定于 tt 元素上时才被视为有意义。

6.2.2 ttp:contentProfileCombination

ttp:contentProfileCombination 属性用于指定 组合多个内容 profile的方法。

如果指定,此属性的值必须遵守以下语法:

语法表示 – ttp:contentProfileCombination
ttp:contentProfileCombination
  : "leastRestrictive"
  | "mostRestrictive"
  | "replace"
  | "ignore"

如果未指定,则此参数的值必须被视为 ignore

给定两个有序 profile 规范值 arg1arg2,以及内容 profile 组合方法, 表 6-1 – 内容 Profile 组合 指定组合两个规范值的结果,其中参数顺序 根据文档实例内容 profile的词法顺序确定。

表 6-1 – 内容 Profile 组合
arg1 arg2 leastRestrictive mostRestrictive replace ignore
optional optional optional optional optional optional
optional required optional required required optional
optional prohibited optional prohibited prohibited optional
required optional optional required optional required
required required required required required required
required prohibited required prohibited prohibited required
prohibited optional optional prohibited optional prohibited
prohibited required required prohibited required prohibited
prohibited prohibited prohibited prohibited prohibited prohibited

ttp:contentProfileCombination 属性仅在指定于 tt 元素上时才被视为有意义。

6.2.3 ttp:inferProcessorProfileMethod

ttp:inferProcessorProfileMethod 属性用于指定 将内容 profile 规范值映射到对应处理器 profile 规范值的方法。

如果指定,此属性的值必须遵守以下语法:

语法表示 – ttp:inferProcessorProfileMethod
ttp:inferProcessorProfileMethod
  : "loose"
  | "strict"

如果此参数的值为 loose,则在从内容 profile 规范 推断处理器 profile 规范时, 适用宽松(自由)映射。

如果此参数的值为 strict,则在从内容 profile 规范 推断处理器 profile 规范时, 适用严格(保守)映射。

如果未指定,则此参数的值必须被视为 loose

给定输入内容 profile 规范值 input 和推断处理器 profile 方法, 表 6-2 – 推断处理器 Profile 方法指定映射该输入规范值的结果。

表 6-2 – 推断处理器 Profile 方法
input loose strict
optional optional required
required required required
prohibited optional optional

ttp:inferProcessorProfileMethod 属性仅在指定于 tt 元素上时才被视为有意义。

6.2.4 ttp:inferProcessorProfileSource

ttp:inferProcessorProfileSource 属性用于指定 将内容 profile 规范值映射到对应处理器 profile 规范值时所使用的来源。

如果指定,此属性的值必须遵守以下语法:

语法表示 – ttp:inferProcessorProfileSource
ttp:inferProcessorProfileSource
  : "combined"
  | "first"

如果此参数的值为 combined,则在推断处理器 profile 时, 有效内容 profile的组合 profile 规范 集用作推断来源。

如果此参数的值为 first,则在推断处理器 profile 时, 使用有效内容 profile的组合 profile 规范集中的第一个组成 profile 作为推断来源,其中由该组成 profile 推断出的处理器 profile 由 内容处理器支持; 相关进一步细节见 construct inferred processor profile 过程。

如果未指定,则此参数的值必须被视为 first

ttp:inferProcessorProfileSource 属性仅在指定于 tt 元素上时才被视为有意义。

6.2.5 ttp:permitFeatureNarrowing

ttp:permitFeatureNarrowing 属性用于指定 与特性或扩展相关的要求是否可以通过对该特性或扩展的 (语法上或语义上)更窄解释 来满足。

如果指定,此属性的值必须遵守以下语法:

语法表示 – ttp:permitFeatureNarrowing
ttp:permitFeatureNarrowing
  : xsd:boolean                             // see [XML Schema Part 2], §3.2.2

如果此参数的值为 true,则当特性或 扩展的定义指定了 extends 属性,并且 处理器支持该属性引用的特性或扩展时, 可以满足对该特性或扩展支持的要求。

如果此参数的值为 false,则对特性或 扩展支持的要求,不能由 extends 属性指定的 定义更窄的特性或扩展来满足。

如果未指定,则此参数的值必须被视为 false

ttp:permitFeatureNarrowing 属性仅在指定于 tt 元素上时才被视为有意义。

6.2.6 ttp:permitFeatureWidening

ttp:permitFeatureWidening 属性用于指定 与特性或扩展相关的要求是否可以通过对该特性或扩展的 (语法上或语义上)更宽解释 来满足。

如果指定,此属性的值必须遵守以下语法:

语法表示 – ttp:permitFeatureWidening
ttp:permitFeatureWidening
  : xsd:boolean                             // see [XML Schema Part 2], §3.2.2

如果此参数的值为 true,则当特性或 扩展的定义指定了 restricts 属性,并且 处理器支持该属性引用的特性或扩展时, 可以满足对该特性或扩展支持的要求。

如果此参数的值为 false,则对特性或 扩展支持的要求,不能由 restricts 属性指定的 定义更宽的特性或扩展来满足。

如果未指定,则此参数的值必须被视为 false

ttp:permitFeatureWidening 属性仅在指定于 tt 元素上时才被视为有意义。

6.2.7 ttp:profile

ttp:profile 属性 指示定时文本标记语言(TTML)的处理器 profile, 该 profile 在处理文档实例时适用。

注:

如果作者希望指定一组处理器 profile 中的一个或多个适用, 而不是单个处理器 profile,则建议内容作者使用 6.2.8 ttp:processorProfiles所指定的 ttp:processorProfiles

注:

有关发出内容 profile 信号的信息,参见 6.2.1 ttp:contentProfiles

如果指定,此属性的值必须遵守以下语法, 其中 designator 遵守 <uri> 值语法,并且还必须按照 5.2 Profiling 指定 profile 指示符。

语法表示 – ttp:profile
ttp:profile
  : designator

designator
  : <profile-designator>

ttp:profile 属性仅在指定于 tt 元素上时才被视为有意义。

如果在文档实例中定义了顶级 处理器 profile,则不应在 tt 元素上 指定 ttp:profile 属性。

注:

关于当一个或多个机制为处理文档时的(可能)使用指示一个或多个 profile 时,如何确定 有效处理器 profile的信息, 参见 5.2.4 Profile 语义

6.2.8 ttp:processorProfiles

ttp:processorProfiles 属性可由内容作者用于表达 定时文本标记语言(TTML)的一个或多个 处理器 profile,其中 包围文档实例要求支持 (1) 一组指定 处理器 profile中的全部,或 (2) 一组 指定处理器 profile中的任意一个。

如果指定,此属性的值必须遵守以下语法, 其中每个 profile-designator 项遵守 <uri> 值语法,并且 还按照 5.2 Profiling 遵守对 profile 指示符定义的约束。

语法表示 – ttp:processorProfiles
ttp:processorProfiles
  : designators
  | "all(" <lwsp> designators <lwsp> ")"
  | "any(" <lwsp> designators <lwsp> ")"

designators
  : designator (<lwsp> designator)*

designator
  : <profile-designator>

如果指示符列表被包含在函数语法 all(...) 中,或未使用 函数语法, 则要求支持所有被指示的处理器 profile。如果指示符列表 被包含在函数语法 any(...) 中,则要求支持 被指示处理器 profile中的至少一个。

如果指定了多个指示符,则每个指示符的绝对化形式必须 互不相同;也就是说, 转换为绝对化形式后,不允许重复指示符。

ttp:processorProfiles 属性仅在指定于 tt 元素上时才被视为有意义。

6.2.9 ttp:processorProfileCombination

ttp:processorProfileCombination 属性用于指定 组合多个处理器 profile的方法。

如果指定,此属性的值必须遵守以下语法:

语法表示 – ttp:processorProfileCombination
ttp:processorProfileCombination
  : "leastRestrictive"
  | "mostRestrictive"
  | "replace"
  | "ignore"

如果未指定,则此参数的值必须被视为 ignore

给定两个有序 profile 规范值 arg1arg2,以及处理器 profile 组合方法, 表 6-3 – 处理器 Profile 组合指定组合两个规范值的结果, 其中参数顺序 根据文档实例处理器 profile的词法顺序确定。

表 6-3 – 处理器 Profile 组合
arg1 arg2 leastRestrictive mostRestrictive replace ignore
optional optional optional optional optional optional
optional required optional required required optional
required optional optional required optional required
required required required required required required

ttp:processorProfileCombination 属性仅在指定于 tt 元素上时才被视为有意义。

6.2.10 ttp:validation

ttp:validation 属性用于指定验证型内容处理器 是否可以或必须对文档实例执行 验证处理

如果指定,此属性的值必须遵守以下语法:

语法表示 – ttp:validation
ttp:validation
  : "required"
  | "optional"
  | "prohibited"

如果此参数的值为 required,则 验证型内容处理器 必须在执行其他类型的处理之前,对 TTML 文档实例执行验证处理, 例如呈现或转换处理。

如果此参数的值为 optional,则 验证型内容处理器 可以但不需要在执行其他类型的处理之前,对 TTML 文档实例执行验证处理, 例如呈现或转换处理。

如果此参数的值为 prohibited,则 验证型内容处理器 不得在执行其他类型的处理之前,对 TTML 文档实例执行验证处理, 例如呈现或转换处理,除非最终用户 或应用覆盖此禁止。

如果对 TTML 文档实例执行了验证处理且验证失败,则 ttp:validationAction 属性的计算值用于确定在 执行进一步处理之前要采取的操作。

如果未指定,则此参数的值必须被视为 optional

ttp:validation 属性仅在指定于 tt 元素上时才被视为有意义。

6.2.11 ttp:validationAction

ttp:validationAction 属性用于指定当 文档实例验证失败时, 验证型内容处理器应采取什么操作。

如果指定,此属性的值必须遵守以下语法:

语法表示 – ttp:validationAction
ttp:validationAction
  : "abort"
  | "warn"
  | "ignore"

如果此参数的值为 abort,则除非中止处理被 最终用户或应用覆盖, 验证型内容处理器 必须在发生validation error 异常时, 中止对 TTML 文档实例的处理。

如果此参数的值为 warn,则 验证型内容处理器 应在发生validation errorvalidation warning 异常时 警告最终用户, 并给予最终用户继续或中止处理的选项。

如果此参数的值为 ignore,则 验证型内容处理器 在发生validation exception 时不应中止,也不应警告最终用户。

如果未指定,则此参数的值按如下方式确定: 如果 ttp:validation 属性的计算值为 required, 则该值必须被视为 abort; 如果为 optional, 则该值必须被视为 warn; 否则,如果为 prohibited, 则该值必须被视为 ignore

ttp:validationAction 属性仅在指定于 tt 元素上时才被视为有意义。

7 参数

本节规定核心词汇目录中的 parameter 事项,其中 参数应理解为如下信息:(1) 基本信息,或 (2) 对于 解释由核心词汇项表达的其他类型信息的语义,或对于建立文档 处理上下文而言具有重要意义的信息;通过该上下文, TTML 内容可以与外部环境相关联。

7.1 参数元素词汇

本规范未定义参数元素词汇。

7.2 参数属性词汇

以下属性定义于 TT 参数命名空间中。

7.2.1 ttp:cellResolution

ttp:cellResolution 属性可由作者用于 表达根容器区域的区域 被划分为多少水平和垂直单元格,以便以 统一网格的形式表达呈现语义。

如果指定,此属性的值必须遵守以下语法:

语法表示 – ttp:cellResolution
ttp:cellResolution
  : columns <lwsp> rows                     // columns != 0; rows != 0

columns | rows
  : <digit>+

如果未指定,则列数和行数必须分别被视为 32 和 15。如果指定,则列数或行数不得为零(0)。

注:

选择值 32 和 15,是因为这是 [CTA-608-E] 定义的最大列数和行数。

ttp:cellResolution 属性仅在指定于 tt 元素上时才被视为有意义。

注:

使用统一网格仅用于 度量长度和表达坐标。特别是,并不 假定文本的呈现或各个 字形区域的对齐 与此网格协调。此类对齐是可能的,但 需要使用等宽字体,并且字体大小的 EM 方框必须恰好 匹配单元格大小。

除非另有说明,当以 单元格表达的<length> 表示平行于行内或块进展维度的尺寸时, 分别适用该单元格在行内或块进展维度中的尺寸。

注:

例如,如果 padding(四条边上)指定为 0.1c,单元格分辨率 为 20 × 10,且根容器 区域的 extent 为 640 × 480,则假定采用从上到下、 从左到右的书写模式,start 和 end padding 将为 (640 / 20) * 0.1 像素,而 before 和 after padding 将为 (480 / 10) * 0.1 像素。

7.2.2 ttp:clockMode

ttp:clockMode 属性用于指定 当按照 7.2.11 ttp:timeBase所定义的 clock 时间基准运行时,将时间表达式解释为实时 时间坐标的方式。

注:

时间表达式语法和语义的规定见 12.3 时间值表达式

如果指定,此属性的值必须遵守以下语法:

语法表示 – ttp:clockMode
ttp:clockMode
  : "local"
  | "gps"
  | "utc"

如果由 7.2.11 ttp:timeBase定义的时间基准被指定为 clock,则此参数按如下方式适用:如果 参数值为 local,则时间表达式 被解释为本地挂钟时间(和日期)坐标; 如果为 utc,则时间表达式 被解释为 UTC 时间坐标 [UTC]; 如果为 gps,则时间表达式 被解释为 GPS 时间坐标 [GPS]

注:

当适用 local 时钟模式时, 时间(和日期)表达式不隐含任何特定时区。特别是,内容处理器 预期在处理发生地的本地时区中解释本地时间(和日期)表达式。 如果作者希望时间(和日期)表达式固定到特定时区,则 可以将时间(和日期) 表达式转换为 UTC,并指定使用 utc 时钟模式。

注:

GPS 时间与 UTC 时间的主要区别是:GPS 时间不针对闰秒调整,而 UTC 时间按如下方式调整: UTC = TAI(Temp Atomique International)+ 自 1972 年以来 累积的闰秒。TAI 由位于法国塞夫尔的 Bureau International des Poids et Mesures(BIPM)维护。 GPS 系统时间被调控到美国海军 天文台的主时钟(MC),该主时钟保持在与 TAI 接近但未指定的 容差范围内。

如果未指定,则此参数的值必须被视为 utc

ttp:clockMode 属性仅在指定于 tt 元素上时才被视为有意义。

7.2.3 ttp:displayAspectRatio

ttp:displayAspectRatio 属性用于指定 根容器区域显示宽高比,详见 H 根容器区域语义

如果指定,此属性的值必须遵守以下语法:

语法表示 – ttp:displayAspectRatio
ttp:displayAspectRatio
  : numerator <lwsp> denominator            // numerator != 0; denominator != 0

numerator | denominator
  : <digit>+

如果指定,则分子和分母都必须非零。如果未指定,则 根容器区域的显示宽高比由 H 根容器区域语义确定。

ttp:displayAspectRatio 属性仅在指定于 tt 元素上时才被视为有意义。

7.2.4 ttp:dropMode

ttp:dropMode 属性用于指定 对帧计数的解释和使用约束; 当按照 7.2.11 ttp:timeBase 所定义的 smpte 时间基准运行时,这些帧计数 对应于 [SMPTE ST 12-1] 时间坐标。

如果指定,此属性的值必须遵守以下语法:

语法表示 – ttp:dropMode
ttp:dropMode
  : "dropNTSC"
  | "dropPAL"
  | "nonDrop"

如果由 7.2.11 ttp:timeBase定义的时间基准被指定为 smpte,则此参数按如下方式适用:如果 参数值为 nonDrop,则在时间表达式的任意给定 秒内,帧从 0 计数到 N−1,其中 Nttp:frameRate 参数指定的值,但 忽略 ttp:frameRateMultiplier 参数指定的任何值。

注:

nonDrop 模式下运行时,时间表达式中的一秒可能等于或不等于 正常(1x 速度)向前播放期间的实时一秒。如果 指定了 ttp:frameRateMultiplier 参数且它不 等于 1:1,则时间表达式中的一秒将 短于或长于实际 时间中的一秒播放经过时间。

如果此参数的值为 dropNTSC,则在时间表达式的任意 给定秒内(秒 00 除外), 帧从 0 计数到 N−1,其中 Nttp:frameRate 参数指定的值,但 忽略 ttp:frameRateMultiplier 参数指定的任何值。如果时间 表达式中的秒为 00,且时间表达式中的分钟 不是 001020304050,则在该秒期间丢弃帧代码 0001;否则,不丢弃这些 帧代码。

注:

例如,当在 dropNTSC 模式下以 ttp:frameRate30 运行时,连续帧之间会出现帧计数 不连续,如以下 时间表达式序列所示:01:08:59:2801:08:59:2901:09:00:0201:09:00:03

如果此参数的值为 dropPAL,则在时间表达式的任意 给定秒内(秒 00 除外), 帧从 0 计数到 N−1,其中 Nttp:frameRate 参数指定的值,但 忽略 ttp:frameRateMultiplier 参数指定的任何值。如果时间 表达式中的秒为 00,且时间表达式中的分钟 为偶数但不是 002040, 则在该秒期间丢弃帧代码 0003; 否则,不丢弃这些帧代码。

注:

例如,当在 dropPAL 模式下以 ttp:frameRate30 运行时,连续帧之间会出现帧计数 不连续,如以下 时间表达式序列所示:01:09:59:2801:09:59:2901:10:00:0401:10:00:05

注:

dropPAL 模式也称为 M/PALPAL (M) 丢帧 代码,它使用 PAL 调制和约 29.97 帧/秒的 NTSC 帧率。M/PAL 系统主要用于巴西。

如果未指定,则必须假定适用 nonDrop

ttp:dropMode 属性仅在指定于 tt 元素上时才被视为有意义。

7.2.5 ttp:frameRate

ttp:frameRate 属性用于指定相关 媒体对象的帧率,或在文档 实例意在 作为独立媒体对象运作时,指定该文档实例的固有帧率。

如果指定,此属性的值必须遵守以下语法:

语法表示 – ttp:frameRate
ttp:frameRate
  : <digit>+                                // value > 0

适用于文档实例的帧率用于 解释以表达的时间表达式, 如 12.3.1 <time-expression>所定义。

如果适用 media 时间基准,且有效帧率为 整数,则帧被解释为媒体 时间中一秒的划分;因此,如果帧率指定为 F,则 媒体时间中的一秒被划分为 F 个 持续时间相等的区间,其中每个区间标记为帧 f, 且 f ∈ [0…F−1]。

注:

关于 media 时间基准下时间表达式解释的更多 细节,参见 I.2 媒体时间基准

如果未指定,则帧率必须被视为等于某个 应用定义的帧率,或者如果没有适用的应用定义帧率, 则为每秒三十(30)帧。如果指定,则帧率必须 大于零(0)。

ttp:frameRate 属性仅在指定于 tt 元素上时才被视为有意义。

7.2.6 ttp:frameRateMultiplier

ttp:frameRateMultiplier 属性用于 指定一个乘数,该乘数应用于 ttp:frameRate 属性指定的帧率,以计算有效 帧率。

如果指定,此属性的值必须遵守以下语法:

语法表示 – ttp:frameRateMultiplier
ttp:frameRateMultiplier
  : numerator <lwsp> denominator            // numerator != 0; denominator != 0

numerator | denominator
  : <digit>+

当期望的帧率无法表示为每秒整数帧数时, 使用帧率乘数。

如果未指定,则帧率乘数必须被视为等于某个应用 定义的帧率乘数, 或者如果没有适用的应用定义帧率乘数,则为一(1:1)。分子和 分母都必须非零。

ttp:frameRateMultiplier 属性仅在指定于 tt 元素上时才被视为有意义。

注:

用于与每秒 30 帧的 NTSC [SMPTE ST 170] 格式视频对象同步的帧率乘数,名义上为 1000:1001。NTSC 视频的名义帧率定义为色度 副载波频率 3,579,545.45…Hz(= 5.0MHz × 63/88)乘以 2/455 的比值,再除以 每帧 525 条水平线的数量,从而得到 29.970029970029…(= 30 × 1000/1001)帧每 秒的帧率。其他帧率乘数适用于不同使用 地区和视频格式标准。

注:

除 PAL/M 情况外,用于与每秒 25 帧的 PAL 格式视频对象同步的帧率乘数名义上为 1:1。

7.2.7 ttp:markerMode

ttp:markerMode 属性用于指定 对时间表达式的解释和使用约束; 当按照 7.2.11 ttp:timeBase 所定义的 smpte 时间基准运行时,这些时间表达式 对应于 [SMPTE ST 12-1] 时间坐标。

如果指定,此属性的值必须遵守以下语法:

语法表示 – ttp:markerMode
ttp:markerMode
  : "continuous"
  | "discontinuous"

如果由 7.2.11 ttp:timeBase定义的时间基准被指定为 smpte,则此参数按如下方式适用:如果 参数值为 continuous,则可假定 [SMPTE ST 12-1] 时间 坐标 是线性的,并且单调递增或 递减;但是,如果为 discontinuous,则不得对时间坐标的线性或单调性作出任何假设。

如果未指定,则此参数的值必须被视为 discontinuous

注:

此参数的默认值最初 (在 TTML 1.0 第一 版中) 指定为 continuous;然而,对行业状态的进一步评估表明 这一 选择是不正确的,最常见的默认值是 discontinuous

ttp:markerMode 属性仅在指定于 tt 元素上时才被视为有意义。

如果适用 continuous 值,则时间 表达式可以通过考虑计算得到的帧率 和由 ttp:dropMode 参数表达的丢帧模式, 转换为实时 坐标。在这种情况下,内容处理器必须创建并 维护一个 合成 smpte 文档同步基准, 这些时间表达式将在其中按照 12.4 计时语义进一步描述的方式解释。

注:

当使用 smpte 时间基准和 continuous marker 模式运行时,存在一个隐含的时间坐标 空间,即合成 smpte 文档 同步基准, 它由单调递增(或递减)的 [SMPTE ST 12-1] 时间坐标定义,同时考虑 计算得到的帧率和丢帧模式。所有时间表达式都根据 smpte 时间码同步事件(marker), 相对于此时间坐标空间进行解释; 其中文档处理上下文会发出 这些事件,并带有关于时间坐标单调性和在 存在丢帧时重新同步的隐含约束。

continuous marker 模式与 smpte 时间基准一起使用,不同于使用 media 时间基准, 因为 (1) ttp:dropMode 参数的语义 适用于前者而不适用于后者,并且 (2) [SMPTE ST 12-1] 时间坐标可以单调地应用于已经经历 时间膨胀、时间收缩或时间 反转的媒体。

如果适用 discontinuous 值,则时间 表达式不得转换为实时 坐标,算术运算符(加法、乘法)不 定义于时间表达式,因此任何(格式良好的) 持续时间表达式都必须被视为无效。

注:

当使用 smpte 时间基准和 discontinuous marker 模式运行时,不存在有效的时间坐标 空间;相反,所有时间表达式都被解释为带标签的 同步事件(marker),其中文档处理上下文 发出这些事件;当这些事件对应于表示相同标签的时间 表达式时,会相应地导致时间区间 开始或结束。

discontinuous 模式下运行的另一个副作用是,子级的时间表达式 与其时间容器的时间表达式没有必然 关系;也就是说,时间容器及这些容器的子级 根据带标签同步(marker)事件的 发生而彼此独立地被时间激活和停用。

注:

<time-expression> 与带标签同步事件(marker)之间的比较被视为依赖于实现。 特别是,本规范不要求实现使用 特定的内部格式来表示 时间表达式或 marker,也不要求使用特定的比较算法。尽管如此,预期 实现在执行此类比较时 会遵守时间表达式的语义以及适用于 marker 标签的任何隐含语义。

注:

由此参数捕获的 marker 不连续性概念 在逻辑上独立于 ttp:dropMode 参数所表达的帧计数方法。特别是, 即使 ttp:dropMode 参数指定为 dropNTSCdropPAL,marker 模式也可以 指定为 continuous,即使存在由帧计数方法引起的帧计数 不连续性;除非在 marker 标记中存在其他非线性或不连续性, 例如,两个连续帧被标记为 10:00:00:0010:00:01:00

7.2.8 ttp:pixelAspectRatio

ttp:pixelAspectRatio 属性用于指定 根容器区域像素宽高比,详见 H 根容器区域语义

如果指定,此属性的值必须遵守以下语法:

语法表示 – ttp:pixelAspectRatio
ttp:pixelAspectRatio
  : numerator <lwsp> denominator            // numerator != 0; denominator != 0

numerator | denominator
  : <digit>+

如果指定,则分子和分母都必须非零。如果未指定,则 根容器区域的像素宽高比由 H 根容器区域语义确定。

ttp:pixelAspectRatio 属性仅在指定于 tt 元素上时才被视为有意义。

不应指定 ttp:pixelAspectRatio 属性, 除非同时在tt 元素上指定 一个由两个使用 px(像素)单位的 <length> 规范组成的 tts:extent 属性; 若没有该属性,则使用 ttp:pixelAspectRatio 属性 已废弃

7.2.9 ttp:subFrameRate

ttp:subFrameRate 属性用于指定相关 媒体对象的子帧率,或在文档 实例意在 作为独立媒体对象运作时,指定该文档实例的固有子帧率。

如果指定,此属性的值必须遵守以下语法:

语法表示 – ttp:subFrameRate
ttp:subFrameRate
  : <digit>+                                // value > 0

适用于文档实例的子帧率 用于解释以子帧表达的时间表达式, 如 12.3.1 <time-expression>所定义。

如果适用 media 时间基准,且有效帧率为 整数,则子帧被解释为媒体 时间中一帧的划分;因此,如果子帧率指定为 S,则 媒体时间中的一帧被划分为 S 个 持续时间相等的区间,其中每个区间标记为子帧 s, 且 s ∈ [0…S−1]。

注:

关于 media 时间基准下时间表达式解释的更多 细节,参见 I.2 媒体时间基准

如果未指定,则子帧率必须被视为等于某个应用定义的 子帧率,或者如果没有适用的应用定义 子帧率,则为一(1)。如果指定,则子帧率必须大于 零(0)。

ttp:subFrameRate 属性仅在指定于 tt 元素上时才被视为有意义。

注:

在与隔行扫描视频媒体对象同步的上下文中, 子帧有时称为

7.2.10 ttp:tickRate

ttp:tickRate 属性用于指定相关 媒体对象的 tick 速率,或在文档实例内容意在 作为独立媒体对象运作时,指定该内容的固有 tick 速率。

如果指定,此属性的值必须遵守以下语法:

语法表示 – ttp:tickRate
ttp:tickRate
  : <digit>+                                // value > 0

适用于文档实例的 tick 速率用于 解释使用 t 度量以 ticks 表达的时间表达式, 如 12.3.1 <time-expression>所定义。

如果适用 media 时间基准, tick 被解释为媒体时间中一秒的整数 划分;因此,如果 tick 速率指定为 T,则 媒体时间中的一秒被划分为 T 个 持续时间相等的区间,其中每个区间标记为 tick t, 且 t ∈ [0…T−1]。

注:

关于 media 时间基准下时间表达式解释的更多 细节,参见 I.2 媒体时间基准

如果未指定,则若指定了帧率,tick 速率 必须被视为有效帧率乘以 子帧率(即 ticks 被解释为子帧);或者,如果未 指定帧率,则 tick 速率必须被视为每秒媒体时间一个(1) tick。如果指定,则 tick 速率 不得为零(0)。

注:

ticks 与帧或 子帧之间没有预定义关系。Ticks 是对秒的任意划分,允许 使用定点算术而不是秒的分数(且可能 不精确)表达式。

ttp:tickRate 属性仅在指定于 tt 元素上时才被视为有意义。

7.2.11 ttp:timeBase

ttp:timeBase 属性用于指定 文档时间坐标空间

如果指定,此属性的值必须遵守以下语法:

语法表示 – ttp:timeBase
ttp:timeBase
  : "media"
  | "smpte"
  | "clock"

如果时间基准被指定为 media,则时间 表达式表示某个媒体对象时间线中的坐标, 其中该媒体对象可以是外部媒体对象,文档实例的内容要与其同步; 也可以 是文档实例本身的内容,在这种情况下, 定时文本内容旨在建立一条独立时间 线。

注:

使用媒体时间基准时,如果该时间基准被暂停,或 正向或反向缩放,即媒体播放速率 不是一倍速,则预期相关定时文本内容的 呈现也将相应地 暂停、加速或减速。控制外部 媒体时间基准的方式超出本规范范围。

如果时间基准被指定为 smpte, 则时间表达式表示 [SMPTE ST 12-1] 时间 坐标,文档实例的内容要与其 同步。在这种情况下,适用 ttp:markerModettp:dropMode 参数的值,分别如 7.2.7 ttp:markerMode7.2.4 ttp:dropMode所定义。

注:

当时间基准被指定为 smpte 时, 每个时间表达式都表示类似于 [SMIL 3.0] §5.4.3 所定义的媒体 marker 值,但它 不是使用不透明 marker 名称,而是使用结构化的 [SMPTE ST 12-1] 时间坐标作为 marker 名称。

如果时间基准被指定为 clock,则时间 表达式表示某条现实世界时间线中的坐标,该时间线由某个实时 时钟建立,例如本地挂钟时间, 或 UTC(协调世界时)或 GPS(全球定位系统) 时间线。

如果未指定,则默认时间基准必须被视为 media

ttp:timeBase 属性仅在指定于 tt 元素上时才被视为有意义。

当使用 mediasmpte 时间基准运行时,文档 实例的历时呈现可能 受控制时间线的变换影响,例如 时间反转、膨胀(扩展)或收缩 (压缩);然而,当使用 clock 时间基准运行时,不允许任何变换,并且历时 呈现基于真实时间的流逝,沿线性、单调递增的时间线 进行。

注:

由于只有一个时间基准参数适用于 给定文档实例,因此时间 表达式的解释在整个文档实例中是一致的。

注:

关于根据指定时间基准解释时间表达式的更多 细节,参见 I 时间表达式语义

8 内容

本节规定核心词汇目录中的 content 事项。

8.1 内容元素词汇

以下元素指定 文档实例的结构和主要内容方面:

注:

本节的小节按逻辑顺序排列(从最高层构造到最低层构造)。

8.1.1 tt

tt 元素用作文档实例的根文档元素。

tt 元素接受零个或一个 head 元素作为子级, 后接 零个或一个 body 元素。

XML 表示 – 元素信息项:tt
<tt
  tts:extent = xsd:string
  xml:base = <uri>
  xml:id = ID
  xml:lang = xsd:string
  xml:space = ("default" | "preserve") : default
  {any attributes in TT Parameter Namespace}
  Content: head?, body?
</tt>

根时间范围,即 文档实例处于活动状态的时间区间,具有一个隐式 持续时间,该持续时间等于文档的 body 元素的 隐式持续时间(如果存在 body 元素),或者为零(如果不存在 body 元素)。

如果在 tt 元素上指定了 tts:extent 属性,则它必须遵守 10.2.16 tts:extent, 在这种情况下,它指定空间范围,即根容器区域的空间范围; 内容区域位于并呈现在其中。如果未指定 tts:extent 属性,则空间范围,即 根容器区域的空间范围,由 H 根容器区域 语义中指定的规则确定。 根容器区域的原点由 文档处理上下文确定。

注:

在没有其他要求的情况下,并且如果存在相关 媒体对象,则建议 文档处理上下文 确定:

注:

如果作者希望表示根容器区域的(存储或图像)宽高比, 而不指定其分辨率,则可以通过使用 ttp:displayAspectRato 参数属性来实现。

必须在 tt 元素上指定 xml:lang 属性。 如果属性值为空,则表示没有适用于 文档实例中所含文本的默认语言。

如果未在 tt 元素上指定 xml:space 属性,则 必须 将其视为已以 default 值指定该属性。

8.1.2 head

head 元素是一个容器元素,用于对头部事项进行分组,包括 元数据、 profile、嵌入内容资源、样式和布局信息。

head 元素接受零个或多个 Metadata.class 元素组中的元素作为子级, 后接零个或多个 Profile.class 元素组中的元素, 后接零个或一个resources 元素, 后接零个或一个 styling 元素, 后接零个或一个 layout 元素, 后接零个或一个 animation 元素。

Metadata.class 元素组中子级指定的任何元数据,在语义上适用于整个 文档 实例, 而不仅仅是 head 元素。

Parameters.class 元素组中子级指定的任何参数,在语义上适用于整个 文档 实例, 而不仅仅是 head 元素。

resources 子元素用于指定嵌入内容构造, 这些构造由某些样式构造和 嵌入内容元素引用。

styling 子元素用于指定样式构造, 这些构造由其他样式构造、布局构造以及 内容元素引用。

layout 子元素用于指定 由内容元素引用的布局构造。

animation 子元素用于指定动画构造, 其目标是可动画化的内容元素布局元素。

XML 表示 – 元素信息项:head
<head
  xml:base = <uri>
  xml:id = ID
  xml:lang = xsd:string
  xml:space = ("default" | "preserve")
  Content: Metadata.class*, Profile.class*, resources?, styling?, layout?, animation?
</head>

在时间语义适用于 head 元素内容的范围内,该元素的隐含时间区间 定义为与根时间 范围共终止。

8.1.3 body

body 元素作为逻辑容器和时间 结构化元素,用于表示为逻辑分区的 文本内容单元序列。

body 元素接受零个或多个 Metadata.class 元素组中的元素作为子级, 后接零个或多个 Animation.class 元素组中的元素, 后接 零个或多个 div 元素。

Metadata.class 元素组中子级指定的任何元数据,在语义上适用于 body 元素及其所有后代。

Animation.class 元素组中子级指定的任何动画元素,在语义上适用于 body 元素。

XML 表示 – 元素信息项:body
<body
  animate = IDREFS
  begin = <time-expression>
  condition = <condition>
  dur = <time-expression>
  end = <time-expression>
  region = IDREF
  style = IDREFS
  timeContainer = ("par" | "seq")
  xml:base = <uri>
  xml:id = ID
  xml:lang = xsd:string
  xml:space = ("default" | "preserve")
  {any attributes in TT Metadata Namespace}
  {any attributes in TT Style Namespaces}
  Content: Metadata.class*, Animation.class*, div*
</body>

作者可以使用 begindurend 属性为 body 元素指定时间区间。如果此区间的起始点 仍未指定,则该起始点解释为 文档时间坐标 空间的起始 点和根时间范围的起始点二者中较晚的一个。 如果此区间的结束点仍未指定,则 结束点解释为根 时间范围的结束点。

注:

从 SMIL 呈现引用的文档实例 预期遵循与其他 SMIL 媒体 对象相同的计时规则。

如果在 body 元素上指定相对 begin 或 end 时间,则这些时间通过引用 文档时间坐标 空间的开头来解析。

如果根时间范围短于 body 元素的计算持续时间, 则 body 元素的活动时间区间会被 截断至根时间 范围的活动结束点。

作者可以通过 style 属性、内联样式属性或两者组合,将一组样式属性关联到 body 元素。

注:

文档实例中与 body 元素关联的样式属性,可供 后代内容元素进行样式继承。

如果没有在 body 元素上指定 timeContainer 属性,则它必须解释为具有 parallel 时间包含语义。

8.1.4 div

div 元素作为逻辑容器和时间 结构化元素,用于表示为逻辑子分区或段落的 文本内容单元序列。

注:

当在连续(非分页)视觉呈现介质上渲染时, div 元素预期生成 一个或多个块 区域, 这些区域包含由 div 元素的 后代 p 元素生成的零个或多个子块区域。

如果由 div 元素生成的某个 块区域 不包含任何子区域,则不预期呈现它。

div 元素接受零个或多个 Metadata.class 元素组中的元素作为子级, 后接零个或多个 Animation.class 元素组中的元素, 后接零个或一个 Layout.class 元素组中的元素, 后接零个或多个 Block.classEmbedded.class 元素组中的元素。

Metadata.class 元素组中子级指定的任何元数据,在语义上适用于 div 元素及其所有后代。

Animation.class 元素组中子级指定的任何动画元素,在语义上适用于 div 元素。

XML 表示 – 元素信息项:div
<div
  animate = IDREFS
  begin = <time-expression>
  condition = <condition>
  dur = <time-expression>
  end = <time-expression>
  region = IDREF
  style = IDREFS
  timeContainer = ("par" | "seq")
  xml:base = <uri>
  xml:id = ID
  xml:lang = xsd:string
  xml:space = ("default" | "preserve")
  {any attributes in TT Metadata Namespace}
  {any attributes in TT Style Namespaces}
  Content: Metadata.class*, Animation.class*, Layout.class?, (Block.class|Embedded.class)*
</div>

作者可以通过 style 属性、内联样式属性或两者组合,将一组样式属性关联到 div 元素。

注:

文档实例中与 div 元素关联的样式属性, 可供后代内容 元素进行样式继承。

如果没有在 div 元素上指定 timeContainer 属性,则它必须解释为具有 parallel 时间包含语义。

8.1.5 p

p 元素表示逻辑段落,用作 块级格式化语义与行内级格式化语义之间的过渡。

p 元素接受零个或多个 Metadata.class 元素组中的元素作为子级, 后接零个或多个 Animation.class 元素组中的元素, 后接零个或一个 Layout.class 元素组中的元素, 后接零个或多个 Inline.classEmbedded.class 元素组中的元素。

Metadata.class 元素组中子级指定的任何元数据,在语义上适用于 p 元素及其所有后代。

Animation.class 元素组中子级指定的任何动画元素,在语义上适用于 p 元素。

XML 表示 – 元素信息项:p
<p
  animate = IDREFS
  begin = <time-expression>
  condition = <condition>
  dur = <time-expression>
  end = <time-expression>
  region = IDREF
  style = IDREFS
  timeContainer = ("par" | "seq")
  xml:base = <uri>
  xml:id = ID
  xml:lang = xsd:string
  xml:space = ("default" | "preserve")
  {any attributes in TT Metadata Namespace}
  {any attributes in TT Style Namespaces}
  Content: Metadata.class*, Animation.class*, Layout.class?, (Inline.class|Embedded.class)*
</p>

作者可以通过 style 属性、内联样式属性或两者组合,将一组样式属性关联到 p 元素。

注:

文档实例中与 p 元素关联的样式属性,可供 后代内容元素进行样式继承。

如果没有在 p 元素上指定 timeContainer 属性,则它必须解释为具有 parallel 时间包含语义。

如果 p 元素的子级序列 仅由字符信息项组成, 则为了应用适用于 span 元素的样式属性,该序列必须 被视为匿名 span;有关详细信息,参见 [construct anonymous spans] 过程。

注:

TTML 的呈现语义实际上 隐含 p 元素构成换行。特别是, 它在第一个生成的行区域之前和最后一个生成的行区域之后 都与块堆叠约束相关联。更多细节参见 11.3.1.4 同步流处理

8.1.6 span

span 元素作为逻辑容器和时间 结构化元素,用于具有行内级 格式化语义的文本内容单元序列。

当在视觉介质上呈现时,span 元素旨在 生成一系列行内区域,每个区域包含一个或多个字形区域

span 元素接受零个或多个 Metadata.class 元素组中的元素作为子级, 后接零个或多个 Animation.class 元素组中的元素, 后接零个或多个 Inline.classEmbedded.class 元素组中的元素。

Metadata.class 元素组中子级指定的任何元数据,在语义上适用于 span 元素及其所有后代。

Animation.class 元素组中子级指定的任何动画元素,在语义上适用于 span 元素。

XML 表示 – 元素信息项:span
<span
  animate = IDREFS
  begin = <time-expression>
  condition = <condition>
  dur = <time-expression>
  end = <time-expression>
  region = IDREF
  style = IDREFS
  timeContainer = ("par" | "seq")
  xlink:arcrole = <uri-list>
  xlink:href = <uri>
  xlink:role = <uri-list>
  xlink:show = ("new" | "replace" | "embed" | "other" | "none") : new
  xlink:title = xsd:string
  xml:base = <uri>
  xml:id = ID
  xml:lang = xsd:string
  xml:space = ("default" | "preserve")
  {any attributes in TT Metadata Namespace}
  {any attributes in TT Style Namespaces}
  Content: Metadata.class*, Animation.class*, (Inline.class|Embedded.class)*
</span>

作者可以通过 style 属性、内联样式属性或两者组合,将一组样式属性关联到 span 元素。

注:

文档实例中与 span 元素关联的样式属性,可供 后代内容元素进行样式继承。

如果没有在 span 元素上指定 timeContainer 属性,则它必须解释为具有 parallel 时间包含语义。

链接属性 xlink:* 可用于使用指定的位置(href)、角色和标题, 将 span 元素与相关内容链接。链接激活的行为 受 xlink:show 属性影响, 其精确含义由文档处理上下文确定。

如果 span 元素指定了 xlink:href 属性,则嵌套的 span 后代元素不得指定 xlink:href 属性;如果指定了,则后者必须在呈现或激活处理的 目的下被忽略。

如果 span 元素的子级序列 仅由字符信息项组成, 则为了应用适用于 span 元素的样式属性,该序列必须 被视为匿名 span;有关详细信息,参见 [construct anonymous spans] 过程。

8.1.7 br

br 元素表示显式换行。

Metadata.class 元素组中子级指定的任何元数据,在语义上适用于 br 元素及其所有后代。

使用 Animation.class 子级已废弃。

注:

没有样式属性适用于 br 元素,因此动画对 br 没有影响。

XML 表示 – 元素信息项:br
<br
  condition = <condition>
  style = IDREFS
  xml:base = <uri>
  xml:id = ID
  xml:lang = xsd:string
  xml:space = ("default" | "preserve")
  {any attributes in TT Metadata Namespace}
  {any attributes in TT Style Namespaces}
  Content: Metadata.class*, Animation.class*
</br>

当在视觉介质上呈现时,br 元素的存在必须 解释为强制换行。

注:

br 元素的视觉呈现 旨在产生与控制字符 CR(U+000D) 后接控制码 LF(U+000A)在电传打字设备上呈现时相同的效果。 因此,两个连续的 br 元素将产生 不同于单个 br 元素的效果。

8.2 内容属性词汇

本节定义核心词汇目录中许多或所有元素类型使用的以下通用属性:

此外,本节定义核心词汇目录中某些元素类型使用的以下链接词汇:

8.2.1 condition

condition 属性用于将元素 (及其后代)从语义处理中条件性排除; 在这种情况下,该元素称为条件化元素

注:

元素使用 condition 属性,并不会阻止 解析该元素(及其后代),也不会阻止 将该元素(及其后代)的已解析表示插入到 与所包含的文档实例相关联的 精简 xml 信息集中。

condition 属性可与核心词汇目录中的任何元素一起使用, 但 profile 事项除外,即Profile 模块的元素除外。

condition 属性的值必须遵守 <condition> 表达式; 该表达式在呈现处理时求值(惰性求值), 或在呈现处理之前求值(急切求值);其中,急切求值 仅可在求值所得值不能改变,或已知在呈现处理期间不会改变时发生。

注:

例如,如果条件表达式依赖于 条件函数的值, 则该条件表达式的值可能在呈现处理期间改变,在这种情况下 不能使用急切求值。

出于呈现处理的目的,如果元素指定了 condition 属性,并且其<condition> 表达式值求值为 false, 则必须忽略该元素及其后代元素的语义,除非这些语义被明确例外处理; 也就是说,无论这些后代元素上指定的任何 <condition> 表达式的求值如何,该元素及其后代元素都被 条件性排除

注:

例如,如果 p 元素指定了求值为 falsecondition 属性,则该元素及其后代的内容将为呈现目的被忽略。

注:

对于由于某个祖先元素被 条件性排除而被条件性排除的元素, 不要求(且不相关)对其 condition 属性进行求值。 也就是说,在祖先被条件性 排除的情况下, 元素不能通过对其 condition 属性求值而变为条件性 包含

注:

在某些情况下,通过 condition 属性忽略(排除)某个元素的语义, 是指部分而不是完全忽略该元素的语义;相关内容见 以下文本以及特定元素定义。

除非适用更高层协议,否则当 <condition> 表达式 值求值为 false 时,为确定哪些语义将被忽略, 适用以下例外:

注:

上述例外也适用于 条件性排除元素的后代。

8.2.2 xlink:arcrole

xlink:arcrole 属性按 [XLink 1.1] 的定义使用。

xlink:arcrole 属性可用于任何 spanimage 元素。

8.2.3 xlink:href

xlink:href 属性按 [XLink 1.1] 的定义使用。

xlink:href 属性可用于任何 spanimage 元素。

8.2.4 xlink:role

xlink:role 属性按 [XLink 1.1] 的定义使用。

xlink:role 属性可用于任何 spanimage 元素。

8.2.5 xlink:show

xlink:show 属性按 [XLink 1.1] 的定义使用。

xlink:show 属性可用于任何 spanimage 元素。

8.2.6 xlink:title

xlink:title 属性按 [XLink 1.1] 的定义使用。

xlink:title 属性可用于任何 spanimage 元素。

8.2.7 xml:base

xml:base 属性按 [XML Base] 的定义使用。

xml:base 属性可用于核心词汇目录中任何准许以下内容的元素: (1) condition 属性, (2) Metadata.class 元素 组中的后代元素,或 (3) 准许 xml:base 属性的后代元素。

8.2.8 xml:id

xml:id 属性按 [XML ID] 的定义使用。

xml:id 属性可用于核心词汇目录中的任何元素。

8.2.9 xml:lang

xml:lang 属性按 [XML 1.0] §2.12 语言标识的定义使用。

xml:lang 属性必须在 tt 元素上指定,并且可由核心词汇目录中除参数词汇之外的任何其他元素类型实例指定。

注:

[XML 1.0] §2.12 所指定,与元素关联的语言 适用于该元素的所有后代,除非被后代覆盖。换言之, 与元素关联的语言要么在该元素上指定,要么实际上 从该元素最近的祖先元素继承。

此语言关联过程仅基于 精简 xml 信息集的结构,该信息集属于 文档实例, 并且发生在执行中间 同步文档构造之前。

以下示例说明在内容和元数据元素上使用 xml:lang

示例片段 – 内容和元数据的语言标识
<tt ... xml:lang="">
...
<p xml:lang="en">Jean said hello.</p>
<p xml:lang="fr">Jean dit bonjour.</p>
<p>
  <image src="#talking-image">
    <ttm:item name="altText" xml:lang="en">Talking</ttm:item>
    <ttm:item name="altText" xml:lang="fr">Parlant</ttm:item>
  </image>
</p>
...
</tt>

注:

在此示例中,根 tt 元素以空语言标签标识, 表示未知或未指定语言;该标识实际上由后代元素继承(除非被覆盖)。 接下来,前两个 p(段落)元素 分别与 en(英语)和 fr(法语)语言 标识符关联。最后,第三个 p (段落)元素由一个前景图像组成,该图像通过使用 命名元数据项 与两个替代文本描述关联; 而这些文本描述又分别与 en(英语)和 fr(法语)语言标识符关联。

8.2.10 xml:space

xml:space 属性按 [XML 1.0] §2.10 空白处理的定义使用。

xml:space 属性可用于 核心词汇目录中的任何元素,但参数词汇除外。

注:

[XML 1.0] §2.10 所指定,适用于某元素的应用空白信令 适用于该元素的所有后代,除非被后代覆盖。换言之, 适用于元素的应用空白信令要么在该 元素上指定,要么实际上 从该元素最近的祖先元素继承。

此应用空白信令过程仅基于 精简 xml 信息集的结构,该信息集属于 文档实例, 并且发生在执行中间 同步文档构造之前。

default 值的语义固定为表示: 当按照 11.3.1.4 同步流 处理所述执行 文档 实例的呈现处理时, 处理必须像在等价中间 XSL-FO 文档的受影响 元素上指定了以下属性一样发生:

  • suppress-at-line-break="auto"

  • linefeed-treatment="treat-as-space"

  • white-space-collapse="true"

  • white-space-treatment="ignore-if-surrounding-linefeed"

同样,preserve 值的语义固定为表示: 当执行呈现处理时,处理必须像在等价中间 XSL-FO 文档的受影响 元素上指定了以下属性一样发生:

  • suppress-at-line-break="retain"

  • linefeed-treatment="preserve"

  • white-space-collapse="false"

  • white-space-treatment="preserve"

如果未规范化的水平制表符 &#9;(HT)字符出现在 精简 xml 信息集字符信息项中,则在视觉呈现时,该制表符 字符被视为单个 &#20;(SPACE)字符。

当执行其他类型的处理,且这些处理旨在最终 通过本规范所述之外的方式产生视觉呈现时, 应遵守上文描述的空白折叠和 保留语义。对于其他类型的处理, xml:space 属性的处理 依赖于处理器,但在可能情况下应遵守上文描述的语义。

注:

上述四个引用的 XSL-FO 属性的语义分别由 [XSL-FO 1.1] §7.17.3、7.16.7、7.16.12 和 7.16.8 定义。

注:

未为 TAB(U+0009)字符指定呈现语义。此外,TAB (U+0009)字符可以生成字形区域。 因此,不建议在 pspan 元素内的 #PCDATA 内容中使用 TAB(U+0009)字符。

8.3 内容值表达式

核心词汇可以使用以下表达式:

8.3.1 <absolute-profile-designator>

<absolute-profile-designator> 值表达式用于 (1) 定义与 本地定义的 profile 关联的绝对指示符,或 (2) 引用远程定义的 profile。

语法表示 – <absolute-profile-designator>
<absolute-profile-designator>
  : <absolute-uri>

注:

在当前上下文中,本地定义表示定义于当前文档中,而 远程定义 表示定义于另一文档中。

8.3.2 <absolute-uri>

<absolute-uri> 值表达式用于指定绝对 URI [URI]

语法表示 – <absolute-uri>
<absolute-uri>
  : <uri>                                     // absolute form only

在 <absolute-uri> 值表达式的上下文中, <uri> 表达式的值语法 必须遵守 [URI] §4.3 所定义的 URI 绝对形式。

8.3.3 <arguments>

<arguments> 值是与 <expression> 值的 function-expression 非终结符一起使用的子表达式。

语法表示 – <arguments>
<arguments>
  : "(" <lwsp>? ")"
  | "(" <lwsp>? argument-list <lwsp>? ")"

argument-list
  : <expression> (<lwsp>? "," <lwsp>? <expression>)*

8.3.4 <bound-parameter>

<bound-parameter> 值是由 内容处理器绑定到值的一组枚举命名参数之一。

语法表示 – <bound-parameter>
<bound-parameter>
  : "forced"
  | "mediaAspectRatio"
  | "mediaLanguage"
  | "userLanguage"
forced

求值为布尔值,表示 内容处理器是否在启用 强制字幕的情况下运行。 如果在文档实例中使用,则应将 usesForced 命名元数据项指定为 head 元素的子级。

mediaAspectRatio

求值为等于相关媒体对象宽高比的数值。

mediaLanguage

求值为等于相关媒体对象(主要)语言的字符串值。

userLanguage

求值为等于由 文档处理上下文确定的用户(主要)语言的字符串值。

8.3.5 <condition>

<condition> 值用于指定求值为二进制值的表达式, 该值用于确定 条件化元素的语义在内容处理期间是被遵守还是被忽略。

语法表示 – <condition>
<condition>
  : <expression>

出现在 <condition> 值中的 function-expression 必须采用 <condition-function> 表达式的形式。

8.3.6 <condition-function>

<condition-function> 值是可用于 <condition> 值表达式中的子表达式。

语法表示 – <condition-function>

8.3.7 <expression>

<expression> 值是 <condition> 值的子表达式。

语法表示 – <expression>
<expression>
  : logical-or-expression

logical-or-expression
  : logical-and-expression
  | logical-or-expression <lwsp>? "||" <lwsp>? logical-and-expression

logical-and-expression
  : equality-expression
  | logical-and-expression <lwsp>? "&&" <lwsp>? equality-expression

equality-expression
  : relational-expression
  | equality-expression <lwsp>? "==" <lwsp>? relational-expression
  | equality-expression <lwsp>? "!=" <lwsp>? relational-expression

relational-expression
  : additive-expression
  | relational-expression <lwsp>? "<" <lwsp>? additive-expression
  | relational-expression <lwsp>? ">" <lwsp>? additive-expression
  | relational-expression <lwsp>? "<=" <lwsp>? additive-expression
  | relational-expression <lwsp>? ">=" <lwsp>? additive-expression

additive-expression
  : multiplicitive-expression
  | additive-expression <lwsp>? "+" <lwsp>? multiplicitive-expression
  | additive-expression <lwsp>? "-" <lwsp>? multiplicitive-expression

multiplicitive-expression
  : unary-expression
  | multiplicitive-expression <lwsp>? "*" <lwsp>? unary-expression
  | multiplicitive-expression <lwsp>? "/" <lwsp>? unary-expression
  | multiplicitive-expression <lwsp>? "%" <lwsp>? unary-expression

unary-expression
  : primary-or-function-expression
  | "+" <lwsp>? unary-expression
  | "-" <lwsp>? unary-expression
  | "!" <lwsp>? unary-expression

primary-or-function-expression
  : primary-expression
  | function-expression

primary-expression
  : identifier
  | literal
  | "(" <lwsp>? expression <lwsp>? ")"

function-expression
  : identifier <arguments>

identifier
  : xsd:NCName

literal
  : boolean-literal
  | numeric-literal
  | string-literal

boolean-literal
  : "true"
  | "false"

numeric-literal
  : decimal-literal

decimal-literal
  : decimal-integer-literal "." decimal-digits? exponent-part?
  | decimal-integer-literal exponent-part?
  | "." decimal-digits exponent-part?

decimal-integer-literal
  : "0"
  | non-zero-digit decimal-digits?

decimal-digits
  : decimal-digit
  | decimal-digits decimal-digit

decimal-digit
  : "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"

non-zero-digit
  : "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"

exponent-part
  : exponent-indicator signed-integer

exponent-indicator
  : "e" | "E"

signed-integer
  : decimal-digits
  | "+" decimal-digits
  | "-" decimal-digits

string-literal
  : <quoted-string>

注:

为避免疑义,请注意,在 function-expressionidentifier 标记与其后 <arguments> 表达式的起始左 圆括号 “(” 字符之间,不允许线性空白(LWSP)。

8.3.8 <fragment-profile-designator>

<fragment-profile-designator> 值表达式用于通过引用指示本地 profile。

语法表示 – <fragment-profile-designator>
<fragment-profile-designator>
  : <fragment-uri>

8.3.9 <fragment-uri>

<fragment-uri> 值表达式用于指定片段 URI [URI]

语法表示 – <fragment-uri>
<fragment-uri>
  : <uri>                                     // fragment component only

在 <fragment-uri> 值表达式的上下文中, <uri> 表达式的值语法 必须遵守 [URI] §3 和 §3.5 所定义的 URI 片段组件, 即 scheme、authority、path 和 query 组件为空(未指定),且只有 fragment 组件非空(已指定)。

8.3.10 <media-function>

<media-function> 值是可用于 <condition> 值表达式中的子表达式, 以便对相关媒体 对象文档处理上下文执行媒体查询。

语法表示 – <media-function>
<media-function>
  : "media(" <lwsp>? media-query <lwsp>? ")"

media-query
  : <quoted-string>

<media-function> 值表达式的 media-query 参数必须遵守 [Media Queries] §3 定义的 media_query_list 语法。

如果指定的媒体查询求值为 true, 则 <media-function> 值表达式求值为 true; 否则,该值表达式求值为 false

如果不支持 <media-function> 表达式的语义,则该表达式 必须求值为 false

8.3.11 <profile-designator>

<profile-designator> 值表达式用于指示 profile, 其目的可以是定义 profile 或引用已定义的 profile。

语法表示 – <profile-designator>

8.3.12 <parameter-function>

<parameter-function> 值是可用于 <condition> 值表达式中的子表达式, 以便获取 文档处理上下文的命名参数。

语法表示 – <parameter-function>
<parameter-function>
  : "parameter(" <lwsp>? parameter-name <lwsp>? ")"

parameter-name
  : <quoted-string>

去引号后,<parameter-function> 值 表达式的 parameter-name 参数必须遵守 xsd:NCName,而该名称又必须是 <bound-parameter> 枚举的值之一。

<parameter-function> 值表达式求值为与指定参数名称关联(绑定到)的 值。

8.3.13 <quoted-string>

<quoted-string> 值表达式用于指定双引号或单引号字符串。

语法表示 – <quoted-string>
<quoted-string>
  : double-quoted-string
  | single-quoted-string

double-quoted-string
  : '"' ([^"\\] | escape)* '"'

single-quoted-string
  : "'" ([^'\\] | escape)* "'"

escape
  : '\\' char

注:

为避免疑义,请注意,带引号字符串表达式中允许线性空白(LWSP), 但当从 定时文本文档实例构造 精简 xml 信息集时,它 受 XML 属性值规范化约束。

8.3.14 <relative-profile-designator>

<relative-profile-designator> 值表达式用于相对于 TT Profile 命名空间引用标准化 profile,该命名空间作为基 URI, 用于将相对 profile 指示符绝对化。

语法表示 – <relative-profile-designator>
<relative-profile-designator>
  : <relative-uri>

注:

例如,如果相对 profile 指示符表示为 ttml2-presentation,则绝对化后的 profile 指示符 将为 http://www.w3.org/ns/ttml/profile/ttml2-presentation

8.3.15 <relative-uri>

<relative-uri> 值表达式用于指定相对 URI [URI]

语法表示 – <relative-uri>
<relative-uri>
  : <uri>                                     // no scheme component present

在 <relative-uri> 值表达式的上下文中, <uri> 表达式的值语法 必须遵守 [URI] §3 所定义的 URI 相对形式, 即 scheme 和 authority 组件为空(未指定),但 path,以及可选的 query 和 fragment 组件被指定。

8.3.16 <supports-function>

<supports-function> 值是可用于 <condition> 值表达式中的子表达式, 以便获得布尔值,用于表示指定的特性扩展 是否受支持。

语法表示 – <supports-function>
<supports-function>
  : "supports(" <lwsp>? feature-or-extension-designator <lwsp>? ")"

feature-or-extension-designator
  : <quoted-string>

<supports-function> 值 表达式的 feature-or-extension-designator 参数必须表达 E.1 特性指示F.1 扩展指示分别定义的 特性指示或扩展指示;其中 指示的 feature-namespaceextension-namespace 组件 是可选的,并且如果 未指定,则分别被视为等于 TT Feature NamespaceTT Extension Namespace

如果指定的特性或扩展 指示符由内容 处理器(在语义上)支持,则 <supports-function> 值表达式求值为 true

8.3.17 <uri>

<uri> 值表达式用于指定 URI [URI]

语法表示 – <uri>
<uri>
  : xsd:anyURI

xsd:anyURI 数据类型的值语法必须遵守 [XML Schema Part 2] §3.2.17 指定的定义。

注:

为避免疑义,由 [URI] §2 Characters 指定为在 URI 中排除的字符,以及更具体地说, XML 空白字符 &#9;(HT)、&#10;(LF)、&#13;(CR)和 &#20; (SPACE), 如 [XML 1.0] §3.3.3 步骤 (3) 第一个项目符号所指定, 不会以未转义形式出现在 <uri> 值的词法表示中。

8.3.18 <uri-list>

<uri-list> 值表达式用于指定 URI [URI] 表达式的非空列表。

语法表示 – <uri-list>
<uri-list>
  : <uri> (<lwsp> <uri>)*

9 嵌入内容

本节规定核心词汇目录中的 embedded content 事项,其中,在此上下文中, content 应理解为任意内容类型(格式)的数据, embedded 则指嵌入(内联)此数据或嵌入 对外部数据的引用。

9.1 嵌入内容元素词汇

以下元素可用于指定嵌入内容:

9.1.3 data 元素用作 嵌入数据资源的通用容器元素, 该资源可以被分割成 chunk,也可以不被分割; 在被分割的情况下,数据片段使用 9.1.2 chunk 元素表示。 9.1.1 audio9.1.4 font9.1.5 image 元素是专用 元素,用于 引用特定类型的嵌入内容。 9.1.6 resources 元素用于 对嵌入内容定义进行分组,以供后续元素引用。 9.1.7 source 元素可用于 表达嵌入内容的来源。

9.1.1 audio

audio 元素用于定义或引用音频资源

audio 元素可以出现在两个上下文中:(1) 作为 resources 元素的子级, 以及 (2) 作为 Block.class 元素组中元素的子级, 即作为 divp 元素的子级,或 作为 span 元素的子级。前者 称为 音频定义上下文,后者称为音频呈现上下文

audio 元素出现在音频 定义上下文中时,它 作为音频资源的可共享定义, 可被包围文档实例中的其他 audio 元素引用。

注:

音频资源的可共享定义会指定 xml:id 属性,以便被 音频 呈现上下文中的 audio 元素 引用。

audio 元素出现在音频呈现上下文中时,它 作为音频资源的不可共享定义, 并隐含呈现(渲染)语义,即预期被播放。

注:

音频资源的不可共享定义可以指定 xml:id 属性,也可以不指定; 但此 标识符不会被其他 audio 元素引用,或者即使被引用, 该引用也会被忽略。

audio 元素接受 零个或多个 Metadata.class 元素组中的元素作为子级,后接 零个或多个 Animation.class 元素组中的元素, 后接零个或多个 source 元素。

注:

对于执行 [construct anonymous spans] 过程而言, audio 元素的任何文本节点后代都不是有意义的文本节点。

XML 表示 – 元素信息项:audio
<audio
  animate = IDREFS
  begin = <time-expression>
  clipBegin = <time-expression>
  clipEnd = <time-expression>
  condition = <condition>
  dur = <time-expression>
  end = <time-expression>
  src = <audio>
  style = IDREFS
  timeContainer = ("par" | "seq")
  type = xsd:string
  xml:base = <uri>
  xml:id = ID
  xml:lang = xsd:string
  xml:space = ("default" | "preserve")
  {any attributes in TT Style Namespaces}
  {any attributes in TT Metadata Namespace}
  Content: Metadata.class*, Animation.class*, source*
</audio>

audio 元素通过以下方式指示音频资源: (1) 引用内置数据资源, (2) 引用外部数据资源,或 (3) 定义或引用嵌入数据 资源, 其中数据资源包含音频内容。

如果 audio 元素指定了 src 属性,则它不得指定 子 source 元素。反之, 如果 audio 元素未指定 src 属性,则它必须指定 一个或多个 子 source 元素。

如果 audio 元素指定了 src 属性,并且其值未 引用 包围文档实例的片段,则它应指定 type 属性,在这种情况下, type 属性的值必须对应于 被引用资源的媒体(内容)类型。否则,不得指定 type 属性。

如果指定,clipBegin 属性的值必须遵守 12.3.1 <time-expression>offset-time 形式;在这种情况下, 此表达式的值表示相对于被引用音频内容开头的正常播放时间偏移,并指示音频呈现 开始的点。 如果此指定值大于被引用音频内容的固有持续时间, 则 clipBegin 的解析值被视为 固有持续时间。 如果未指定 clipBegin 属性,则适用值 0

类似地,如果指定,clipEnd 属性的值必须遵守 12.3.1 <time-expression>offset-time 形式;在这种情况下, 此表达式的值表示相对于被引用音频内容开头的正常播放时间偏移,并指示呈现 停止的点。 如果此指定值大于被引用音频内容的固有持续时间, 则 clipEnd 的解析值被视为 固有持续时间。 如果未指定 clipEnd 属性,则适用等于音频内容固有持续时间的值。

以下示例说明 audio 元素的使用。

示例片段 – 外部音频资源
...
<audio src="http://example.com/audio/description.mp3" type="audio/mp3"/>
...

9.1.2 chunk

chunk 元素用于表示一个不同的 data chunk(片段)。

chunk 元素可以作为 data 元素的子级出现。

XML 表示 – 元素信息项:chunk
<chunk
  condition = <condition>
  encoding = ("base16" | "base32" | "base32hex" | "base64" | "base64url") : base64
  length = xsd:nonNegativeInteger
  xml:base = <uri>
  xml:id = ID
  Content: #PCDATA
</chunk>

如果指定了 encoding 属性, 则它必须表示 chunk 元素所表示字节序列的实际编码。 如果未指定 encoding 属性, 则编码必须被视为 base64

如果指定了 length 属性,则它必须表示 chunk 元素所表示字节序列中的已解码字节数。 解码时,如果指定的 length 值与已解码字节数不匹配, 则该 chunk 及其容器 data 元素必须返回零长度字节序列。 如果未指定 length 属性,则该 chunk 被视为具有等于实际已解码字节数的长度。

以下示例说明 chunked data 的使用。

示例片段 – Chunked Data
...
<data type="text/plain; charset=us-ascii" length="44">
  <chunk length="19">
    VGhlIHF1aWNrIGJyb3duIGZveA==
  </chunk>
  <chunk length="25">
    IGp1bXBzIG92ZXIgdGhlIGxhenkgZG9nLg==
  </chunk>
</data>
...

9.1.3 data

data 元素作为任意数据的通用容器或引用。

data 元素可以出现在三个上下文中: (1) 作为 resources 元素的子级, 称为数据定义上下文; (2) 作为 metadata 元素的子级, 称为元数据的数据绑定上下文;或 (3) 作为 source 元素的子级, 称为source 的数据绑定上下文; 其中后两个上下文统称为数据绑定上下文

data 元素出现在数据 定义上下文中时,它 作为数据资源的可共享定义,可被以下项的 src 属性引用: (1) 另一个 data 元素, (2) 一个嵌入内容元素,或 (3) 一个 source 元素。 在这种情况下,data 元素的上下文化活动时间区间是 其父 resources 元素的活动时间区间与 其引用元素的活动时间区间的交集。

注:

数据资源的可共享定义会指定 xml:id 属性,以便由 数据绑定 上下文中使用的片段标识符引用。

data 元素出现在数据绑定 上下文中时,它 作为数据资源的不可共享定义,并隐含绑定语义,即 它旨在绑定到(关联于)其直接引用上下文。 在这种情况下,data 元素的活动时间区间与其最近祖先 定时元素的活动时间区间相同。

注:

数据资源的不可共享定义可以指定 xml:id 属性,也可以不指定;但此 标识符不会在其他数据绑定 上下文中被引用,或者即使被引用,也没有绑定语义。

data 元素接受以下三种内容模型之一: (1) 一个或多个文本节点(即 #PCDATA), (2) 零个或多个 Metadata.class 元素组中的元素,后接 一个或多个 chunk 元素,或 (3) 零个或多个 Metadata.class 元素组中的元素,后接 一个或多个 source 元素; 第一种称为简单数据嵌入, 第二种称为chunked 数据嵌入,第三种称为 带来源数据嵌入

当使用简单数据嵌入时,数据资源 通过解码 #PCDATA 内容获得。 当使用chunked 数据嵌入时,数据 资源通过串接解码每个子 chunk 元素所获得的字节序列而获得。 当使用带来源数据嵌入时,数据 资源从第一个可解析的子 source 元素获得。 此外, 子 source 元素不得 包含 data 元素,但可以 引用 data 元素,该元素位于 数据定义上下文中。

XML 表示 – 元素信息项:data
<data
  condition = <condition>
  encoding = ("base16" | "base32" | "base32hex" | "base64" | "base64url") : 见下文说明
  format = <data-format>
  length = xsd:nonNegativeInteger
  src = <data>
  type = xsd:string : 见下文说明
  xml:base = <uri>
  xml:id = ID
  xml:lang = xsd:string
  xml:space = ("default" | "preserve")
  Content: #PCDATA | (Metadata.class*, chunk+) | (Metadata.class*, source+)
</data>

如果使用简单数据嵌入,即 data 元素的内容为一个或 多个文本节点,则可以指定 encoding 属性; 如果未指定,则必须被视为 base64。 如果使用 chunked 或带来源数据嵌入,即 data 元素的内容 包含任何子 chunksource 元素,则 不得指定 encoding 属性; 如果指定,则为了内容处理的目的必须忽略它。

如果指定了 length 属性,则它必须表示 data 元素所表示字节序列中的已解码字节数。 解码时,如果指定的 length 值与已解码字节数不匹配, 则必须返回零长度字节序列。 如果未指定 length 属性,则该数据资源被视为具有等于实际已解码字节数的 长度。 使用带来源数据嵌入时,不得指定 length 属性。

注:

length 属性的意图是提供一种对已解码数据执行简单 完整性检查的方法。注意,此检查不保证 传输期间的数据完整性,即数据可能在不修改 length 的情况下被修改。

如果使用简单或 chunked 数据嵌入,则必须指定 type 属性, 且它必须对应于数据资源的媒体(内容)类型。在这些情况下,如果 没有已定义类型,则应使用类型 application/octet-stream。 在带来源数据嵌入的情况下,已解析 source 元素的媒体(内容)类型 用作类型。

如果 type 属性未指定 或未解析,或被指定为通用类型, 例如 application/octet-stream,并且已知有关被引用数据资源的其他格式信息, 但该信息无法 以 Media Type [MIME Media Types] 参数表达, 则可以指定 format 属性作为 给内容处理器的提示。

以下示例说明简单数据嵌入的使用。

示例片段 – 数据定义上下文中的简单数据嵌入
<head>
  <resources>
    <data xml:id="sharedImageData" type="image/png" length="119">
      iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
      YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAMSURBVBhXY2BgYAAAAAQAAVzN/2kAAAAASUVORK5CYII=
    </data>
    <image xml:id="sharedImage">
      <source src="#sharedImageData"/>
    </image>
  </resources>
</head>
...
<body xmlns:tts="http://www.w3.org/ns/ttml#styling">
  <div tts:backgroundImage="#sharedImage"/>
  <div tts:backgroundImage="#sharedImage"/>
</body>

示例片段 – 元数据数据绑定上下文中的简单数据嵌入
<div>
  <metadata xmlns:ttm="http://www.w3.org/ns/ttml#metadata">
    <ttm:desc>caption with metadata containing tunneled data</ttm:desc>
    <data encoding="base64">
      TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0aGlz
      IHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1c3Qgb2Yg
      dGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0aGUgY29udGlu
      dWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRo
      ZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4=
    </data>
  </metadata>
  <p>Caption with Tunneled Data</p>
</div>

示例片段 – Source 数据绑定上下文中的简单数据嵌入
<div>
  <image>
    <source>
      <data type="image/png" length="119">
        iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAMSURBVBhXY2BgYAAAAAQAAVzN/2kAAAAASUVORK5CYII=
      </data>
    </source>
  </image>
</div>

9.1.4 font

font 元素用于定义或引用字体 资源

font 元素可以作为 resources 元素的子级出现, 称为 字体定义上下文

font 元素接受 零个或多个 Metadata.class 元素组中的元素作为子级,后接 零个或多个 source 元素。

XML 表示 – 元素信息项:font
<font
  condition = <condition>
  family = xsd:string
  range = <unicode-range>
  style = ("normal" | "italic" | "oblique") : 见下文说明
  src = <font>
  type = xsd:string
  weight = ("normal" | "bold") : 见下文说明
  xml:base = <uri>
  xml:id = ID
  xml:lang = xsd:string
  xml:space = ("default" | "preserve")
  Content: Metadata.class*, source*
</font>

font 元素通过以下方式定义字体资源: (1) 引用内置数据资源, (2) 引用外部数据资源,或 (3) 定义或引用嵌入数据 资源, 其中数据资源包含字体内容。

如果 font 元素指定了 src 属性,则它不得指定 子 source 元素。反之, 如果 font 元素未指定 src 属性,则它必须指定 一个或多个 子 source 元素。

如果 font 元素指定了 src 属性,并且其值未 引用 包围文档实例的片段,则它应指定 type 属性,在这种情况下, type 属性的值必须对应于 被引用资源的媒体(内容)类型。否则,不得指定 type 属性。

如果指定了 familyrangestyleweight 属性中的任一属性,则 它们会覆盖实际字体资源的 family name、受支持字符范围、style 和 weight。 特别是, 如果指定的属性值与编码在字体资源中的这些字体特征值不同,则 应使用指定的属性值,而不是 字体资源中编码的字体特征。

如果未指定 familyrangestyleweight 属性中的任一属性,则其值 必须被视为等于编码在字体资源中的同名字体特征值。

注:

建议作者尽可能使用子集字体。子集字体是语法上有效的 字体资源, 它移除了未引用的字形和未引用的字形度量。通常,子集字体 与特定文档绑定,因为它可能是 基于该文档的实际字符内容生成的。

出于解引用(下载)字体资源的目的, 内容处理器 可以推迟下载过程,直到字体资源内容对于执行必要的 (转换或呈现)处理而言成为必需时再下载。

以下示例说明 font 元素的使用。

示例片段 – Font
...
<head>
  <resources>
    <data xml:id="lastResortFont" type="application/font-woff">
      ... base64 encoded data ...
    </data>
    <font family="MyFont" range="u+20-7f,u+90-9f">
      <source src="http://example.com/fonts/myfont.otf" type="font/otf"/>
      <source src="#lastResortFont"/>
    </font>
  </resources>
</head>
...
<p tts:fontFamily="MyFont">use my font or last resort font</p>
...

9.1.5 image

image 元素用于定义或引用图像资源

image 元素可以出现在两个上下文中:(1) 作为 resources 元素的子级, 以及 (2) 作为 Block.class 元素组中元素的子级, 即作为 divp 元素的子级,或 作为 span 元素的子级。前者 称为 图像定义上下文,后者称为图像呈现上下文

image 元素出现在图像 定义上下文中时,它 作为图像资源的可共享定义, 可由另一个 image 元素或由 tts:backgroundImage 样式属性 在包围文档实例中引用。

注:

图像资源的可共享定义会指定 xml:id 属性,以便由 图像呈现上下文中的 image 元素或 tts:backgroundImage 样式 属性 引用。

image 元素出现在图像呈现上下文中时,它 作为图像资源的不可共享定义, 并隐含呈现(渲染)语义。

注:

图像资源的不可共享定义可以指定 xml:id 属性,也可以不指定; 但此 标识符不会被其他 image 元素引用,或者即使被引用, 该引用也会被忽略。

image 元素作为 div 元素的子级出现时, 其呈现会产生渲染该图像的块区域;即,在 image 元素之前和之后隐含块边界。相比之下, 当 image 元素作为 pspan 元素的子级出现时,其呈现会产生渲染该图像的行内区域;即,在 image 元素之前和之后不隐含块边界。

注:

[CSS2] 中,这些语义将分别对应于 image 元素关联了值为 blockinlinedisplay 样式属性。

tts:backgroundImage 样式属性引用的 图像资源的呈现 不得影响内容布局。

image 元素接受 零个或多个 Metadata.class 元素组中的元素作为子级,后接 零个或多个 Animation.class 元素组中的元素, 后接 零个或多个 source 元素。

注:

对于执行 [construct anonymous spans] 过程而言, image 元素的任何文本节点后代都不是有意义的文本节点。

XML 表示 – 元素信息项:image
<image
  animate = IDREFS
  begin = <time-expression>
  condition = <condition>
  dur = <time-expression>
  end = <time-expression>
  region = IDREF
  src = <image>
  style = IDREFS
  timeContainer = ("par" | "seq")
  type = xsd:string
  xlink:arcrole = <uri-list>
  xlink:href = <uri>
  xlink:role = <uri-list>
  xlink:show = ("new" | "replace" | "embed" | "other" | "none") : new
  xlink:title = xsd:string
  xml:base = <uri>
  xml:id = ID
  xml:lang = xsd:string
  xml:space = ("default" | "preserve")
  {any attributes in TT Style Namespaces}
  {any attributes in TT Metadata Namespace}
  Content: Metadata.class*, Animation.class*, source*
</image>

image 元素通过以下方式定义图像资源: (1) 引用内置数据资源, (2) 引用外部数据资源,或 (3) 定义或引用嵌入数据 资源, 其中数据资源包含图像内容。

如果 image 元素指定了 src 属性,则它不得指定 子 source 元素。反之, 如果 image 元素未指定 src 属性,则它必须指定 一个或多个 子 source 元素。

如果 image 元素指定了 src 属性,并且其值未 引用 包围文档实例的片段,则它应指定 type 属性,在这种情况下, type 属性的值必须对应于 被引用资源的媒体(内容)类型。否则,不得指定 type 属性。

image 元素可以指定 tts:extent 样式属性,以便在图像的固有宽度或高度信息不可用或意图被覆盖时, 指定图像的呈现宽度或高度。如果此属性同时指定在 图像呈现 上下文中的 image 元素上,以及 前者所引用的图像定义 上下文中的 image 元素上,则 前者上指定的属性优先于后者上指定的属性。 对适用 tts:extent 样式属性的图像进行呈现时,需要执行 (可能为变形的) 缩放操作,以获得指定 extent 的宽度和高度。

链接属性 xlink:* 可用于使用指定的位置(href)、角色和标题, 将 image 元素与相关内容链接。链接激活的行为 受 xlink:show 属性影响, 其精确含义由文档处理上下文确定。

image 出现在图像定义 上下文中时,适用以下附加 约束:

  1. 属性 animatebegindurendregiontimeContainer 不得指定;如果出现,则必须为呈现处理的目的忽略它们;

  2. Animation.class 元素组中的元素 不得 作为子元素出现;如果出现,则必须为呈现处理的目的忽略它们。

以下示例说明 image 元素的使用。

示例片段 – 外部图像资源
<div>
  <p>This division has a content image that appears as a block area after this paragraph.</p>
  <image src="http://example.com/images/caption.png" type="image/png"/>
<div>
...
<div tts:backgroundImage="http://example.com/images/background.png">
  <p>This division has a background image that appears under this paragraph.</p>
<div>
...

示例片段 – 可共享嵌入图像资源
<head>
  <resources>
    <data xml:id="caption" type="image/png" length="119">
      iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
      YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAMSURBVBhXY2BgYAAAAAQAAVzN/2kAAAAASUVORK5CYII=
    </data>
  </resources>
</head>
<body>
  <div>
    <p>
      <image>
        <source src="#caption"/>
      </image>
    <p>
    ...
    <p>
      <image>
        <source src="#caption"/>
      </image>
    <p>
  </div>
</body>

示例片段 – 带不可共享图像后备的外部图像资源
<div>
  <image>
    <source src="http://example.com/images/caption.png" type="image/png"/>
    <source>
      <data type="image/png" length="119">
        iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAMSURBVBhXY2BgYAAAAAQAAVzN/2kAAAAASUVORK5CYII=
      </data>
    </source>
  </image>
</div>

注:

image 元素整合并扩展了 [SMPTE ST 2052-1] 中引入的 #image 扩展的能力。特别是, 引用内容图像smpte:backgroundImage 属性可以映射到一个 image 元素, 其 src 属性等于 smpte:backgroundImage 属性的值。

9.1.6 resources

resources 元素是一个容器元素,用于对 嵌入内容的定义进行分组,包括适用于此嵌入内容的元数据。

resources 元素接受零个或多个 Metadata.class 元素组中的元素作为子级, 后接零个或多个 Data.classEmbedded.classFont.class 元素组中的元素。

XML 表示 – 元素信息项:resources
<resources
  xml:base = <uri>
  xml:id = ID
  xml:lang = xsd:string
  xml:space = ("default" | "preserve")
  Content: Metadata.class*, (Data.class|Embedded.class|Font.class)*
</resources>

在时间语义适用于 resources 元素内容的范围内,该元素的隐含时间区间 定义为与根时间 范围共终止。

9.1.7 source

source 元素用于指定 嵌入内容资源的来源。

source 元素接受 零个或多个 Metadata.class 元素组中的元素作为子级,后接零个或一个 data 元素。

如果 source 元素指定了 src 属性,则它不得指定 子 data 元素;在这种情况下, 如果 src 属性引用外部 资源,则称为 外部 source;或者 如果 src 属性引用 包围文档实例中的嵌入资源, 则称为非嵌套嵌入 source

如果 source 元素未指定 src 属性,则它必须指定 子 data 元素;在这种情况下, 它称为 嵌套嵌入 source

source 元素不得有祖先 source 元素。

XML 表示 – 元素信息项:source
<source
  condition = <condition>
  format = <data-format>
  src = <data>
  type = xsd:string
  xml:base = <uri>
  xml:id = ID
  xml:lang = xsd:string
  xml:space = ("default" | "preserve")
  Content: Metadata.class*, data?
</source>

如果指定了 format 属性, 则它提供关于嵌入内容格式(即形式语法)的附加提示信息。 在未定义标准媒体(内容)类型 标签,或该信息无法以 Media Type 参数 [MIME Media Types] 表达的情况下, 此类信息可能很有用。根据 source 元素的使用上下文,此属性的值可能受到进一步 约束。

如果指定了 src 属性, 且其值引用包围 文档实例的片段, 则必须存在一个 data 元素, 它是 resources 元素的子级,并由该片段标识;即具有 xml:id 属性, 其值与片段标识符匹配。

如果指定了 src 属性, 且其值未引用 包围文档实例的片段,则 应指定 type 属性, 在这种情况下,它必须对应于被引用资源的媒体(内容)类型。

如果指定了 src 属性, 且其值确实引用 包围文档实例的片段,则 不得指定 type 属性; 相反,嵌入资源的内容类型由被引用或嵌入的 data 元素上的 type 属性的值确定。

以下示例说明 source 元素的使用。

示例片段 – 外部 Source
...
<image>
  <source src="http://example.com/images/caption.png" type="image/png"/>
</image>
...

示例片段 – 非嵌套嵌入 Source
...
<data xml:id="caption" type="image/png" length="119">
  iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
  YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAMSURBVBhXY2BgYAAAAAQAAVzN/2kAAAAASUVORK5CYII=
</data>
...
<image>
  <source src="#caption"/>
</image>
...

示例片段 – 嵌套嵌入 Source
...
<image>
  <source>
    <data type="image/png" length="119">
      iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
      YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAMSURBVBhXY2BgYAAAAAQAAVzN/2kAAAAASUVORK5CYII=
    </data>
  </source>
</image>
...

9.2 嵌入内容属性词汇

本节定义以下属性,供某些嵌入内容元素词汇使用:

9.2.1 encoding

encoding 属性用于指定数据的编码格式。

encoding 属性可由以下 元素类型的实例指定:

如果指定,encoding 属性的值必须取 [Data Encodings] 所定义的以下值之一:

  • base16

  • base32

  • base32hex

  • base64

  • base64url

如果未指定,则适用 base64 语义。

9.2.2 format

format 属性用于指定关于 嵌入内容资源的媒体(内容)格式的提示,这些提示超出 type 属性所提供的媒体(内容)类型信息。

注:

在没有已注册媒体(内容)类型的情况下, format 属性很有用, 例如,当没有可用的媒体(内容)类型,或使用了通用类型(如 application/octet-stream)时。

format 属性可由以下 元素类型的实例指定:

format 属性的值必须遵守 <data-format> 表达式。

根据使用上下文,可能适用附加约束。

9.2.3 src

src 属性用于指定映射到数据资源位置的位置或标识符。

src 属性可由以下 元素类型的实例指定:

如果指定,src 属性的值必须遵守 <uri> 值语法。

根据使用上下文,可能适用附加约束。

9.2.4 type

type 属性用于指定数据资源的媒体(内容)类型,并且 可以表达表征该数据的附加 参数。

type 属性可由以下 元素类型的实例指定:

如果指定,type 属性的值必须遵守 [MIME] §5.1 所定义的 Content-Type MIME 标头的值语法。

如果未指定,则媒体(内容)类型未知或被有意未指定。

当解码指定了 type 属性的数据资源时,内容处理 必须遵守指定类型,无论它是否正确。也就是说,如果 type 属性错误地指定了 数据资源的类型,则内容处理不得尝试通过执行内容 嗅探来覆盖该类型。

9.3 嵌入内容值表达式

嵌入内容元素以及某些样式属性值使用以下 表达式:

9.3.1 <audio>

<audio> 值表达式用于通过引用指定音频 资源

语法表示 – <audio>
<audio>
  : <uri>

如果 <audio> 值表达式采用裸 片段标识符形式, 则该片段标识符必须引用 包围文档实例resources 元素的子 audio 元素。

如果 <audio> 值表达式取值为 http://www.w3.org/ns/ttml/resource/#empty, 则被引用的音频资源空数据资源

如果 <audio> 值表达式取值为 http://www.w3.org/ns/ttml/resource/#speech,则如果 语音合成处理器受支持且已启用, 被引用的音频资源语音数据资源; 否则(如果语音合成处理器 不受支持,或虽受支持但已禁用), 则被引用的音频资源空数据资源

9.3.2 <data>

<data> 值表达式用于通过引用指定数据资源。

语法表示 – <data>
<data>
  : <uri>

如果 <data> 值表达式采用 片段标识符形式, 则该片段标识符必须引用 包围文档实例resources 元素的子 data 元素。

9.3.3 <data-format>

<data-format> 表达式用于指定数据资源的格式。在 数据资源缺少已注册媒体(内容)类型的情况下,附加 格式信息很有用。

语法表示 – <data-format>
<data-format>
  : xsd:NCName
  | <uri>

如果 format 表达式采用 <uri> 值的形式, 则它必须表达绝对 URI。

注:

本规范不对与数据内容一起使用的 format token 集进行标准化。 鼓励作者使用 常用 token;如果没有,则添加前缀 "x-" 以形成 私用 token。

9.3.4 <font>

<font> 表达式用于通过引用指定字体资源

语法表示 – <font>
<font>
  : <uri>

如果 <font> 表达式采用 片段标识符形式, 则该片段标识符必须引用 包围文档实例resources 元素的子 font 元素。

9.3.5 <image>

<image> 表达式用于通过引用指定图像 资源

语法表示 – <image>
<image>
  : <uri>

如果 <image> 表达式采用 片段标识符形式, 则该片段标识符必须引用 包围文档实例resources 元素的子 image 元素。

9.3.6 <unicode-range>

<unicode-range> 表达式用于通过枚举单个码点或码点范围 指定一组 Unicode 码点。

语法表示 – <unicode-range>
<unicode-range>
  : range (<lwsp>? "," <lwsp>? range)*

range
  : codepoint
  | codepoint "-" codepoint

codepoint
  : ("U"|"u") "+" hexdigit-or-wildcard{1,6}

hexdigit-or-wildcard
  : <hex-digit>
  | "?"

10 样式

本节规定核心词汇目录中的 styling 事项,其中 styling 应理解为一种可分离的信息层,它适用于 内容,并表示作者关于该内容呈现的意图。

TTML 中包含样式属性,是为了使呈现的作者意图 能够包含在自包含文档中。本节根据标准处理 模型描述样式呈现的语义。TTML 处理器不要求以任何特定方式呈现文档 实例; 但是,由提供与此模型一致的外部可观察结果的 TTML 呈现 处理器 实现此模型,很可能带来与文档作者所预期体验非常接近的 用户体验。

注:

TTML 样式呈现的语义根据 [XSL-FO 1.1] 中定义的布局和格式化模型描述。 本节中属性的效果 旨在与此模型兼容;但是,呈现代理 可以使用任何技术来满足文档的作者意图。例如,可以使用 [CSS2] 处理器 来实现其与此模型共有的特性。

本规范未定义 <?xml-stylesheet ... ?> 处理指令的任何规范性用法。

本节定义的样式属性可由任何允许使用 TT 样式命名空间中属性的元素类型指定;但是,这些属性仅作为样式属性 应用于每个属性定义所指明的那些元素类型。 此外, 除非元素类型定义明确允许,否则不应在某个元素上指定 TT 样式命名空间中的属性, 除非该属性适用于该元素,或表示可继承的 样式属性。 如果它不适用于该元素且不表示可继承的样式属性,则为了 非验证处理的目的必须忽略它。在验证 处理的情况下, 此类用法应报告为警告。

为了确定样式属性的适用性,如果样式属性被定义为 适用于 span 元素,则它也适用于 匿名 span 元素。

10.1 样式元素词汇

以下元素指定 文档实例的结构和主要样式方面:

10.1.1 initial

initial 元素用于修改一个或多个样式属性的初始值, 即指定使用不同于 规范所定义初始值的值。

initial 元素接受零个或多个 metadata 元素作为其子级。

XML 表示 – 元素信息项:initial
<initial
  condition = <condition>
  xml:base = <uri>
  xml:id = ID
  xml:lang = xsd:string
  xml:space = ("default" | "preserve")
  {any attributes in TT Style Namespaces}
  Content: Metadata.class*
</initial>

如果多个 initial 元素为同一样式属性指定初始值, 则 最后指定的值(按前序遍历顺序)适用。

以下示例说明 initial 元素,其中 tts:color 属性的初始值被定义为 yellow

示例片段 – initial
...
<head>
  <styling>
    <initial tts:color="yellow"/>
  <styling>
<head>
...

10.1.2 style

style 元素用于定义 一组样式规范,这些规范按照 10.4.4.2 指定样式集 处理 表示为指定样式集。

style 元素接受零个或多个 metadata 元素作为其子级。

XML 表示 – 元素信息项:style
<style
  condition = <condition>
  style = IDREFS
  xml:base = <uri>
  xml:id = ID
  xml:lang = xsd:string
  xml:space = ("default" | "preserve")
  {any attributes in TT Style Namespaces}
  Content: Metadata.class*
</style>

如果 style 元素作为 region 元素的后代出现,则在按照 10.4.1.2 引用样式10.4.1.3 链式引用 样式 定义计算引用样式时,必须忽略该 style 元素。

注:

也就是说,当某个元素使用引用样式来 引用 style 元素时,被引用的 style 元素必须作为 styling 元素的后代出现, 而不能出现在任何其他上下文中。

注:

如果 condition 属性适用于 style 元素,并且该 condition 求值为 false, 则其嵌套样式和内联样式会被忽略;但是,通过引用样式或链式引用样式 包含的样式不会被忽略。 更多细节参见 10.4.4.2 指定样式集 处理

10.1.3 styling

styling 元素是一个容器元素,用于对 样式事项进行分组,包括适用于样式事项的元数据。

styling 元素接受零个或多个 Metadata.class 元素组中的元素作为子级, 后接零个或多个 initial 元素, 后接零个或多个 style 元素。

XML 表示 – 元素信息项:styling
<styling
  xml:base = <uri>
  xml:id = ID
  xml:lang = xsd:string
  xml:space = ("default" | "preserve")
  Content: Metadata.class*, initial*, style*
</styling>

在时间语义适用于 styling 元素内容的范围内,该元素的隐含时间区间 定义为与根时间 范围共终止。

10.2 样式属性词汇

本节定义了与某些动画元素、内容元素、某些 布局元素和样式定义元素一起使用的 10.2.1 style 属性。

此外,本节规定 TT 样式命名空间中的以下属性, 供样式定义元素、某些布局元素以及支持内联样式规范的内容元素 使用:

除上述视觉样式属性外,本节还规定 TT 音频样式命名空间中的以下音频样式 属性, 供样式定义元素和支持内联样式规范的内容元素 使用:

本节定义的每个样式属性(以及相应属性)都使用 样式属性定义表, 该表 指定样式的以下一个或多个方面:值语法、初始值、 样式在语义上适用的元素、样式是否继承、百分比 值如何解释(如适用)、 样式是否(以及如何)可动画化,以及语义基础(派生)。

对于可动画化样式,术语 discrete 指使用 set 元素,或使用其 <calculation-mode>discrete 值的 animate 元素。 术语 continuous 指使用其 <calculation-mode>linearpacedspline 值的 animate 元素。术语 none 表示样式 不可动画化。

注:

本规范对基于 [XSL-FO 1.1] 定义的同名属性的样式属性使用 lowerCamelCased 本地 名称。 此约定同样扩展到这些 属性的 token 值。

注:

可继承样式属性可以表示为 region 元素或 内容元素类型上的指定属性, 而不取决于该属性是否适用于该 元素类型。此能力允许在该属性 不适用的祖先元素上表达可继承的 样式属性。

注:

由于本规范(以及它引用的模式)关于 如何指定样式属性的一般语法,特别是为了支持继承, 作者可能会无意中在某个元素上指定不可继承的样式属性, 而该属性既不适用于该元素,也不适用于其任何后代,但从内容有效性的角度来看仍然 符合要求。内容作者可能希望使用 TTML 内容验证工具来检测并警告此类用法。

10.2.1 style

style 属性由引用样式关联使用, 用于引用一个或多个 style 元素,其中每个元素都定义一个样式(属性) 集。

style 属性可由以下 元素类型的实例指定:

如果指定,style 属性的值必须 遵守 [XML Schema Part 2] §3.3.10 所定义的 IDREFS 数据类型,并且此外,每个 IDREF 必须引用一个 styling 元素为其祖先的 style 元素。

如果同一 IDREF,ID1,在 style 属性的值中出现多次,则其间应有一个介于中间的 IDREF,ID2, 其中 ID2 不等于 ID1

注:

此约束旨在阻止使用冗余的引用样式,同时 仍允许同一样式被多次引用,以便可能覆盖先前 引用的样式,例如,当在 IDREFS 列表中引用了一个介于中间的、不同的样式时。

注:

关于其语义的更多信息,参见允许使用 style 属性的特定元素类型定义,以及 10.4.1.2 引用样式10.4.1.3 链式 引用样式

10.2.2 tts:backgroundClip

tts:backgroundClip 属性用于指定一个样式属性,该属性 决定背景在其中被绘制的背景绘制矩形

值: "border" | "content" | "padding"
初始值: border
适用于: body, div, image, p, region, span
继承:
百分比: N/A
可动画化: discrete
语义基础: backgroundClip 派生

以下示例说明 tts:backgroundClip 样式。

示例片段 – Background Clip
<region xml:id="r1">
  <style tts:extent="306px 114px"/>
  <style tts:backgroundColor="red"/>
  <style tts:backgroundOrigin="padding"/>
  <style tts:padding="27px 72px"/>
  <style tts:backgroundRepeat="noRepeat"/>
  <style tts:backgroundImage="#blue102px57px"/>
  <style tts:backgroundClip="content"/>
</region>

示例呈现 – Background Clip
TTML backgroundClip style property

10.2.3 tts:backgroundColor

tts:backgroundColor 属性用于指定一个样式属性,该属性 定义区域或由流入区域的内容生成的区域的背景颜色。

值: <color>
初始值: transparent
适用于: body, div, image, p, region, span
继承:
百分比: N/A
可动画化: discrete; continuous
语义基础: backgroundColor 派生

以下示例说明 tts:backgroundColor 样式。

示例片段 – Background Color
<region xml:id="r1">
  <style tts:extent="306px 114px"/>
  <style tts:backgroundColor="red"/>
  <style tts:color="white"/>
  <style tts:displayAlign="after"/>
  <style tts:padding="3px 30px"/>
</region>
...
<p region="r1" tts:backgroundColor="purple" tts:textAlign="center">
  Twinkle, twinkle, little bat!<br/>
  How <span tts:backgroundColor="green">I wonder</span> where you're at!
</p>

示例呈现 – Background Color
TTML backgroundColor style property

10.2.4 tts:backgroundExtent

tts:backgroundExtent 属性可用于指定背景图像的范围(尺寸), 独立于图像的固有范围(尺寸)。

值: <extent>
初始值: auto
适用于: body, div, image, p, region, span
继承:
百分比: 相对于适用的背景定位 矩形的宽度和高度
可动画化: discrete
语义基础: backgroundExtent 派生

如果此属性的值为 auto,则样式属性的计算值 必须被视为与关联背景图像的固有范围(尺寸)相同。

如果此属性的值为 contain,则样式属性的计算值 通过执行 [compute containment scaling] 过程确定, 其中目标矩形 TR 被初始化为图像的固有宽度和高度, 参考矩形 RR 被设置为背景定位矩形, 并且目标矩形 TR 的所得输出值即为计算值。

如果此属性的值为 cover,则样式属性的计算值 通过执行 [compute cover scaling] 过程确定, 其中目标矩形 TR 被初始化为图像的固有宽度和高度, 参考矩形 RR 被设置为背景定位矩形, 并且目标矩形 TR 的所得输出值即为计算值。

如果此属性的值由两个 <measure> 规范组成,则第一个规范分别是此属性计算值的 width, 第二个规范是 height; 在这种情况下,两个 <measure> 规范 都必须解析(或可解析)为非负长度。

如果此样式属性的计算值不同于图像的固有范围(尺寸), 则图像栅格会在每个维度上独立缩放, 以匹配计算出的 extent 值。

如果不支持与此属性关联的属性计算值, 则呈现处理器必须使用最接近的 受支持值。

注:

在此上下文中,短语 最接近的受支持值 表示 使计算出的背景范围与受支持的背景范围之间的欧几里得距离 最小的值。如果存在多个与 计算值等距的最接近受支持值,则使用离 [0,0] 最远的值, 即范围最大的值。

此用于解析 最接近的受支持值 的规则使用最近较大的 受支持距离,而不是最近较小的受支持距离。

以下示例说明 tts:backgroundExtent 样式。

示例片段 – Background Extent
<region xml:id="r1">
  <style tts:extent="306px 114px"/>
  <style tts:backgroundColor="red"/>
  <style tts:backgroundRepeat="noRepeat"/>
  <style tts:backgroundImage="#blue102px57px"/>
  <style tts:backgroundExtent="cover"/>
</region>

示例呈现 – Background Extent
TTML backgroundExtent style property

10.2.5 tts:backgroundImage

tts:backgroundImage 属性用于指定一个样式属性,该属性 指示要作为 区域或由流入区域的内容生成的区域的背景图像来渲染的背景非内容图像

tts:backgroundImage 属性不应引用用于表示实际内容的内容图像, 例如字幕的栅格图像渲染。相反,tts:backgroundImage 的使用应限于对元素背景进行样式化,其中内容由 其他方式表示。如果有必要 使用栅格图像表示内容,则应通过块上下文或行内上下文中的 image 元素来表达。

值: "none" | <image>
初始值: none
适用于: body, div, image, p, region, span
继承:
百分比: N/A
可动画化: discrete
语义基础: backgroundImage 派生

与此样式属性一起使用的 <image> 表达式 可以直接引用外部图像资源; 但是,作者应避免这样做,而应将其使用限制为仅引用 image 子级,这些子级属于 resources 元素。

注:

通过 image 元素间接引用图像,使得 可以将图像指定为嵌入数据资源, 并指定 有关图像的附加信息,例如其内容类型等。此外,通过 利用 image 元素中多个 source 子级的使用, 可以指定特定分辨率的图像和后备图像资源

由与背景图像关联的元素生成的区域,其内容矩形的范围不受背景图像 解析范围的影响。

注:

TTML1 的某些 profile,例如 [SMPTE ST 2052-1] 及其 依赖 profile,指定背景图像会影响 由关联元素生成的区域的内容矩形范围。在这些 profile 与 TTML2 之间转换时, 此类背景图像应映射为 image 元素, 而不是 tts:backgroundImage 属性。

以下示例说明 tts:backgroundImage 样式。

示例片段 – 使用嵌入图像资源的背景图像
<head>
  <resources>
    <image xml:id="blue102px57px">
      <source>
        <data type="image/png" length="119">
          iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
          YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAMSURBVBhXY2BgYAAAAAQAAVzN/2kAAAAASUVORK5CYII=
        </data>
      </source>
    </image>
  </resources>
</head>
...
<region xml:id="r1">
  <style tts:extent="306px 114px"/>
  <style tts:backgroundColor="red"/>
  <style tts:backgroundClip="padding"/>
  <style tts:backgroundRepeat="noRepeat"/>
  <style tts:backgroundImage="#blue102px57px"/>
  <style tts:padding="27px 72px"/>
</region>

示例呈现 – Background Image
TTML backgroundImage style property

10.2.6 tts:backgroundOrigin

tts:backgroundOrigin 属性用于指定一个样式属性,该属性 决定背景在其中被定位的背景定位 矩形

值: "border" | "content" | "padding"
初始值: padding
适用于: body, div, image, p, region, span
继承:
百分比: N/A
可动画化: discrete
语义基础: backgroundOrigin 派生

以下示例说明 tts:backgroundOrigin 样式。

示例片段 – Background Origin
<region xml:id="r1">
  <style tts:extent="306px 114px"/>
  <style tts:backgroundColor="red"/>
  <style tts:backgroundRepeat="noRepeat"/>
  <style tts:backgroundImage="#blue102px57px"/>
  <style tts:backgroundOrigin="content"/>
</region>

示例呈现 – Background Origin
TTML backgroundOrigin style property

10.2.7 tts:backgroundPosition

tts:backgroundPosition 属性用于指定一个样式属性,该属性 定义背景图像是否以及如何在区域或由流入区域的内容生成的区域中定位。

值: <position>
初始值: 0% 0%
适用于: body, div, image, p, region, span
继承:
百分比: 见说明
可动画化: discrete
语义基础: backgroundPosition 派生

水平位置偏移的百分比值分量,相对于 背景定位矩形的宽度减去 背景图像的宽度。 垂直位置偏移的百分比值分量,相对于 背景定位矩形的高度减去 背景图像的高度。

以下示例说明 tts:backgroundPosition 样式。

示例片段 – Background Position
<region xml:id="r1">
  <style tts:extent="306px 114px"/>
  <style tts:backgroundColor="red"/>
  <style tts:backgroundRepeat="noRepeat"/>
  <style tts:backgroundImage="#blue102px57px"/>
  <style tts:backgroundPosition="center"/>
</region>

示例呈现 – Background Position
TTML backgroundPosition style property

10.2.8 tts:backgroundRepeat

tts:backgroundRepeat 属性用于指定一个样式属性,该属性 定义背景图像是否以及如何被重复(平铺)到区域或由流入区域的内容生成的区域中。

值: "repeat" | "repeatX" | "repeatY" | "noRepeat"
初始值: repeat
适用于: body, div, image, p, region, span
继承:
百分比: N/A
可动画化: discrete
语义基础: backgroundRepeat 派生

以下示例说明 tts:backgroundRepeat 样式。

示例片段 – Background Repeat
<region xml:id="r1">
  <style tts:extent="306px 114px"/>
  <style tts:backgroundColor="red"/>
  <style tts:backgroundImage="#blue102px57px"/>
  <style tts:backgroundRepeat="repeatX"/>
</region>

示例呈现 – Background Repeat
TTML backgroundRepeat style property

10.2.9 tts:border

tts:border 属性用于指定一个样式属性,该属性 定义区域或由流入区域的内容生成的区域的边框。

注:

当应用于 region 时,边框作为 region 范围的内嵌应用,也就是说, region 区域的内容矩形会因应用于 region 的边框存在而 减小。

值: <border>
初始值: none
适用于: body, div, image, p, region, span
继承:
百分比: N/A
可动画化: discrete; continuous(仅颜色)
语义基础: border 派生

如果 tts:border 属性的值中未指定边框厚度, 则边框厚度必须解释为就像指定了 medium 的厚度一样。

如果不支持与此属性关联的边框厚度计算值, 则呈现处理器必须使用最接近的 受支持值。

注:

在此上下文中,短语 最接近的受支持值 表示 使计算出的边框厚度与受支持的边框厚度之间的一维欧几里得距离 在每条边上最小的值。如果对于给定边,存在多个与 计算值等距的最接近受支持值,则使用距离 0 最近的值, 即最小边框厚度。

如果 tts:border 属性的值中未指定边框样式, 则边框样式必须解释为就像指定了 none 的样式一样。

如果不支持与此属性关联的边框样式计算值, 则呈现处理器必须使用 solid 值。

如果 tts:border 属性的值中未指定边框颜色, 则边框颜色必须解释为就像指定了等于 元素 tts:color 样式属性计算值的颜色一样。

如果 tts:border 属性的值中未指定边框半径, 则边框半径必须解释为就像指定了 0 的半径一样。

如果不支持与此属性关联的边框半径计算值, 则呈现处理器必须使用最接近的 受支持值。

注:

在此上下文中,短语 最接近的受支持值 表示使 计算出的边框半径与受支持的边框半径 最小化的值。

以下示例说明 tts:border 样式。

示例片段 – Border
<region xml:id="r1">
  <style tts:extent="306px 114px"/>
  <style tts:border="2px solid red"/>
  <style tts:color="white"/>
  <style tts:displayAlign="center"/>
  <style tts:padding="3px 30px"/>
</region>
...
<p region="r1" tts:border="4px solid green" tts:textAlign="center">
  Twinkle, twinkle, little bat!<br/>
  How <span tts:border="8px solid blue">I wonder</span> where you're at!
</p>

示例呈现 – Border
TTML border style property

以下示例说明带圆角的 tts:border 样式。

示例片段 – 带圆角的 Border
<style xml:id="roundedBorder" tts:border="2px solid lime 10px" tts:backgroundColor="black"/>
...
<div tts:color="white" tts:textAlign="center">
  <p style="roundedBorder">Border rounding on a <br/>p element.</p>
  <p>
    <span style="roundedBorder">Border rounding on span</span>
    <br/>
    <span style="roundedBorder">A shorter span</span>
  </p>
</div>

示例呈现 – Border rounding
TTML border style property

10.2.10 tts:bpd

tts:bpd 属性用于指定 块进展维度,或更简洁地说,指定由流入区域的内容生成的区域的 bpd

注:

术语 块进展维度 以相对于书写模式的方式解释, 使得 bpd 始终对应于块 进展方向上的距离。因此,在水平书写模式中,bpd 表达 垂直距离, 而在垂直书写模式中,bpd 表达水平距离, 其中水平和垂直始终按绝对意义解释。

值: <measure>
初始值: auto
适用于: body, div, p, span
继承:
百分比: 见说明
可动画化: discrete
语义基础: bpd 派生

如果 <measure> 表示为 <length> 值,则它必须为非负。

如果在 span 元素上指定了 tts:bpd 属性, 并且适用于该元素的 tts:display 属性的计算值 不是 inlineBlock, 则 tts:bpd 的语义仅在计算任何适用背景颜色或图像的块进展 维度时适用; 但是,生成区域的内容矩形维度不会改变。

如果在此属性的 <length> 表达式中使用百分比值, 则它相对于生成区域的包含区域 (最近的祖先区域)的适用绝对 维度来解析。

注:

与此属性一起使用的 <length> 表达式 与特定的、相对于书写模式的维度关联,然后根据适用书写模式 解析为绝对维度。 如果该绝对维度是垂直(水平)维度, 则百分比值按参考区域(最近的祖先区域)的相同垂直(水平) 绝对维度解析。

以下示例说明 tts:bpd 样式。

示例片段 – 块进展维度
<p tts:fontSize="24px" tts:lineHeight="48px" tts:bpd="96px">
  the woods are <span tts:display="inlineBlock" tts:bpd="36px">getting green</span> ...
</p>

注:

在上例中,p 元素上的 tts:bpd 属性 为该段落所生成块区域的内容矩形高度 分配固定维度,而 span 元素上的 tts:bpd 属性 为该 span 所生成的行内块区域的内容矩形高度分配固定 维度。

10.2.11 tts:color

tts:color 属性用于指定一个样式属性,该属性 定义与由流入区域的内容生成的区域关联的标记的前景颜色。

值: <color>
初始值: 见说明
适用于: span
继承:
百分比: N/A
可动画化: discrete; continuous
语义基础: color 派生

tts:color 属性的初始值 被视为依赖于实现。在没有 最终用户偏好信息的情况下,符合要求的呈现处理器 应使用与根容器区域背景颜色 形成高对比度的初始值。

以下示例说明 tts:color 样式。

示例片段 – Color
<region xml:id="r1">
  <style tts:backgroundColor="black"/>
  <style tts:color="white"/>
  <style tts:displayAlign="after"/>
  <style tts:textAlign="center"/>
</region>
...
<p region="r1">
  In spring, when woods are <span tts:color="green">getting green</span>,<br/>
  I'll try and tell you what I mean.
</p>

示例呈现 – Color
TTML color style property

10.2.12 tts:direction

tts:direction 属性用于指定一个样式属性,该属性根据 使用上下文, 决定 (1) 双向段落级别,或 (2) 双向 嵌入或覆盖的方向性, 相关内容见 [UAX9]

值: "ltr" | "rtl"
初始值: ltr
适用于: p, span
继承: 是,但见特殊 语义
百分比: N/A
可动画化: discrete
语义基础: direction 派生

当应用于 p 元素时,此属性的计算值会按照 [UAX9] §4.3 Higher Level Protocol HL1 的规定,显式建立 段落级别

当应用于 span 元素(或匿名 span)时,此属性的计算值会与 tts:unicodeBidi 样式属性的计算值结合,按照 [UAX9] §4.3 Higher Level Protocol HL3 的规定,确定双向嵌入或覆盖的方向性。

如果不支持与此属性关联的属性计算值, 则呈现处理器必须使用 ltr 值。

以下示例说明 tts:direction 样式。

示例片段 – Direction
<p>
The title of the book is
"<span tts:unicodeBidi="embed" tts:direction="rtl">نشاط التدويل، W3C</span>"
</p>

示例呈现 – Direction
TTML direction style property
10.2.12.1 Direction 的特殊语义

执行样式解析处理时(见 10.4.4 样式解析 处理), region 元素 Rtts:direction 计算值的解析 按以下有序规则确定,其中第一个适用的规则生效:

  1. 如果在 R 上指定了 tts:direction 属性, 则计算值 tts:direction 为指定值;

  2. 如果在 R 上指定了 tts:writingMode 属性, 则计算值 tts:direction 是由 Rtts:writingMode 的计算值确定的 行内进展方向

  3. 否则,tts:direction 的计算值为初始值。

注:

如上确定的 region 元素上的 tts:direction 计算值,实际上会成为 受region 样式继承语义约束的元素 所继承的 tts:direction 值。

对于任何其他元素 E,其中 E 不是 region 元素, tts:writingMode 属性的存在与否 不会影响 Etts:direction 计算值的解析。

10.2.13 tts:disparity

tts:disparity 属性用于指定要应用的双目视差, 以模拟立体视觉(立体深度)。零视差对应于显示平面; 负值对应于显示平面前方的深度; 正值对应于显示平面后方的深度。 关于视差与感知深度之间关系的详细信息,见 [SMITH]

值: <length>
初始值: 0px
适用于: region;关于 divp,见 特殊用法
继承:
百分比: 相对于根容器 区域的宽度
可动画化: discrete; continuous
语义基础: disparity 派生

在立体图像对的右(左)图像上渲染 region 时,region 的中心 沿水平轴偏移一个等于 tts:disparity 计算值的 ½(-½)的值,其中正偏移向右, 负偏移向左。

除非渲染到立体图像对上,否则为了呈现处理的目的会忽略 tts:disparity 属性。

作者应确保在 region 可见的整个期间,该 region 的感知深度位于 场景中任何对象的前方。如果场景中的某个对象被感知为位于该 region 前方, 则立体效果将被破坏。

如果不支持与此属性关联的属性计算值, 则呈现处理器必须使用最接近的 受支持值。

注:

在此上下文中,短语 最接近的受支持值 表示 使计算视差与受支持视差之间的欧几里得距离 最小的值。如果存在多个与 计算值等距的最接近受支持值,则使用距离 0 最近的值。

注:

通常,立体内容的呈现依赖于 子像素(抗锯齿)渲染技术;因此,将经视差调整的位置 量化为整数值的实现 可能会产生不良副作用。当适用平滑的视差动画时,这一点尤其 令人不安,例如, 当作者试图在主体与其关联文本之间保持恒定距离时。

以下示例片段和呈现说明 tts:disparity 样式。 注意,在典型电视场景中,视差范围为屏幕宽度的 -1% 到 2%。 此示例使用 5% 的视差,为了说明清楚而夸大了视差效果。

示例片段 – Disparity
<region xml:id="r1">
  <style tts:extent="80% 10%"/>
  <style tts:origin="10% 10%"/>
  <style tts:disparity="5%"/>
	...
</region>
...
<p region="r1">
  Stereoscopic
</p>

示例呈现 – Disparity(左图和右图)
TTML disparity style property
10.2.13.1 Disparity 的特殊用法

当在 divp 上例外指定 tts:disparity 时,适用 11.1.2.1 行内动画的特殊 语义

10.2.14 tts:display

tts:display 属性用于指定一个样式属性,该属性 定义元素是否是在 region 中进行布局和合成的候选项。

值: "auto" | "none" | "inlineBlock"
初始值: auto
适用于: body, div, image, p, region, span
继承:
百分比: N/A
可动画化: discrete
语义基础: display 派生

如果此属性的值为 auto, 则受影响元素是 region 布局和 呈现的候选项;但是,如果该值为 none,则 受影响元素及其后代必须被视为不具备 region 布局和呈现资格。

如果此属性的值为 inlineBlock,并且此属性应用于 span 元素,则 适用行内块显示语义,并且该元素 是 region 布局和呈现的候选项。此外,如果 inlineBlock 值应用于任何不是 span 元素的元素,则被视为错误。

以下示例说明 tts:display 样式。

示例片段 – Display
<region xml:id="r1">
  <style tts:extent="369px 119px"
            tts:backgroundColor="black"
            tts:color="white"
            tts:displayAlign="before"
            tts:textAlign="start"/>
</region>
...
<div region="r1">
  <p dur="5s">
    [[[
    <span tts:display="none">
      <set begin="1s" dur="1s" tts:display="auto"/>
      Beautiful soup,
    </span>
    <span tts:display="none">
      <set begin="2s" dur="1s" tts:display="auto"/>
      so rich and green,
    </span>
    <span tts:display="none">
      <set begin="3s" dur="1s" tts:display="auto"/>
      waiting in a hot tureen!
    </span>
    ]]]
  </p>
</div>

示例呈现 – Display
TTML display style property - [0,1)
TTML display style property - [1,2)
TTML display style property - [2,3)
TTML display style property - [3,4)
TTML display style property - [4,5)

10.2.15 tts:displayAlign

tts:displayAlign 属性用于指定一个样式属性,该属性 定义块进展方向上块区域的对齐。

值: "before" | "center" | "after" | "justify"
初始值: before
适用于: body, div, p, region
继承:
百分比: N/A
可动画化: discrete
语义基础: displayAlign 派生

如果此属性的值为 justify,则 块进展维度中的(未使用)可用空间 会在此属性所适用元素生成的块区域的块区域子级之间 均匀分布。

如果不支持与此属性关联的属性计算值, 则呈现处理器必须使用 before 值。

以下示例说明 tts:displayAlign 样式。

示例片段 – Display Align
<region xml:id="r1">
  <style tts:extent="128px 66px" tts:origin="0px 0px"
       tts:backgroundColor="black" tts:color="white"/>
  <style tts:displayAlign="before"/>
  <style tts:textAlign="start"/>
</region>
<region xml:id="r2">
  <style tts:extent="192px 66px" tts:origin="128px 66px"/>
       tts:backgroundColor="green" tts:color="white"/>
  <style tts:displayAlign="after"/>
  <style tts:textAlign="start"/>
</region>
<region xml:id="r3">
  <style tts:extent="128px 66px"/> style tts:origin="0px 132px"
       tts:backgroundColor="black" tts:color="white"/>
  <style tts:displayAlign="before"/>
  <style tts:textAlign="start"/>
</region>
<region xml:id="r4">
  <style tts:extent="192px 66px" tts:origin="128px 198px"/>
       tts:backgroundColor="green" tts:color="white"/>
  <style tts:displayAlign="after"/>
  <style tts:textAlign="start"/>
</region>
...
<div>
  <p region="r1">I sent a message to the fish:</p>
  <p region="r2">I told them<br/> "This is what I wish."</p>
  <p region="r3">The little fishes of the sea,</p>
  <p region="r4">They sent an<br/> answer back to me.</p>
</div>

示例呈现 – Display Align
TTML displayAlign style property

10.2.16 tts:extent

tts:extent 属性可用于以下目的:

  1. 指定根容器区域widthheight, 其效果是定义 文档坐标空间, 相关内容见 H.3 坐标空间

  2. 指定或覆盖 内容 regionwidthheight

  3. 指定图像的 widthheight, 覆盖其固有范围。

注:

如果对 region 应用了 border 或 padding 中任一者(或二者), 则该 region 的 extent 包含该 border 和 padding, 即 border 和 padding 都作为内嵌应用,因此位于 region 的 extent 内部。

值: <extent>
初始值: auto
适用于: tt, region, image;关于 divp,见 特殊用法
继承:
百分比: 相对于根 容器区域的宽度和高度
可动画化: discrete
语义基础: extent 派生

如果在 tt 元素上指定了 tts:extent 属性, 则指定值限制为以下之一: (1) auto 关键字, (2) contain 关键字,或 (3) 两个 <length> 规范, 其中这些规范表示为使用像素单位的非百分比、确定长度。 所有其他语法上合法的值不得在此上下文中使用,并且 如果使用,则为了验证处理的目的必须被视为错误, 并且为了呈现处理的目的必须被忽略,在这种情况下适用初始值 (auto)。

如果在 region 元素上指定了 tts:extent 属性, 则其计算值决定关联内容 regionwidthheight

如果在 image 元素上指定了 tts:extent 属性,则其计算 值决定该图像的 widthheight

如果在 divp 元素上指定了 tts:extent 属性,则适用 10.2.16.1 Extent 的特殊用法 指定的语义。

如果此属性的值为 auto,则其关联属性的计算值 按如下方式确定:

  1. 如果该属性适用于 tt 元素,则 auto 解释为就像指定了值 contain 一样;

  2. 如果该属性直接或间接适用于 region 元素,则 auto 解释为就像指定了值 “100% 100%” 一样;

  3. 如果该属性适用于 image 元素,则 auto 解释为就像使用两个基于像素的 <length> 分量指定了等于图像固有 extent 的值一样, 例如 “200px 100px”。

注:

此属性允许由单个关键字 "auto" 组成的值,以及 另一个由两个关键字 "auto auto" 组成的值。这两个不同的 值具有不同含义且并不等价。 特别是,单个关键字值 "auto" 具有上文紧接描述的语义; 但是,两个关键字值 "auto auto" 由两个 <measure> 表达式组成,每个表达式都使用 <measure> 关键字 auto, 其定义见 10.3.24 <measure>

如果此属性的值为 contain,则其关联属性的计算值 按如下方式确定:

  1. 如果该属性适用于 tt 元素,则 containH 根容器区域语义中的规定解释;

  2. 如果该属性适用于 region 元素, 则计算值通过执行 [compute containment scaling] 过程确定, 其中目标矩形 TR 被初始化为 region 内容的固有块内容 extent, 参考矩形 RR 被设置为根容器区域的 extent, 并且目标矩形 TR 的所得输出值即为计算 值;

  3. 如果该属性适用于 image 元素, 则计算值通过执行 [compute containment scaling] 过程确定, 其中目标矩形 TR 被初始化为图像的 固有图像 extent, 参考矩形 RR 根据当前格式化上下文分别是块格式化 上下文还是行内格式化上下文, 被设置为包含块区域或行区域中的可用内容空间, 并且目标矩形 TR 的所得输出值即为计算 值。

如果此属性的值为 cover,则其关联属性的计算值 按如下方式确定:

  1. 如果该属性适用于 region 元素, 则计算值通过执行 [compute cover scaling] 过程确定, 其中目标矩形 TR 被初始化为 region 内容的固有块内容 extent, 参考矩形 RR 被设置为根容器区域的 extent, 并且目标矩形 TR 的所得输出值即为计算 值;

  2. 如果该属性适用于 image 元素, 则计算值通过执行 [compute cover scaling] 过程确定, 其中目标矩形 TR 被初始化为图像的 固有图像 extent, 参考矩形 RR 根据当前格式化上下文分别是块格式化 上下文还是行内格式化上下文, 被设置为包含块区域或行区域中的可用内容空间, 并且目标矩形 TR 的所得输出值即为计算 值。

如果此属性的值由两个 <measure> 规范组成,则它们必须解释为 widthheight, 其中第一个规范是 width,第二个规范是 height, 在这种情况下,两个 <measure> 规范都必须解析(或可解析)为非负长度。

如果不支持与此属性关联的属性计算值, 则呈现处理器必须使用最接近的 受支持值。

注:

在此上下文中,短语 最接近的受支持值 表示 使计算出的 extent 与受支持的 extent 之间的欧几里得距离 最小的值。如果存在多个与 计算值等距的最接近受支持值,则使用离 [0,0] 最远的值, 即 extent 最大的值。

此用于解析 最接近的受支持值 的规则使用最近较大的 受支持距离,而不是最近较小的受支持距离。 这种处理差异的理由是, 使用较大的 extent 能确保受影响内容包含在 region 区域中而不会导致 region 溢出, 而使用较小的 extent 更可能造成 region 溢出。

以下示例说明 tts:extent 样式。

示例片段 – Extent
<region xml:id="r1">
  <style tts:extent="330px 122px"/>
  <style tts:backgroundColor="black"/>
  <style tts:color="white"/>
  <style tts:displayAlign="after"/>
  <style tts:textAlign="center"/>
</region>
...
<p region="r1">
  'Tis the voice of the Lobster:<br/>
  I heard him declare,<br/>
  "You have baked me too brown,<br/>
  I must sugar my hair."
</p>

示例呈现 – Extent
TTML extent style property
10.2.16.1 Extent 的特殊用法

当在 divp 上例外指定 tts:extent 时,适用 11.1.2.1 行内动画的特殊 语义

10.2.17 tts:fontFamily

tts:fontFamily 属性は、region に流し込まれたコンテンツによって 生成されるグリフ 領域について、グリフが選択されるフォントファミリーを定義する スタイルプロパティを指定するために使用される。

値: <font-families>
初期値: default
適用対象: span
継承: はい
パーセント値: 該当なし
アニメーション可能: discrete
セマンティック基礎: fontFamily の導出

注:

初期値 default は汎用フォントファミリー名であり、 下記の 10.3.19 <generic-family-name> でさらに説明される。

span に適用されることに加えて、 p 要素上のこのプロパティの算出値は、 10.2.27 tts:lineHeight で規定されるように、 tts:lineHeight 属性に関連付けられた スタイルプロパティの normal 値を解決するために使用される。

この属性に関連付けられたプロパティの算出値がサポートされない場合、 提示プロセッサは、算出されたフォントファミリーを 類似の組版特性を持つサポート済みフォントファミリーに対応付けることを試みなければならず、 そのような対応付けがない場合は値 default を使用しなければならない。

tts:fontFamily スタイルを次の例に示す。

例断片 – Font Family
<region xml:id="r1">
  <style tts:extent="474px 146px"/>
  <style tts:backgroundColor="black"/>
  <style tts:color="white"/>
  <style tts:displayAlign="center"/>
  <style tts:textAlign="start"/>
  <style tts:fontFamily="proportionalSansSerif"/>
</region>
...
<div region="r1">
  <p>
    "The time has come," the Walrus said,<br/>
    "to talk of many things:
  </p>
  <p tts:textAlign="end" tts:fontFamily="monospaceSerif">
    Of shoes, and ships, and sealing wax,<br/>
    Of cabbages and kings,
  </p>
  <p>
    And why the sea is boiling hot,<br/>
    and whether pigs have wings."
  </p>
</div>

例レンディション – Font Family
TTML fontFamily スタイルプロパティ

10.2.18 tts:fontKerning

tts:fontKerning 属性は、 グリフ 領域を位置決めするときにフォントカーニングが適用されるかどうかを決定する スタイルプロパティを指定するために使用される。

値: "none" | "normal"
初期値: normal
適用対象: span
継承: はい
パーセント値: 該当なし
アニメーション可能: discrete
セマンティック基礎: fontKerning の導出

この属性の値が normal である場合、カーニングデータが利用可能であれば カーニングが適用されるべきである。 この属性の値が none である場合、カーニングデータが利用可能かどうかに かかわらずカーニングは適用されるべきではない。

この属性に関連付けられたプロパティの算出値がサポートされない場合、 提示プロセッサは値 normal を使用しなければならない。

tts:fontKerning スタイルを次の 例に示す。

例断片 – Font Kerning
<p>
  WAVE<br/>
  <span tts:fontKerning="none">WAVE</span>
</p>

例レンディション – Font Kerning
TTML fontKerning スタイルプロパティ

10.2.19 tts:fontSelectionStrategy

tts:fontSelectionStrategy 属性は、提示処理中に可能なフォントのリストから フォントを選択するときに適用される戦略を決定するスタイルプロパティを 指定するために使用される。

値: "auto" | "character"
初期値: auto
適用対象: span
継承: はい
パーセント値: 該当なし
アニメーション可能: discrete
セマンティック基礎: fontSelectionStrategy の導出

このプロパティの提示セマンティクスは、[XSL-FO 1.1] §7.9.3 で定義されるものであり、 選択基準の集合は次のプロパティを含むように拡張される。

フォント選択基準を満たすフォントリソースから選択する場合、 font 要素によって参照される フォントリソースは、アプリケーションまたはシステムによって供給される フォントリソースよりも優先される。

この属性に関連付けられたプロパティの算出値がサポートされない場合、 提示プロセッサは値 auto を使用しなければならない。

tts:fontSelectionStrategy スタイルを次の 例に示す。

例断片 – Font Selection Strategy
<p tts:fontFamily="font1,font2">
  <span tts:fontSelectionStrategy="character">&#xE000;&#x20DD;</span>
</p>

注:

上記の例では、font1 フォントファミリーに関連付けられた フォントリソースは、単一文字 &#xE000; を対応付けるグリフを含むが、 コンテキスト文字列全体 &#xE000;&#x20DD; または単一文字 &#x20DD; のいずれを対応付けるグリフも含まないと考える。 さらに、 font2 フォントファミリーに関連付けられたフォントリソースは、 完全なコンテキスト文字列に対する対応付け、および単一文字 &#x20DD; に対する対応付けを含むと考える。

著者が font2 による完全なコンテキスト文字列への対応付けを 受け入れてよい場合、値 auto が使用される(明示的に、または初期値の既定化によって)。 しかし、著者が &#xE000;font1 により対応付け、&#x20DD;font2 により対応付けたい場合、値 character が 指定される。この例では、著者は後者の挙動を望むため、値 character を指定している。

10.2.20 tts:fontShear

tts:fontShear 属性は、 グリフ領域にせん断変換が適用されるかどうか、 およびどのように適用されるかを決定するスタイルプロパティを指定するために使用される。

値: <percentage>
初期値: 0%
適用対象: span
継承: はい
パーセント値: 本文参照
アニメーション可能: discrete
セマンティック基礎: fontShear の導出

この属性が適用される各グリフ領域について、 10.4.5.3 せん断計算で 規定されるように、グリフ領域に 2D せん断変換を適用する。

tts:fontShear スタイルを次の例に示す。

例断片 – Font Shear
<p region="horizontal">
  <span tts:fontShear="16.78842%">三日坊主</span><br/>
  <span tts:fontShear="50%">三日坊主</span><br/>
  <span tts:fontShear="64.333%">三日坊主</span>
</p>
<p region="vertical">
  <span tts:fontShear="16.78842%">三日坊主</span><br/>
  <span tts:fontShear="50%">三日坊主</span><br/>
  <span tts:fontShear="64.333%">三日坊主</span>
</p>

例レンディション – Font Shear
TTML fontShear スタイルプロパティ
例断片 – 負の値を伴う Font Shear
<p region="horizontal">
  <span tts:fontShear="-16.78842%">三日坊主</span><br/>
  <span tts:fontShear="-50%">三日坊主</span><br/>
  <span tts:fontShear="-64.333%">三日坊主</span>
</p>
<p region="vertical">
  <span tts:fontShear="-16.78842%">三日坊主</span><br/>
  <span tts:fontShear="-50%">三日坊主</span><br/>
  <span tts:fontShear="-64.333%">三日坊主</span>
</p>

例レンディション – 負の値を伴う Font Shear
TTML fontShear スタイルプロパティ

10.2.21 tts:fontSize

tts:fontSize 属性は、region に流し込まれたコンテンツによって 生成されるグリフ 領域について、選択されるグリフのフォントサイズを定義する スタイルプロパティを指定するために使用される。

値: <font-size>
初期値: 1c
適用対象: span
継承: はい。ただし 10.2.21.1 フォントサイズの特別なセマンティクス を除く
パーセント値: region 要素でない場合、 最も近い祖先スタイル付き 要素の算出フォントサイズに相対的。そうでなければ 算出セルサイズに相対的
アニメーション可能: discrete
セマンティック基礎: fontSize の導出

単一の <length> 値が指定される場合、この長さは グリフの EM 正方形の水平サイズおよび垂直サイズを等しく決定する。 2 つの <length> 値が指定される場合、第 1 の値は 水平サイズを決定し、第 2 の値は垂直サイズを決定する。

水平サイズおよび垂直サイズが独立して表される場合、 <length> 値の単位は同じでなければならない。

注:

グリフの EM 正方形は、慣例上、そのグリフを含むフォントの EM 正方形として定義される。 すなわち、グリフは、そのフォントの EM 正方形とは別個の EM 正方形を持たない。

この属性に現れる相対 <length> 値、すなわちパーセント(%)、 セル(c)、または EM(em)単位で表される値は、 幅成分と高さ成分の 2 つの成分から構成される参照 2 次元サイズ値に関連して解決される。 相対単位がパーセントである場合、参照値は、最も近いスタイル付き祖先要素の フォントサイズの算出値、または 算出セルサイズのいずれかである。 相対単位がセル(c)である場合、参照値は 算出セルサイズである。 相対単位が EM(em)である場合、参照値はパーセント単位が 使用されたかのように決定され、ここで 1em100% に等しい。

単一の相対 <length> 値が指定される場合、 この <length> は参照値の高さ成分に関して 解決される。 2 つの相対 <length> 値が指定される場合、 第 1 の <length> は参照値の幅成分に関して 解決され、第 2 の <length> は参照値の高さ 成分に関して解決される。

注:

アナモルフィックフォントスケーリング、すなわち独立した(かつ別個の)水平サイズおよび 垂直サイズにスケールされたフォントは、著者が狭いまたは広いフォントフェイスを 合成したい場合や、著者が非正方形セル単位に基づくフォントサイズを使用したい場合など、 多くのコンテキストで使用されることが期待される。

注:

提示プロセッサは、フォントリソース内で 定義される EM 正方形の高さが算出フォントサイズの高さに一致するように、 そのフォントに適したアルゴリズムを使用してグリフをスケールすることが期待される。 アナモルフィックフォントスケーリングが使用される場合、すなわち算出フォントサイズの幅が 算出フォントサイズの高さと異なる場合、提示プロセッサはさらに、幅と高さの比率によって EM 正方形をアナモルフィックにスケールし、ひいては提示されるグリフも同じ比率で スケールされることを確実にすることが期待される。

フォントサイズを表すために使用される <length> 値は非負でなければならない。

この属性の値が <length> 成分上に c 単位を指定する場合、 それは 10.3.22 <length> によって定義されるセル長さ単位の 高さ(のみ)または幅と高さ(の両方)の観点から解決される。すなわち、 算出セルサイズの観点から解決される。

注:

たとえば、段落(p)要素 P を考える。 算出セルサイズが (24px,36px) であり、 tts:fontSize="1c"P 上に指定される場合、 tts:fontSize の算出値は (36px,36px) に解決される一方、 tts:fontSize="1c 1c"P 上に指定される場合、 その算出値は (24px,36px) に解決される。

この属性の値が <length> 成分上に em 単位を指定する場合、 それは同等のパーセント値が指定されたかのように扱われ、ここで 1em100% に等しい。

注:

たとえば、段落(p)要素 P の子である span 要素 S を考える。 P 上の tts:fontSize の算出値が (18px,24px) であり、 tts:fontSize="1em"S 上に指定される場合、 これは 100% を指定することと等価であり、 (24px,24px) に解決される。しかし、tts:fontSize="1em 1em"S 上に指定される場合、 これは 100% 100% を指定することと等価であり、(18px,24px) に解決される。

span に適用されることに加えて、 p 要素上のこのプロパティの算出値は、 10.2.27 tts:lineHeight で規定されるように、 tts:lineHeight 属性に関連付けられた スタイルプロパティの normal 値を解決するために使用される。

この属性に関連付けられたプロパティの算出値がサポートされない場合、 提示プロセッサは、最も近い サポート値を使用しなければならない。

注:

このコンテキストで、句 最も近いサポート値とは、 算出されたフォントサイズとサポートされるフォントサイズとの間のユークリッド距離が 最小化される値を意味する。算出値から等距離にある複数の最も近いサポート値が 存在する場合、0(単一長さ指定)または [0,0](2 つの長さ指定)から 最も遠い値、すなわち最大のフォントサイズが使用される。

tts:fontSize スタイルを次の例に示す。

例断片 – Font Size
<region xml:id="r1">
  <style tts:extent="299px 97px"/>
  <style tts:backgroundColor="black"/>
  <style tts:color="white"/>
  <style tts:displayAlign="center"/>
  <style tts:textAlign="center"/>
  <style tts:fontFamily="proportionalSansSerif"/>
  <style tts:fontSize="18px"/>
</region>
...
<p region="r1">
  Then fill up the glasses<br/>
  with treacle and ink,<br/>
  Or anything else<br/>
  that is <span tts:fontSize="24px">pleasant</span> to drink.
</p>

例レンディション – Font Size
TTML fontSize スタイルプロパティ
10.2.21.1 Font Size の特別なセマンティクス

この属性に関連付けられたプロパティの算出値は 2 タプルから構成され、 その項目はそれぞれフォントサイズの幅成分および高さ成分の算出値を表す。

span 要素に適用され、 その tts:ruby の算出値が textContainer または text のいずれかである場合、 tts:fontSize の算出値を解決するとき、 次の特別な継承規則が適用される。

ルビテキストコンテナは、それが 明示的であるか 暗黙的であるかにかかわらず、 その親から tts:fontSize を 継承しない。 代わりに、それが明示的ルビ テキストコンテナであり、 tts:fontSize 属性を指定しない場合、 またはそれが 暗黙的ルビテキストコンテナである場合、 最も近い祖先ルビコンテナ上の tts:fontSize の算出値の 50% に 等しい値が適用される。そうでなければ、指定値が適用される。

span 要素のうち、 tts:ruby の算出値が text であるものが tts:fontSize 属性を指定しない場合、 それは親の ルビテキストコンテナから tts:fontSize の算出値を継承する。 それが明示的であるか 暗黙的ルビテキストコンテナであるかは問わない。

10.2.22 tts:fontStyle

tts:fontStyle 属性は、region に流し込まれたコンテンツによって 生成されるグリフ領域について選択されるグリフに 適用するフォントスタイルを定義するスタイルプロパティを指定するために使用される。 ここで、フォントスタイル値から特定のフォントフェイスまたはスタイルの パラメータ化への対応付けは、この仕様によって決定されない。

値: "normal" | "italic" | "oblique"
初期値: normal
適用対象: span
継承: はい
パーセント値: 該当なし
アニメーション可能: discrete
セマンティック基礎: fontStyle の導出

oblique の使用は、 インライン進行方向における(角度未指定の)せん断変換を表す。

span に適用されることに加えて、 p 要素上のこのプロパティの算出値は、 10.2.27 tts:lineHeight で規定されるように、 tts:lineHeight 属性に関連付けられた スタイルプロパティの normal 値を解決するために使用される。

この属性に関連付けられたプロパティの算出値がサポートされない場合、 提示プロセッサは値 normal を使用しなければならない。

tts:fontStyle スタイルを次の例に示す。

例断片 – Font Style
<region xml:id="r1">
  <style tts:extent="331px 84px"/>
  <style tts:backgroundColor="black"/>
  <style tts:color="white"/>
  <style tts:displayAlign="after"/>
  <style tts:textAlign="center"/>
  <style tts:fontFamily="proportionalSansSerif"/>
</region>
...
<p region="r1">
  In autumn, when the leaves are brown,<br/>
  Take pen and ink, and <span tts:fontStyle="italic">write it down.</span>
</p>

例レンディション – Font Style
TTML fontStyle スタイルプロパティ

10.2.23 tts:fontVariant

tts:fontVariant 属性用于启用排版字形变体的选择。

值: <font-variant>
初始值: normal
适用于: span
继承:
百分比: N/A
可动画化: discrete
语义基础: fontVariant 派生

除适用于 span 外,此属性在 p 元素上的计算值 用于解析与 tts:lineHeight 属性关联的样式属性的 normal 值,如 10.2.27 tts:lineHeight 中所规定。

如果不支持与此属性关联的属性计算值, 则呈现处理器必须使用值 normal

以下示例说明 tts:fontVariant 样式。

示例片段 – Font Variant
<region xml:id="r1">
  <style tts:extent="376px 95px"/>
  <style tts:backgroundColor="black"/>
  <style tts:color="white"/>
  <style tts:displayAlign="center"/>
  <style tts:textAlign="center"/>
  <style tts:fontFamily="proportionalSansSerif"/>
</region>
...
<p region="r1">
  jumping <span tts:fontVariant="super">up</span> and
  <span tts:fontVariant="sub">down</span> in an agony of terror.
</p>

示例呈现 – Font Variant
TTML fontVariant style property

10.2.24 tts:fontWeight

tts:fontWeight 属性用于指定一个样式属性, 该属性定义要应用于为由流入区域的内容生成的字形区域 所选择字形的字体粗细,其中从字体 粗细值到特定字体字面或粗细参数化的映射 不由本规范确定。

值: "normal" | "bold"
初始值: normal
适用于: span
继承:
百分比: N/A
可动画化: discrete
语义基础: fontWeight 派生

除适用于 span 外,此属性在 p 元素上的计算值 用于解析与 tts:lineHeight 属性关联的样式属性的 normal 值,如 10.2.27 tts:lineHeight 中所规定。

如果不支持与此属性关联的属性计算值, 则呈现处理器必须使用值 normal

以下示例说明 tts:fontWeight 样式。

示例片段 – Font Weight
<region xml:id="r1">
  <style tts:extent="376px 95px"/>
  <style tts:backgroundColor="black"/>
  <style tts:color="white"/>
  <style tts:displayAlign="center"/>
  <style tts:textAlign="center"/>
  <style tts:fontFamily="proportionalSansSerif"/>
</region>
...
<p region="r1">
  They told me you had been to her,<br/>
  <span tts:fontWeight="bold">and mentioned me to him:</span><br/>
  She gave me a good character<br/>
  <span tts:fontWeight="bold">but said I could not swim.</span>
</p>

示例呈现 – Font Weight
TTML fontWeight style property

10.2.25 tts:ipd

tts:ipd 属性用于指定 行内进展维度,或更简洁地说,由流入区域的内容生成的区域的 ipd

注:

术语 行内进展维度 以相对于书写模式的方式解释, 使得 ipd 始终对应于行内 进展方向上的距离。因此,在水平书写模式中,ipd 表达 水平距离, 而在垂直书写模式中,ipd 表达垂直距离, 其中水平和垂直始终按绝对意义解释。

值: <measure>
初始值: auto
适用于: body, div, p, span
继承:
百分比: 见说明
可动画化: discrete
语义基础: ipd 派生

如果 <measure> 表示为 <length> 值,则它必须为非负。

如果在 span 元素上指定了 tts:ipd 属性, 并且适用于该元素的 tts:display 属性的计算值 不是 inlineBlock, 则 tts:ipd 的语义仅在计算任何适用背景颜色或图像的行内进展 维度时适用; 但是,生成区域的内容矩形维度不会改变。

如果在此属性的 <length> 表达式中使用百分比值, 则它相对于生成区域的包含区域 (最近的祖先区域)的适用绝对 维度来解析。

注:

与此属性一起使用的 <length> 表达式 与特定的、相对于书写模式的维度关联,然后根据适用书写模式 解析为绝对维度。 如果该绝对维度是水平(垂直)维度, 则百分比值按参考区域(最近的祖先区域)的相同水平(垂直) 绝对维度解析。

以下示例说明 tts:ipd 样式。

示例片段 – 行内进展维度
<p tts:fontSize="24px" tts:lineHeight="48px" tts:ipd="300px">
  the woods are <span tts:display="inlineBlock" tts:ipd="150px">getting green</span> ...
</p>

注:

在上例中,p 元素上的 tts:ipd 属性 为该段落所生成块区域的内容矩形宽度 分配固定维度,而 span 元素上的 tts:ipd 属性 为该 span 所生成的行内块区域的内容矩形宽度分配固定 维度。

10.2.26 tts:letterSpacing

tts:letterSpacing 属性用于指定一个样式属性,该属性 增大或减小字形区域之间的标称距离。

字母间距在行区域的开始或结束处没有影响,并且不得 应用于零前进量字形。此外,字母间距不得导致通常相连的 字形, 例如草写文字中使用的字形或草写字体中的字形,变为断开。

字母间距独立于字距调整和两端对齐而应用。根据所使用的 字体、 所呈现的文字,以及呈现处理器的能力,字距调整和 两端对齐中的任一者或二者都可以在字母间距之外同时应用。

值: "normal" | <length>
初始值: normal
适用于: span
继承:
百分比: N/A
可动画化: discrete
语义基础: letterSpacing 派生

normal 对应于指定零 (0) 的 <length> 值, 即既不扩展也不压缩相邻字形间距。

如果 <length> 值表示为正标量, 则相邻字形之间的空隙会按等于该 标量值的额外量扩展。 如果表示为负标量, 则相邻字形之间的空隙会按等于该 标量值的额外量压缩,可能导致 字形区域重叠,最大到导致 有效前进量为零 (0) 的量为止。

如果不支持与此属性关联的字母间距计算值, 则呈现处理器必须使用最接近的 受支持值。

注:

在此上下文中,短语 最接近的受支持值 表示 使计算出的字母间距与受支持的字母间距之间的一维欧几里得距离 最小的值。如果对于给定边存在 多个与计算值等距的最接近受支持值,则使用距离 0 最近的值。

以下示例说明 tts:letterSpacing 样式。

示例片段 – Letter Spacing
<p>
  WAVE<br/>
  <span tts:letterSpacing="20px">WAVE</span>
</p>

示例呈现 – Letter Spacing
TTML letterSpacing style property

10.2.27 tts:lineHeight

tts:lineHeight 属性用于指定一个样式属性,该属性 定义由流入区域的内容生成的行区域之间的基线间距。

注:

例外地,token lineHeight 中的术语 height 或短语 line height 指 与关联行区域的 块进展维度 相对应的轴, 在水平书写模式中为垂直轴, 但在垂直书写模式中为水平轴。

注:

line height 相关的更多信息参见 11.3.2.2 行堆叠

值: "normal" | <length>
初始值: normal
适用于: p
继承: 是,但见特殊 语义
百分比: 相对于此元素的字体大小
可动画化: discrete
语义基础: lineHeight 派生

注:

除了显式适用于 p 元素外,由 p 元素的 span 元素和 匿名 span 后代继承的此样式属性值,用于计算其生成的 行内区域half leading, 相关内容见 [XSL-FO 1.1] §4.5 和 [CSS2] §10.8.1。

如果此属性的值为 normal,则此样式属性的 使用值按如下方式确定:

  1. P 为此样式属性所适用的 p 元素。

  2. FFPtts:fontFamily 样式属性的计算值。

  3. FSPtts:fontSize 样式属性的计算值。

  4. F0 为按顺序将 FF 中每个字体族映射到一组可用字体时 获得的第一个字体, 其中该组可用字体会根据需要受到约束,以满足 Ptts:fontStyletts:fontWeighttts:fontVariant 样式属性的计算值。

  5. 如果 F0 关联的字体度量指定了高度 A、深度 D 和行间隙 G, 则将 LH 设置为 scaled(A)、scaled(D) 和 scaled(G) 之和, 其中 scaled(X) 表示按照字体大小 FS 缩放的字体度量 X

    注:

    这里引用的高度、深度和行间隙参数旨在 分别对应 OpenType [OFF] 字体的 OS/2 表中的 sTypoAscender-sTypoDescender,即 sTypoDescender 乘以负一 (-1), 以及 sTypoLineGap 字段 (或其他字体格式中的等价项)。此外,通常而言, 表达式 scaled(A) 和 scaled(D) 旨在分别对应 当关联属性 text-altitudetext-depth 使用 use-font-metrics 值时, [XSL-FO 1.1] 所采用的 text-altitudetext-depth 区域特质。

  6. 否则,LH 被视为依赖于实现;但是,在没有实现特定要求的情况下, 建议将 LH 设置为 FS 的 125%。

  7. 将此样式属性的使用值设置为 LH

注:

如果内容作者希望避免对 normal 产生不同解释的可能性,例如由于 可用字体集合的差异,则建议使用 <length> 值表达式来显式 指定 line height 值。

本规范的意图是使上述算法与 [XSL-FO 1.1][CSS2] 兼容。

如果指定为 <length>,则该长度必须 为非负。

如果不支持与此属性关联的属性计算值, 则呈现处理器必须使用最接近的 受支持值。

注:

在此上下文中,短语 最接近的受支持值 表示 使计算出的 line height 与受支持的 line height 之间的欧几里得距离 最小的值。如果存在多个与 计算值等距的最接近受支持值,则使用距离 0 最远的值, 即使用最大的 line height。

以下示例说明 tts:lineHeight 样式。

示例片段 – Line Height
<region xml:id="r1">
  <style tts:extent="255px 190px"/>
  <style tts:backgroundColor="black"/>
  <style tts:color="white"/>
  <style tts:displayAlign="center"/>
  <style tts:textAlign="start"/>
  <style tts:fontFamily="proportionalSansSerif"/>
  <style tts:fontSize="16px"/>
  <style tts:lineHeight="32px"/>
</region>
...
<p region="r1">
  He thought he saw an elephant,<br/>
  That practised on a fife:<br/>
  He looked again, and found it was<br/>
  A letter from his wife.<br/>
  "At length I realise," he said,<br/>
  "The bitterness of Life.
"</p>

示例呈现 – Line Height
TTML lineHeight style property
10.2.27.1 Line Height 的特殊语义

当此属性的指定值为 normal 时,计算值即为 指定值;因此, 在应用继承语义时,值 normal 是继承值。 但是,当此计算值用于执行段落布局时,它会进一步 处理以获得如上所述的 使用值

10.2.28 tts:lineShear

tts:lineShear 属性用于指定一个样式属性,该属性 决定是否以及如何对由 p 元素生成的每个 行区域应用剪切变换。

值: <percentage>
初始值: 0%
适用于: p
继承:
百分比: 见说明
可动画化: discrete
语义基础: lineShear 派生

对于此属性适用的每个行区域,按照 10.4.5.3 剪切计算的规定,对该 行区域应用 2D 剪切变换。

以下示例说明 tts:lineShear 样式。

示例片段 – Line Shear
<region xml:id="right" tts:writingMode="tbrl" tts:displayAlign="center" .../>
<region xml:id="left" tts:writingMode="tbrl" tts:displayAlign="center" .../>
...
<div>
  <p region="right" tts:lineShear="0%">
    山の<span tts:ruby="container"><span tts:ruby="base">遭難</span><span
    tts:ruby="text">そうなん</span></span><br/>
    <span tts:ruby="container"><span tts:ruby="base">最多</span><span
    tts:ruby="text">さいた</span></span><span tts:ruby="container"><span
    tts:ruby="base">年</span><span tts:ruby="text">ねん</span></span>
  </p>
  <p region="left" tts:lineShear="16.67%">
    山の<span tts:ruby="container"><span tts:ruby="base">遭難</span><span
    tts:ruby="text">そうなん</span></span><br/>
    <span tts:ruby="container"><span tts:ruby="base">最多</span><span
    tts:ruby="text">さいた</span></span><span tts:ruby="container"><span
    tts:ruby="base">年</span><span tts:ruby="text">ねん</span></span>
  </p>
</div>

示例呈现 – Line Shear - 带 Ruby 的竖排文字行
TTML lineShear style property

注:

在上例中,黄色线条是特定呈现处理器创建的装饰, 用于帮助调试布局问题。此类线条不是本规范定义的规范性 TTML 呈现 的一部分。 此处,这些装饰描绘了 (1) 由 region 元素生成的外部块 区域的边界, (2) 由 p 元素生成的外部块区域行区域子级的边界,以及 (3) 由隐含 ruby text container 生成的 行区域行内区域子级的边界。

此示例描绘了剪切(倾斜)变换如何作为整体应用于每个受影响的行区域;但是, 当要对一行应用 line shear 时,可分配给该行的可用距离, 即其在剪切变换前的最大行内进展维度 长度,会减少 B*sin(θ),其中 B 是该行区域的块进展维度, θ 是剪切角,以便将该行放入段落的外部块区域 的内容矩形中。

10.2.29 tts:luminanceGain

tts:luminanceGain 属性用于指定 region 的绝对亮度, 当其呈现需要比 [SRGB] 色彩空间所提供的动态范围更大的动态范围, 且该呈现需要绝对亮度值时使用。

注:

[SRGB] 色彩空间指定 80 cd∙m-2 的绝对参考白点 亮度。 因此,在 [SRGB] 空间中指定的颜色无法 可靠地与面向显示器、具有显著 更高峰值亮度的高动态范围(HDR)内容合成,例如使用 [ITU BT.2100-1] 中规定的感知量化器电光 传递函数(PQ EOTF)的内容。具体而言,

  • 如果 [SRGB] 颜色保持未缩放且场景的平均亮度 超过 80 cd∙m-2,则它们可能显得过暗;并且

  • 如果 [SRGB] 颜色被统一缩放到任意较大的 亮度,例如 10,000 cd∙m-2,则它们可能显得过亮。

值: <non-negative-number>
初始值: 1.0
适用于: region
继承:
百分比: N/A
可动画化: discrete; continuous
语义基础: luminanceGain 派生

tts:luminanceGain 属性关联的计算值适用于关联 region 内所有需要从 [SRGB] 颜色值转换为绝对亮度值的像素。生成绝对亮度 像素值的任何要求均派生自文档 处理上下文

注:

如果处理会生成绝对亮度像素值的图像,例如 符合 [PQ PNG] 的图像,被放置在也包含文本或 处理会生成 [SRGB] 像素值的图像的 region 中,并且要求输出绝对 亮度, 则只会变换 [SRGB] 像素值。

应用 tts:luminanceGain 时,region 的像素各分量的线性光输出值 (Cr, Cg, Cb) 定义为 80 ∙ tts:luminanceGain ∙ (r, g, b),其中 (r, g, b) 是该像素的归一化线性 [SRGB] 分量。

如果不支持与此属性关联的属性计算值, 则呈现处理器必须使用最接近的 受支持值。

以下示例说明 tts:luminanceGain 样式。

示例片段 – tts:luminanceGain
<region xml:id="r1">
  <style tts:extent="60% 20%"/>
  <style tts:origin="10% 70%"/>
  <style tts:backgroundColor="black"/>
  <style tts:color="white"/>
  <style tts:luminanceGain="3.8"/>
</region>
<region xml:id="r2">
  <style tts:extent="60% 20%"/>
  <style tts:origin="10% 10%"/>
  <style tts:backgroundColor="black"/>
  <style tts:color="white"/>
  <style tts:luminanceGain="1.0"/>
</region>
...
<p region="r1">
  The absolute luminance of the text in region one "r1" should be 3.8 times
  brighter than the absolute luminance of the text in region two "r2".
</p>
<p region="r2">
  Other text with the identity luminance adjustment (1.0).
</p>

亮度调整计算示例如下所述。

示例 – 使用 tts:luminanceGain 的绝对线性光输出计算
给定 tts:luminanceGain="1.5",颜色为 rgb(218,165,32) 的渲染像素各分量的绝对线性光输出 为 (82.37, 42.21, 0.82) ≈ 80 ∙ 1.5 ∙((218/255)2.4, (165/255)2.4, (32/255)2.4), 其中 2.4 的指数是 [SRGB] EOTF 应用的伽马校正。

注:

使用 tts:luminanceGain[SRGB] 像素合成到 HDR 像素上的详细示例, 在附录 Q.1 感知量化器 中提供。

注:

10.3.9 <color> 中所规定,将渲染的 文档实例的 region 合成到目标媒介上时,通常使用以目标媒介的逆 EOTF 编码的像素分量, 而不是以线性光表示的像素分量。因此,使用半透明 region 可能产生 感知上不同的结果,具体取决于目标 媒介所使用的逆 EOTF,尤其是在渲染的 文档实例的像素与目标媒介之间 存在较大亮度差异时。 因此,鼓励作者考虑涉及半透明 元素的视觉结果。

10.2.30 tts:opacity

tts:opacity 属性用于指定一个样式属性,该属性 定义与 region 或由流入区域的内容生成的区域关联的标记的不透明度 (或反之,透明度)。

当呈现到视觉媒介上时,region 的不透明度会以线性比例 均匀应用于定向到该 region 的内容产生的所有标记,在此之前会先将任何内容元素特定的 不透明度应用到该内容生成的区域。

值: <alpha>
初始值: 1.0
适用于: body, div, image, p, region, span
继承:
百分比: N/A
可动画化: discrete; continuous
语义基础: opacity 派生

以下示例说明 tts:opacity 样式。

示例片段 – Opacity
<p>
  <span tts:opacity="1.00">And </span>
  <span tts:opacity="0.75">then </span>
  <span tts:opacity="0.50">there </span>
  <span tts:opacity="0.25">were </span>
  <span tts:opacity="0.00">none.</span>
</p>

示例呈现 – Opacity
TTML opacity style property

10.2.31 tts:origin

tts:origin 属性用于指定 region 区域原点相对于根 容器区域原点的 xy 坐标。

如果在某个元素上同时指定了 tts:origintts:position 属性,且 tts:position 是受支持属性, 则为了呈现处理的目的,必须忽略 tts:origin 属性。

值: <origin>
初始值: auto
适用于: region;关于 divp,见 特殊用法
继承:
百分比: 相对于根 容器区域的宽度和高度
可动画化: discrete
语义基础: origin 派生

如果此属性的值由两个 <length> 规范组成, 则它们必须解释为 xy 坐标,其中第一个 规范是 x 坐标,第二个规范是 y 坐标。

如果此属性的值为 auto,则样式属性的计算值 必须被视为与根容器区域的原点相同。

如果不支持与此属性关联的属性计算值, 则呈现处理器必须使用最接近的 受支持值。

注:

在此上下文中,短语 最接近的受支持值 表示 使计算出的 origin 与受支持的 origin 之间的欧几里得距离 最小的值。如果存在多个与 计算值等距的最接近受支持值,则使用距离 [0,0] 最近的值, 即最接近坐标空间原点的值。

以下示例说明 tts:origin 样式。

示例片段 – Origin
<region xml:id="r1">
  <style tts:origin="40px 40px"/>
  <style tts:extent="308px 92px"/>
  <style tts:backgroundColor="black"/>
  <style tts:color="white"/>
  <style tts:displayAlign="center"/>
  <style tts:textAlign="center"/>
</region>
...
<p region="r1">
  "To dine!" she shrieked in dragon-wrath.<br/>
  "To swallow wines all foam and froth!<br/>
   To simper at a table-cloth!"
</p>

示例呈现 – Origin
TTML origin style property
10.2.31.1 Origin 的特殊用法

当在 divp 上例外指定 tts:origin 时,适用 11.1.2.1 行内动画的特殊 语义

10.2.32 tts:overflow

tts:overflow 属性用于指定一个样式属性,该属性 定义如果 region 的后代区域溢出其 extent,region 区域是否被裁剪。

值: "visible" | "hidden"
初始值: hidden
适用于: region
继承:
百分比: N/A
可动画化: discrete
语义基础: overflow 派生

如果此属性的值为 visible,则内容不应 在受影响 region 之外被裁剪。 如果值为 hidden,则内容应 在受影响 region 之外被裁剪。

注:

由与 region 的内容矩形关联的内容产生的标记可能会渲染在该 内容矩形之外,从而与 region 的 padding 和 border 矩形相交, 且不受 tts:overflow 属性影响。只有当此类标记会 延伸到 region 的 extent 之外时,它们才成为 region 溢出的候选项;该 extent 与 region 的 border 矩形重合, 该 border 矩形包含 region 的 padding 矩形,后者包含 region 的内容矩形。

注:

除非内容作者使用手动换行元素 br, 否则当某个给定 region 的 tts:overflowtts:wrapOption 样式属性的计算值分别为 visiblenoWrap 时, 该 region 中的段落最多只会生成一个行区域。

如果不支持与此属性关联的属性计算值, 则呈现处理器必须使用值 hidden

以下示例说明 tts:overflow 样式。

示例片段 – Overflow
<?xml version="1.0"?>
<tt xmlns="http://www.w3.org/ns/ttml" xmlns:tts="http://www.w3.org/ns/ttml#styling"
    xml:lang="en" tts:extent="320px 240px">
  <head>
    <styling>
      <style xml:id="s1" tts:backgroundColor="black" tts:padding="6px"/>
      <style xml:id="s2" tts:color="red" tts:backgroundColor="white"
             tts:wrapOption="noWrap" tts:fontFamily="proportionalSansSerif"
             tts:fontSize="10px"/>
    </styling>
    <layout>
      <region xml:id="r1" style="s1" tts:extent="100px 40px" tts:origin="20px 20px"
              tts:overflow="visible"/>
      <region xml:id="r2" style="s1" tts:extent="100px 40px" tts:origin="20px 180px"
              tts:overflow="hidden"/>
    </layout>
  </head>
  <body>
    <div>
      <p region="r1" style="s2">
  "But wait a bit," the Oysters cried,<br/>
  "Before we have our chat;
      </p>
      <p region="r2" style="s2">
  For some of us are out of breath,<br/>
  And all of us are fat!"
      </p>
    </div>
  </body>
</tt>

示例呈现 – Overflow
TTML overflow style property

注:

在上例中,tts:noWrap 被设置为 noWrap,以防止自动换行(断行); 如果未指定这一点,则溢出会发生在块 进展方向,而不是行内进展方向。

10.2.33 tts:padding

tts:padding 属性用于指定 region 或由流入 region 的内容生成的区域 一侧或多侧上的 padding(或内嵌)空间。

注:

Padding 作为内嵌应用于 region 区域,也就是说,region 区域的内容矩形会因 应用于该 region 的 padding 存在而减小。

值: <padding>
初始值: 0px
适用于: body, div, image, p, region, span
继承:
百分比: 见说明
可动画化: discrete
语义基础: padding 派生

如果此属性的值由一个 <length> 规范组成, 则该长度适用于受影响区域的所有边。如果该值 由两个 <length> 规范组成,则第一个 适用于 before 和 after 边,第二个适用于 start 和 end 边。 如果提供三个 <length> 规范,则 第一个适用于 before 边,第二个适用于 start 和 end 边,第三个适用于 after 边。 如果提供四个 <length> 规范,则它们 分别适用于 before、end、 after 和 start 边。

注:

百分比值相对于它们所适用的 region 的维度。例如, 如果 before 和 after 边对应 region 的上边和下边,就像 tts:writingMode 等于 "lrtb" 的拉丁文本那样, 则适用于这两条边中任一边的百分比值相对于 region 的高度。相反,如果 before 和 after 边对应 region 的右边和左边,就像 tts:writingMode 等于 "tbrl" 的日文文本那样,则适用于这两条边中任一边的百分比值 相对于 region 的宽度。

用于表达 padding 的 <length> 值必须为 非负。

如果 padding 应用于 span 元素,并且 来自该元素的内容 被分割到多个行区域,则指定的 padding 必须应用于每个换行 边界。相反, 在单个行区域内,如果该元素生成多个行内区域,则 指定的 padding 必须应用于 包含块级元素的行内进展顺序中某行区域内第一个和/或最后一个生成的 行内区域。

注:

span 元素上 padding 的行为 对应于使用 CSS box-decoration-break 属性: 在换行处使用值 clone,在 非终端(即非第一个且非最后一个)行内区域边界处使用值 slice, 如 [CSS Fragmentation] §5.4 所定义。

如果在此属性的 <length> 分量中使用百分比值, 则按如下方式解析:

  • 当应用于 region 元素时, 该百分比相对于 region 已解析 extent 的适用 绝对维度, 除非该维度依赖于该 region 内容的 大小,在这种情况下,该百分比解析为适用初始值的 相应分量;

  • 当应用于所有其他元素时,该百分比相对于最近祖先区域的相应 绝对维度, 除非该维度依赖于该区域内容的 大小,在这种情况下,该百分比解析为适用初始值的 相应分量。

注:

与此属性一起使用的每个 <length> 分量 都与特定的、相对于书写模式的边关联,然后根据适用的书写模式 解析为一个绝对维度。 如果该绝对维度是水平(垂直)维度, 则百分比值按参考区域(根容器区域或最近祖先区域)的相同水平(垂直) 绝对维度解析。

如果不支持与此属性关联的属性计算值, 则呈现处理器必须使用最接近的 受支持值。

注:

在此上下文中,短语 最接近的受支持值 表示 使计算出的 padding 与受支持的 padding 之间的一维欧几里得距离 在每条边上最小的值。如果对于给定边,存在多个与 计算值等距的最接近受支持值,则使用距离 0 最近的值, 即最小 padding。

以下示例说明 tts:padding 样式。

示例片段 – region 上的 Padding
<region xml:id="r1">
  <style tts:extent="446px 104px"/>
  <style tts:backgroundColor="black"/>
  <style tts:color="white"/>
  <style tts:displayAlign="after"/>
  <style tts:textAlign="center"/>
  <style tts:padding="10px 40px"/>
</region>
...
<p region="r1" tts:backgroundColor="red">
  Just the place for a Snark! I have said it twice:<br/>
  That alone should encourage the crew.<br/>
  Just the place for a Snark! I have said it thrice:<br/>
  What I tell you three times is true.
</p>

当渲染 padding 所适用的区域时,适用于该区域的背景颜色会 渲染到该区域的 padded 部分中。

示例呈现 – region 上的 Padding
TTML padding style property

注:

上例展示 padding 如何作为内嵌应用于 region 区域。具体而言, 10px 的 padding 应用于 before(上)和 after(下)边, 40px 的 padding 应用于 start(左)和 end(右)边。 从 region 区域的 extent 中减去 这些值后,region 的内容矩形宽度为 366px, 高度为 84px。region 的黑色背景颜色出现在 region 的 padding 矩形中, 而段落的红色背景颜色出现在 region 的内容矩形中。

示例片段 – span 上的 Padding
<region xml:id="r1">
  <style tts:extent="446px 72px"/>
  <style tts:displayAlign="center"/>
  <style tts:textAlign="center"/>
  <style tts:backgroundColor="green"/>
</region>
...
<p region="r1">
  <span tts:backgroundColor="black" tts:color="white" tts:padding="0c 0.5c">
  The crew was complete: it included a Boots--<br/>
  A maker of Bonnets and Hoods--
  </span>
</p>

当渲染 padding 所适用的 span 时,padding 会独立应用于每个生成的行区域。

示例呈现 – span 上的 Padding
TTML padding style property

10.2.34 tts:position

tts:position 属性用作另一种方式,用于指定 region 区域相对于定位矩形的位置。

如果在某个元素上同时指定了 tts:positiontts:origin 属性,且 tts:position 是受支持属性, 则为了呈现处理的目的,必须忽略 tts:origin 属性。

值: <position>
初始值: top left
适用于: region;关于 divp,见 特殊用法
继承:
百分比: 见说明
可动画化: discrete; continuous
语义基础: position 派生

水平位置偏移的百分比值分量,相对于 定位矩形的宽度减去关联 region 的宽度。 垂直位置偏移的百分比值分量,相对于 定位矩形的高度减去关联 region 的高度。

下图描绘了位置值 "75% 50%",其中虚线矩形 表示定位矩形, 实线矩形表示正在定位的 region。在此情况下,region 被定位为: 位于其宽度 75% 处的垂直线与 位于定位矩形宽度 75% 处的垂直线重合,并且 位于其高度 50% 处的水平线与 位于定位区域宽度 50% 处的垂直线重合。

基于百分比的定位
TTML position style property using percentages

如果指定在 region 元素上,则 定位矩形对应于根容器区域的内容矩形。

如果不支持与此属性关联的属性计算值, 则呈现处理器必须使用最接近的 受支持值。

注:

在此上下文中,短语 最接近的受支持值 表示 使计算出的位置与受支持的位置之间的欧几里得距离 最小的值。如果存在多个与 计算值等距的最接近受支持值,则使用距离 [0,0] 最近的值, 即最接近坐标空间位置的值。

以下示例说明 tts:position 样式,它将某个 region 定位为: 在水平维度中居中,并且其底边在垂直维度上 位于定位矩形底部上方 10% 处, 其中该偏移等于定位矩形高度与 region 高度之差的 10%。

示例片段 – Position
<tt tts:extent="640px 480px">
...
<region xml:id="r1">
  <style tts:position="center bottom 10%"/>
  <style tts:extent="308px 92px"/>
  <style tts:backgroundColor="black"/>
  <style tts:color="white"/>
  <style tts:displayAlign="center"/>
  <style tts:textAlign="center"/>
</region>
...
<p region="r1">
  "To dine!" she shrieked in dragon-wrath.<br/>
  "To swallow wines all foam and froth!<br/>
   To simper at a table-cloth!"
</p>

示例呈现 – Position
TTML position style property

10.2.34.1 Position 的特殊用法

当在 divp 上例外指定 tts:position 时,适用 11.1.2.1 行内动画的特殊 语义

10.2.35 tts:ruby

tts:ruby 属性用于指定 ruby 样式的应用。

值: "none" | "container" | "base" | "baseContainer" | "text" | "textContainer" | "delimiter"
初始值: none
适用于: span
继承:
百分比: N/A
可动画化: none
语义基础: ruby 派生

如果此属性的值为 none,则不应用 ruby 语义;否则, 适用由 表 10-1 – Ruby 语义映射 枚举的 ruby 语义。

如果不支持与此属性关联的属性计算值, 则呈现处理器必须使用值 none

表 10-1 – Ruby 语义映射
类别 tts:ruby 标注 [Ruby] CSS display [CSS Ruby]
ruby container container ruby ruby
ruby base content base rb ruby-base
ruby text content text rt ruby-text
ruby base container baseContainer rbc ruby-base-container
ruby text container textContainer rtc ruby-text-container
ruby fallback delimiter delimiter rp none | inline

为了呈现处理的目的,文档处理上下文确定呈现模式:normal 或 fallback。 当执行 ruby 文本标注的 normal 呈现处理时,delimiter 内容不得 生成任何行内区域。 当执行 ruby 的 fallback 呈现时,delimiter 和非 delimiter ruby(base 和 text)内容都必须生成 normal 行内区域。 如果呈现处理器不支持 ruby 呈现,则它必须执行 fallback ruby 呈现。

使用 tts:ruby 时,以下嵌套约束适用于 ruby container,也就是说, 如果 span 元素的 tts:ruby 计算值为 container, 则:

  • 其所有祖先元素的 tts:ruby 计算值为 none

  • 其每个子元素的 tts:ruby 计算值不为 none

  • 其第一个子元素的 tts:ruby 计算值为 baseContainerbase

  • 其每个文本节点子级仅包含 <lwsp>

使用 tts:ruby 时,以下嵌套约束适用于 ruby base container,也就是说, 如果 span 元素的 tts:ruby 计算值为 baseContainer, 则:

  • 其父元素的 tts:ruby 计算值为 container

  • 其每个子元素的 tts:ruby 计算值不为 none

  • 其第一个子元素的 tts:ruby 计算值为 base

  • 其前一个兄弟为 null(即没有前一个兄弟);

  • 其每个文本节点子级仅包含 <lwsp>

使用 tts:ruby 时,以下嵌套约束适用于 ruby text container,也就是说, 如果 span 元素的 tts:ruby 计算值为 textContainer, 则:

  • 其父元素的 tts:ruby 计算值为 container

  • 其每个子元素的 tts:ruby 计算值不为 none

  • 其第一个子元素的 tts:ruby 计算值为 textdelimiter

  • 其前一个兄弟的 tts:ruby 计算值为 baseContainertextContainer

  • 其兄弟中不超过一个的 tts:ruby 计算值为 textContainer

  • 其每个文本节点子级仅包含 <lwsp>

使用 tts:ruby 时,以下嵌套约束适用于 ruby base content,也就是说, 如果 span 元素的 tts:ruby 计算值为 base,则:

  • 其父元素的 tts:ruby 计算值为 containerbaseContainer

  • 其前一个兄弟为 null(即没有前一个兄弟),或者 其前一个兄弟的 tts:ruby 计算值为 base

  • 如果其父元素的 tts:ruby 计算值为 container, 则没有任何兄弟的 tts:ruby 计算值为 base

  • 没有任何后代元素的 tts:ruby 计算值不为 none

  • 其任何后代元素都不是 br 元素;

  • 其每个文本节点后代都不包含 U+2028(LINE SEPARATOR)或 U+2029 (PARAGRAPH SEPARATOR);

使用 tts:ruby 时,以下嵌套约束适用于 ruby text content,也就是说, 如果 span 元素的 tts:ruby 计算值为 text,则:

  • 其父元素的 tts:ruby 计算值为 containertextContainer

  • 其前一个兄弟为 null(即没有前一个兄弟),或者 其前一个兄弟的 tts:ruby 计算值为 basetextdelimiter

  • 如果其父元素的 tts:ruby 计算值为 container, 则没有任何兄弟的 tts:ruby 计算值为 text

  • 没有任何后代元素的 tts:ruby 计算值不为 none

  • 其任何后代元素都不是 br 元素;

  • 其每个文本节点后代都不包含 U+2028(LINE SEPARATOR)或 U+2029 (PARAGRAPH SEPARATOR);

使用 tts:ruby 时,以下嵌套约束适用于 ruby fallback delimiter,也就是说, 如果 span 元素的 tts:ruby 计算值为 delimiter, 则:

  • 其父元素的 tts:ruby 计算值为 containertextContainer

  • 其前一个兄弟为 null(即没有前一个兄弟),或者 其前一个兄弟的 tts:ruby 计算值为 basetext

  • 恰好一个兄弟的 tts:ruby 计算值为 delimiter

  • 如果 tts:ruby 的计算值为 delimiter,则 没有任何后代元素的 tts:ruby 计算值不为 none

  • 其任何后代元素都不是 br 元素;

  • 其每个文本节点后代都不包含 U+2028(LINE SEPARATOR)或 U+2029 (PARAGRAPH SEPARATOR)。

验证内容处理器必须将违反 上述任一约束视为错误。 为了呈现处理的目的,违反任何这些约束应导致 ruby 文本标注的 fallback(行内) 呈现,并且,对于违反某项约束的内容,如果该 内容是 br 元素,或 U+2028(LINE SEPARATOR)或 U+2029(PARAGRAPH SEPARATOR)字符, 则应将其映射为 U+0020(SPACE)字符;或者,如果是其他内容,则忽略 (不呈现)。

注:

上面列出的约束旨在解释为指定以下 嵌套模型:

container
  : base text
  | base delimiter text delimiter
  | baseContainer textContainer textContainer?

baseContainer
  : base+

textContainer
  : text+
  | delimiter text+ delimiter

base | text | delimiter
  : (#PCDATA | { span - tts:ruby })*

此模型对应于 [Ruby] §2.1 中定义的 ruby 元素的最大内容模型, 但有一个例外:rtc 被有效扩展为允许可选使用 delimiter(rp):

ruby
  : rb rt
  | rb rp rt rp
  | rbc rtc rtc?

rbc
  : rb+

rtc
  : rt+
  | rp rt+ rp                            // extension to [Ruby]

此外,此模型与 [Ruby] §2.6 关于 不支持嵌套 ruby containers 的约束一致(相关内容见上面的嵌套约束)。

注:

虽然不支持 [HTML 5.2] 允许的那么多标记最小化机会, 但此处定义的 ruby 标注形式确实允许以下简写:

base text =
  baseContainer
    base
  textContainer
    text

base delimiter text delimiter =
  baseContainer
    base
  textContainer
    delimiter text delimiter

给定 base 的内容为 Btext 的内容为 T, 则表达式 base text 可在 [HTML 5.2] 中以如下多种方式表示:

<ruby>B<rt>T</ruby>
<ruby>B<rt>T</rt></ruby>
<ruby><rb>B<rt>T</ruby>
<ruby><rb>B</rb><rt>T</ruby>
<ruby><rb>B</rb><rt>T</rt></ruby>
<ruby>B<rtc><rt>T</ruby>
<ruby>B<rtc><rt>T</rtc></ruby>
<ruby>B<rtc><rt>T</rt></ruby>
<ruby>B<rtc><rt>T</rt></rtc></ruby>
<ruby><rb>B<rtc><rt>T</ruby>
<ruby><rb>B<rtc><rt>T</rtc></ruby>
<ruby><rb>B</rb><rtc><rt>T</ruby>
<ruby><rb>B</rb><rtc><rt>T</rtc></ruby>
<ruby><rb>B</rb><rtc><rt>T</rt></ruby>
<ruby><rb>B</rb><rtc><rt>T</rt></rtc></ruby>

而在 TTML2 中,以下替代表达式是可能的:

<span tts:ruby="container">
  <span tts:ruby="base">B</span>
  <span tts:ruby="text">T</span>
</span>

或其等价形式

<span tts:ruby="container">
  <span tts:ruby="baseContainer">
    <span tts:ruby="base">B</span>
  </span>
  <span tts:ruby="textContainer">
    <span tts:ruby="text">T</span>
  </span>
</span>

注:

TTML 的语法允许在同一个 ruby container 中,在 ruby base container 内使用多个 ruby base content,并在 ruby text container 内使用多个 ruby text content。当同一个 ruby containerruby text content 的数量不等于 ruby base content 的数量时, 此版本 TTML 将 ruby base contentruby text content 之间的映射留为未定义。

注:

当通过对 ruby text containerruby text content 执行呈现处理而生成 行内区域时,则该行内区域的父级为(成为其后代) 包含与该 ruby text content 关联的 ruby base content行区域

以下示例说明使用 tts:ruby 指定简单 ruby 标注。

示例片段 – 简单 Ruby
<span tts:ruby="container" tts:rubyAlign="spaceAround">
  <span tts:ruby="base">利用許諾</span>
  <span tts:ruby="text">ライセンス</span>
</span>

示例呈现 – 简单 Ruby
TTML ruby style property

以下示例说明使用 tts:ruby 指定双侧 ruby 标注。

示例片段 – 双侧 Ruby
<span>
  <span tts:ruby="container" tts:rubyAlign="spaceAround">
    <span tts:ruby="baseContainer">
      <span tts:ruby="base">東南</span>
    </span>
    <span tts:ruby="textContainer" tts:rubyPosition="before">
      <span tts:ruby="text">とうなん</span>
    </span>
    <span tts:ruby="textContainer" tts:rubyPosition="after">
      <span tts:ruby="text">たつみ</span>
    </span>
  </span>
  <span>の方角</span>
</span>

示例呈现 – 双侧 Ruby
TTML ruby style property

注:

此版本 TTML 由于缺乏市场需求,不支持 ruby 标注的字符间定位模式, 例如与 bopomofo 字符一起使用的模式。

当标注使用拉丁字符时,也可以使用 tts:ruby 属性, 例如 [CLREQ] 所描述的拼音, 如以下示例所示。

示例片段 – 带拼音标注的 Ruby
<p>
<span tts:ruby="container" tts:rubyAlign="center">
  <span tts:ruby="base">周杰伦</span><span tts:ruby="text">Jay Chou</span>
</span>

示例呈现 – 使用拼音标注的 Ruby
TTML ruby style property with pinyin
10.2.35.1 Ruby 标注的特殊语义

在没有实现特定要求的情况下,ruby text contentruby base content 之间可能导致行区域溢出的对齐约束 应通过将 ruby text content 从行区域的 start 或 end 边移开来解决。

注:

更多信息参见 [JLREQ] §3.3.8,Adjustments of Ruby with Length Longer than that of the Base Characters, 以及 [CSS Ruby] §5,Edge Effects

在没有实现特定要求的情况下,只有当 base 文本属于 [JLREQ] 附录 A Character Classes 所定义的以下任一字符类别时, 才应允许 ruby text content 悬挂在 ruby base content 之外:

  • hiragana

  • ideographic

  • punctuationMarks

注:

更多信息参见 [JLREQ] §3.3.8,Adjustments of Ruby with Length Longer than that of the Base Characters

执行呈现处理时, 孤立 ruby 内容, 即,分别在没有指定 ruby base containerruby text container 的情况下指定的 ruby base contentruby text content, 会以这样一种方式处理,即按要求隐含存在匿名 ruby base container 和(或)匿名 ruby text container。 为了生成并应用隐含或集合式样式语义,需要 隐含 ruby base container 和(或) 隐含 ruby text container 到一个行内块区域,该区域包含 孤立 ruby 内容所生成的行内区域。

显式指定的 span 元素,其 tts:ruby 计算值为 baseContainer, 称为 显式 ruby base container; 同样,显式指定的 span 元素,其 tts:ruby 计算值为 textContainer,称为 显式 ruby text container

10.2.36 tts:rubyAlign

tts:rubyAlign 属性用于指定 ruby 文本在 ruby text container 标注所生成的行内区域中的位置。

值: "start" | "center" | "end" | "spaceAround" | "spaceBetween" | "withBase"
初始值: center
适用于: span,仅当 tts:ruby 的计算值为 container
继承:
百分比: N/A
可动画化: discrete
语义基础: rubyAlign 派生

当此属性指定在 span 元素上,且该元素的 tts:ruby 计算值为 container 时,则关联样式属性的 ruby 对齐语义会 集合式地应用于由 容器的组成 ruby containers 和 ruby 内容生成的行内区域。

注:

将 ruby 对齐作为整体应用于 ruby container 的一个结果是,应用于 该 container 及其组成部分的 ruby 对齐是统一的(不变化)。

IRIB 分别为由 (1) ruby text container 或 ruby text annotation 和 (2) 关联的 ruby base container 或 ruby base 生成的行内区域。进一步地,令 NRNB 分别为这些 行内区域的字形区域后代数量。

如果此属性的值为 start,则 IR 的第一个字形区域后代的 start 边 与该行内区域的 start 边对齐。 如果值为 center,则多余空白 分别平均分布在第一个和最后一个 ruby 标注字形区域之前和之后。 如果此属性的值为 end,则 IR 的第一个字形区域后代的 end 边 与该行内区域的 end 边对齐。 如果值为 spaceBetween,则多余空白 在每个 ruby 标注字形区域之间平均分布。 如果值为 spaceAround,则多余空白 在每个 ruby 标注字形区域后代之前和之后平均分布。

如果此属性的值为 withBase,则如果 NRNB 相等, IR 的第 ith字形区域后代IB 的第 ith字形区域后代(水平或垂直)居中对齐; 否则(ruby 与 base 的字形区域数量 不相等),适用 center 的语义。

注:

为了解释上述语义上下文中的字形区域 后代,只考虑 spacing 字形区域后代; 即,non-spacing 字形区域 后代,例如组合标记, 不影响 ruby 对齐。

如果不支持与此属性关联的属性计算值, 则呈现处理器必须使用值 center

注:

在本规范中,假定定时文本应用中的 ruby 标注较窄, 因为呈现空间和可用时间 通常受限。因此,此版本 TTML 不允许作者控制 当 ruby 标注宽于其 base 文本时空白如何分布。 对于行的 start 或 end 边处的宽 ruby 标注,这可能会带来问题。为了 避免问题,鼓励作者使用合适的 tts:rubyAlign 值,和/或将包含宽 ruby 标注的事件拆分为多行,甚至拆分为多个事件。

以下示例说明 tts:rubyAlign 样式。

示例片段 – Ruby Align
<p>
<span tts:ruby="container" tts:rubyAlign="start">
  <span tts:ruby="base">自業自得</span><span tts:ruby="text">一二三</span>
</span>
<span tts:ruby="container" tts:rubyAlign="spaceAround">
  <span tts:ruby="base">自業自得</span><span tts:ruby="text">一二三</span>
</span>
<br/>
<span tts:ruby="container" tts:rubyAlign="end">
  <span tts:ruby="base">自業自得</span><span tts:ruby="text">一二三</span>
</span>
<span tts:ruby="container" tts:rubyAlign="spaceBetween">
  <span tts:ruby="base">自業自得</span><span tts:ruby="text">一二三</span>
</span>
</p>

示例呈现 – Ruby Align
TTML rubyAlign style property

10.2.37 tts:rubyPosition

tts:rubyPosition 属性用于指定 ruby 文本在块进展维度中 相对于其关联 ruby base 的位置。

值: <annotation-position>
初始值: outside
适用于: span,仅当 tts:ruby 的计算值为 textContainertext
继承:
百分比: N/A
可动画化: discrete
语义基础: rubyPosition 派生

与此属性关联的样式属性确定 由 ruby text containers 和 ruby text annotations 生成的行内区域 相对于其关联 base text containers 和 base text 的相对定位, 其中适用 <annotation-position> 的方向语义。

当此属性指定在 span 元素上,且该元素的 tts:ruby 计算值为 textContainer 时,则关联样式属性的 ruby position 语义 集合式地应用于由 显式 ruby text container 及其组成 ruby text content 生成的行内区域。

当此属性指定在 span 元素上,且该元素的 tts:ruby 计算值为 text 时,则关联样式属性的 ruby position 语义 集合式地应用于由其 隐含 ruby text container 及其自己的 ruby text content 生成的行内区域。

不得在 span 元素上指定此属性,如果该元素的 tts:ruby 计算值为 text,且该 span 元素的父元素是一个 span 元素,其 tts:ruby 计算值为 textContainer。 如果指定(在前者 ruby text content 上), 则被视为错误, 并且为了呈现处理的目的必须忽略。

ruby text container 或 ruby text annotation 的绝对位置,按照 受影响内容放置到其中的 region 的 tts:writingMode 样式属性的计算值确定; 具体而言,适用由 表 10-2 – 按书写模式映射的绝对 Ruby Position 语义 枚举定义的映射,并由 [CSS Ruby] §4.1 进一步定义。

如果两个 ruby text containers 适用于同一个 ruby base container,则如果 与此属性关联的属性使用值会导致 两个 ruby text containers 被放置在 ruby base container 的同一相对侧, 则被视为错误,在这种情况下, 此属性的呈现语义不由本规范定义。

如果不支持与此属性关联的属性计算值, 则呈现处理器必须使用值 before

表 10-2 – 按书写模式映射的绝对 Ruby Position 语义
tts:rubyPosition lrtb rltb tbrl tblr
before over over right left
after under under left right

注:

当使用以竖排自左向右行排版的蒙古文字时,可能希望 赋给 ruby position 的初始值为 after, 而不是 outside,后者会在所有非最后行中解析为 before。在 此情况下,作者可以通过在文档的 styling 元素中包含 <initial tts:rubyPosition="after"/> 元素来重新定义此属性的默认初始值。

以下示例说明 tts:rubyPosition 样式, 并展示 ruby position 的解析如何依赖于书写模式。注意,该示例使用 [JLREQ] 中定义的 mono ruby

示例片段 – Ruby Position
<region xml:id="left" tts:writingMode="tblr"/>
<region xml:id="middle" tts:writingMode="lrtb"/>
<region xml:id="right" tts:writingMode="tbrl"/>
...
<p region="left">
  <span tts:ruby="container" tts:rubyPosition="before">
    <span tts:ruby="base">一</span>
    <span tts:ruby="text">一</span>
  </span>
  <span tts:ruby="container" tts:rubyPosition="before">
    <span tts:ruby="base">二</span>
    <span tts:ruby="text">二</span>
  </span>三四<br/>五六
  <span tts:ruby="container" tts:rubyPosition="after">
    <span tts:ruby="base">七</span>
    <span tts:ruby="text">七</span>
  </span>
  <span tts:ruby="container" tts:rubyPosition="after">
    <span tts:ruby="base">八</span>
    <span tts:ruby="text">八</span>
  </span>
</p>
<p region="middle">
  <span tts:ruby="container" tts:rubyPosition="before">
    <span tts:ruby="base">一</span>
    <span tts:ruby="text">一</span>
  </span>
  <span tts:ruby="container" tts:rubyPosition="before">
    <span tts:ruby="base">二</span>
    <span tts:ruby="text">二</span>
  </span>三四<br/>五六
  <span tts:ruby="container" tts:rubyPosition="after">
    <span tts:ruby="base">七</span>
    <span tts:ruby="text">七</span>
  </span>
  <span tts:ruby="container" tts:rubyPosition="after">
    <span tts:ruby="base">八</span>
    <span tts:ruby="text">八</span>
  </span>
</p>
<p region="right">
  <span tts:ruby="container" tts:rubyPosition="before">
    <span tts:ruby="base">一</span>
    <span tts:ruby="text">一</span>
  </span>
  <span tts:ruby="container" tts:rubyPosition="before">
    <span tts:ruby="base">二</span>
    <span tts:ruby="text">二</span>
  </span>三四<br/>五六
  <span tts:ruby="container" tts:rubyPosition="after">
    <span tts:ruby="base">七</span>
    <span tts:ruby="text">七</span>
  </span>
  <span tts:ruby="container" tts:rubyPosition="after">
    <span tts:ruby="base">八</span>
    <span tts:ruby="text">八</span>
  </span>
</p>

示例呈现 – Ruby Position
TTML rubyPosition style property

注:

在上例中,为帮助格式化,在 span 元素内部及其周围引入了空白; 为了产生如图所示的示例呈现,需要移除这些额外 空白,以免 它出现在渲染输出中。

10.2.38 tts:rubyReserve

tts:rubyReserve 属性用于指定要应用到受影响行区域的额外空间, 以便在块进展维度中保留足够空间,用于容纳放置在行区域边界内的 ruby text containers 所生成的行内区域。

注:

作者可以使用 tts:rubyReserve 属性,以确保 块区域中连续行区域的基线保持固定位置, 而不受 ruby 文本标注存在与否的影响。

值: <ruby-reserve>
初始值: none
适用于: p
继承:
百分比: 相对于此元素的字体大小
可动画化: discrete
语义基础: rubyReserve 派生

如果此属性的值为 none,则不应用 ruby 空间保留; 否则,此属性的值指定一个 position 分量,后跟一个可选 length 分量。

如果 position 分量为 before,则受影响行区域的 before leading 会按 length 分量的 使用值 所确定的量增加。

如果 position 分量为 after,则受影响行区域的 after leading 会按 length 分量的 使用值 所确定的量增加。

如果 position 分量为 both,则 beforeafter 位置的语义都适用于 每个受影响的行区域。

如果 position 分量为 outside,则如果当前块区域 恰好包含一个行区域,则适用 both 位置; 否则,before 位置的语义适用于当前块区域的第一个行区域, 而 after 位置的语义适用于当前块区域的所有其他行区域。

length 分量用于间接确定受影响行区域的 before 和 after leading 要增加的量。length 分量的计算值被视为表达了假设 ruby text content 实际存在于 p 元素中时,与该假设内容的 tts:fontSize 属性关联的样式属性计算值。

如果未指定 length 分量,则必须认为它等于假设 ruby text containerruby text content 实际存在于 p 元素中时将继承的、与 tts:fontSize 属性关联的 样式属性值,其中为了计算此继承值,适用 10.2.21.1 Font Size 的特殊语义

如果指定了 <length> 分量,则它必须为 非负。

如果在包含 ruby text contentp 元素上指定了 tts:rubyReserve, 则保留的 leading 会按上文所示应用到行区域, 然后按需要对这些 leading 进行额外调整,以容纳实际 ruby text content 的存在。

示例呈现 – Ruby Reserve
tts:rubyReserve 无 Ruby 存在 有 Ruby 存在
none TTML rubyReserve style property: 'auto' TTML rubyReserve style property: 'auto'
before TTML rubyReserve style property: 'after' TTML rubyReserve style property: 'after'
after TTML rubyReserve style property: 'after' TTML rubyReserve style property: 'after'
both TTML rubyReserve style property: 'after' TTML rubyReserve style property: 'after'
outside TTML rubyReserve style property: 'after' TTML rubyReserve style property: 'after'

10.2.39 tts:shear

tts:shear 属性用于指定一个样式属性,该属性 决定是否以及如何对受影响元素生成的最外层块区域应用剪切变换。

值: <percentage>
初始值: 0%
适用于: p
继承:
百分比: 见说明
可动画化: discrete
语义基础: shear 派生

对于此属性适用的每个块区域,按照 10.4.5.3 剪切计算的规定,对该 块区域应用 2D 剪切变换。

以下示例说明 tts:shear 样式。

示例片段 – Shear
<region xml:id="right" tts:writingMode="tbrl" tts:displayAlign="center" .../>
<region xml:id="left" tts:writingMode="tbrl" tts:displayAlign="center" .../>
...
<div>
  <p region="right" tts:shear="0%">
  山の<br/>
  最多<span tts:textCombine="all">1998</span>年
  </p>
  <p region="left" tts:shear="16.67%">
  山の<br/>
  最多<span tts:textCombine="all">1998</span>年
  </p>
</div>

示例呈现 – Shear - 带 Tate-Chu-Yoko 的竖排文字行
TTML shear style property

注:

在上例中,黄色线条是特定呈现处理器创建的装饰, 用于帮助调试布局问题。此类线条不是本规范定义的规范性 TTML 呈现 的一部分。 此处,这些装饰描绘了 (1) 由 region 元素生成的外部块 区域的边界,以及 (2) 由 p 元素生成的外部块区域行区域子级的边界。

此示例描绘了剪切(倾斜)变换如何应用于受影响的、由 p 元素生成的外部块区域;但是, 当要对外部块区域应用 shear 时, 可分配给该块区域的可用距离, 即其在剪切变换前的最大行内进展维度长度,会减少 B*sin(θ), 其中 B 是外部块区域的块进展维度,θ 是 剪切角,以便将该块区域放入段落的直接祖先块区域 的内容矩形中。

10.2.40 tts:showBackground

tts:showBackground 属性用于指定 region 背景何时意图被呈现的约束。

注:

region 的背景包括由 (1) 背景颜色或 (2) 背景图像 二者之一(或二者)产生的标记, 如果其中任一者适用于该 region。

值: "always" | "whenActive"
初始值: always
适用于: region
继承:
百分比: N/A
可动画化: discrete
语义基础: showBackground 派生

如果某个 region 不是时间上活跃的,则其背景 不会被渲染;但是,如果它是时间上活跃的,则

  1. 如果此属性的值为 whenActive,则只有当内容被选择进入该 region,且该内容同样是时间上活跃的时,才渲染该 region 的背景;

  2. 否则,如果此属性的值为 always,则无论 内容是否被选择进入该 region,都会渲染该 region 的背景。

如果不支持与此属性关联的属性计算值, 则呈现处理器必须使用值 always

以下示例说明 tts:showBackground 样式。

示例片段 – Show Background
<region xml:id="r1">
  <style tts:origin="0px 0px"/>
  <style tts:extent="265px 100px"/>
  <style tts:backgroundColor="black"/>
  <style tts:showBackground="always"/>
  <style tts:color="white"/>
  <style tts:displayAlign="before"/>
  <style tts:textAlign="start"/>
</region>
<region xml:id="r2">
  <style tts:origin="205px 60px"/>
  <style tts:extent="290px 100px"/>
  <style tts:backgroundColor="red"/>
  <style tts:color="white"/>
  <style tts:displayAlign="before"/>
  <style tts:textAlign="end"/>
  <style tts:showBackground="whenActive"/>
</region>

10.2.41 tts:textAlign

tts:textAlign 属性用于指定一个样式属性,该属性 定义行内区域如何在包含块区域内沿行内进展方向对齐。

值: "left" | "center" | "right" | "start" | "end" | "justify"
初始值: start
适用于: p
继承: 见说明
百分比: N/A
可动画化: discrete
语义基础: textAlign 派生

如果不支持与此属性关联的属性计算值, 则呈现处理器必须使用值 start

以下示例说明 tts:textAlign 样式。

示例片段 – Text Align
<region xml:id="r1">
  <style tts:extent="355px 43px"/>
  <style tts:origin="0px 0px"/>
  <style tts:backgroundColor="black"/>
  <style tts:color="white"/>
  <style tts:textAlign="start"/>
</region>
<region xml:id="r2">
  <style tts:extent="355px 43px"/>
  <style tts:origin="0px 47px"/>
  <style tts:backgroundColor="black"/>
  <style tts:color="white"/>
  <style tts:textAlign="end"/>
</region>
...
<p region="r1">
  Beware the Jabberwock, my son!<br/>
  The jaws that bite, the claws that catch!
</p>
<p region="r2">
  Beware the Jubjub bird, and shun<br/>
  The frumious Bandersnatch!
</p>

示例呈现 – Text Align
TTML textAlign style property

注:

p 元素生成的最后一个块区域的最后一个行区域的文本对齐, 遵循 [XSL-FO 1.1] §7.16.10 中值为 relativetext-align-last 属性语义。

10.2.42 tts:textCombine

当适用垂直书写模式时,tts:textCombine 属性用于 指定一个样式属性,该属性 决定是否以及如何将多个字符水平组合,使其 字形区域适合周围竖排文本单行的宽度。 如果适用水平书写模式,则为了呈现处理的目的忽略此属性。

组合处理可以使用一种或多种技术,以实现视觉上组合进周围竖排文本 em 方框的目标。 例如,可以选择半角变体形式,可以选择连字,可以应用较小的 字体大小等。支持此样式属性的实现至少必须能够在可用时选择半角变体形式。 如果这些技术都不能沿包含行区域的块进展维度达到目标尺寸, 则如果生效的行堆叠策略允许,可以增大包含行区域的此维度。

值: <text-combine>
初始值: none
适用于: span
继承:
百分比: N/A
可动画化: discrete
语义基础: textCombine 派生

如果此属性的指定值为 none,则不应用组合处理。 如果此属性的指定值为 all,则所有受影响字符都应被组合。

组合会在所有受影响字符已按照适用水平书写模式进行处理之后应用。 特别是,双向处理、连字、字形替换,或 Unicode 组合字符的组合(如果使用) 会先于 tts:textCombine 属性指定的组合处理应用。

组合不得跨越元素边界、双向边界或 非字形区域边界。

如果不支持与此属性关联的属性计算值, 则呈现处理器必须使用值 none

以下示例说明 tts:textCombine 样式。

示例片段 – Text Combine
<p region="tbrlLeft">あい
  <span tts:textCombine="none">AB34</span>三四
</p>
<p region="tbrlCenter">あい
  <span tts:textCombine="all">AB34</span>三四
</p>

示例呈现 – Text Combine
TTML textCombine style property

注:

在上例中,对于 tts:textCombineall 值, 呈现处理器选择了受影响字符的半角变体, 但所得宽度大于周围竖排文本的 em 方框,以避免可读性问题, 并且这是 TTML 所允许的。

10.2.43 tts:textDecoration

tts:textDecoration 属性用于指定一个样式属性,该属性 定义要应用于字形区域或其他行内 区域的文本装饰效果,这些区域由流入 region 的内容生成。

值: <text-decoration>
初始值: none
适用于: span
继承: 是,但见特殊 语义
百分比: N/A
可动画化: discrete
语义基础: textDecoration 派生

如果不支持与此属性关联的属性计算值, 则呈现处理器必须使用值 none

注:

上文用于定义此属性值的语法基于 [CSS2] §1.4.2.1 中定义的值分量语法。本质上, 由 || 分隔的一个或多个值可以按任意顺序出现在属性 值中,例如 "noUnderline overline lineThrough"

以下示例说明 tts:textDecoration 样式。

示例片段 – Text Decoration
<region xml:id="r1">
  <style tts:extent="385px 82px"/>
  <style tts:origin="0px 0px"/>
  <style tts:backgroundColor="black"/>
  <style tts:color="white"/>
  <style tts:padding="5px 2px"/>
  <style tts:textDecoration="underline"/>
</region>
...
<p region="r1">
  The sea was wet<span tts:textDecoration="noUnderline"> as </span>wet
  <span tts:textDecoration="noUnderline">
    could be,<br/>
    The sand was dry as dry.<br/>
    <span tts:textDecoration="lineThrough">There weren't any</span>
    You <span tts:textDecoration="lineThrough">couldn't</span>
    could not see a cloud<br/>
    Because no cloud was in the sky.
  </span>
</p>

示例呈现 – Text Decoration
TTML textDecoration style property
10.2.43.1 Text Decoration 的特殊语义

与此属性关联的属性计算值由一个 3 元组组成, 其中每个条目分别表示是否要对受影响文本应用 underline、line through 或 overline 装饰。 此外,在应用继承语义时,这些条目中的每一个都被视为 与其他条目分别继承。

注:

例如,如果适用于 div(division)元素的 tts:textDecoration 计算值 是元组 (noUnderline, lineThrough, overline),并且该 divp(paragraph)元素子级指定 tts:textDecoration="noLineThrough",则 适用于 p 元素的聚合计算值为 (noUnderline, noLineThrough, overline),该值随后 被 p 元素的子级继承。

10.2.44 tts:textEmphasis

tts:textEmphasis 属性用于指定一个样式属性,该属性 定义要应用于字形区域或其他行内 区域的文本着重效果,这些区域由流入 region 的内容生成。

值: <text-emphasis>
初始值: none
适用于: span
继承:
百分比: N/A
可动画化: discrete; continuous(仅颜色)
语义基础: textEmphasis 派生

如果未指定 emphasis 样式, 则必须将 emphasis 样式解释为就像指定了 auto 样式一样。 如果未指定 emphasis 颜色, 则必须将 emphasis 颜色解释为就像指定了 current 颜色一样。 如果未指定 emphasis 位置, 则必须将 emphasis 位置解释为就像指定了 outside 位置一样。

注:

当使用以竖排自左向右行排版的蒙古文字时,可能希望 赋给 emphasis 位置的初始值为 after, 而不是 outside,后者会在所有非最后行中解析为 before。在 此情况下,作者可以通过在文档的 styling 元素中包含 <initial tts:textEmphasis="none transparent after"/> 元素来重新定义此属性的默认初始值。

以下示例说明 tts:textEmphasis 样式。

示例片段 – Text Emphasis
<p>
  <span tts:textEmphasis="filled circle before">花</span>
  <span tts:textEmphasis="filled dot before">よ</span>
  <span tts:textEmphasis="filled sesame before">り</span>
  <span tts:textEmphasis="open circle before">だ</span>
  <span tts:textEmphasis="open dot before">ん</span>
  <span tts:textEmphasis="open sesame before">ご</span>
  <br/>
  <span tts:textEmphasis="filled circle after">花</span>
  <span tts:textEmphasis="filled dot after">よ</span>
  <span tts:textEmphasis="filled sesame after">り</span>
  <span tts:textEmphasis="open circle after">だ</span>
  <span tts:textEmphasis="open dot after">ん</span>
  <span tts:textEmphasis="open sesame after">ご</span>
</p>

示例呈现 – Text Emphasis
TTML textEmphasis style property

10.2.45 tts:textOrientation

tts:textOrientation 属性用于指定一个样式属性,该属性 定义要应用于由流入 region 的内容生成的字形区域的文本方向, 其中该 region 适用垂直书写模式。

值: "mixed" | "sideways" | "upright"
初始值: mixed
适用于: span
继承:
百分比: N/A
可动画化: discrete
语义基础: textOrientation 派生

此样式属性的呈现语义仅在适用垂直书写模式时适用; 因此,如果适用水平书写模式,此样式 属性没有效果。

在下文中,与内容字符关联的字形区域 依据它们在垂直书写模式中是否旋转来描述,其中此决定根据 [UTR50] 所确定的每个内容字符的 Vertical_Orientation 作出。

如果此属性的值为 mixed,则旋转的字形区域会 sideways 排版, 非旋转的字形区域会 upright 排版,其中 sideways 表示顺时针旋转 90°, 而 upright 表示不旋转。

注:

根据 [UTR50]字形区域的视觉旋转可以通过替换为 旋转的字形区域,或通过对该 字形区域的轮廓(或栅格图像)执行仿射旋转 变换来发生, 其中适用哪一种取决于呈现处理期间使用的具体字体。

如果此属性的值为 sideways,则所有字形区域 都顺时针旋转 90°。

如果此属性的值为 upright,则所有字符都被认为 具有 U 的垂直方向,在这种情况下没有 字形区域会旋转。在这种情况下, (潜在的)旋转字形区域替换 以及仿射旋转变换的应用 都被禁用,并且所渲染的字形区域 为非旋转形式。 此外,为了双向处理的目的,此值会导致所有 受影响字符被当作强从左到右处理,即被当作 应用了 tts:directionltr 值和 tts:unicodeBidioverride 值。

如果不支持与此属性关联的属性计算值, 则呈现处理器必须使用值 mixed

以下示例说明 tts:textOrientation 样式。

示例片段 – Text Orientation
<region xml:id="vertical" tts:writingMode="tblr"/>
...
<p region="vertical">
  <span tts:textOrientation="mixed">A</span>
  <span tts:textOrientation="upright">B</span>
</p>

示例呈现 – Text Orientation
TTML textOrientation style property

10.2.46 tts:textOutline

tts:textOutline 属性用于指定一个样式属性,该属性 定义要应用于为由流入 region 的内容生成的字形区域所选择字形的文本轮廓效果。

值: <text-outline>
初始值: none
适用于: span
继承:
百分比: 相对于此元素的字体大小
可动画化: discrete; continuous(仅颜色)
语义基础: textOutline 派生

此属性的值由一个可选的 <color> 项 后跟一个或两个 <length> 项组成。如果存在 color 项, 则它表示轮廓颜色;如果不存在 color 项, 则适用 tts:color 的计算值。第一个 length 项表示轮廓厚度,第二个 length 项(如果存在)表示模糊半径。

当为轮廓厚度或模糊半径指定相对 <length> 值时, 它会根据所引用字体大小或 计算单元格大小的高度分量解析。

用于表达厚度和模糊半径的 <length> 值必须为非负。

如果未指定模糊半径,即仅存在一个 <length> 项, 则适用 0px 的计算值。

注:

当在 tts:textOutline 值中使用以 cells 表达的 <length> 时, 适用单元格的高度。 例如,如果 text outline thickness 指定为 0.1c,cell resolution 为 20 乘 10,且根容器 区域的 extent 为 640 乘 480,则 轮廓厚度将是名义上的 480 / 10 * 0.1 像素,即 4.8px, 不考虑光栅化效果。

如果不支持与此属性关联的属性计算值, 则呈现处理器必须使用值 none

以下示例说明 tts:textOutline 样式。

示例片段 – Text Outline
<region xml:id="r1">
  <style tts:backgroundColor="transparent"/>
  <style tts:color="yellow"/>
  <style tts:textOutline="black 2px 0px"/>
  <style tts:fontFamily="proportionalSansSerif"/>
  <style tts:fontSize="24px"/>
</region>
...
<p>
  How doth the little crocodile<br/>
  Improve its shining tail,<br/>
  And pour the waters of the Nile<br/>
  On every golden scale!<br/>
  How cheerfully he seems to grin,<br/>
  How neatly spreads his claws,<br/>
  And welcomes little fishes in,<br/>
  With gently smiling jaws!
</p>

示例呈现 – Text Outline
textOutline style property

10.2.47 tts:textShadow

tts:textShadow 属性用于指定一个样式属性,该属性 定义要应用于为由流入 region 的内容生成的字形区域所选择字形的一个或多个文本阴影装饰。

如果应用多个文本阴影,则它们会在绘制其所适用的 字形区域之前立即按指定顺序绘制。

值: <text-shadow>
初始值: none
适用于: span
继承:
百分比: 相对于此元素的字体大小
可动画化: discrete; continuous(仅颜色)
语义基础: textShadow 派生

如果不支持与此属性关联的属性计算值, 则呈现处理器必须使用值 none

示例片段 – Text Shadow
<style xml:id="s1"
  tts:backgroundColor="black"
  tts:color="white"
  tts:lineHeight="125%"
  tts:textAlign="center"/>
...
<p style="s1">
<span tts:padding="1%">
I serve it with greens in those
<span tts:textShadow="10% -20% 5% lime">shadowy scenes,</span><br/>
And I use it for striking a light:</span>
</p>

示例呈现 – Text Shadow
TTML textShadow style property

10.2.48 tts:unicodeBidi

tts:unicodeBidi 属性用于指定一个样式属性,该属性 根据 Unicode 双向算法定义显式方向性嵌入、覆盖或隔离。

值: "normal" | "embed" | "bidiOverride" | "isolate"
初始值: normal
适用于: p, span
继承:
百分比: N/A
可动画化: discrete
语义基础: unicodeBidi 派生

如果不支持与此属性关联的属性计算值, 则呈现处理器必须使用值 normal

以下示例说明 tts:unicodeBidi 样式。

示例片段 – Unicode Bidirectionality
<region xml:id="r1">
  <style tts:extent="265px 84px"/>
  <style tts:padding="5px"/>
  <style tts:backgroundColor="black"/>
  <style tts:color="white"/>
  <style tts:displayAlign="after"/>
  <style tts:textAlign="center"/>
</region>
...
<p region="r1">
  Little birds are playing<br/>
  Bagpipes on the shore,<br/>
  <span tts:unicodeBidi="bidiOverride" tts:direction="rtl">where the tourists snore.</span>
</p>

示例呈现 – Unicode Bidirectionality
TTML unicodeBidi style property

10.2.49 tts:visibility

tts:visibility 属性用于指定一个样式属性,该属性 定义生成区域在视觉呈现媒介上渲染时是否可见。

值: "visible" | "hidden"
初始值: visible
适用于: body, div, image, p, region, span
继承:
百分比: N/A
可动画化: discrete
语义基础: visibility 派生

tts:visibility 样式对内容布局或合成没有影响, 仅决定已合成内容是否可见。

如果与此属性关联的属性计算值为 visible, 则由此元素生成的区域在视觉媒介上呈现时会渲染为可见。如果计算值为 hidden,则它们不会渲染为可见, 即它们被隐藏;尽管有前述规定,如果隐藏元素的后代元素上 此属性的计算值为 visible, 则该后代元素会渲染为可见。

如果不支持与此属性关联的属性计算值, 则呈现处理器必须使用值 visible

以下示例说明 tts:visibility 样式。

示例片段 – Visibility
<region xml:id="r1">
  <style tts:extent="398px 121px"/>
  <style tts:backgroundColor="black"/>
  <style tts:color="white"/>
  <style/>
</region>
...
<p region="r1" dur="4s">
  <span tts:visibility="hidden">
    <set begin="1s" tts:visibility="visible"/>
    Curiouser
  </span>
  <span tts:visibility="hidden">
    <set begin="2s" tts:visibility="visible"/>
    and
  </span>
  <span tts:visibility="hidden">
    <set begin="3s" tts:visibility="visible"/>
    curiouser!
  </span>
</p>

示例呈现 – Visibility
TTML visibility style property - [0,1)
TTML visibility style property - [1,2)
TTML visibility style property - [2,3)
TTML visibility style property - [3,4)

10.2.50 tts:wrapOption

tts:wrapOption 属性用于指定一个样式属性,该属性 定义是否在受影响元素的上下文中应用自动换行(断行)。

值: "wrap" | "noWrap"
初始值: wrap
适用于: span
继承:
百分比: N/A
可动画化: discrete
语义基础: wrapOption 派生

如果不支持与此属性关联的属性计算值, 则呈现处理器必须使用值 wrap

以下示例说明 tts:wrapOption 样式。

示例片段 – Wrap Option
<region xml:id="r1">
  <style tts:extent="192px 117px"/>
  <style tts:backgroundColor="black"/>
  <style tts:color="white"/>
  <style tts:displayAlign="after"/>
  <style tts:overflow="hidden"/>
  <style tts:wrapOption="noWrap"/>
</region>
...
<p>
  I'll tell thee everything I can:<br/>
  There's little to relate.<br/>
  I saw an aged aged man,<br/>
  A-sitting on a gate.
</p>

示例呈现 – Wrap Option
TTML wrapOption style property

10.2.51 tts:writingMode

tts:writingMode 属性用于指定一个样式属性,该属性 定义为了在 region 区域内堆叠块区域和行内区域而使用的 块进展方向和行内进展方向。

值: "lrtb" | "rltb" | "tbrl" | "tblr" | "lr" | "rl" | "tb"
初始值: lrtb
适用于: region
继承:
百分比: N/A
可动画化: discrete
语义基础: writingMode 派生

如果不支持与此属性关联的属性计算值, 则呈现处理器必须使用值 lrtb

注:

行内进展方向为从左到右或从右到左的书写模式 称为水平书写模式,而行内进展方向为 从上到下的书写模式称为垂直书写模式

以下示例说明 tts:writingMode 样式。

示例片段 – Writing Mode
<tt ... xml:lang="en">
...
<region xml:id="top" tts:origin="10% 10%" tts:extent="55% 10%"
  tts:writingMode="rltb"/>
<region xml:id="right" tts:origin="70% 10%" tts:extent="10% 80%"
  tts:writingMode="tbrl"/>
...
<p region="top"><span xml:lang="ar">نشاط التدويل،</span> W3C</p>
<p region="right">hello <span xml:lang="ja">みなさん、<br/>こんにちは</span></p>
...
</tt>

示例呈现 – Writing Mode
TTML writingMode style property

注:

在此示例中,文本内容的自然语言使用多个 xml:lang 属性标识。虽然 为了演示 tts:writingMode 属性并非技术上必需, 但建议在包含多种自然语言内容的标记中使用显式语言标识。

10.2.52 tts:zIndex

tts:zIndex 属性用于指定一个样式属性,该属性 定义 region 区域在重叠情况下的前后顺序。

值: "auto" | <integer>
初始值: auto
适用于: region
继承:
百分比: N/A
可动画化: discrete
语义基础: zIndex 派生

如果两个区域关联同一个 Z-index 值,则如果这些区域 在空间上重叠,由词法上较后元素生成的区域必须 渲染在由词法上较前元素生成的区域之上,其中词法 顺序定义为文档实例的后序遍历。

auto 值的语义是 [XSL-FO 1.1] §7.30.18 所定义的语义,其中 tt 元素 被视为建立根堆叠上下文。

如果不支持与此属性关联的属性计算值, 则呈现处理器必须使用最接近的 受支持值。

注:

在此上下文中,短语 最接近的受支持值 表示 使计算出的 z-index 与受支持的 z-index 之间的欧几里得距离 最小的值。如果存在多个与 计算值等距的最接近受支持值,则使用距离 0 最近的值, 即最接近当前堆叠上下文基准堆叠层级的值。

以下示例说明 tts:zIndex 样式。

示例片段 – Z Index
<region xml:id="r1">
  <style tts:origin="0px 0px"/>
  <style tts:extent="400px 100px"/>
  <style tts:padding="5px"/>
  <style tts:backgroundColor="black"/>
  <style tts:color="white"/>
  <style tts:zIndex="0"/>
</region>
<region xml:id="r2">
  <style tts:origin="100px 60px"/>
  <style tts:extent="400px 100px"/>
  <style tts:padding="5px"/>
  <style tts:backgroundColor="red"/>
  <style tts:color="white"/>
  <style tts:textAlign="end"/>
  <style tts:zIndex="1"/>
</region>
<region xml:id="r3">
  <style tts:origin="0px 120px"/>
  <style tts:extent="400px 100px"/>
  <style tts:padding="5px"/>
  <style tts:backgroundColor="black"/>
  <style tts:color="white"/>
  <style tts:zIndex="2"/>
</region>
<region xml:id="r4">
  <style tts:origin="100px 180px"/>
  <style tts:extent="400px 100px"/>
  <style tts:padding="5px"/>
  <style tts:backgroundColor="red"/>
  <style tts:color="white"/>
  <style tts:textAlign="end"/>
  <style tts:zIndex="3"/>
</region>
...
<p region="r1">
  I passed by his garden, and marked, with one eye,<br/>
  How the Owl and the Panther were sharing a pie.
</p>
<p region="r2">
  The Panther took pie-crust, and gravy, and meat,<br/>
  While the Owl had the dish as its share of the treat.
</p>
<p region="r3">
  When the pie was all finished, the Owl, as a boon,<br/>
  Was kindly permitted to pocket the spoon:
</p>
<p region="r4">
  While the Panther received knife and fork<br/>
  with a growl,<br/>
  And concluded the banquet by...
</p>

示例呈现 – Z Index
TTML zIndex style property

10.2.53 tta:gain

tta:gain 属性用于指定一个音频样式属性,该属性 决定在指定此属性的元素的活跃持续时间内,应用到适用音频内容的 gain 乘数。

值: <number>
初始值: 1
适用于: audio, body, div, p, span
继承:
百分比: N/A
可动画化: discrete; continuous

如果此属性的指定值不包含在区间 [-1,1] 中, 则与此属性关联的属性计算值会被钳制到该有界区间内。

如果与此属性关联的属性计算值为负,则 gain 会设置为 该计算值的绝对值,并应用相位反转。

如果 gain 为 0,则活跃音频内容完全静音。如果 gain 为 1,则活跃 音频内容的振幅不被修改。否则,gain 大于 0 且小于 1,在这种情况下 会对组合后的活跃音频内容应用相对衰减,其中此衰减在 区间 [0,1] 上是线性的。

以下示例说明 tta:gain 样式。

示例片段 – Gain
<div>
  <audio src="#track1" tta:gain="0.5"/>
  <p tta:gain="0.3">
    <audio src="#track2" tta:gain="0.8"/>
  </p>
</div>

注:

在此示例中,两个音频源 track1track2 处于活跃状态。 div 元素向其子 p 提供一个活跃音频轨道作为输出, 而此子 p 组合第二个活跃音频轨道以形成到其子级的输出。 此外,在每个源音频以及 p 的输出上分别指定了不同的 gain, 使得最终输出为 0.3[0.5(track1) + 0.8(track2)]

注:

此属性所表示的样式属性语义基于 [WEBAUDIO] §2.7 所定义的语义,其中指定该属性的元素 在音频图中生成一个 GainNode,其 gain 属性具有相同的计算值,并且对于不是音频生成元素内容元素,其输入是该元素父元素的音频输出与所有子音频生成元素的组合 (线性求和)音频输出之和;否则,即对于音频生成 元素,其输入是该元素生成的音频。

10.2.54 tta:pan

tta:pan 属性用于指定一个音频样式属性,该属性 决定在指定此属性的元素的活跃持续时间内,应用到适用音频内容的立体声 pan 向量。

值: <number>
初始值: 0
适用于: audio, body, div, p, span
继承:
百分比: N/A
可动画化: discrete; continuous

如果此属性的指定值不包含在区间 [-1,1] 中, 则与此属性关联的属性计算值会被钳制到该有界区间内。

如果与此属性关联的属性计算值为负,则 pan 方向在中心左侧。 如果 pan 值为 0,则活跃音频内容的立体声方向性不被修改; 否则,pan 值为正, 在这种情况下 pan 方向在中心右侧,其中值 -1 表示完全靠左,值 1 表示完全靠右。

以下示例说明 tta:pan 样式。

示例片段 – Pan
<div>
  <audio src="#track1" tta:pan="0.5"/>
  <p tta:pan="0.3">
    <audio src="#track2" tta:pan="0.8"/>
  </p>
</div>

注:

在此示例中,两个音频源 track1track2 处于活跃状态。 div 元素向其子 p 提供一个活跃音频轨道作为输出, 而此子 p 组合第二个活跃音频轨道以形成到其子级的输出。 此外,在每个源音频以及 p 的输出上分别指定了不同的 pan, 使得最终输出 pan 为 0.3[0.5(track1) + 0.8(track2)]

注:

此属性所表示的样式属性语义基于 [WEBAUDIO] §2.21 所定义的语义,其中指定该属性的元素 在音频图中生成一个 StereoPannerNode,其 pan 属性具有相同的计算值,并且对于不是音频生成元素内容元素,其输入是该元素父元素的音频输出与所有子音频生成元素的组合 (线性求和)音频输出之和;否则,即对于音频生成 元素,其输入是该元素生成的音频。

10.2.55 tta:pitch

tta:pitch 属性用于指定一个音频样式属性,该属性 在受影响内容启用语音合成时决定语音音高。

值: <pitch>
初始值: 0%
适用于: span
继承:
百分比: 相对于输入音频音高
可动画化: none

以下示例说明 tta:pitch 样式。

示例片段 – Pitch
<p>Apply relative pitch adjustment to <span tta:pitch="+10hz">this</span> word.</p>

注:

此属性所表示的样式属性语义派生自 [SSML 1.0] §3.2.4 所定义的语义,其中 会将等价的 prosody 元素应用到 spoken 字符内容,该元素的 pitch 属性等于计算值。

10.2.56 tta:speak

tta:speak 属性用于指定一个音频样式属性,该属性 决定是否为受影响内容启用语音合成,以及如果启用,应应用哪种 语速。

值: "none" | "normal" | "fast" | "slow"
初始值: none
适用于: span
继承:
百分比: N/A
可动画化: none

如果此属性的值为 none,则受影响内容禁用语音合成。否则, 如果此属性的值为 normalfastslow, 则分别以 normal、fast 或 slow 语速启用语音合成。

以下示例说明 tta:speak 样式。

示例片段 – Speak
<p>Speak <span tta:speak="normal">this</span> word.</p>

注:

此属性所表示的样式属性语义派生自 [SSML 1.0] §3.2.4 所定义的语义,其中 会将等价的 prosody 元素应用到 spoken 字符内容,该元素的 rate 属性等于计算值。

10.3 样式值表达式

样式属性值包括使用以下表达式:

10.3.1 <alpha>

<alpha> 表达式用于表示不透明度值, 其中 0 表示完全透明,1 表示完全不透明。

语法表示 – <alpha>
<alpha>
  : float

在上述语法表示中,语法元素 float 必须遵循 [XML Schema Part 2] §3.2.4.1 定义的词法表示。 如果所表示的值小于 0.0, 则必须解释为等于 0.0;类似地,如果所表示的值 大于 1.0,则必须解释为 1.0。值 NaN 必须解释为 0.0。

<alpha> 的指定值不应为 NaN、 小于 0 或大于 1。

如果呈现处理器不支持某个特定的、 有效的不透明度值,则必须将其解释为等于 最接近的受支持值。

注:

在此上下文中,短语 最接近的受支持值 表示 使计算不透明度与受支持不透明度之间的欧几里得距离 最小的值。如果存在多个与 计算值等距的最接近受支持值,则使用距离 0 最远的值, 即最大的不透明度。

10.3.2 <annotation-color>

<annotation-color> 表达式用于表示文本 标注标记的颜色,例如 ruby 或 emphasis 标记。

语法表示 – <annotation-color>
<annotation-color>
  : "current"
  | <color>
current

等价于受影响文本的 tts:color 计算值。

<color>

指定颜色。

如果实现无法识别或以其他方式区分 annotation color 值, 则必须将其解释为就像指定了 current 样式一样;因此,支持 文本标注标记的实现必须至少支持 current 值。

10.3.3 <annotation-position>

<annotation-position> 表达式用于表示文本 标注标记的位置,例如 ruby 或 emphasis 标记。

语法表示 – <annotation-position>
<annotation-position>
  : "before"
  | "after"
  | "outside"
before

朝向受影响字形区域的 before 边。如果 适用水平书写模式,则这是朝向 字形区域的顶部。如果适用垂直书写模式, 则这是朝向字形区域的右侧或左侧, 取决于 tts:writingMode 分别解析为 tbrl 还是 tblr

after

朝向受影响字形区域的 after 边。如果 适用水平书写模式,则这是朝向 字形区域的底部。如果适用垂直书写模式, 则这是朝向字形区域的左侧或右侧, 取决于 tts:writingMode 分别解析为 tbrl 还是 tblr

outside

对于包含标注文本的 p 元素生成的 (1) 唯一行区域或 (2) 最后一个块区域的第一个行区域,等价于 before;否则等价于 after

如果实现无法识别或以其他方式区分 annotation position 值, 则必须将其解释为就像指定了 before 位置一样;因此,支持 文本标注标记的实现必须至少支持 before 值。

10.3.4 <border>

<border> 表达式用于表示一个或多个边框样式分量表达式。

语法表示 – <border>

必须至少出现一个边框样式分量,例如值为 none<border-style> 分量。分量顺序不重要。

10.3.5 <border-color>

<border-color> 表达式用于表示一个或多个边框的颜色。

语法表示 – <border-color>
<border-color>
  : <color>

10.3.6 <border-radii>

<border-radii> 表达式用于表示一个或多个边框的半径。

语法表示 – <border-radii>
<border-radii>
  : "radii(" <lwsp>? <length> ( <lwsp>? "," <lwsp>? <length> )? <lwsp>? ")"

如果指定了两个 <length> 表达式,则第一个 length 对应于行内进展维度(对内容)或水平方向(对 region)的 四分之一椭圆半径,而第二个 length(如果存在)对应于 块进展维度(对内容)或垂直方向(对 region)的 四分之一椭圆半径;或者,如果只存在一个 length,则解释为就像指定了两个 具有相同值的 length 一样。

10.3.7 <border-style>

<border-style> 表达式用于表示一个或多个边框的样式。

语法表示 – <border-style>
<border-style>
  : "none"
  | "dotted"
  | "dashed"
  | "solid"
  | "double"

dotteddasheddouble 的解释 被视为依赖于实现。

如果实现无法识别或以其他方式区分这些 border style 值之一, 则必须将其解释为就像指定了 solid 样式一样;因此, 支持边框的实现必须至少支持 solid 值。

10.3.8 <border-thickness>

<border-thickness> 表达式用于表示一个或多个边框的厚度。

语法表示 – <border-thickness>
<border-thickness>
  : "thin"
  | "medium"
  | "thick"
  | <length>

thinmediumthick 的解释 被视为依赖于实现;但是,解析后的长度必须遵守以下 约束:thickness(thin) < thickness(medium); thickness(medium) < thickness(thick)。

如果 border thickness 表示为 <length>, 则不得采用百分比值的形式;也就是说,必须采用标量值的形式。

10.3.9 <color>

<color> 表达式用于指定命名颜色、精确 RGB 颜色三元组, 或精确 RGBA 颜色元组,其中 alpha 分量(如果表示) 在 100% 不透明度时为最大值 (255), 在 0% 不透明度时为最小值 (0),并且适用的颜色空间由 [SRGB] 定义。

语法表示 – <color>
<color>
  : "#" rrggbb
  | "#" rrggbbaa
  | "rgb(" r-value "," g-value "," b-value ")"
  | "rgba(" r-value "," g-value "," b-value "," a-value ")"
  | <named-color>

rrggbb
  :  <hex-digit>{6}

rrggbbaa
  :  <hex-digit>{8}

r-value | g-value | b-value | a-value
  : <lwsp>? component-value <lwsp>?

component-value
  : <non-negative-integer>                    // valid range: [0,255]

当表示 RGB 分量值时,这些值被视为 预乘 alpha。

为了执行呈现处理,使得非不透明或非透明的 alpha 或不透明度值适用, 合成函数的语义按照组合函数的输入和输出都使用 [SRGB] 颜色空间来定义。

注:

使用 [SRGB] 作为上述合成语义 并不意味着阻止实际处理器出于内部或外部目的使用其他 颜色空间。例如,呈现处理器最终可以 将此处使用的 SRGB 值转换到 YUV 颜色空间,以便在电视设备上呈现。

如果呈现处理器不支持某个特定的、 有效颜色或 alpha 值,则必须将其解释为等于 最接近的受支持值。

注:

在此上下文中,短语 最接近的受支持值 表示 使 RGB 颜色空间中的计算颜色和 alpha 与受支持颜色和 alpha 之间的欧几里得距离 最小的值。如果存在多个与 计算值等距的最接近受支持值,则使用距离不透明黑色 rgba(0,0,0,255) 最近的值,即最接近不透明黑色的值。

10.3.10 <digit>

<digit> 用于表示整数以及其他类型的数字或 token。

语法表示 – <digit>
<digit>
  : "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"

10.3.11 <emphasis-color>

<emphasis-color> 表达式用于表示文本 emphasis 标记的颜色。

语法表示 – <emphasis-color>
<emphasis-color>
  : <annotation-color>

10.3.12 <emphasis-position>

<emphasis-position> 表达式用于表示文本 emphasis 标记的位置。

语法表示 – <emphasis-position>
<emphasis-position>
  : <annotation-position>

10.3.13 <emphasis-style>

<emphasis-style> 表达式用于表示文本 emphasis 标记的样式。

语法表示 – <emphasis-style>
<emphasis-style>
  : "none"
  | "auto"
  | ( "filled" | "open" ) || ( "circle" | "dot" | "sesame" )
  | <quoted-string>

文本 emphasis 样式值的语义定义如下:

none

无文本 emphasis 标记。

auto

如果适用垂直书写模式,则等价于 filled sesame; 否则,等价于 filled circle

filled

Emphasis 标记使用 emphasis 颜色填充。

open

Emphasis 标记不填充,即其轮廓使用 emphasis 颜色描边,但不填充。

circle

Emphasis 标记是圆形。如果 filled,则等价于 U+25CF '●';如果 open,则 等价于 U+25CB '○'

dot

Emphasis 标记是点。如果 filled,则等价于 U+2022 '•';如果 open,则 等价于 U+25E6 '◦'

sesame

Emphasis 标记是芝麻点。如果 filled,则等价于 U+FE45 '﹅';如果 open,则 等价于 U+FE46 '﹆'

<quoted-string>

Emphasis 标记是字符串的第一个字素簇,字符串其余部分被忽略。

如果只指定了 filledopen,则分别等价于 filled circleopen circle

如果只指定了 circledotsesame,则分别 等价于 filled circlefilled dotfilled sesame

如果实现无法识别或以其他方式区分 emphasis style 值, 则必须将其解释为就像指定了 auto 样式一样;因此, 支持文本 emphasis 标记的实现必须至少支持 auto 值。

10.3.14 <extent>

<extent> 表达式指定矩形区域的维度。

语法表示 – <extent>
<extent>
  : "auto"
  | "contain"
  | "cover"
  | <measure> <lwsp> <measure>

10.3.15 <family-name>

<family-name> 表达式指定字体族名称。

语法表示 – <family-name>
<family-name>
  : unquoted-string
  | <quoted-string>

unquoted-string
  : identifier (<lwsp> identifier)*

identifier
  : [-]? identifier-start identifier-following*

identifier-start
  : [_a-zA-Z]
  | non-ascii-or-c1
  | escape

identifier-following
  : [_a-zA-Z0-9-]
  | non-ascii-or-c1
  | escape

non-ascii-or-c1
  : [^\0-\237]

escape
  : "\\" char

除遵守上文指定的语法规则外,还适用以下语义规则:

  • <family-name> 表达式的语义值是其 unquoted-stringquoted-string 非终结符的语义值,取决于适用哪一个;

  • unquoted-string 非终结符的语义值是一对 <quoted, content>, 其中 quoted 是布尔值 false, 而 content 是按词法顺序追加每个 identifier 非终结符值的结果,其中如果某个 identifier 不是第一个 identifier,则在其值之前放置一个 SPACE (U+0020) 字符;

  • quoted-string 非终结符的语义值是一对 <quoted, content>, 其中 quoted 是布尔值 true, 而 content 是 quoted string 的未加引号内容,即分隔引号之间的 字符序列。

  • escape 非终结符的语义值是被转义 char 的值;

  • 采用 unquoted-string 形式的 <family-name>,如果 包含一个以两个 - HYPHEN-MINUS (U+002D) 字符开头的 identifier,则必须被视为无效;

  • 采用 unquoted-string 形式的 <family-name>,如果 包含单个 identifier,且该 identifier (通过大小写敏感比较)匹配某个 <generic-family-name>,则必须解释为 该 <generic-family-name>;

  • 采用 quoted-string 形式的 <family-name>,如果其内容 (未加引号值)匹配(通过大小写敏感比较)某个 <generic-family-name>, 则不得解释为该 <generic-family-name>,而应解释为 非通用字体族的实际名称。

  • 语法元素 char 要按照 [XML 1.0] §2.2 定义的 Char 产生式解释。

注:

[CSS2] §4.1.1 定义的 {unicode} 转义机制 不受此语法支持;相反,预期作者 (1) 使用文档编码直接编码 该字符,或 (2) 按照 [XML 1.0] §4.1 使用 XML 字符引用。当需要使用具有语法意义的字符 而不采用其正常语法解释时,可以使用上文指定的反斜杠 (reverse solidus)escape 非终结符对其转义。

使用反斜杠(reverse solidus)escape 非终结符时,上述语法 不会对可被转义的字符施加任何限制,例如 \\[\n\r\f0-9a-f] 是 允许的。如果这些后几种转义之一出现在 <family-name> 表达式中, 那么如果要将其与标准 XSL-FO 或 CSS 解析器一起使用,就需要转换为 {unicode} 转义。 特别是,反斜杠后跟换行会被 CSS 忽略,而上述语法不会 忽略。此类未被忽略的转义换行需要使用 等价的 {unicode} 转义(例如 \a)来表示, 以便在 CSS 中表达。

10.3.16 <font-families>

<font-families> 表达式指定非空字体族列表。

语法表示 – <font-families>
<font-families>
  : font-family (<lwsp>? "," <lwsp>? font-family)*

font-family
  : <family-name>
  | <generic-family-name>

10.3.17 <font-size>

<font-size> 表达式以一个或两个 <length> 表达式来指定字体大小。

语法表示 – <font-size>
<font-size>
  : <length> (<lwsp> <length>)?

10.3.18 <font-variant>

<font-variant> 表达式指定一个或多个影响字符 到字形映射过程的关键字,具体而言,指定在执行呈现处理时是否以及选择哪种 变体字形(如果适用字体中可用)。

语法表示 – <font-variant>
<font-variant>
  : "normal"
  | ("super" | "sub") || ("full" | "half") || "ruby"

如果适用值 normal,则除非适用高层协议, 否则不选择下标、上标、全宽、半宽或 ruby 字形变体。

如果适用关键字 super,则选择上标字形变体(如果可用)。 例如,当使用 OpenType 字体渲染时,会启用 OpenType sups 特性。 如果适用关键字 sub, 则选择下标字形变体(如果可用)。 例如,当使用 OpenType 字体渲染时,会启用 OpenType subs 特性。

如果适用关键字 full,则选择全宽字形变体(如果可用)。 例如,当使用 OpenType 字体渲染时,会启用 OpenType fwid 特性。 如果适用关键字 half, 则选择半宽字形变体(如果可用)。 例如,当使用 OpenType 字体渲染时,会启用 OpenType hwid 特性。

如果适用关键字 ruby,则选择 ruby 字形变体(如果可用)。 例如,当使用 OpenType 字体渲染时,会启用 OpenType ruby 特性。

注:

关于 OpenType 字体的定义,见 [OFF]

如果适用多个变体,则选择满足最大数量适用变体的字形。例如, 如果同时指定 superhalf 变体,则选择同时被指定为 上标和半宽变体的字形(如果可用)。如果只能满足所请求变体的子集, 并且存在多个可能子集会导致所选变体字形不同,则适用哪个子集被视为 依赖于实现,即由文档 处理上下文确定。

10.3.19 <generic-family-name>

<generic-family-name> 表达式使用一个表示字体族类别的通用 token 来指定字体族。

将 generic family name 解析为具体字体实例被视为 依赖于实现,无论在内容创作还是内容解释的情况下都是如此。

语法表示 – <generic-family-name>
<generic-family-name>
  : "default"
  | "monospace"
  | "sansSerif"
  | "serif"
  | "monospaceSansSerif"
  | "monospaceSerif"
  | "proportionalSansSerif"
  | "proportionalSerif"

generic(font)family name 与实际字体之间的映射不由本规范确定;但是, 在执行呈现时,应尽可能保持 monospace 与 proportional、 serif 与 sans-serif 之间的区别。

如果指定了 monospace 的 generic(font)family name, 则可将其解释为等价于 monospaceSansSerifmonospaceSerif。generic family name sansSerifserif 分别解释为等价于 proportionalSansSerifproportionalSerif

如果指定了 generic family name default(或由 初始值隐含),则其排版特征被视为依赖于实现; 但是,建议将此默认字体族映射到 等宽 sans-serif 字体。

10.3.20 <hex-digit>

<hex-digit> 用于表示采用 16 进制算术的整数和其他类型的数字或 token。

为了进行解析,不得区分大小写。

语法表示 – <hex-digit>
<hex-digit>
  : <digit>
  | "a" | "b" | "c" | "d" | "e" | "f"
  | "A" | "B" | "C" | "D" | "E" | "F"

10.3.21 <integer>

<integer> 表达式用于表示任意有符号整数值。

语法表示 – <integer>
<integer>
  : ( "+" | "-" )? <non-negative-integer>

10.3.22 <length>

<length> 表达式用于表示笛卡尔空间中某个点的坐标分量, 或笛卡尔空间中两个点之间的距离。

语法表示 – <length>
<length>
  : scalar
  | <percentage>

scalar
  : <number> units

units
  : "px"
  | "em"
  | "c"                                     // abbreviation of "cell"
  | "rw"
  | "rh"

省略标量长度值的 units 分量是错误。

单位 px(pixel)对应于 逻辑像素, 属于文档坐标空间, 如 H.3 坐标 空间所定义;但是, px(pixel)单位不应在 <length> 表达式中使用, 除非在 tt 元素上指定了由两个 使用 px(pixel)单位的 <length> 规范组成的 tts:extent 属性, 否则使用 px(pixel)单位已废弃

当相对于以单个长度或两个相等长度表示大小的字体指定时, 单位 em 被视为与 [XSL-FO 1.1] §5.9.13 定义的相同; 但是,当相对于以两个不相等长度表示大小的字体指定时, 如果用于指定行内进展方向上的长度,则一个 em 等于 经过变形缩放字体的行内进展维度; 如果用于指定块进展方向上的长度,则等于缩放字体的 块进展维度。

除非另有规定,否则 em 单位会相对于适用于解析 em 单位上下文中该元素的 tts:fontSize 属性关联属性的计算值 进行解析。

单位 c(cell)的语义由参数 7.2.1 ttp:cellResolution 定义。

根容器相对 单位 rwrh 分别定义为 根容器区域宽度和高度的 百分之一 (1%)。 例如,长度 25rw 解释为 根容器区域宽度的 25%。

10.3.23 <lwsp>

<lwsp> 用于表示常见线性空白(LWSP)语法构造。

语法表示 – <lwsp>
<lwsp>
  : <whitespace>+

10.3.24 <measure>

<measure> 值将距离表示为 绝对维度相对维度,其中使用上下文决定 哪个维度适用。

如果两个绝对维度之一,即 heightwidth 适用, 则关联的相对维度,即 bpdipd,会根据适用的 书写模式文本 方向确定,使得 关联的相对维度支配如下所述指定值的解释。

否则,两个相对维度之一,即 bpdipd 适用,在这种情况下该相对维度 支配如下所定义的指定值解释。

语法表示 – <measure>
<measure>
  : "auto"
  | "fitContent"
  | "maxContent"
  | "minContent"
  | <length>

这些值的语义定义如下:

auto

对于 ipd, 当应用于图像时,为 行内进展方向上的固有大小; 否则, 为指定 100% 值时将获得的数值。

对于 bpd, 当应用于图像时,为 块进展方向上的固有大小; 否则, 为指定 100% 值时将获得的数值。

fitContent

数值等于 (1) minContent 的值与 (2) maxContentauto 的值中较小者之间的较大者。

maxContent

对于 ipd,为包围元素所有内容的最大数值, 使得仅在硬性(即强制)断点处断行,即使这意味着溢出父级的 ipd

对于 bpd,为包围元素所有内容的最大数值, 使得在所有可能的换行位置断行,即硬性(强制)和软性(可选)断点。

minContent

对于 ipd,为包围元素所有内容的最小数值, 使得在所有可能的换行位置断行,即硬性(强制)和软性(可选)断点。

对于 bpd,为包围元素所有内容的最小数值, 使得仅在硬性(即强制)断点处断行,即使这意味着溢出父级的 ipd

<length>

表示为标量或百分比的非负数值。

10.3.25 <named-color>

<named-color> 用于以方便的名称表示 RGBA 颜色,并且适用的 颜色空间由 [SRGB] 定义。

为了进行解析,不得区分大小写。

语法表示 – <named-color>
<named-color>
  : "transparent"                           // #00000000
  | "black"                                 // #000000ff
  | "silver"                                // #c0c0c0ff
  | "gray"                                  // #808080ff
  | "white"                                 // #ffffffff
  | "maroon"                                // #800000ff
  | "red"                                   // #ff0000ff
  | "purple"                                // #800080ff
  | "fuchsia"                               // #ff00ffff
  | "magenta"                               // #ff00ffff (= fuchsia)
  | "green"                                 // #008000ff
  | "lime"                                  // #00ff00ff
  | "olive"                                 // #808000ff
  | "yellow"                                // #ffff00ff
  | "navy"                                  // #000080ff
  | "blue"                                  // #0000ffff
  | "teal"                                  // #008080ff
  | "aqua"                                  // #00ffffff
  | "cyan"                                  // #00ffffff (= aqua)

注:

transparent 外,上文指定的命名颜色集合构成 [SVG 1.1] §4.2 指定的命名颜色集合的真子集。

10.3.26 <non-negative-integer>

<non-negative-integer> 表达式用于表示任意非负整数值。

语法表示 – <non-negative-integer>
<non-negative-integer>
  : <digit>+

10.3.27 <non-negative-number>

<non-negative-number> 表达式用于表示任意非负整数或 实数值。

语法表示 – <non-negative-number>
<non-negative-number>
  : <non-negative-integer>
  | non-negative-real

non-negative-real
  : <digit>* "." <digit>+

10.3.28 <number>

<number> 表达式用于表示任意可选带符号的整数或 实数值。

语法表示 – <number>
<number>
  : sign? <non-negative-number>

sign
  : "+" | "-"

10.3.29 <origin>

<origin> 表达式指定矩形区域的维度。

语法表示 – <origin>
<origin>
  : "auto"
  | <length> <lwsp> <length>

10.3.30 <padding>

<padding> 表达式指定应用于区域 padding 矩形的 inset。

语法表示 – <padding>

10.3.31 <percentage>

<percentage> 表达式用于表示任意有符号整数或实数百分比。

语法表示 – <percentage>
<percentage>
  : <number> "%"

10.3.32 <pitch>

<pitch> 值表示要应用于合成语音的绝对或相对音高频率调整。

语法表示 – <pitch>
<pitch>
  : <percentage>
  | <number> pitch-units?

pitch-units
  : "hz" | "st"

如果指定为 <percentage>,则输出音高 (频率)为 input pitch (frequency) * (1.0 + (percentage/100))。 如果指定为 <number> 且 指定了 sign,则输出音高会根据符号为正(负)而相对于输入音高 正向(负向)调整;但是,如果未指定符号,则输入音高 被设置为指定值,即 不相对于输入音高。如果存在 units 分量,则它指定 Hertz(hz)或 semi-tones(st),即标准全音阶上的半音。 如果未指定 units 分量,则隐含 Hertz。

10.3.33 <position>

<position> 表达式用于间接确定区域或图像相对于参考区域的原点。

语法表示 – <position>
<position>
  : offset-position-h                             // single component value
  | edge-keyword-v                                // single component value
  | offset-position-h <lwsp> offset-position-v    // two component value
  | position-keyword-v <lwsp> position-keyword-h  // two component value
  | position-keyword-h <lwsp> edge-offset-v       // three component value
  | position-keyword-v <lwsp> edge-offset-h       // three component value
  | edge-offset-h <lwsp> position-keyword-v       // three component value
  | edge-offset-v <lwsp> position-keyword-h       // three component value
  | edge-offset-h <lwsp> edge-offset-v            // four component value
  | edge-offset-v <lwsp> edge-offset-h            // four component value

offset-position-h
  : position-keyword-h
  | <length>

offset-position-v
  : position-keyword-v
  | <length>

edge-offset-h
  : edge-keyword-h <lwsp> <length>

edge-offset-v
  : edge-keyword-v <lwsp> <length>

position-keyword-h
  : "center"
  | edge-keyword-h

position-keyword-v
  : "center"
  | edge-keyword-v

edge-keyword-h
  : "left"
  | "right"

edge-keyword-v
  : "top"
  | "bottom"

<position> 表达式可以由一到四个分量值组成,如下所示, 由上述语法正式定义:

一个分量

水平偏移位置或垂直边关键字

两个分量

水平位置偏移后跟垂直位置偏移,或 垂直位置关键字后跟水平位置关键字

三个分量

水平边偏移和垂直位置关键字,或水平位置关键字和垂直边偏移, 以任意顺序出现

四个分量

水平边偏移和垂直边偏移,以任意顺序出现

每个 <position> 表达式都可以通过以下等价表转换为 left <length> top <length> 形式的四分量等价值:

单分量等价值
等价值
center center center
left left center
right right center
top center top
bottom center bottom
<length> <length> center

双分量等价值
等价值
bottom center left 50% top 100%
bottom left left 0% top 100%
bottom right left 100% top 100%
center center left 50% top 50%
center top left 50% top 0%
center bottom left 50% top 100%
center left left 0% top 50%
center right left 100% top 50%
center <length> left 50% top <length>
left center left 0% top 50%
left top left 0% top 0%
left bottom left 0% top 100%
left <length> left 0% top <length>
right center left 100% top 50%
right top left 100% top 0%
right bottom left 100% top 100%
right <length> left 100% top <length>
top center left 50% top 0%
top left left 0% top 0%
top right left 100% top 0%
<length> center left <length> top 50%
<length> top left <length> top 0%
<length> bottom left <length> top 100%
<length-1> <length-2> left <length-1> top <length-2>

注:

当双分量表达式由两个 <length> 值组成时, 为避免可能的歧义解释,第一个解释为水平 length,第二个解释为垂直 length,如上表最后一行所示。

三分量等价值
等价值
bottom left <length> left <length> top 100%
bottom right <length> right <length> top 100%
bottom <length> center left 50% bottom <length>
bottom <length> left left 0% bottom <length>
bottom <length> right left 100% bottom <length>
center bottom <length> left 50% bottom <length>
center left <length> left <length> top 50%
center right <length> right <length> top 50%
center top <length> left 50% top <length>
left bottom <length> left 0% bottom <length>
left top <length> left 0% top <length>
left <length> bottom left <length> top 100%
left <length> center left <length> top 50%
left <length> top left <length> top 0%
right bottom <length> left 100% bottom <length>
right top <length> left 100% top <length>
right <length> bottom right <length> top 100%
right <length> center right <length> top 50%
right <length> top right <length> top 0%
top left <length> left <length> top 0%
top right <length> right <length> top 0%
top <length> center left 50% top <length>
top <length> left left 100% top <length>
top <length> right left 100% top <length>

四分量等价值
等价值
bottom <length-v> left <length-h> left <length-h> top (100% - <length-v>)
bottom <length-v> right <length-h> left (100% - <length-h>) top (100% - <length-v>)
left <length-h> bottom <length-v> left <length-h> top (100% - <length-v>)
right <length-h> bottom <length-v> left (100% - <length-h>) top (100% - <length-v>)
right <length-h> top <length-v> left (100% - <length-h>) top <length-v>
top <length-v> left <length-h> left <length-h> top <length-v>
top <length-v> right <length-h> left (100% - <length-h>) top <length-v>

如果 <length> 分量表示为百分比, 则该百分比会相对于某个参考维度解释,其中参考维度由使用上下文定义。

<position> 表达式的 <length> 分量可以 为正或为负。正 length 解释为相对于被引用边的 inset, 而负 length 解释为相对于被引用边的 outset。例如,来自 left 边的 inset 位于该边右侧(如果非零),而来自 left 边的 outset 位于该边左侧(如果非零)。相反, 来自 right 边的 inset 位于该边左侧(如果非零),而来自 right 边的 outset 位于该边右侧(如果非零)。对 topbottom 边也保持类似安排。

执行四分量等价转换时,表达式 (100% - <length-h>) 要解释为 100% 与 <length-h> 表达式的百分比等价值之间的差。 类似地,表达式 (100% - <length-v>) 要解释为 100% 与 <length-v> 表达式的百分比等价值之间的差。 在两种情况下,所得差值都可以是负百分比。

10.3.34 <ruby-reserve>

<ruby-reserve> 表达式用于为放置 ruby text content 保留空间。

语法表示 – <ruby-reserve>
<ruby-reserve>
  : "none"
  | ("both" | <annotation-position>) (<lwsp> <length>)?

10.3.35 <shadow>

<shadow> 值表示要应用于生成区域的阴影装饰。如果 生成区域是字形区域,则它应用于字形的轮廓 (而不是字形区域边界框)。如果生成区域不是 字形区域, 则它应用于该区域的边框矩形。

语法表示 – <shadow>

shadow 值表达式由 两到三个 <length> 项和 一个可选的 <color> 项组成, 其中各项由线性空白(LWSP)相互分隔。

第一个 <length> 项表示 沿关联区域水平轴维度的偏移, 其中正值表示朝向右边缘,负值表示朝向左边缘; 第二个 <length> 项表示 沿关联区域垂直轴维度的偏移, 其中正值表示朝向底边,负值表示朝向顶边。 第三个 <length> 项(如果存在)表示模糊 半径,并且必须为非负。

如果未指定模糊半径,即仅存在两个 <length> 项, 则适用 0px 的计算值。

如果不存在 <color> 项, 则适用 tts:color 属性的计算值。

注:

当在 tts:textShadow 值中使用以 cells 表示的 <length> 时, 适用块进展维度中的单元格维度。 例如,如果 text shadow thickness 指定为 0.1c,cell resolution 为 20 乘 10,且根容器 区域的 extent 为 640 乘 480,则 阴影厚度将是名义上的 480 / 10 * 0.1 像素,即 4.8px, 不考虑光栅化效果。

10.3.36 <text-combine>

<text-combine> 表达式用于确定竖排文本中的文本组合效果 行为。

语法表示 – <text-combine>
<text-combine>
  : "none"
  | "all"

10.3.37 <text-decoration>

<text-decoration> 表达式用于确定文本装饰效果的行为。

语法表示 – <text-decoration>
<text-decoration>
  : "none"
  | (("underline" | "noUnderline") || ("lineThrough" | "noLineThrough") || ("overline" | "noOverline"))

10.3.38 <text-emphasis>

<text-emphasis> 表达式用于确定文本 emphasis 效果的行为。

语法表示 – <text-emphasis>

10.3.39 <text-outline>

<text-outline> 表达式用于确定文本轮廓效果的行为。

语法表示 – <text-outline>
<text-outline>
  : "none"
  | (<color> <lwsp>)? <length> (<lwsp> <length>)?

10.3.40 <text-shadow>

<text-shadow> 表达式用于确定文本阴影效果的行为。

语法表示 – <text-shadow>
<text-shadow>
  : "none"
  | <shadow> (<lwsp>? "," <lwsp>? <shadow>)*

10.3.41 <whitespace>

<whitespace> 值用于表示常见空白字符。

语法表示 – <whitespace>
<whitespace>
  : ( " " | "\t" | "\n" | "\r" )

10.4 样式语义

本节按照标准处理模型定义样式解析的语义,如下所示:

只要外部可观察结果与此模型产生的结果一致, 就允许采用此模型的任何实现。

注:

此处采用的样式解析语义基于 [XSL-FO 1.1] §5。

10.4.1 样式关联

样式关联是 10.4.4 样式解析处理 的一个子过程,用于确定每个内容和 布局元素的指定样式集。

样式事项可以通过多种方式与内容 和布局事项关联:

除上述方式外,样式事项还可以使用以下方式与布局事项关联:

10.4.1.1 行内样式

样式属性可以通过在受影响元素上直接 指定来自 TT Style Namespaces 的属性,以行内方式表达。 当以这种方式表达时,样式信息的关联称为 行内样式

通过行内样式关联的样式属性优先级高于所有其他形式的样式关联。

示例 – 行内样式
<p tts:color="white">White 1 <span tts:color="yellow">Yellow</span> White 2</p>

注:

在上例中,两个文本节点 "White 1 "" White 2" 被解释为匿名 span,它们并未 关联 color 样式属性;相反,它们会按照下文 10.4.2.1 内容样式 继承 中所述,从其父 p 元素继承 color 样式。

10.4.1.2 引用样式

样式属性可以以非行内方式表达,并由受影响元素使用 style 属性引用。当以这种方式表达时, 样式信息的关联称为引用样式

如果 style 属性指定多个引用,则这些引用按照指定顺序 求值;当某个样式属性沿多条引用路径被指定时, 该顺序适用于其值的解析。

引用样式的使用被限制为引用 styling 元素后代中的 style 元素。引用作为 layout 元素后代的 style 元素被视为错误。

注:

使用引用样式会鼓励样式规范的复用,但会牺牲引用局部性。

注:

内容元素可以通过行内样式和引用样式的 混合方式与样式属性关联,在这种情况下,如上文 10.4.1.1 行内样式 所述, 行内样式具有优先级。

示例 – 引用样式
<style xml:id="s1" tts:color="white"/>
<style xml:id="s2" tts:color="yellow"/>
...
<p style="s1">White 1 <span style="s2">Yellow</span> White 2</p>

注:

在上例中,两个文本节点 "White 1 "" White 2" 被解释为匿名 span,它们并未 关联 color 样式属性;相反,它们会按照下文 10.4.2.1 内容样式 继承 中所述,从其父 p 元素继承 color 样式。

10.4.1.3 链式引用 样式

样式属性可以以非行内方式表达,并且这些样式属性自身还可以引用 其他非行内样式属性,从而创建从受影响元素开始的一条引用链。 当以这种方式表达时,样式信息的关联 称为链式引用样式

链式样式引用序列中的循环必须被视为错误。

引用样式的使用被限制为引用 styling 元素后代中的 style 元素。引用作为 layout 元素后代的 style 元素被视为错误。

注:

使用链式引用样式会鼓励将样式规范分组成通用集和特定集, 从而进一步有助于样式规范复用。

注:

内容元素可以通过行内样式、 引用样式和链式引用样式的混合方式与样式 属性关联,在这种情况下,如上文 10.4.1.1 行内样式 所述, 行内样式具有优先级。

示例 – 链式引用样式
<style xml:id="s1" tts:color="white" tts:fontFamily="monospaceSerif"/>
<style xml:id="s2" style="s1" tts:color="yellow"/>
...
<p style="s1">White Monospace</p>
<p style="s2">Yellow Monospace</p>

注:

在上例中,第二个段落的文本为黄色,因为 tts:color='yellow' 实际上覆盖(合并覆盖)了 s2 通过引用样式 s1 而获得的 tts:color='white'

10.4.1.4 嵌套样式

样式属性可以通过直接指定受影响元素的一个或 多个 style 元素子级,以嵌套方式表达。 当以这种方式表达时,样式信息的关联 称为嵌套样式

通过嵌套样式关联的样式属性优先级低于行内样式, 但高于引用样式。

示例 – 嵌套样式
<region xml:id="r1">
  <style tts:extent="128px 66px"/>
  <style tts:origin="0px 0px"/>
  <style tts:displayAlign="center"/>
</region>

注:

在此版本 TTML 中,嵌套样式仅适用于 region 元素。

10.4.2 样式继承

样式继承是 10.4.4 样式解析处理 的一个子过程,用于确定每个内容和 布局元素的指定样式集。

样式还使用以下方式进一步传播到内容事项:

为了确定继承样式,必须使用文档 实例的中间同步文档形式的元素层级, 这类中间形式由 11.3.1.3 中间同步文档构造定义。

注:

使用中间同步文档形式而非原始形式, 是为了便于进行 region 继承处理。

10.4.2.1 内容样式继承

在中间同步文档中,如果某个样式属性没有与内容 元素(或匿名 span) 关联,并且该样式属性被指定为可继承, 则样式属性会从祖先内容 元素继承。

如果确定某个样式属性需要继承,则继承值必须是适用中间同步文档内 定义该属性的元素最近祖先元素的计算样式集中, 同名样式属性的值。

示例 – 内容样式继承
<p tts:fontFamily="monospaceSansSerif">
  <span tts:color="yellow">Yellow Monospace</span>
</p>

注:

在上例中,包围字符项 Yellow Monospacespan 元素未指定 tts:fontFamily 样式属性,且该属性是可继承的; 因此,tts:fontFamily 样式的值 从祖先 p 元素的计算样式 集继承,并添加到 span 元素的指定 样式 集中。

10.4.2.2 Region 样式继承

在以下情况下,样式属性从 region 元素继承:

  1. 如果可继承样式属性 P 未与 内容元素匿名 span E 关联,并且

  2. 如果该样式属性 P 位于 region R 的计算样式 集中,并且

  3. 如果该元素 E 流入(呈现在)region R 中。

示例 – Region 样式继承
<region xml:id="r1">
  <style tts:color="yellow"/>
  <style tts:fontFamily="monospaceSerif"/>
</region>
...
<p region="r1">Yellow Monospace</p>

注:

在上例中,包围字符项 Yellow Monospace匿名 span 实际上继承了指定在 region 元素上的 tts:colortts:fontFamily 样式, p 元素流入(呈现)该 region 元素。

10.4.3 样式解析值类别

在样式解析、布局和呈现处理期间, 样式属性值分为以下三类:

10.4.3.1 指定值

与元素或匿名 span关联或由其继承的 样式属性值称为指定值。 给定元素的所有指定样式属性集合称为该元素的 指定样式集

10.4.3.2 计算值

当使用相对值表达式指定样式属性时, 例如命名颜色、相对单位(如 cell)或百分比, 它们需要进一步解析为绝对单位,例如 RGB 三元组、 像素等。

在样式解析过程中,指定样式值可以按绝对形式 重新解释(或重新计算),随后记录为 计算值。给定元素的 所有计算样式属性集合称为该元素的 计算样式集

当样式值被继承时,无论显式还是隐式继承, 继承的是从祖先元素继承来的该样式的计算值。 这是必需的,因为某些相对单位(例如百分比)的解析 要求在直接(本地)引用上下文中对表达式求值, 而不是在相关(解析)表达式不可用的远程引用上下文中求值。

10.4.3.3 使用值

在样式继承之后,如果特定属性的语义要求进一步解析, 或执行解析所需的信息直到布局或呈现处理发生时才可用, 则计算值可能需要在布局或呈现时进一步解析。 这样的值称为 使用值, 它不一定与下文所述的最终实际 值相同。

注:

使用值的确定始终 先于计算值的继承;也就是说,使用值 计算名义上在 10.4.4.4 样式解析 过程完成后执行。

注:

另见 [CSS2] §6.1.3。

10.4.3.4 实际值

在实际呈现过程中,还会发生其他变换, 将某些值表达式映射到具体的物理值。例如, 在显示过程中,计算样式值中的颜色还会进一步受到最接近颜色 近似和伽马校正的影响。此外,在计算样式值中使用 像素的长度值表达式被视为表达逻辑像素,而不是 物理(设备)像素。因此,这些逻辑 像素在呈现期间会受到 进一步变换或映射到物理(设备)像素的影响。

由逻辑到设备映射过程产生的最终值称为 实际值。 给定元素的所有 实际样式属性集合称为该元素的 实际样式集

注:

在呈现过程中可能产生多组实际值。例如,TTML 呈现处理器 设备可以输出 RGBA 分量视频信号,随后该信号 被 NTSC 或 PAL 电视进一步变换以生成最终 图像。在这种情况下,颜色和维度都可能在 呈现前进一步修改。

注:

一般来说,TTML 呈现处理器 无法访问实际样式集值;因此,在下文正式描述样式 解析过程时,不再进一步使用或引用实际值。

10.4.4 样式解析处理

样式解析过程在此定义为解析(确定)应用于内容和布局元素的 所有样式属性计算值的过程 (及其结果):

此处描述的过程构成 11.3.1 Region 布局与呈现 的一个组成子过程。

10.4.4.1 概念 定义

为了解释下文指定的样式解析处理模型, 适用以下概念定义:

[样式属性]

样式属性 P 被认为由一个 元组 [name, value] 组成,其中属性的 name 是一个元组 [namespace value, unqualified name],属性的 value 是一个 元组 [category, type, value expression]

示例 – 概念性样式属性
[
  ["http://www.w3.org/ns/ttml#styling", "color"],
  ["specified", color, "red"]
]

[样式(属性)集]

样式(属性)集由样式属性的无序集合组成, 其中集合内任意两个样式属性都不得具有 相同名称;这里的“相同名称”指 name 元组的 namespace value 和 name 元组的 unqualified name 相等;

在指定样式(属性)集中,每个样式 属性的 category 为 "specified";元素 E 的 指定样式(属性)集称为 SSS(E)

示例 – 概念性(指定)样式(属性)集
{
  [
    ["http://www.w3.org/ns/ttml#styling", "backgroundColor"],
    ["specified", color, 0x00FF00 ]
  ],
  [
    ["http://www.w3.org/ns/ttml#styling", "color"],
    ["specified", color, "red" ]
  ],
  [
    ["http://www.w3.org/ns/ttml#styling", "fontSize"],
    ["specified", length, "1c" ]
  ],
  [
    ["http://www.w3.org/ns/ttml#styling", "lineHeight"],
    ["specified", length, "117%" ]
  ]
}

在计算样式(属性)集中,每个样式 属性的 category 为 "specified" 或 "computed";元素 E 的计算样式(属性)集 称为 CSS(E)

示例 – 概念性(计算)样式(属性)集
{
  [
    ["http://www.w3.org/ns/ttml#styling", "backgroundColor"],
    ["specified", color, 0x00FF00 ]
  ],
  [
    ["http://www.w3.org/ns/ttml#styling", "color"],
    ["computed", color, 0xFF0000 ]
  ],
  [
    ["http://www.w3.org/ns/ttml#styling", "fontSize"],
    ["computed", length, "24px" ]
  ],
  [
    ["http://www.w3.org/ns/ttml#styling", "lineHeight"],
    ["computed", length, "28px" ]
  ]
}

[样式(属性)合并]

样式属性 Pnew 按如下方式合并到 样式(属性)集 SS 中:如果 SS 中已存在 样式属性 Pold,且 Pnew 的名称与 Pold 的名称相同,则用 Pnew 替换 SS 中的 Pold;否则,将 Pnew 添加到 SS

[样式(属性)集合并]

样式(属性)集 SSnew 按如下方式合并到 现有样式(属性)集 SSold 中: 对 SSnew 中的每个样式属性 Pnew,将 Pnew 合并到 SSold 中;

10.4.4.2 指定样式集 处理

元素或匿名 span E 的 指定样式集 SSSSSS(E),按照以下有序规则确定:

  1. [初始化]E 的 指定样式集 SSS 初始化为 空集;

  2. [引用和链式引用 样式]E 上指定的 style 属性 所引用的每个 style 元素 SREF, 按 style 属性中指定的顺序,如果 SREFstyling 元素 的后代, 则将 SREF 的指定样式集 SSS(SREF) 合并到 E 的指定样式集 SSS(E) 中;

  3. [嵌套样式] 如果 E 未被条件性 排除,则 对 E 的每个嵌套且条件性包含style 元素子级 SNEST, 按子元素的指定顺序,将 SNEST 的指定样式集 SSS(SNEST) 合并到 E 的指定样式集 SSS(E) 中;

  4. [行内样式] 如果 E 未被条件性 排除,则 对表示为 E 的指定样式属性的每个样式属性 P, 将 P 合并到 E 的指定样式 集 SSS(E) 中;

  5. [动画样式] 如果 E 的元素类型不是行内 动画元素, 则对元素 E 的每个条件性包含行内动画元素子级 A, 将 A 的指定样式集 SSS(A) 合并到 E 的指定样式集 SSS(E) 中;

  6. [隐式继承和初始值回退] 如果 E 的元素类型不是动画元素类型 animateset, 且不是样式元素类型 style, 则对上文 10.2 样式属性 词汇 中定义的样式属性集合中的每个样式属性 P,执行以下有序子步骤:

    1. 如果 P 存在于 E 的指定 样式集 SSS(E) 中,则继续处理下一个 样式属性;

    2. 如果 P 可继承且 E 不是 region 元素, 则执行以下操作:

      • P′ 设置为在 E 的最近祖先元素 NEAREST-ANCESTOR(E) 的计算样式集中 查找 P 值的结果,其中 CSS(NEAREST-ANCESTOR(E)) 包含 P 的定义;

    3. 如果 (1) P 可继承且 Eregion 元素, 或 (2) P 不可继承且 P 适用于 E,则执行以下操作:

      • P′ 设置为属性 P 的初始值, 其中属性的初始值按如下方式确定:

        1. 如果 initial 元素为 P 定义了初始值,则使用 该值;

        2. 否则,使用上文 10.2 样式 属性词汇 中找到的 P 属性定义所指定的初始值;

    4. 如果 P′ 的值未定义,则将 P′ 合并到 E 的指定样式集 SSS(E) 中。

10.4.4.3 计算样式集处理

元素或匿名 span E 的 计算样式集 CSSCSS(E),按照以下有序 规则确定:

  1. [解析指定样式] 按照 10.4.4.2 指定样式集 处理, 确定(获得)E 的指定样式集 SSS, 即 SSS(E)

  2. [初始化]CSS(E) 初始化为 SSS(E) 的(深)副本;

  3. [过滤] 如果 Eanimatesetstyle 元素,则返回 CSS(E) 作为所得计算样式集,而不进行 进一步解析;否则,继续下一规则;

  4. [相对值解析]CSS(E) 中每个样式属性 P,其中 P 的值类型为相对类型,执行以下有序 子步骤:

    1. 如果可能,将 P 的相对值替换为 等价的非相对(计算)值;

    2. P 的 category 设置为 "computed";

注:

作为上述过滤规则的结果, animatesetstyle 元素的 计算样式集只包括指定值,在这种情况下 相对值表达式保持相对;因此, 相对值表达式(可能通过引用样式关联赋值)的 解析总是在具有呈现上下文的布局或内容元素 的上下文中发生, 而不是在 animateset 或可引用 style 元素的非呈现声明上下文中发生。

注:

由于上述相对值解析规则可能无法解析某个相对值, 例如当解析直到布局或呈现时才能发生时, 可能需要进一步解析 计算值以获得 使用值

10.4.4.4 样式解析过程

顶层样式解析过程定义如下:使用对中间同步文档 DOCinter 中每个元素和 匿名 span E 的前序遍历,执行以下有序 子步骤:

  1. [过滤] 如果 E 不是以下之一,则继续前序遍历中的下一个元素,即 不对 E 执行后续步骤:

  2. [解析计算样式] 按照 10.4.4.3 计算样式集 处理, 确定(获得)E 的计算样式集 CSS, 即 CSS(E)

10.4.5 样式过程

本节定义本规范其他位置引用的各种样式相关过程。

10.4.5.1 Containment 计算
[计算 containment 缩放](inout 目标矩形 TR, in 参考矩形 RR)
  1. 如果目标矩形 TR 与参考矩形 RR 的单位不同, 则引发错误条件。

  2. 如果目标矩形 TR 的宽度 Wt 为零, 则将 Wt 设置为一; 同样,如果目标矩形 TR 的高度 Ht 为零,则将 Ht 设置为一。

  3. SARr 为参考矩形 RR 的存储宽高比。

  4. SARt 为目标矩形 TR 的存储宽高比。

  5. 按如下方式确定缩放因子 SF

    1. 如果 SARr 小于或等于 SARt,则 SFWr / Wt, 其中 WrWt 分别为参考矩形和目标矩形的宽度。

    2. 否则,SARr 大于 SARt,则 SFHr / Ht, 其中 HrHt 分别为参考矩形和目标矩形的高度。

  6. 如果 SF 不等于 1.0,则 将 Wt 设置为 SF * Wt, 并将 Ht 设置为 SF * Ht, 即按缩放因子 SF 原地缩放目标矩形 TR

注:

为了实现上述算法,存储宽高比和缩放因子 要以至少提供 7 位有效十进制数字的形式表示。

10.4.5.2 Cover 计算
[计算 cover 缩放](inout 目标矩形 TR, in 参考矩形 RR)
  1. 如果目标矩形 TR 与参考矩形 RR 的单位不同, 则引发错误条件。

  2. 如果目标矩形 TR 的宽度 Wt 为零, 则将 Wt 设置为一; 同样,如果目标矩形 TR 的高度 Ht 为零,则将 Ht 设置为一。

  3. SFW WR /WT ,其中 WR WT 分别为参考矩形 RR 和目标矩形 TR 的宽度。

  4. SFH HR /HT ,其中 HR HT 分别为参考矩形 RR 和目标矩形 TR 的高度。

  5. 如果 SFW SFH 都大于 一,则令 SFSFW SFH 中较小者; 否则,令 SFSFW SFH 中较大者。

  6. 如果 SF 不等于 1.0,则 将 Wt 设置为 SF * Wt, 并将 Ht 设置为 SF * Ht, 即按缩放因子 SF 原地缩放目标矩形 TR

注:

为了实现上述算法,缩放因子 要以至少提供 7 位有效十进制数字的形式表示。

10.4.5.3 剪切计算

如果剪切值为 0%,则不应用剪切变换;如果值为 100%,则在与行内进展方向关联的轴上应用 90 度的 2D 剪切变换;如果值为 -100%, 则应用 -90 度的剪切变换。如果指定百分比的绝对值大于 100%,则必须将其解释为就像指定了带有适当符号的 100%。

注:

如果所得剪切角的绝对值为 90 度,则剪切角的 使用值 会减小一个很小的 epsilon, 以便 使用值 的正切值 有定义。

如果行内进展方向对应于 X 轴,则 2D 剪切 变换由以下矩阵描述:

| 1 a 0 |
| 0 1 0 |
| 0 0 1 |

其中 a 等于剪切角的正切值。

如果行内进展方向对应于 Y 轴,则 2D 剪切 变换由以下矩阵描述:

| 1 0 0 |
| a 1 0 |
| 0 0 1 |

11 布局

本节规定核心词汇目录中的布局事项,其中 布局应理解为适用于内容的一层可分离信息, 它表示作者关于该内容呈现方式的意图。

注:

布局事项和样式事项这两层被认为是彼此独立 可分离的。布局事项指定一个或多个空间或区域, 内容意图呈现在这些空间或区域中,而样式事项指定 在布局内发生呈现的方式。

在某些情况下,内容作者可以选择将样式事项直接嵌入(行内) 到布局或内容事项中。在这种情况下,存在一种替代方式—— 使用引用样式——其中样式 事项不会被嵌入(行内)。

11.1 布局元素词汇

以下元素指定 文档实例的结构和主要布局方面:

11.1.1 layout

layout 元素是一个容器元素,用于分组 非行内布局事项,包括适用于布局事项的元数据。

layout 元素接受零个或多个 Metadata.class 元素组中的元素 作为其子级,后跟 零个或多个 region 元素。

XML 表示 – 元素信息项:layout
<layout
  xml:base = <uri>
  xml:id = ID
  xml:lang = xsd:string
  xml:space = ("default" | "preserve")
  内容: Metadata.class*, region*
</layout>

在时间语义适用于 layout 元素内容的范围内,此元素的隐含时间间隔 定义为与根时间 范围同延。

11.1.2 region

region 元素用于定义矩形空间或区域,内容将 流入其中以用于呈现。

region 元素可以作为 (1) layout 元素的子级,或 (2) Block.class 元素组中元素的子级出现。 在前一种情况下,该 region 称为非行内 region,而在后一种 情况下,它称为行内 region

此外,根据 10.4.2.2 Region 样式继承region 元素可用于指定可继承样式属性,供流入其中的 内容继承。

region 元素接受零个或多个 Metadata.class 元素组中的元素 作为其子级, 后跟零个或多个 Animation.class 元素组中的元素, 后跟 零个或多个 style 元素。

Metadata.class 元素组中的子级指定的任何元数据,在语义上适用于 region 元素及其后代整体。 由 Animation.class 元素组中的子级指定的任何动画元素,在语义上适用于 region 元素。 任何 style 子元素都必须被视为一个局部样式 定义,它只适用于包含它的 region 元素,即不用于解析引用样式(但适用于 region 样式继承)。

XML 表示 – 元素信息项:region
<region
  animate = IDREFS
  begin = <time-expression>
  condition = <condition>
  dur = <time-expression>
  end = <time-expression>
  style = IDREFS
  timeContainer = ("par" | "seq")
  ttm:role = xsd:string
  xml:base = <uri>
  xml:id = ID
  xml:lang = xsd:string
  xml:space = ("default" | "preserve")
  {TT Style Namespaces 中的任何属性}
  内容: Metadata.class*, Animation.class*, style*
</region>

非行内 region 元素 必须指定 xml:id 属性。

非行内 region 元素可以指定 一个或多个时间属性: beginenddur行内 region 元素不得 指定时间属性,并且如果指定了,为了呈现处理的目的也必须忽略。

如果在非行内 region 元素上指定 begin 和(或)end 属性, 则它们指定一个时间间隔的开始点和(或)结束点, 在此时间间隔内,该 region 可被激活,并且 该 region 的动画子元素相对于该时间间隔计时。 如果指定,这些开始点和结束点相对于最近祖先元素的时间 间隔,该祖先元素与某个时间 间隔关联,无论该间隔是显式还是隐含。 与时间间隔关联的非行内 region 元素的最近祖先元素 是 layout 元素。 如果在非行内 region 元素上指定 dur 属性,则 它指定该 region 的简单持续时间。

行内 region 元素的活跃时间间隔是其父内容元素的 活跃时间间隔。

为了确定呈现处理的语义, 在视觉媒介上呈现时,时间上不活跃的 region 不得产生任何可见标记。

注:

非行内 region 元素可以 出于两个目的与时间间隔关联: (1) 为了在时间上限定该 region 及其内容的呈现, 以及 (2) 提供一个时间上下文,以便在其中实现 region 样式的动画。

例如,作者可能希望指定一个非行内 region 元素, 它本身为空,但 可以具有可见背景颜色,从某个时间开始呈现并持续到 region 的持续时间结束。该 region 的简单持续时间还用于界定 目标为该 region 的内容的呈现效果范围。作者也可能希望通过动画效果 在根容器区域内移动 region 或改变 region 的背景颜色。在 这两种情况下,都有必要为 region 设定一个活跃时间间隔。

非行内 region 相比,行内 region 专门绑定到 其父内容元素的时间上下文, 因此不需要(也不允许)指定独立计时。

如果在 region 元素上未指定 timeContainer 属性,则必须将其解释为具有 并行时间包含语义。

如果 region 元素上同时存在 tts:origintts:position 属性,则为了 呈现处理的目的,必须忽略 tts:origin。 如果既不存在 tts:origin 也不存在 tts:position 属性,则为了 呈现处理的目的,适用 tts:position 属性初始值的语义。

如果在 region 元素上指定 ttm:role 属性,则它必须遵守 语法表示 – ttm:role 定义的值语法,并且此属性识别的角色 表示该 region 的语义角色, 独立于目标为(关联到)该 region 的任何内容的语义角色。

11.1.2.1 行内动画的特殊 语义

当在 divp 元素 E 上指定时, 以下样式属性例外地适用于与 E 关联的 region R, 如下文进一步规定:

在这种情况下,这些样式属性中每一个的应用都被认为等价于一个匿名 行内动画,其形式为 set 动画元素 A,其中该 动画在等价于 E 活跃时间间隔的活跃时间间隔内应用于 R,并且如果已有多个动画元素 (Ai, ..., Aj) 应用于 R, 则 A 在这些现有动画中的最后一个之后应用,即 紧接在 Aj 之后。

注:

如果多个相同样式属性的匿名行内 动画应用于某个 region R, 则相应的 set 动画元素 Aj, ..., Ak 按照产生这些动画的元素 Ej, ..., Ek 的前序遍历顺序 添加到 R

还需注意,将多个动画应用于给定元素的某个特定样式 属性的语义,由 10.4.4.2 指定样式集 处理的步骤 (5) [动画样式] 控制。

以下模型示例使用 tts:extent 样式属性描绘这些特殊语义, 但该模型一般适用于上文列出的所有样式属性:

示例 – Region 的匿名行内动画 - 输入片段
<region xml:id="r1" tts:extent="80% 10%" .../>
...
<p region="r1" begin="10s" end="12s" tts:extent="70% 20%">change extent</p>

在上述输入片段示例中,在段落(p)元素上指定了 tts:extent 属性, 该元素在不失一般性的情况下,被分配到时间间隔 [10s,12s)。 随后此属性用于在以下输出片段中合成一个形式为 set 元素的匿名动画, 其中该属性连同等价的时间属性一起复制到 set 元素中。原始 tts:extent 随后从段落(p)中移除。

示例 – Region 的匿名行内动画 - 等价输出片段
<region xml:id="r1" tts:extent="80% 10%" ...>
  <set begin="10s" end="12s" tts:extent="70% 20%"</set>
</region>
...
<p region="r1" begin="10s" end="12s">change extent</p>

所得输出片段显示 region 的原始 extent 被保留,但 子动画会在所指示的时间间隔内覆盖此 extent,从而按预期产生 (临时)改变 region extent 的效果。

11.2 布局属性词汇

本节定义与内容元素一起使用的 11.2.1 region 属性。

11.2.1 region

region 属性用于引用 region 元素,该元素定义一个空间或区域, 内容元素意图流入其中。

如果指定,region 属性的值必须 遵守 [XML Schema Part 2] §3.3.9 定义的 IDREF 数据类型,并且此外,此 IDREF 必须引用一个 具有 layout 元素作为祖先的 region 元素。

region 属性可由以下元素类型的实例指定:

注:

如果由 region 属性引用的 region 元素被条件性 排除, 则该 region 不会与指定了 region 属性的元素关联。

注:

关于 region 中内容流的更多信息,见下文 11.3.1 Region 布局与呈现

11.3 布局语义

11.3.1 Region 布局与呈现

本节按照标准处理模型定义 region 布局和 呈现的语义,如下所示:

只要外部可观察结果与此模型产生的结果一致, 就允许采用任何实现。

11.3.1.1 默认 Region

如果文档实例未指定 非行内 region, 则隐含一个具有以下特征的默认 region

此外,如果未指定 非行内 region,则不得在 文档实例中的任何内容元素上指定 region 属性。

如果对给定文档 实例隐含默认 region,则 body 元素 隐式目标为(关联到)默认 region。

当隐含默认 region 时, 文档实例应被 视为好像在 head 元素中指定了一个 region 元素及其 父 layout 元素,并且在 body 元素上指定了匹配的 region 属性, 如以下示例所示:

示例 – 隐含默认 Region
<tt xml:lang="" xmlns="http://www.w3.org/ns/ttml">
  <head>
    <layout>
      <region xml:id="anonymous"/>
    </layout>
  </head>
  <body region="anonymous"/>
</tt>

注:

在上例中,隐含了一个默认 region 元素和 region 属性。此外,还为隐含的 region 元素隐含了一个 layout 容器元素。

11.3.1.2 行内 Region

行内 region是一种语法机制,用于以一种 最小化 region 规范与引用该 region 的内容之间语法距离的方式指定 region。在语义上,每个 行内 region都等价于指定一个唯一的 非行内 region,并且该 region 只由 指定(或隐含)该行内 region的上下文中的 内容元素隐式引用。

行内 region 通过指定一个 region 元素作为 Block.class 元素组中 内容元素的子级来声明, 这称为行内 region 规范

行内 region 按照 [处理行内 region] 过程进行处理,该过程会生成与行内 region 对应的 非行内 region。此过程还会将与行内 region 关联的内容 元素绑定到对应生成的非行内 region。

注:

一个内容元素只能与单个 region 关联(在给定 中间同步 文档中), 无论是通过属性指定还是通过子 region 元素。因此, 如果内容元素指定了 region 属性,则任何 行内 region 规范 都会被忽略。

[处理行内 region]

Block.class 元素组中的每个 内容元素 B 执行以下有序步骤:

  1. 如果 B[attributes] 信息项属性 包含 region 属性,则 退出此过程

  2. 如果 B[children] 信息项属性 不包含 region 元素 R,则退出此过程;

  3. 创建一个空的 region 元素 R' , 初始化如下:

    • R' [children] 信息项属性设置为 R[children] 信息项属性的深拷贝;

    • R' [attributes] 信息项属性设置为 R[attributes] 信息项属性的深拷贝;

    • 如果 R' [attributes] 信息项属性不包含 xml:id 属性,则添加一个隐含的 xml:id 属性,其生成值 ID 在 TTML 文档实例范围内唯一; 否则,令 IDR' xml:id 属性值;

    • 如果存在,则从 R' [attributes] 信息项属性中移除以下属性: begindurend

    • 按如下方式将 beginend 属性添加到 R' [attributes] 信息项属性:

      1. 如果不是在 smpte 时间基和不连续标记 模式下运行,则将这些 beginend 属性的值设置为等价于 B文档 时间坐标空间中的相应活跃 开始和结束时间的值;

      2. 否则(smpte 不连续模式),将这些 beginend 属性的值设置为对应于标记同步事件(markers)的值, 这些事件适用于 B文档 时间坐标空间中的相应开始和结束时间;

  4. 如果 TTML 文档实例没有 head 元素, 则插入一个空的 head 元素 作为 tt 元素的第一个子级;

  5. 如果 head 元素没有 layout 子元素, 则插入一个空的 layout 元素: 如果存在 styling 元素,则紧随其后; 如果存在 animation 元素,则紧接其前; 如果二者均不存在,则作为 head 元素的最后一个子级;

  6. R'  追加到 head 元素的 layout 子元素的 [children] 信息项属性中;

  7. B[attributes] 信息 项属性添加一个值为 IDregion 属性;

  8. B[children] 信息项属性中移除 R

以下示例展示了 行内 region 规范的使用,以及所生成的非行内 region。

示例 – 行内 Region 规范
<tt xml:lang="" xmlns="http://www.w3.org/ns/ttml">
  <head/>
  <body>
    <div begin="5s" dur="10s">
      <region tts:extent="540px 100px" tts:origin="50px 339px"/>
      <p>Some Content</p>
    <div/>
  <body/>
</tt>

示例 – 生成的非行内 Region
<tt xml:lang="" xmlns="http://www.w3.org/ns/ttml">
  <head>
    <layout>
      <region xml:id="region3451" begin="5s" end="15s"
        tts:extent="540px 100px" tts:origin="50px 339px"/>
    </layout>
  </head>
  <body>
    <div begin="5s" dur="10s" region="region3451">
      <p>Some Content</p>
    <div/>
  <body/>
</tt>

注:

请注意,在上述一对示例中,生成的非行内 region 上的时间属性 使用 end 属性,而不是行内 region 元素的 div 父元素的原始 dur 属性。上述过程要求将 dur 转换为 end,以便在根时间 范围内指定生成的非行内 region 的活跃时间间隔。

注:

此示例中生成的 region ID region3451 依赖于实现, 唯一要求是它是 xml:id 属性的有效值, 其中包括在文档实例范围内唯一。

11.3.1.3 中间同步文档 构造

为了执行呈现处理,(1) 调用 [解析计时] 过程,然后 (2) 调用 [构造 中间文档] 过程。

[解析计时]
  1. 可选地调用过程 [构造匿名 span]; 否则,如果此时未调用该过程,则解析每个文本节点的隐式持续时间, 这些文本节点是在调用该过程时本会解析其 隐式持续时间的文本节点;

  2. 将当前文档实例的活跃时间持续时间划分为一个有序 时间坐标序列 {T0, T1, T2, ...}, 其中在每个时间坐标 Ti, 某个元素变为时间上活跃或不活跃。

[构造匿名 span]
  1. 对于内容 元素中的每个重要文本节点, 合成一个匿名 span 来包围 该文本节点,并在其兄弟 和父层级中用新的匿名 span替换原始 文本节点子级;

  2. 对于每个连续的匿名 span序列,将该 序列替换为一个单一的匿名 span, 它包含表示原始匿名 span 序列中各个文本节点子级的文本节点序列;

  3. 对于每个其子级为单个 匿名 span 的 span 元素, 用该匿名 span的子文本 节点序列替换它。

[构造 中间文档]

对于从 [解析计时] 过程获得的每个时间间隔, 其中每个这样的间隔由一对连续的时间坐标 (Ti,Ti+1) 组成, 也就是 (T0,T1)(T1,T2)、…,按照以下有序步骤,将当前 文档实例从其原始源形式 DOCsource ,映射到中间同步文档形式 DOCinter :

  1. 调用过程 [处理行内 region]

  2. 对于每个时间上活跃的 region R,复制 DOCsource 中以 body 元素为首的 子树;

  3. 以后序遍历求值此子树,如果以下任一条件为真,则剪除元素:

    1. 它们不是呈现相关 元素 ;或

    2. 它们在时间上不活跃;或

    3. 它们为空,并且既不是 Animation 元素,也不是 br 元素;或

    4. 它们未根据 [关联 region] 过程与 region R 关联。

  4. 如果剪除后的子树非空,则将其重新作为 R 元素的子级;

  5. 最后,在完成上述步骤之后,从中间文档中剪除原始 body 元素,然后剪除所有 regionbeginenddur 属性, 它们在语义上不再相关。

注:

在本节中,术语 prune 在指代 元素时,表示将该元素从其父级的子级中移除, 这进而意味着被剪除元素的后代不再是该元素父级的后代。 当 prune 用于指代属性时,表示从其关联(所属) 元素节点中移除该属性。

注:

符合规范的呈现处理器允许将早期样式解析作为上述过程的后处理步骤执行, 关于更多内容,见 [流变换] 过程的步骤 (2)。

[关联 region]

内容元素按照以下有序规则 与 region 关联,其中使用第一个满足的规则并跳过剩余规则:

  1. 如果该元素指定 region 属性, 且该 region 未被条件性 排除, 则该元素与该属性引用的 region 关联;

  2. 如果该元素的某个祖先指定 region 属性, 且该 region 未被条件性 排除, 则该元素与指定此属性的最近祖先所引用的 region 关联;

  3. 如果该元素包含某个指定 region 属性的后代元素, 且该 region 未被条件性 排除, 则该元素与该属性引用的 region 关联;

  4. 如果由于不存在任何 region 元素而隐含了默认 region, 则该元素与默认 region 关联;

  5. 该元素不与任何 region 关联。

执行上述处理的结果将是一系列 N 个中间同步 文档实例DOCinter0DOCinterN−1

注:

如果实现能够检测到两个相邻同步 文档实例之间的显著相似性, DOCinterN DOCinterN−1, 则实现可以应用处理,使这两个实例的呈现之间的过渡尽可能平滑, 例如 [CTA-608-E] §C.3 和 [CC-DECODER-REQ] 所描述的方式。

11.3.1.4 同步流处理

在执行时间(同步)切片以及随后对按 region 选择的内容层级进行重映射之后, 所得中间同步文档会经过一个流变换步骤,该步骤产生 以根为基础的流对象树,该树表示为 [XSL-FO 1.1] 所定义的 XSL FO 文档实例, 并由 TTML 特定样式属性进行语义扩展,这些属性没有 XSL FO 对应项。

注:

在本节中,XSL FO 的使用仅用于概念目的, 只用于定义 TTML 的规范性呈现语义。 此算法的实际实现不要求创建或处理 XSL-FO 表示。特别是,可以使用替代呈现模型 来实现这些语义,例如层叠样式表(CSS)。

注:

由于给定文档实例中 可能存在没有 [XSL-FO 1.1] 对应项的 TTML 样式属性或样式属性值, 实现者应注意,本规范引用的是 [XSL-FO 1.1] 的布局模型, 而不是要求使用符合 [XSL-FO 1.1] 的格式化处理器, 因为这种处理器不一定足以满足本规范定义的完整呈现 语义,并且会包含大量实现 TTML 呈现语义不需要的特性。

为了执行呈现处理,对于 11.3.1.3 中间同步文档 构造产生的每个中间同步 文档 DOCinteri,(1) 调用以下 [流 变换] 过程 以获得 XSL FO 文档实例 Fi,然后 (2) 如果处理 需要在视觉媒介上呈现,则将与 [XSL-FO 1.1] 以及本规范规定一致的所有相关格式化和渲染语义 应用于 Fi

[流变换]
  1. 如果此前未调用,则执行过程 [构造匿名 span]

    注:

    符合规范的呈现处理器允许在更早的处理阶段执行此步骤, 在这种情况下,此处不会重复此步骤。注意,如果 匿名 span 构造发生在 11.3.1.3 中间 同步文档构造定义的中间同步文档 构造之前,则中间同步文档将包含 匿名 span

  2. 按照 10.4.4.4 样式 解析过程解析样式;

    注:

    符合规范的呈现处理器允许在执行 [构造中间文档] 过程时,将此步骤作为后处理步骤执行, 在这种情况下,由 11.3.1.3 中间 同步文档构造产生的每个中间同步文档都会包含 计算样式集,因此 此处不会重复此步骤。

  3. tt 元素映射为 fo:root 元素,最初填充 一个 fo:layout-master-set 元素,该元素包含一个有效的 fo:simple-page-master,而后者又包含一个 fo:region-body 子级,其中 在 tt 元素上表达的根容器区域的 extent 映射为 fo:simple-page-master 元素上的 page-widthpage-height 属性;

  4. layout 元素映射为 fo:page-sequence 元素和一个 子 fo:flow 元素,它们引用上文产生的简单页母版所定义的页母版和页 region;

    注:

    在使用 [XSL-FO 1.1] 格式化处理器格式化 F 所产生的 XSL FO 区域树中, page-viewport-areafo:page-sequence 元素通过引用唯一生成的 fo:simple-page-master 元素生成,将对应于上文 2 定义中定义的 根容器区域

  5. 将每个非空 region 元素映射为 fo:block-container 元素,该元素具有值为 absoluteabsolute-position 属性, 具有 topleftbottomright 属性来表达一个等价于 region origin 和 extent(包括 padding)的矩形, 并具有值为 line-heightline-stacking-strategy 属性;

    注:

    region 的 extent 对应于 fo:block-container 生成的块区域的分配矩形。

    注:

    当将 region 元素映射为 fo:block-container 时,如果 region 延伸到其包含块之外, 可能需要对 topleftbottomright XSL-FO 属性中的一个或多个使用负偏移值。

  6. 对于 (1) bodydivp 元素, 或 (2) 块级上下文中的 image 元素, 即 Block.class 元素组中元素的 image 子级,如果该元素未与值为 nonetts:display 样式 属性关联,则:

    1. 如果该元素不是 image 元素,则将该 元素映射为一个独立的 fo:block 元素, 使用与每个原始 TTML 内容元素关联的计算 样式集来填充 fo:block 的样式属性;

    2. 否则(该元素是 image 元素),将该 元素映射为一个独立的 fo:block 元素, 其中包含一个 fo:external-graphic 子元素, 使用与每个原始 TTML 内容元素 关联的计算样式集来填充 fo:blockfo:external-graphic 的样式属性, 并使用对相关图像 资源的适当引用来填充 fo:external-graphic 元素的 src 属性;

  7. 对于上一步产生的、对应于 body 元素的所得 fo:block 格式化对象,调用以下有序子步骤:

    1. 如果此 fo:blockdisplay-align 样式属性 的值为 centerafter, 则合成一个空的 fo:block 并将其作为 此 fo:block 的第一个子级插入,该空块具有以下属性: space-after.optimumspace-after.maximumspace-after.conditionality,其中前 两个属性的值为包含 fo:block-container 元素的高度或宽度, 取决于其中哪一个被指定为块进展维度, 而最后一个属性的值为 retain

    2. 如果此 fo:blockdisplay-align 样式属性 的值为 centerbefore, 则合成一个空的 fo:block 并将其作为 此 fo:block 的最后一个子级插入,该空块具有以下属性: space-after.optimumspace-after.maximumspace-after.conditionality,其中前 两个属性的值为包含 fo:block-container 元素的高度或宽度, 取决于其中哪一个被指定为块进展维度, 而最后一个属性的值为 retain

    注:

    在对应于 body 元素的 fo:block 的块进展 维度中插入额外的可折叠空间,其目的在于确保此 fo:block 的 before 边和 after 边 与对应于包含 regionfo:block-container 的 before 边和 after 边重合, 同时考虑满足块进展维度中对齐的需求。例如,这能确保 与 body 元素关联的背景颜色(如果不是 transparent) 会完全填充包含 region。

  8. 对于 (1) span 元素和 匿名 span, 或 (2) 行内级上下文中的 image 元素, 即 pspan 元素的 image 子级,如果该元素或 匿名 span 未与值为 nonetts:display 样式属性 关联,则:

    1. 如果对象是匿名 span,则将该匿名 span 的字符项序列映射为一个独立的 fo:inline 元素, 使用与该匿名 span关联的计算 样式集来填充 fo:inline 的样式属性;

    2. 如果对象是 span 元素,则将该元素 映射为一个独立的 fo:inline 元素, 使用与 span 关联的计算 样式集来填充 fo:inline 的样式属性;

    3. 否则(对象是 image 元素),将该 元素映射为一个独立的 fo:inline 元素, 其中包含一个 fo:external-graphic 子元素, 使用与 image 元素关联的计算 样式集来填充 fo:inlinefo:external-graphic 的样式属性, 并使用对相关图像 资源的适当引用来填充 fo:external-graphic 元素的 src 属性;

  9. 对于每个未与值为 nonetts:display 样式属性 关联的 br 元素,将该元素映射为 一个独立的 fo:character 元素,其具有以下 属性:

    • character="&#x000A;"

    • suppress-at-line-break="retain"

  10. 对于某个计算样式集中没有 [XSL-FO 1.1] 对应项的每个 TTML 样式属性, 将该属性直接透传到由输入 TTML 内容元素产生的相关格式化对象, 其中该样式属性适用于该内容元素;

  11. 可选地,在每个所得格式化对象元素上合成唯一 id 属性,使该元素关联到产生该格式化对象元素的输入元素;

11.3.1.5 展开示例(非规范性)

下面展开说明上述处理步骤的一个示例,从 示例 – 示例源文档开始。

示例 – 示例源文档
<tt tts:extent="640px 480px" xml:lang="en"
  xmlns="http://www.w3.org/ns/ttml"
  xmlns:tts="http://www.w3.org/ns/ttml#styling">
  <head>
    <layout>
      <region xml:id="r1">
        <style tts:origin="10px 100px"/>
        <style tts:extent="620px 96px"/>
        <style tts:fontSize="40px"/>
        <style tts:fontWeight="bold"/>
        <style tts:backgroundColor="black"/>
        <style tts:color="red"/>
        <style tts:textAlign="center"/>
        <style tts:displayAlign="center"/>
      </region>
      <region xml:id="r2">
        <style tts:origin="10px 300px"/>
        <style tts:extent="620px 96px"/>
        <style tts:fontSize="40px"/>
        <style tts:fontWeight="bold"/>
        <style tts:backgroundColor="black"/>
        <style tts:color="yellow"/>
        <style tts:textAlign="center"/>
        <style tts:displayAlign="center"/>
      </region>
    </layout>
  </head>
  <body xml:id="b1">
    <div xml:id="d1" begin="0s" dur="2s">
      <p xml:id="p1" region="r1">Text 1</p>
      <p xml:id="p2" region="r2">Text 2</p>
    </div>
    <div xml:id="d2" begin="1s" dur="2s">
      <p xml:id="p3" region="r2">Text 3</p>
      <p xml:id="p4" region="r1">Text 4</p>
    </div>
  </body>
</tt>

在上述文档中,内容层级由两个 division 组成,每个 division 包含两个段落。此内容目标为(关联到)两个 不重叠 region 之一;除位置 和前景色不同外,这两个 region 的样式相同,后者会被重新作为 region 子级的 span(在此情况下为匿名 span)继承并应用于这些 span。

以下第一个中间文档显示时间 间隔 [0,1) 的同步状态,在此期间只有 division d1 在时间上活跃, 并且段落 p1p2(及其祖先) 分别与 region r1r2 关联。

注:

下面所示的中间文档不是有效的文档实例, 而是用于教学目的的可能内部处理状态表示。

示例 – 中间文档 – [0s,1s)
<tt tts:extent="640px 480px" xml:lang="en"
  xmlns="http://www.w3.org/ns/ttml"
  xmlns:tts="http://www.w3.org/ns/ttml#styling">
  <head>
    <layout>
      <region xml:id="r1">
        <style tts:origin="10px 100px"/>
        <style tts:extent="620px 96px"/>
        <style tts:fontSize="40px"/>
        <style tts:fontWeight="bold"/>
        <style tts:backgroundColor="black"/>
        <style tts:color="red"/>
        <style tts:textAlign="center"/>
        <style tts:displayAlign="center"/>
        <body xml:id="b1-1">
          <div xml:id="d1-1">
            <p xml:id="p1">Text 1</p>
          </div>
        </body>
      </region>
      <region xml:id="r2">
        <style tts:origin="10px 300px"/>
        <style tts:extent="620px 96px"/>
        <style tts:fontSize="40px"/>
        <style tts:fontWeight="bold"/>
        <style tts:backgroundColor="black"/>
        <style tts:color="yellow"/>
        <style tts:textAlign="center"/>
        <style tts:displayAlign="center"/>
        <body xml:id="b1-2">
          <div xml:id="d1-2">
            <p xml:id="p2">Text 2</p>
          </div>
        </body>
      </region>
    </layout>
  </head>
</tt>

下面示出一个 XSL FO 文档实例,它会产生与 TTML 一致的渲染, 并且可以通过对第一个中间文档执行流处理而产生。

示例 – XSL FO 文档 – [0s,1s)
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
  <fo:layout-master-set>
    <fo:simple-page-master master-name="m1"
      page-width="640px" page-height="480px">
      <fo:region-body/>
    </fo:simple-page-master>
  </fo:layout-master-set>
  <fo:page-sequence master-reference="m1">
    <fo:flow flow-name="xsl-region-body">
      <!-- region (r1) -->
      <fo:block-container id="r1" absolute-position="absolute"
        left="10px" top="100px" width="620px" height="96px"
        background-color="black" display-align="center">
        <!-- body (b1) -->
        <fo:block id="b1-1">
          <!-- body's space (before) filler -->
          <fo:block
            space-after.optimum="96px"
            space-after.maximum="96px"
            space-after.conditionality="retain"/>
          <!-- div (d1) -->
          <fo:block id="d1-1">
            <!-- p (p1) -->
            <fo:block id="p1" text-align="center">
              <fo:inline font-size="40px" font-weight="bold"
              color="red">Text 1</fo:inline>
            </fo:block>
          </fo:block>
          <!-- body's space (after) filler -->
          <fo:block
            space-after.optimum="96px"
            space-after.maximum="96px"
            space-after.conditionality="retain"/>
        </fo:block>
      </fo:block-container>
      <!-- region (r2) -->
      <fo:block-container id="r2" absolute-position="absolute"
        left="10px" top="300px" width="620px" height="96px"
        background-color="black" display-align="center">
        <!-- body (b1) -->
        <fo:block id="b1-2">
          <!-- body's space (before) filler -->
          <fo:block
            space-after.optimum="96px"
            space-after.maximum="96px"
            space-after.conditionality="retain"/>
          <!-- div (d1) -->
          <fo:block id="d1-2">
            <!-- p (p2) -->
            <fo:block id="p2" text-align="center">
              <fo:inline font-size="40px" font-weight="bold"
              color="yellow">Text 2</fo:inline>
            </fo:block>
          </fo:block>
          <!-- body's space (after) filler -->
          <fo:block
            space-after.optimum="96px"
            space-after.maximum="96px"
            space-after.conditionality="retain"/>
        </fo:block>
      </fo:block-container>
    </fo:flow>
  </fo:page-sequence>
</fo:root>

以下第二个中间文档显示 时间间隔 [1,2) 的同步状态,在此期间 division d1d2 都在时间上活跃,并且段落 p1p4(及其祖先)与 region r1 关联, 段落 p2p3(及其祖先)与 region r2 关联。

示例 – 中间文档 – [1s,2s)
<tt tts:extent="640px 480px" xml:lang="en"
  xmlns="http://www.w3.org/ns/ttml"
  xmlns:tts="http://www.w3.org/ns/ttml#styling">
  <head>
    <layout>
      <region xml:id="r1">
        <style tts:origin="10px 100px"/>
        <style tts:extent="620px 96px"/>
        <style tts:fontSize="40px"/>
        <style tts:fontWeight="bold"/>
        <style tts:backgroundColor="black"/>
        <style tts:color="red"/>
        <style tts:textAlign="center"/>
        <style tts:displayAlign="center"/>
        <body xml:id="b1-1">
          <div xml:id="d1-1">
            <p xml:id="p1">Text 1</p>
          </div>
          <div xml:id="d2-1">
            <p xml:id="p4">Text 4</p>
          </div>
        </body>
      </region>
      <region xml:id="r2">
        <style tts:origin="10px 300px"/>
        <style tts:extent="620px 96px"/>
        <style tts:fontSize="40px"/>
        <style tts:fontWeight="bold"/>
        <style tts:backgroundColor="black"/>
        <style tts:color="yellow"/>
        <style tts:textAlign="center"/>
        <style tts:displayAlign="center"/>
        <body xml:id="b1-2">
          <div xml:id="d1-2">
            <p xml:id="p2">Text 2</p>
          </div>
          <div xml:id="d2-2">
            <p xml:id="p3">Text 3</p>
          </div>
        </body>
      </region>
    </layout>
  </head>
</tt>

以下第三个中间文档显示时间 间隔 [2,3) 的同步状态,在此期间只有 division d2 在时间上活跃, 并且段落 p4p3(及其祖先) 分别与 region r1r2 关联。

示例 – 中间文档 – [2s,3s)
<tt tts:extent="640px 480px" xml:lang="en"
  xmlns="http://www.w3.org/ns/ttml"
  xmlns:tts="http://www.w3.org/ns/ttml#styling">
  <head>
    <layout>
      <region xml:id="r1">
        <style tts:origin="10px 100px"/>
        <style tts:extent="620px 96px"/>
        <style tts:fontSize="40px"/>
        <style tts:fontWeight="bold"/>
        <style tts:backgroundColor="black"/>
        <style tts:color="red"/>
        <style tts:textAlign="center"/>
        <style tts:displayAlign="center"/>
        <body xml:id="b1-1">
          <div xml:id="d2-1">
            <p xml:id="p4">Text 4</p>
          </div>
        </body>
      </region>
      <region xml:id="r2">
        <style tts:origin="10px 300px"/>
        <style tts:extent="620px 96px"/>
        <style tts:fontSize="40px"/>
        <style tts:fontWeight="bold"/>
        <style tts:backgroundColor="black"/>
        <style tts:color="yellow"/>
        <style tts:textAlign="center"/>
        <style tts:displayAlign="center"/>
        <body xml:id="b1-2">
          <div xml:id="d2-2">
            <p xml:id="p3">Text 3</p>
          </div>
        </body>
      </region>
    </layout>
  </head>
</tt>

11.3.2 行布局

p 元素,即段落的表示, 由呈现处理器处理时,其内容会通过 断行进行分段, 其中每个分段分配给一个唯一的行区域。在这方面, 本规范采用基于 [XSL-FO 1.1] 定义的格式化模型的模型,特别是 §4.5、§4.6 和 §4.7。

11.3.2.1 断行

如果适用于文档实例的配置文件 要求支持或使用 #lineBreak-uax14 特性,则在对该文档实例的内容执行 行布局时,适用 Line Breaking Algorithm [UAX14] 定义的建议。

11.3.2.2 行堆叠

本小节为非规范性。

行区域块进展 维度计算,通常称为 line height, 可能特别复杂,尤其是在应用多个字体族、字体大小、字体样式、 字体资源以及高级文本格式化特性时, 例如 ruby、文本着重和 文本组合(tate-chu-yoko)。

此过程产生的每个行区域都会被堆叠, 在水平行上下文中垂直放置在前一个行区域下方, 或在垂直行上下文中水平放置在前一行旁边。 如 [流变换] 过程步骤 (5) 所规定, TTML 使用 line-height 行堆叠策略,该策略在 [XSL-FO 1.1] §4.5 中正式定义, 其术语和概念在下文使用。

使用此策略时,行区域的维度 对应于为该特定行区域计算的 per-inline-height-rectangle 的维度,而该维度又通过 求值 (1) expanded-nominal-requested-line-rectangle 的维度 来确定,该维度对段落的每个 行区域都是一致的,以及 (2) 该 行区域的每个 行内区域子级的 expanded-rectangle 的维度, 后者可能因段落中每个行区域的每个 行内区域而不同。

上文提到的短语 line height 不应与 与 tts:lineHeight 属性关联的样式属性的 计算值混淆。后一个值作为参数,用于计算应用于 行区域和单个 行内区域half leading, 它们分别是用于确定 (1) 行区域expanded-nominal-requested-line-rectangle 的维度,以及 (2) 该 行区域行内区域子级的 expanded-rectangle 的维度的参数。 请特别注意,应用于行 区域half leading 与 应用于该行区域行内区域子级的 half leading 通常是不同值,关于更多细节, 见 [XSL-FO 1.1] §6.5.2(当应用于 行区域时)。对于给定 行内区域,适用类似处理,尽管 [XSL-FO 1.1] 并未明确指出这一点, 但可以从 [CSS2] §10.8.1 中的文字推断出来。

总之,由 [XSL-FO 1.1] §4.5 定义并由 TTML 采用的 line-height 行堆叠策略所定义的行为, 旨在与 [CSS2] 的行堆叠策略兼容,这意味着:

  • 当段落的 tts:lineHeight 计算值为 normal 时,(1) 该段落的每个 行区域都与该段落的前一个 行区域精确相接且不相交,并且 (2) 该段落的 行区域line height 会根据每个 行区域的已设样式内容而变化;

  • 当段落的 tts:lineHeight 计算值是指定的 <length> 时,该段落的 行区域彼此精确相接, 但其内容矩形可能 (1) 在块 进展维度中消耗的空间少于容纳其内容所需的空间, 在这种情况下,该内容可能与该段落的前一个 行区域相交,或 (2) 在块 进展维度中消耗的空间多于容纳其内容所需的空间。

注:

当以下任一高级文本格式化特性应用于一行内容时, 可能会对 line height 进行额外调整:

  • ruby 文本标注

  • 文本组合(tate-chu-yoko)

  • 文本着重

  • (逐字形)字体剪切

11.3.3 渲染模型

本节规定格式化 TTML 文档实例渲染某些方面的细节。

11.3.3.1 绘制顺序

呈现 处理器采用的渲染顺序必须与 [XSL-FO 1.1] §4.9 指定的渲染模型一致;此外, 适用以下约束:

  • 由 ruby text span 生成的行区域的行内区域后代 在该行区域的其他行内区域后代之后渲染;

  • image 元素生成的 块区域或行内区域的固有标记,由关联图像的栅格组成。

注:

image 元素产生的标记, 如果该元素由 tts:backgroundImage 属性引用,则不包含在块区域或行内区域的固有 标记中,即它们属于区域的背景 标记。

12 计时

本节规定核心词汇目录中的计时事项,其中 计时应理解为适用于内容的一层可分离信息, 它表示作者关于该内容时间呈现方式的意图。

12.1 计时元素词汇

没有为核心词汇目录中的使用定义与计时相关的元素词汇。

12.2 计时属性词汇

本节定义以下基本计时属性,以供计时元素使用:

此外,本节定义 12.2.4 timeContainer 属性,以供同时作为计时容器的计时 元素使用。

12.2.1 begin

begin 属性用于指定与计时元素关联的 时间间隔的开始点。 如果指定,begin 属性的值必须遵守 12.3.1 <time-expression> 定义的 <time-expression> 规范。

时间间隔的开始点包含在该 间隔内;即该间隔左闭。

begin 属性的语义是 [SMIL 3.0] §5.4.3 定义的语义, 同时考虑本规范定义的任何覆盖语义。

注:

[SMIL 3.0] §5.4.3 所定义, 如果在计时元素上没有显式指定 begin 属性, 则该属性的默认值由最近的时间容器祖先确定;但是,在 TTML 中, 该祖先要么是并行时间容器,要么是顺序时间容器, 二者都应用默认值 0s

12.2.2 dur

dur 属性用于指定与计时元素关联的 时间间隔的持续时间。如果指定, dur 属性的值必须遵守 12.3.1 <time-expression> 定义的 <time-expression> 规范。

注:

当 <time-expression> 规范的 clock-time 形式 与 dur 属性一起使用时,意图是将其解释为 两个隐含 clock time 表达式之间的差值。

文档实例指定使用 smpte 时间基和 discontinuous 标记 模式时,不得在任何元素上指定(格式良好的)dur 属性。

dur 属性的语义是 [SMIL 3.0] §5.4.3 定义的语义, 同时考虑本规范定义的任何覆盖语义。 与 [SMIL 3.0] §5.4.3 有意不同的是, dur 属性的值允许为零(0s)。

注:

在本规范支持的 [SMIL 3.0] 语义子集的上下文中, 同时指定 enddur 属性的元素,其活跃持续时间 等于 dur 属性的值与 end 属性的值和元素开始时间之间差值中的较小者。

12.2.3 end

end 属性用于指定与计时元素关联的 时间间隔的结束点。如果指定,end 属性的值必须遵守 12.3.1 <time-expression> 定义的 <time-expression> 规范。

时间间隔的结束点不包含在该 间隔内;即该间隔右开。

非空活跃时间间隔的呈现效果包括紧接在 等于或紧随结束点所指定时间的帧 (或 tick)之前的帧,但不会延伸到后者的帧(或 tick)中。

注:

例如,如果活跃间隔为 [10s,10.33333s),且 帧率为每秒 30 帧,则该间隔的呈现效果 仅限于第 300 到第 309 帧(假设 0s 对应于 第 0 帧)。如果活跃间隔指定为 [300f,310f),同样如此。

end 属性的语义是 [SMIL 3.0] §5.4.3 定义的语义, 同时考虑本规范定义的任何覆盖语义。

12.2.4 timeContainer

timeContainer 属性用于指定一个局部时间 上下文,借助该上下文对子计时元素进行时间定位。

如果指定,timeContainer 属性的值必须是以下之一:

  • par

  • seq

如果元素实例的时间容器语义为 par, 则子元素的时间间隔被认为以并行方式应用, 即在时间上同时应用。此外,每个子元素时间间隔的规范 被认为相对于容器元素实例的时间 间隔。为了确定 par 时间容器的 [SMIL 3.0] endsync 语义, 适用默认值 all

注:

endsync 行为使用默认值 all 不同于 [SMIL 3.0],后者使用默认值 last

如果元素实例的时间容器语义为 seq, 则子元素的时间间隔被认为按顺序应用, 即在时间上依次应用。此外,每个子元素时间间隔的规范 被认为相对于其兄弟元素的时间间隔,除非它是第一个子元素, 在这种情况下,它被认为相对于容器元素实例的时间间隔。

每个时间容器都被认为构成一个独立的时间基,即 时间坐标系统。

如果在具有时间容器语义的元素上未指定 timeContainer 属性,则必须适用 par 时间容器语义。

时间容器语义仅适用于以下元素类型:

并行和顺序时间 包含的语义是 [SMIL 3.0] §5.4.4 定义的语义, 同时考虑本规范定义的任何覆盖语义。

12.3 时间值表达式

计时属性值包括使用以下表达式:

12.3.1 <time-expression>

<time-expression> 用于指定某个时间基内的坐标, 其中适用的时间基由 ttp:timeBase 参数确定,并且适用 I 时间表达式语义定义的语义。

注:

关于显式指定帧率、子帧率、tick 率和时间基的更多信息,见 7.2.5 ttp:frameRate7.2.9 ttp:subFrameRate7.2.10 ttp:tickRate7.2.11 ttp:timeBase

语法表示 – <time-expression>
<time-expression>
  : clock-time
  | offset-time
  | wallclock-time

clock-time
  : hours ":" minutes ":" seconds ( fraction | ":" frames ( "." sub-frames )? )?

offset-time
  : time-count fraction? metric

wallclock-time
  : "wallclock(" <lwsp>? ( date-time | wall-time | date ) <lwsp>? ")"

date-time
  : date "T" wall-time

wall-time
  : ( hhmm-time | hhmmss-time )

date
  : years "-" months "-" days

hhmm-time
  : hours2 ":" minutes

hhmmss-time
  : hours2 ":" minutes ":" seconds fraction?

years
  : <digit> <digit> <digit> <digit>

hours
  : hours2
  | hours3plus

hours3plus
  : <digit> <digit> <digit>+

months | days | hours2 | minutes | seconds
  : <digit> <digit>

frames
  : <digit> <digit>
  | <digit> <digit> <digit>+

sub-frames
  : <digit>+

fraction
  : "." <digit>+

time-count
  : <digit>+

metric
  : "h"                 // hours
  | "m"                 // minutes
  | "s"                 // seconds
  | "ms"                // milliseconds
  | "f"                 // frames
  | "t"                 // ticks

<time-expression> 不得包含 <whitespace> 字符, 除非在前述语法定义中通过出现 <lwsp> 非终结符而被显式允许。

如果 <time-expression> 以 clock-time 表示,则在表示小于 10 的小时、 分钟、秒和帧时使用前导零。分钟限制为 [0…59],而秒(包括任何小数部分)限制在闭 区间 [0,60] 内,其中值 60 只适用于闰秒。 除非 ttp:timeBaseclockttp:clockModelocalutc, 否则使用60 秒这个特殊值表示闰秒已废弃。 执行呈现处理时,此特殊值出现在其他时间基或时钟模式中 必须解释为好像指定了值 59。

如果 <time-expression> 以 clock-time 表示,并且指定了 frames 项, 则该项的值必须限制在区间 [0…F-1] 内,其中 F 是由 ttp:frameRate 参数确定的帧率,如 7.2.5 ttp:frameRate 所定义。 当适用 clock 时间基时,指定 frames 项或 f(frames)度量被视为错误。

如果 <time-expression> 以 clock-time 表示,并且指定了 sub-frames 项,则该项的值必须限制在 区间 [0…S-1] 内,其中 S 是 由 ttp:subFrameRate 参数确定的子帧率,如 7.2.9 ttp:subFrameRate 所定义。 当适用 clock 时间基时,指定 sub-frames 项 被视为错误。

如果在文档实例中使用 <time-expression> 的 wallclock-time 形式,而支配时间基 不是 clock,则被视为错误。

如果支配时间基的计算值为 smpte,则 (1) 使用 <time-expression> 的 offset-time 形式 已废弃,并且 (2) 在 <time-expression> 的 clock-time 形式中使用 fraction 秒分量 已废弃

注:

上文指定的 <time-expression> 语法显式排除了 时区信息的表示。如果作者 希望将 <time-expression> 与特定时区相关联,则可以 将时间表达式转换为 UTC 并指定使用 utc 时钟模式,相关内容见 7.2.2 ttp:clockMode

12.4 计时语义

[SMIL 3.0] 定义的时间包含、持续时间和间隔语义 适用于解释本规范定义的同名计时元素和计时 词汇,并受以下约束限制:

  • 匿名 span 的隐式持续时间定义如下:如果 匿名 span 的父时间容器是并行 时间容器,则 隐式持续时间等价于 [SMIL 3.0] 定义的 indefinite 持续时间值;如果匿名 span 的 父时间容器是顺序时间容器,则隐式持续时间 等价于零。

  • animateaudiobrimageset 元素的隐式持续时间定义为 与该元素被当作匿名 span处理时相同。

  • 具有非混合内容的 span 元素,即只有 #PCDATA 文本节点的 span 元素,其隐式持续时间 定义为与该 span 元素被当作匿名 span处理时相同。

  • 具有混合内容的 bodydivpspan 元素的隐式持续时间,依据 (1) 该元素是并行还是顺序时间容器, (2) 上文由 12.2.4 timeContainer定义的默认 endsync 语义, 以及 (3) 应用于这些时间容器的 [SMIL 3.0] 语义来确定。

  • region 元素的隐式持续时间定义为 等价于 [SMIL 3.0] 定义的 indefinite 持续时间值。

  • 如果支配时间基为 clock,则时间 表达式被认为等价于 [SMIL 3.0] 中基于挂钟的 计时,其中适用 I.1 Clock 时间基的特定语义。

  • 如果支配时间基为 media,则时间 表达式被认为等价于 [SMIL 3.0] 中基于偏移的计时, 其中适用 I.2 Media 时间基的特定语义。

  • 如果支配时间基为 smpte,则时间 表达式被认为等价于 [SMIL 3.0] 中基于偏移 或基于事件的计时,其中适用 I.3 SMPTE 时间基的特定 语义。

12.4.1 匿名 Span 计时

本小节为非规范性。

以下示例说明作为顺序和并行时间容器子级的 匿名 span 的计时语义。 单词 HelloAllo 都包含在作为顺序 时间容器(p 元素)子级的匿名 span 中。因此,HelloAllo 都不会显示, 因为匿名 span 的隐式持续时间为 0。 相比之下,包含单词 Guten匿名 span 和包含单词 Tag 的最内层 span 都是具有并行时间容器 语义的元素(最外层 span 元素)的子级。 因此,GutenTag 都会显示,因为它们各自父 匿名 spanspan 元素的隐式持续时间为 indefinite, 这会导致其 spanpdivbody 祖先的隐式持续时间也为 indefinite。

示例片段 – 顺序和并行时间容器中的匿名 Span 计时
...
<body>
  <div>
    <p timeContainer="seq">
      Hello
      <span>Guten <span>Tag</span></span>
      Allo
    </p>
  </div>
</body>

13 动画

本节规定核心词汇目录中的动画事项,其中 动画应理解为一层可分离的信息,它结合 计时和样式,以表示作者关于内容(时间上)动态 样式的意图。

13.1 动画元素词汇

以下元素指定 文档实例的结构和主要动画方面:

13.1.1 animate

animate 元素表达要应用(目标指向)到关联元素的一个或多个样式属性 属性的一系列变化(动画)。

animate 元素可以作为 (1) 内容元素region 元素的子级出现, 称为行内动画,或 (2) 作为 animation 元素的子级出现, 称为 非行内动画。 在前一种情况下,animate 元素的父级是关联元素;在后一种 情况下,任何使用 animate 属性引用 animate 元素的元素 都是关联元素。

animate 元素接受零个或多个 Metadata.class 元素组中的元素作为其子级。

XML 表示 – 元素信息项:animate
<animate
  begin = <time-expression>
  calcMode = <calculation-mode>
  condition = <condition>
  dur = <time-expression>
  end = <time-expression>
  fill = <fill>
  keySplines = <key-splines>
  keyTimes = <key-times>
  repeatCount = <repeat-count>
  xml:base = <uri>
  xml:id = ID
  xml:lang = xsd:string
  xml:space = ("default" | "preserve")
  {TT Style Namespaces 中的任何属性}
  内容: Metadata.class*
</animate>

非行内 animate 元素 必须指定 xml:id 属性。

animate 元素作为目标的样式属性属性直接使用 TT Style Namespaces 中的属性或非 TT Namespace 的命名空间中的属性来指定, 其中动画值的列表(序列) 遵守 <animation-value-list> 语法,并且每个 组成的 <animation-value> 遵守指定 属性的语法。

注:

[SVG 1.1] §19.2.12 相比,此处定义的单个 animate 元素可用于 对一组目标样式属性属性执行连续动画,而不是仅限于针对单个样式属性属性。 在 [SVG 1.1] 中,这需要使用多个 animate 元素而不是单个 animate 元素。

此外,通过直接指定被动画化的样式属性和关键值, 不必使用 [SVG 1.1] §19.2.9 定义的 fromtobyvalues 动画值属性。

animate 元素及其上文枚举属性的语义 定义为 [SVG 1.1] §19.2 指定的语义,并受下文约束或进一步说明:

  1. animate 元素作为目标的属性以及要应用于这些属性的值 通过直接使用 TT Style Namespaces 中的属性或非 TT Namespace 的命名空间中的属性来指定; 因此,本版本 TTML 不支持 [SVG 1.1] 定义的 attributeNamefromtobyvalues 属性。

    注:

    使用直接命名的样式属性的效果,等价于指定 多个 [SVG 1.1] animate 元素, 其中每个这样的元素都指定一个 attributeNamevalues 属性。

    注:

    例如,指定 tts:color="red;green;blue" 被认为等价于在 [SVG 1.1] 中指定 attributeName="tts:color"values="red;green;blue"

  2. 如果未指定 calcMode 属性,则适用 calcModelinear

    注:

    此隐含值对应于 [SVG 1.1] §19.2.9 指定的默认值。

  3. 如果未指定 fill 属性,则适用 fillremove

    注:

    此隐含值对应于 [SVG 1.1] §19.2.9 指定的默认值。

  4. 如果指定了 keyTimes 属性,并且 calcMode 的计算值为 "paced", 则为了验证处理的目的,此用法必须被视为错误,并且 为了呈现处理的目的,必须忽略该动画。

  5. 如果指定了 keyTimes 属性,并且 calcMode 的计算值不是 "paced", 则 keyTimes 属性中指定的时间分量数量必须 与每个被动画化属性指定的动画值数量匹配。

    注:

    此约束适用,无论同一个 animate 元素作为目标的是单个属性还是多个属性; 这进而意味着,当作为目标的是多个属性时, 每个被动画化属性的值必须在其 <animation-value-list> 中 指定相同数量的值。

    注:

    例如,下方显示的第一个 animate 元素有效:被动画化属性有 3 个值, 而第二个和第三个无效:对于第二种情况,被动画化属性有 2 个值, 但指定了 3 个 key time;对于第三种情况,第一个被动画化属性有 2 个值, 第二个被动画化属性有 4 个值,但指定了 3 个 key time:

    <!-- valid animation of single attribute with matching key times -->
    <animate xml:id="a1" keyTimes="0;0.2;1" tts:color="red;green;blue"/>
    
    <!-- invalid animation of single attribute with non-matching key times -->
    <animate xml:id="a2" keyTimes="0;0.2;1" tts:color="red;green"/>
    
    <!-- invalid animation of multiple attributes with non-matching key times -->
    <animate xml:id="a3" keyTimes="0;0.2;1"
      tts:color="red;green" tts:backgroundColor="cyan;magenta;yellow;black"/>
    
  6. 如果未指定 keyTimes 属性,并且 calcMode 的计算值不是 "paced", 则适用一个 keyTimes 值,它对应于在动画的简单持续时间上对 指定动画值进行均匀(线性)间隔分布。

    注:

    例如,如果动画化样式指定为 tts:color="red;green;blue",则 keyTimes 的隐含值为 "0;0.5;1"。

  7. 如果指定了 keySplines 属性,并且 calcMode 的计算值不是 "spline", 则为了验证处理的目的,此用法必须被视为错误,并且 为了呈现处理的目的,必须忽略该动画。

  8. 如果指定了 keySplines 属性,并且 calcMode 的计算值为 "spline", 则 keySplines 属性中指定的控制分量数量 必须比 keyTimes 属性计算值中的 时间分量数量少一。

  9. 如果未指定 keySplines 属性,并且 calcMode 的计算值为 "spline", 则为了验证处理的目的,此用法必须被视为错误,并且 为了呈现处理的目的,必须忽略该动画。

  10. 如果未指定 repeatCount 属性,则适用 repeatCount1

  11. 本版本 TTML 不支持 [SVG 1.1] §19.2.10 定义的 additive 属性; 因此,在其缺失时,适用该属性 "replace" 值的语义。

  12. 本版本 TTML 不支持 [SVG 1.1] §19.2.10 定义的 accumulate 属性; 因此,在其缺失时,适用该属性 "none" 值的语义。

以下示例说明使用 animate 元素来对内容 样式执行动画:

示例片段 – 内容样式动画
...
<p dur="5s">
<animate tts:color="yellow;red;green;blue;yellow"/>
Text with Continuously Varying Colors!
</p>
...

注:

在上例中,内容 "Text with Continuously Varying Colors!" 的前景色在 5 秒期间持续从 yellow 动画到 red、green、blue, 然后回到 yellow,之后动画效果被移除并恢复原始颜色 (因为 fill 默认值为 "remove")。

以下示例说明使用 animate 元素来对 region 样式执行动画:

示例片段 – Region 样式动画
<tt xml:lang="" xmlns="http://www.w3.org/ns/ttml"
    xmlns:ttp="http://www.w3.org/ns/ttml#parameter"
    xmlns:tts="http://www.w3.org/ns/ttml#styling"
    ttp:extent="640px 480px">
    <head>
      <layout>
	<region xml:id="r1" timeContainer="seq" tts:opacity="0">
	  <animate dur="1s" tts:opacity="0;1"/>
	  <set dur="5s" tts:opacity="1"/>
	  <animate dur="1s" tts:opacity="1;0"/>
	  <style tts:extent="480px 60px"/>
	  <style tts:origin="80px 400px"/>
	</region>
      </layout>
    </head>
    <body region="r1">...</body>
</tt>

注:

在上例中,一个 region r1 最初设置为 0% opacity, 完全透明,然后在一秒间隔内淡入到 100% opacity, 完全不透明。Opacity 在之后五秒内保持 100%,然后在一秒间隔内 淡出到 0%,并保持该状态。

注:

animate 元素的语义 基于 [SVG 1.1] §19.2.12 定义的语义,而后者又基于 [SMIL 3.0] §12。

13.1.2 animation

animation 元素是一个容器元素,用于分组 非行内动画事项,包括适用于动画事项的元数据。

animation 元素接受零个或多个 Metadata.class 元素组中的元素作为其子级,后跟 零个或多个 Animation.class 元素组中的元素。

XML 表示 – 元素信息项:animation
<animation
  xml:base = <uri>
  xml:id = ID
  xml:lang = xsd:string
  xml:space = ("default" | "preserve")
  内容: Metadata.class*, Animation.class*
</animation>

在时间语义适用于 animation 元素内容的范围内,此元素的隐含时间间隔 定义为与根时间 范围同延。

13.1.3 set

set 元素表达要应用(目标指向)到关联元素的样式属性属性的 一个或多个离散变化(动画)。

set 元素可以作为 (1) 内容元素region 元素的子级出现, 称为行内动画,或 (2) 作为 animation 元素的子级出现, 称为 非行内动画。 在前一种情况下,set 元素的父级是关联元素;在后一种 情况下,任何使用 animate 属性引用 set 元素的元素 都是关联元素。

set 元素接受零个或多个 Metadata.class 元素组中的元素作为其子级。

XML 表示 – 元素信息项:set
<set
  begin = <time-expression>
  condition = <condition>
  dur = <time-expression>
  end = <time-expression>
  fill = <fill>
  repeatCount = <repeat-count>
  xml:base = <uri>
  xml:id = ID
  xml:lang = xsd:string
  xml:space = ("default" | "preserve")
  {TT Style Namespaces 中的任何属性}
  内容: Metadata.class*
</set>

非行内 set 元素 必须指定 xml:id 属性。

set 元素作为目标的样式属性属性直接使用 TT Style Namespaces 中的属性或非某个 TT Namespace 的命名空间中的属性来指定, 其中单个目标动画(关键)值 遵守 <animation-value> 语法。

注:

[SVG 1.1] §19.2.13 相比,此处定义的单个 set 元素可用于 对一组目标样式属性属性执行离散动画,而不是仅限于针对单个样式属性属性。 在 [SVG 1.1] 中,这需要使用多个 set 元素而不是单个 set 元素。

除下文枚举的约束或变体外,set 元素及其上文枚举属性的语义 定义为 [SVG 1.1] §19.2.13 指定的语义:

  1. set 元素作为目标的属性以及要应用于这些属性的离散值 通过直接使用 TT Style Namespaces 中的属性或非 TT Namespace 的命名空间中的属性来指定 (而不是使用 SVG 的 attributeNameto 属性)。

    注:

    例如,指定 tts:color="red" 被认为等价于在 [SVG 1.1] 中指定 attributeName="tts:color"to="red"

  2. 如果未指定 fill 属性,则适用 fillremove

以下示例说明使用 set 元素来对内容 样式执行动画:

示例片段 – 内容样式动画
...
<p dur="5s" tts:color="yellow">
<set begin="1s" dur="1s" tts:color="red"/>
<set begin="2s" dur="1s" tts:color="green"/>
<set begin="3s" dur="1s" tts:color="red"/>
Text with Flashing Colors!
</p>
...

注:

在上例中,内容 "Text with Flashing Colors!" 的前景色在 5 秒期间从 yellow 动画到 red、green、 red,然后回到 yellow。

以下示例说明使用 set 元素来对 region 样式执行动画:

示例片段 – Region 样式动画
<tt xml:lang="" xmlns="http://www.w3.org/ns/ttml"
    xmlns:ttp="http://www.w3.org/ns/ttml#parameter"
    xmlns:tts="http://www.w3.org/ns/ttml#styling"
    ttp:cellResolution="40 16">
    <head>
      <layout>
	<region xml:id="r1" timeContainer="seq">
	  <set dur="10s" tts:origin=" 8c 14c"/>
	  <set dur="2s"  tts:origin=" 2c  2c"/>
	  <set dur="3s"  tts:origin=" 8c 14c"/>
	  <set dur="2s"  tts:origin="14c  4c"/>
	  <set dur="10s" tts:origin=" 8c 14c"/>
	  <style tts:extent="24c 2c"/>
	</region>
      </layout>
    </head>
    <body region="r1">...</body>
</tt>

注:

在上例中,根容器区域被划分为 40 列 16 行的 单元格网格。然后将一个尺寸为 24 列 2 行的 region r1 定位在 根容器区域内,其位置随时间变化, 以产生移动该 region 的效果,这可能有助于 避免字幕遮挡底层视频中的字符。

注:

set 元素的语义 基于 [SVG 1.1] §19.2.13 定义的语义,而后者又基于 [SMIL 3.0] §12。

13.2 动画属性词汇

本节定义与内容元素 和某些布局元素一起使用的 13.2.1 animate 属性。

13.2.1 animate

animate 属性用于 引用一个或多个 animateset 元素, 其中每个元素定义一个特定的非行内 动画

animate 属性可由以下元素类型的实例指定:

如果指定,animate 属性的值必须 遵守 [XML Schema Part 2] §3.3.10 定义的 IDREFS 数据类型,并且此外,每个 IDREF 必须引用 一个具有 animation 元素作为祖先的 animateset 元素。

给定 IDREF 不得在 animate 属性的值中出现多于一次。

对于由元素 Eanimate 属性引用的每个非行内动画元素 A, 执行以下步骤(按指定 IDREF 的顺序):

  1. 创建 A 的深拷贝 A'

  2. A' 移除 xml:id 属性;

  3. A' 插入 E[children] 信息项属性中, 使 A' 作为子元素子序列中的最后一个元素出现, 该子序列对应于 E 内容模型中的 Animation.class* 通配符。

注:

非行内动画的语义本质上构成指定行内动画的一种快捷方式, 当同一个动画在多个引用元素中使用时很有用。

注:

另见允许使用 animate 属性的特定元素类型定义。

13.3 动画值表达式

动画属性值包括使用以下表达式:

13.3.1 <animation-value>

<animation-value> 表达式用于指定动画目标属性的开始(初始)、 中间或结束(最终)值。

语法表示 – <animation-value>
<animation-value>
  : ([^;] | escape)+

escape
  : '\\' char

<animation-value> 表达式的语法必须满足 适用于动画目标属性的所有语法要求,并且此外,不得包含 未转义的分号。

<animation-value> 表达式的语义是 [SVG 1.1] §19.2.9 定义的语义。

13.3.2 <animation-value-list>

<animation-value-list> 表达式用于指定动画值列表,这些值 按顺序应用于动画目标属性。

语法表示 – <animation-value-list>
<animation-value-list>
  : <animation-value> (<lwsp>? ";" <lwsp>? <animation-value>)+

<animation-value-list> 表达式中的 <animation-value> 语法必须 满足适用于动画目标属性的所有 语法要求。

<animation-value-list> 表达式的语义是 [SVG 1.1] §19.2.9 定义的语义。

13.3.3 <calculation-mode>

<calculation-mode> 表达式用于控制动画的插值模式。

语法表示 – <calculation-mode>
<calculation-mode>
  : "discrete"
  | "linear"
  | "paced"
  | "spline"

<calculation-mode> 表达式的语义是 [SVG 1.1] §19.2.9 定义的语义。

13.3.4 <fill>

<fill> 表达式用于确定动画活跃结束之后动画的效果。

语法表示 – <fill>
<fill>
  : "freeze"
  | "remove"

<fill> 表达式的语义是 [SVG 1.1] §19.2.8 定义的语义。

13.3.5 <key-splines>

<key-splines> 表达式用于指定一组 Bezier 控制点列表, 这些控制点控制动画的节奏,其中每对值由 SEMICOLON (U+003B) 字符分隔, 该字符两侧可选地包围线性空白(LWSP)字符。

语法表示 – <key-splines>
<key-splines>
  : control ( <lwsp>? ";" <lwsp>? control )*

control
  : x1 <lwsp> y1 <lwsp> x2 <lwsp> y2

x1, x2, y1, y2
  : coordinate

coordinate                                // 0 ≥ value ≥ 1
  : whole
  | whole "." fraction
  | "." fraction

whole, fraction
  : <digit>+

<key-splines> 表达式的语义是 [SVG 1.1] §19.2.9 定义的语义,如同适用于 key-splines 属性。

13.3.6 <key-times>

<key-times> 表达式用于指定一组相对时间值列表, 这些值控制动画的节奏,其中每对值由 SEMICOLON (U+003B) 字符分隔, 该字符两侧可选地包围线性空白(LWSP)字符。

语法表示 – <key-times>
<key-times>
  : time ( <lwsp>? ";" <lwsp>? time )*

time                                // 0 ≥ value ≥ 1
  : whole
  | whole "." fraction
  | "." fraction

whole, fraction
  : <digit>+

<key-times> 表达式的语义是 [SVG 1.1] §19.2.9 定义的语义,如同适用于 key-times 属性。

13.3.7 <repeat-count>

<repeat-count> 表达式用于确定重复动画的(可能为小数的)迭代次数。

语法表示 – <repeat-count>
<repeat-count>
  : count                           // value > 0
  | "indefinite"

count:
  : whole
  | whole "." fraction
  | "." fraction

whole, fraction
  : <digit>+

<repeat-count> 表达式的语义是 [SVG 1.1] §19.2.8 定义的语义。

14 元数据

本节规定核心词汇目录中的元数据事项,其中 元数据应理解为适用于参数、内容、 样式、布局、计时,甚至元数据本身的一层可分离信息,其中由元数据 表示的信息采用以下两种形式之一:(1) 本规范为 文档实例中的标准化使用而定义的元数据,以及 (2) 在本规范范围之外定义的任意 元数据,其使用和语义完全取决于应用程序对 TTML 内容的使用。

本规范不为元数据定义任何呈现语义;因此,符合规范的 呈现处理器可以忽略所有元数据事项。

注:

虽然本规范不为元数据赋予任何呈现语义,但本规范的超集 配置文件可以这样做,在这种情况下,由该配置文件定义的任何依赖于元数据的呈现语义 被认为超出本规范范围。

14.1 元数据元素词汇

14.1.1 metadata 元素作为 用于分组元数据信息的通用容器元素。

此外,以下元素均在 TT Metadata Namespace 中定义, 为预期在文档实例中常用的元数据 提供标准表示:

14.1.1 metadata

metadata 元素作为元数据 信息的通用容器。

元数据信息可以使用 metadata 元素来表达,方式为指定: (1) 在 metadata 元素上指定一个或多个元数据属性或外来命名空间属性, (2) 一个或多个元数据项或外来命名空间子元素, (3) 一个或多个 data 子 元素,或 (4) 前述方式的组合。

注:

本规范定义 文档实例的形式有效性基于一个 抽象文档实例, 其中所有外来命名空间元素和属性都已移除。因此,以下 XML 表示 在其内容模型中没有形式上包含外来命名空间属性或 外来命名空间子元素; 尽管如此,此类外来命名空间子元素可以出现在 TTML 文档实例的具体编码中。

XML 表示 – 元素信息项:metadata
<metadata
  condition = <condition>
  xml:base = <uri>
  xml:id = ID
  xml:lang = xsd:string
  xml:space = ("default" | "preserve")
  {TT Metadata Namespace 中的任何属性}
  内容: (Data.class|{TT Metadata Namespace 中的任何元素})*
</metadata>

注:

特定元数据项的含义必须在其出现的上下文中求值。 核心词汇目录允许任何 内容元素类型上出现任意数量的 metadata 元素子级。关于此类使用适用的任何约束, 见具体元素词汇定义。

以下示例说明文档元数据的使用。

示例片段 – 文档元数据
...
<head>
  <metadata xmlns:ttm="http://www.w3.org/ns/ttml#metadata">
    <ttm:title>Document Metadata Example</ttm:title>
    <ttm:desc>This document employs document metadata.</ttm:desc>
  </metadata>
</head>
...

以下示例说明元素元数据的使用。

示例片段 – 元素元数据
...
<div>
  <metadata xmlns:ttm="http://www.w3.org/ns/ttml#metadata">
    <ttm:title>Chapter 6 – Sherlock Holmes Gives a Demonstration</ttm:title>
    <ttm:desc>Holmes shows Watson how the murderer entered the window.</ttm:desc>
  </metadata>
</div>
...

以下示例说明元数据属性项的使用。

示例片段 – 外来元数据属性项
...
<div xmlns:ext="http://example.org/ttml#metadata">
  <metadata ext:ednote="remove this division prior to publishing"/>
</div>
...

注:

在上例中,来自外来(外部) 命名空间的全局属性用于表达一个元数据属性,该属性在语义上适用于 包含它的 div 元素。注意,该属性也可以直接在 div 元素上表达;但是,在这种情况下,作者希望通过在 metadata 元素上间接表达某些元数据属性来将其隔离。

注:

TTML 文档实例的具体编码中存在外来命名空间属性 不会影响该 文档实例相对于由 4 文档类型选择的适用 抽象文档类型的形式有效性。

以下示例说明外来元素元数据的使用。

示例片段 – 外来元素元数据
...
<metadata
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:dcterms="http://purl.org/dc/terms/"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <dc:title>Foreign Element Metadata Example</dc:title>
  <dc:description>Express metadata using elements in foreign namespace.</dc:description>
  <dc:format xsi:type="dcterms:IMT">application/ttml+xml</dc:format>
</metadata>
...

注:

在上例中,Dublin Core 元数据词汇定义的若干元素 用于表达文档级元数据。

注:

TTML 文档实例的具体编码中存在外来命名空间元素 不会影响该 文档实例相对于由 4 文档类型选择的适用 抽象文档类型的形式有效性。

14.1.2 ttm:actor

ttm:actor 元素用于将(基于角色的)角色代理的定义 与扮演该角色的另一个代理相链接。

XML 表示 – 元素信息项:ttm:actor
<ttm:actor
  agent = IDREF
  condition = <condition>
  xml:base = <uri>
  xml:id = ID
  xml:lang = xsd:string
  xml:space = ("default" | "preserve")
  内容: EMPTY
</ttm:actor>

ttm:actor 元素的 agent 属性必须 引用一个重要 ttm:agent 元素,该元素表示 扮演角色部分的代理。

ttm:actor 元素的 agent 属性引用其父 ttm:agent 元素的使用已废弃, 并且此外,此类循环引用链的语义 不由本规范定义。

注:

如果实现跟随此类 代理引用的循环链,则建议检测此 条件并终止进一步的代理引用解引用,以 避免无限循环。

注:

在演员扮演自己的情况下, 例如 Steve Coogan 在 The Trip 中扮演 Steve Coogan, 预期做法是使用两个 ttm:agent 元素。第一个 元素(对应于 Steve Coogan 这个人)使用 值为 persontype 属性,而 第二个元素(对应于 Steve Coogan 这个角色)使用 (i) 值为 charactertype 属性,以及 (ii) 一个引用第一个 ttm:agent 元素的子 ttm:actor 元素。

ttm:actor 元素的示例见上文 示例片段 – 代理元数据

14.1.3 ttm:agent

ttm:agent 元素用于定义代理,以便将 内容信息与参与该内容制作或表达的代理关联起来。

ttm:agent 元素接受零个或多个 ttm:name 元素作为其子级,后跟 零个或一个 ttm:actor 元素。

应至少指定一个 ttm:name 子元素,用于表达 该代理的名称,无论它是人、角色、群体还是组织的名称。

XML 表示 – 元素信息项:ttm:agent
<ttm:agent
  condition = <condition>
  type = ("person" | "character" | "group" | "organization" | "other")
  xml:base = <uri>
  xml:id = ID
  xml:lang = xsd:string
  xml:space = ("default" | "preserve")
  内容: ttm:name*, ttm:actor?
</ttm:agent>

必须在每个 ttm:agent 元素上指定 type 属性,并且 如果指定,其值必须是以下之一:

  • person

  • character

  • group

  • organization

  • other

如果 type 属性的值为 character,则 ttm:agent 元素实例应指定 ttm:actor 子级, 该子级指定扮演该角色的代理。

ttm:agent 元数据项仅在作为 head 元素的子级或作为 head 元素的 metadata 子元素的子级指定时,才被认为是重要的。

注:

ttm:agent 元素实例通常使用 内容元素类型上的 ttm:agent 属性来引用。

注:

如果一个角色代理由多个演员扮演,则可以指定(并引用) 多个角色代理,其中角色的不同定义指定不同演员。

以下示例说明代理元数据的使用。

示例片段 – 代理元数据
<tt xml:lang="en" xmlns="http://www.w3.org/ns/ttml" xmlns:ttm="http://www.w3.org/ns/ttml#metadata">
  <head>
    <ttm:agent xml:id="connery" type="person">
      <ttm:name type="family">Connery</ttm:name>
      <ttm:name type="given">Thomas Sean</ttm:name>
      <ttm:name type="alias">Sean</ttm:name>
      <ttm:name type="full">Sir Thomas Sean Connery</ttm:name>
    </ttm:agent>
    <ttm:agent xml:id="bond" type="character">
      <ttm:name type="family">Bond</ttm:name>
      <ttm:name type="given">James</ttm:name>
      <ttm:name type="alias">007</ttm:name>
      <ttm:actor agent="connery"/>
    </ttm:agent>
  </head>
  <body>
    <div>
      ...
      <p ttm:agent="bond">I travel, a sort of licensed troubleshooter.</p>
      ...
    </div>
  </body>
</tt>

注:

在上例中,定义了两个代理:真实(person)代理 Sean Connery,以及虚构(character)代理 James Bond,其中后者 通过一个 ttm:actor 元素与前者链接。 然后从内容(p 元素)引用与该内容关联 (负责产生该内容)的角色代理。注意,在此示例中, ttm:agent 元数据项是作为文档 head 元素的直接 子级指定,而不是放置在容器 metadata 元素中。

14.1.4 ttm:copyright

ttm:copyright 元素用于表达适用于某个作用域层级的 人类可读版权。

适用于整个文档的版权声明应作为 head 元素的子级出现。

XML 表示 – 元素信息项:ttm:copyright
<ttm:copyright
  condition = <condition>
  xml:base = <uri>
  xml:id = ID
  xml:lang = xsd:string
  xml:space = ("default" | "preserve")
  内容: #PCDATA
</ttm:copyright>

注:

本规范未定义 ttm:copyright 元素的任何特定使用。

14.1.5 ttm:desc

ttm:desc 元素用于表达特定元素实例的 人类可读描述。

XML 表示 – 元素信息项:ttm:desc
<ttm:desc
  condition = <condition>
  xml:base = <uri>
  xml:id = ID
  xml:lang = xsd:string
  xml:space = ("default" | "preserve")
  内容: #PCDATA
</ttm:desc>

注:

本规范未定义 ttm:desc 元素的任何特定使用。

ttm:desc 元素的示例见上文 示例片段 – 文档 元数据示例片段 – 元素 元数据

14.1.6 ttm:item

ttm:item 元素用于表达任意命名元数据项。

ttm:item 元素接受以下两种内容模型之一: (1) 一个或多个文本节点(即 #PCDATA),或 (2) 零个或多个嵌套的 ttm:item 元素。

XML 表示 – 元素信息项:ttm:item
<ttm:item
  condition = <condition>
  name = <item-name>
  xml:base = <uri>
  xml:id = ID
  xml:lang = xsd:string
  xml:space = ("default" | "preserve")
  内容: #PCDATA | ttm:item*
</ttm:item>

必须指定 name 属性以标识项的名称,其值必须遵守 <item-name> 值表达式。

注:

对于多个指定相同名称的命名元数据项的出现,没有设置一般约束; 但是,特定命名项的定义可以进一步约束使用上下文以及 共享相同名称的多个项的潜在出现。

命名元数据项的值为: (1) 如果该元素没有子文本或元素节点,则为空, (2) 当该元素的子级仅由文本节点组成时,为 ttm:item 元素的字符内容,或 (3) 命名元数据子项的集合。

注:

特定命名项的定义通常会约束允许值集合。此外,它可以 指定在缺少指定值时隐含某个特定值。

注:

当命名元数据项的值由自然语言文本组成时, xml:lang 属性可以直接 指定在该元数据项元素上,或从该元素的最近祖先间接继承, 以标识适用于命名元数据项值的语言。

以下示例说明命名元数据项的使用,该示例展示了如何使用 命名元数据项 将简单数据嵌入与原始文件名关联。

示例片段 – 命名元数据项
...
<image>
  <source>
    <data type="image/png">
      <ttm:item name="originalFileName"
        xmlns:ttm="http://www.w3.org/ns/ttml#metadata">image.png</ttm:item>
      <chunk length="119">
        iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAMSURBVBhXY2BgYAAAAAQAAVzN/2kAAAAASUVORK5CYII=
      </chunk>
    </data>
  </source>
</image>
...

注:

上例使用单个 chunk 元素,以便 将 ttm:item 元素作为 data 元素的子级包含; 即,如果已编码的图像字节直接作为 #PCDATA 包含在 data 元素中, 则无法包含 ttm:item 子元素。更多信息请参见 data 元素上支持的内容模型。

14.1.7 ttm:name

ttm:name 元素用于指定人、角色、 群体或组织的名称。

XML 表示 – 元素信息项:ttm:name
<ttm:name
  condition = <condition>
  type = ("full" | "family" | "given" | "alias" | "other")
  xml:base = <uri>
  xml:id = ID
  xml:lang = xsd:string
  xml:space = ("default" | "preserve")
  内容: #PCDATA
</ttm:name>

必须在每个 ttm:name 元素上指定 type 属性,并且 如果指定,其值必须是以下之一:

  • full

  • family

  • given

  • alias

  • other

名称类型与名称的语法表达之间的关系 不由本规范定义。

ttm:name 元素的两个示例见上文 示例片段 – 代理元数据

14.1.8 ttm:title

ttm:title 元素用于表达特定元素实例的 人类可读标题。

XML 表示 – 元素信息项:ttm:title
<ttm:title
  condition = <condition>
  xml:base = <uri>
  xml:id = ID
  xml:lang = xsd:string
  xml:space = ("default" | "preserve")
  内容: #PCDATA
</ttm:title>

注:

本规范未定义 ttm:title 元素的任何特定使用。

ttm:title 元素的示例见上文 示例片段 – 文档 元数据示例片段 – 元素 元数据

14.2 元数据属性词汇

本节规定 TT Metadata Namespace 中的以下属性, 以供 metadata 元素和 内容元素使用:

14.2.1 ttm:agent

ttm:agent 属性取 IDREFS 值,并与内容元素一起使用,以指定 执行内容或参与内容执行的代理。

如果指定,ttm:agent 属性必须引用重要 ttm:agent 元素实例。

同一个 IDREF ID 不应在 ttm:agent 属性的值中出现多于一次。

注:

此约束旨在阻止使用冗余代理引用。

ttm:agent 属性的示例见上文 示例片段 – 代理元数据

14.2.2 ttm:role

ttm:role 属性可由内容作者使用, 用来表达被这样标记的内容元素的 角色、功能或特征。

如果指定,此属性的值必须遵守以下 语法:

语法表示 – ttm:role
ttm:role
  role (<lwsp> role)*

role
  : "action"
  | "caption"
  | "description"
  | "dialog"
  | "expletive"
  | "kinesic"
  | "lyrics"
  | "music"
  | "narration"
  | "quality"
  | "sound"
  | "source"
  | "suppressed"
  | "reproduction"
  | "thought"
  | "title"
  | "transcription"
  | extension-role

extension-role
  : "x-" token-char+

token-char
  : { XML NameChar }    // [XML 1.1] Production [4a]

同一个 role token R 不应在 ttm:role 属性的值中出现多于一次。

注:

此约束旨在阻止使用冗余 role token。

注:

所有不以 x- 前缀开头的 ttm:role 值都保留给未来标准化。

注:

如果使用 ttm:role 的自定义 x- 前缀形式, 建议同时使用组织唯一的中缀, 以防止冲突。例如,x-example-org-custom-role。此外, role 值注册表位于 https://www.w3.org/wiki/TTML/RoleRegistry, 以促进互操作性和避免冲突。

14.3 元数据值表达式

元数据词汇可以使用以下表达式:

14.3.1 <item-name>

<item-name> 表达式用于指定使用 ttm:item 元素表达的元数据项名称。

语法表示 – <item-name>
<item-name>
  : <named-item>
  | xsd:QName

如果 item name 表达式采用限定名(xsd:QName)形式, 则该限定名的前缀必须已在命名空间声明中声明,如 [XML Namespaces 1.0] 所规定。

所有不采用限定名(xsd:QName) 形式的 <item-name> 值,要么由本规范定义,要么保留给 W3C 未来标准化。

注:

本规范定义的所有 item name 预期都是未限定的(无前缀), 而由外部规范定义的 item name 是限定的(带前缀)。

注:

关于限定 item 命名空间的注册表,见 https://www.w3.org/wiki/TTML/ItemNameRegistry

14.3.2 <named-item>

<named-item> 值是一个命名元数据项枚举集合的成员, 这些项通过 ttm:item 元素与值关联。

语法表示 – <named-item>
<named-item>
  : "altText"
  | "usesForced"

altText

一个表达替代文本内容的字符串,其值 遵守 xsd:string。 通常用于为某些相关图像内容提供文本等价物或摘要。

注:

此文本等价物可用于支持内容索引,并且还有助于 在创作期间对文档进行质量检查。

注:

[HTML 5.2] 相比, 此命名元数据项的文本内容并非意图在引用元素的主要(而非替代) 内容无法呈现时替代该元素进行呈现;但是, 此替代文本内容可由辅助技术使用。

usesForced

一个布尔值,用于表达某个 <condition> 表达式 是否使用 forced 绑定 参数,其中该值 遵守 xsd:boolean。 如果此命名元数据项 出现在文档实例中,则必须指定为 head 元素的子级。

A 具体编码

本附录是规范性的。

在没有其他要求的情况下,文档实例应当 使用 UTF-8 字符编码,具体编码为一个 格式良好的 XML 1.0 [XML 1.0] 文档。

注:

当使用 XML 1.0 [XML 1.0] 作为 TTML 的具体编码时,只定义了 以下命名字符实体: &amp;&apos;&gt;&lt;&quot;

B 精简 XML 信息集

本附录是规范性的。

就本规范而言,精简 xml 信息集是一个 XML 信息集 [XML InfoSet],它只包含以下 信息项 和信息项属性:

B.1 文档信息项

  • [document element]

B.2 元素信息项

  • [namespace URI]

  • [local name]

  • [children]

  • [attributes]

子信息项 [children] 被精简为仅包含 元素信息项字符信息项

B.3 属性信息项

  • [namespace URI]

  • [local name]

  • [normalized value]

注:

如果精简 xml 信息集是从 XML 文档实体的具体表示构造的,则 [normalized value] 信息项可能包含 未规范化的 XML 空白字符 &#9; (HT)、&#10; (LF)、&#13; (CR) 和 &#20; (SPACE),如 [XML 1.0] §3.3.3 步骤 (3) 第一个项目符号所规定。 特别是,如果使用数字字符引用来表示这些空白字符之一 (该字符不会被规范化), 而不是使用空白字符本身(该字符会被规范化),则可能发生这种情况。

注:

另见 属性信息项

B.4 字符信息项

  • [character code]

连续的字符信息项不要求被分别表示, 而是可以聚合(分块)为字符代码序列(即字符字符串)。

注:

另见 字符信息项

C 模式

本附录是规范性的。

本附录规定以下模式,以供 文档实例使用:

在本附录规定的模式与本规范正文定义的 文档类型、元素类型或属性类型的规范性定义 存在差异的任何情况下,以本规范正文为准。

C.1 Relax NG Compact(RNC)模式

基于 Relax NG Compact Syntax(RNC)[RELAX NG] 的 TTML 内容模式可在 ZIP Archive 获得。出于定义 本规范所定义 Timed Text Markup Language 内容有效性的目的, 此模式应被视为非规范性。 特别是,TTML 内容的形式有效性 由 3.1 文档一致性定义。

C.2 XML Schema Definition(XSD)模式

基于 W3C XML Schema Definition(XSD)[XML Schema Part 1] 的 TTML 内容模式可在 ZIP Archive 获得。出于定义 本规范所定义 Timed Text Markup Language 内容有效性的目的, 此模式应被视为非规范性。 特别是,TTML 内容的形式有效性 由 3.1 文档一致性定义。

D 媒体类型注册

本附录已从本规范中移除。

E 特性

本附录是规范性的。

本附录规定 (1) 一组特性指称,其中每个指称 标记本规范定义的一个或多个语法和/或语义特性, 以及 (2) 对于每个被指称特性,该特性对于符合 3.2.2 转换处理器一致性3.2.3 呈现处理器一致性要求的 TTML 内容处理器而言是强制还是可选。

注:

如果 TTML 处理器相对于特性指称 F 的定义, 满足本附录关于转换或呈现处理(分别适用)的要求, 则称该处理器实现转换语义实现呈现语义

注:

如果下方某个特性指称的定义没有限定到特定元素类型或上下文, 则支持 该(被指称)特性意在表示支持其在所有允许使用上下文中的使用。

例如,支持 #length-root-container-relative 特性意味着支持它与任何 <length> 表达式一起使用,只要该使用未被另行禁止。

注:

如果 TTML 处理器的实现不支持某个特性的语义, 但该实现已知该特性的语法表达式,则建议该实现能够解析该表达式, 但忽略表达式中不受支持组件的语义。

例如,如果支持 #textEmphasis-minimal, 但不支持 #textEmphasis-color, 则包含 <emphasis-color> 组件的 tts:textEmphasis 值应当 被解析,同时忽略该不受支持组件的语义(但不忽略该属性值中其他 受支持组件的语义)。

E.1 特性指称

特性指称表示为一个遵守以下 形式的字符串:

feature-designation
  : feature-namespace designation

feature-namespace
  : TT Feature Namespace                    // http://www.w3.org/ns/ttml/feature/

designation
  : "#" token-char+

token-char
  : { XML NameChar }                        // [XML 1.1] Production [4a]

本规范未定义的所有 feature-designation 值都保留 给未来标准化。

以下各小节定义所有特性指称, 它们以相对于 TT Feature Namespace 基 URI 的 相对 URI(片段标识符)表达。

当本节中特性指称符的定义引用 [TTML1] 中同一特性指称符的定义,并且后者(被引用的)定义使用短语“all defined values”时,则这些 值由 [TTML1] 中定义的所有值组成;否则,当短语 “all defined values”直接出现在下方时,则这些值由本规范定义的所有值组成。

注:

本节中后缀为 -version-2 的特性指称 是由本(第二)版 TTML 规范新 定义的,即 TTML2。

E.1.1 #animate

如果 TTML 处理器支持以下特性,则它支持 #animate 特性:

#animate 特性是 #animate-minimal 特性的语法和语义扩展。

如果内容配置文件要求或允许使用 #animate 特性,却禁止使用以下任何 特性,则为错误: #animate-fill#animate-minimal#animate-paced#animate-repeat#animate-spline

E.1.2 #animate-minimal

如果 TTML 转换处理器animate 元素 与 calcMode 属性的 discretelinear 值一起使用时, 能识别并能够转换其语义, 则它支持 #animate-minimal 特性。

如果 TTML 呈现处理器 为上文枚举的相同词汇实现呈现语义支持, 则它支持 #animate-minimal 特性。

注:

支持 calcMode 属性的 discretelinear 值,也意味着支持 keyTimes 属性。

注:

支持 #animate-minimal 特性并不意味着支持以下任何 特性: #animate-fill#animate-paced#animate-repeat#animate-spline

E.1.3 #animate-fill

如果 TTML 转换处理器 能识别并能够转换 animate 元素的 fill 属性语义, 则它支持 #animate-fill 特性。

如果 TTML 呈现处理器 为上文枚举的相同词汇实现呈现语义支持, 则它支持 #animate-fill 特性。

E.1.4 #animate-paced

如果 TTML 转换处理器animate 元素 与 calcMode 属性的 paced 值一起使用时, 能识别并能够转换其语义, 则它支持 #animate-paced 特性。

如果 TTML 呈现处理器 为上文枚举的相同词汇实现呈现语义支持, 则它支持 #animate-paced 特性。

E.1.5 #animate-repeat

如果 TTML 转换处理器 能识别并能够转换 animate 元素的 repeatCount 属性语义, 则它支持 #animate-repeat 特性。

如果 TTML 呈现处理器 为上文枚举的相同词汇实现呈现语义支持, 则它支持 #animate-repeat 特性。

E.1.6 #animate-spline

如果 TTML 转换处理器animate 元素 与 calcMode 属性的 spline 值一起使用时, 能识别并能够转换其语义, 则它支持 #animate-spline 特性。

如果 TTML 呈现处理器 为上文枚举的相同词汇实现呈现语义支持, 则它支持 #animate-spline 特性。

注:

支持 calcMode 属性的 spline 值,也意味着支持 keySplines 属性。

E.1.7 #animation

如果 TTML 内容处理器支持 [TTML1] §D.1.1 定义的 #animation 特性,则它支持 #animation 特性。

注:

支持 #animation 特性在功能上等价于支持 #set 特性。

如果内容配置文件要求或允许使用 #animation 特性,却禁止使用 #set 特性,则为错误。

E.1.8 #animation-out-of-line

如果 TTML 转换处理器 能识别并能够转换 13 动画定义的以下词汇, 则它支持 #animation-out-of-line 特性:

并支持 13.2 动画属性词汇定义的以下属性:

如果 TTML 呈现处理器 为上文枚举的相同词汇实现呈现语义支持, 则它支持 #animation-out-of-line 特性。

E.1.9 #animation-version-2

如果 TTML 处理器支持以下特性,则它支持 #animation-version-2 特性:

#animation-version-2 特性是 #animation 特性的语法和语义扩展。

如果内容配置文件要求或允许使用 #animation-version-2 特性,却禁止使用以下任何 特性:#animate#animation-out-of-line#animation,则为错误。

E.1.10 #audio

如果 TTML 转换处理器 能识别并能够转换 9 嵌入内容定义的以下 词汇, 则它支持 #audio 特性:

如果 TTML 呈现处理器 为上文枚举的相同词汇实现呈现语义支持, 则它支持 #audio 特性。

E.1.11 #audio-description

如果 TTML 处理器支持以下特性,则它支持 #audio-description 特性:

如果内容配置文件要求或允许使用 #audio-description 特性,却禁止使用以下任何 特性: #audio#gain#pan,则为错误。

E.1.12 #audio-speech

如果 TTML 处理器支持以下特性,则它支持 #audio-speech 特性:

如果内容配置文件要求或允许使用 #audio-speech 特性,却禁止使用以下任何 特性: #pitch#speak#speech,则为错误。

E.1.13 #background

如果 TTML 处理器支持以下特性,则它支持 #background 特性:

如果内容配置文件要求或允许使用 #background 特性,却禁止使用以下任何 特性: #backgroundColor#background-image,则为错误。

E.1.14 #background-image

如果 TTML 处理器支持以下特性,则它支持 #background-image 特性:

如果内容配置文件要求或允许使用 #background 特性,却禁止使用以下任何 特性: #backgroundClip#backgroundExtent#backgroundImage#backgroundOrigin#backgroundPosition#backgroundRepeat,则为错误。

E.1.15 #backgroundClip

如果 TTML 转换处理器 能识别并能够 转换 tts:backgroundClip 属性的所有已定义值, 则它支持 #backgroundClip 特性。

如果 TTML 呈现处理器tts:backgroundClip 属性的所有已定义值实现呈现语义支持, 则它支持 #backgroundClip 特性。

E.1.16 #backgroundColor

如果 TTML 内容处理器支持 [TTML1] §D.1.2 定义的 #backgroundColor 特性,则它支持 #backgroundColor 特性。

注:

支持 #backgroundColor 特性在功能上等价于支持 以下特性:

如果内容配置文件要求或允许使用 #backgroundColor 特性,却禁止使用以下任何 特性:#backgroundColor-block#backgroundColor-inline#backgroundColor-region,则为错误。

E.1.17 #backgroundColor-block

如果 TTML 内容处理器支持 [TTML1] §D.1.3 定义的 #backgroundColor-block 特性,则它支持 #backgroundColor-block 特性。

E.1.18 #backgroundColor-inline

如果 TTML 内容处理器支持 [TTML1] §D.1.4 定义的 #backgroundColor-inline 特性,则它支持 #backgroundColor-inline 特性。

E.1.19 #backgroundColor-region

如果 TTML 内容处理器支持 [TTML1] §D.1.5 定义的 #backgroundColor-region 特性,则它支持 #backgroundColor-region 特性。

E.1.20 #backgroundExtent

如果 TTML 转换处理器 能识别并能够 转换 tts:backgroundExtent 属性的所有已定义值, 则它支持 #backgroundExtent 特性。

如果 TTML 呈现处理器tts:backgroundExtent 属性的所有已定义值实现呈现语义支持, 则它支持 #backgroundExtent 特性。

E.1.21 #backgroundImage

如果 TTML 转换处理器 能识别并能够 转换 tts:backgroundImage 属性的所有已定义值, 则它支持 #backgroundImage 特性。

如果 TTML 呈现处理器tts:backgroundImage 属性的所有已定义值实现呈现语义支持, 则它支持 #backgroundImage 特性。

E.1.22 #backgroundOrigin

如果 TTML 转换处理器 能识别并能够 转换 tts:backgroundOrigin 属性的所有已定义值, 则它支持 #backgroundOrigin 特性。

如果 TTML 呈现处理器tts:backgroundOrigin 属性的所有已定义值实现呈现语义支持, 则它支持 #backgroundOrigin 特性。

E.1.23 #backgroundPosition

如果 TTML 转换处理器 能识别并能够 转换 tts:backgroundPosition 属性的所有已定义值, 则它支持 #backgroundPosition 特性。

如果 TTML 呈现处理器tts:backgroundPosition 属性的所有已定义值实现呈现语义支持, 则它支持 #backgroundPosition 特性。

E.1.24 #backgroundRepeat

如果 TTML 转换处理器 能识别并能够 转换 tts:backgroundRepeat 属性的所有已定义值, 则它支持 #backgroundRepeat 特性。

如果 TTML 呈现处理器tts:backgroundRepeat 属性的所有已定义值实现呈现语义支持, 则它支持 #backgroundRepeat 特性。

E.1.25 #base

如果 TTML 转换处理器 能识别并能够转换 6.1 配置文件元素词汇定义的以下词汇中所应用的 xml:base 属性, 则它支持 #base 特性:

如果 TTML 呈现处理器 为上文枚举的相同词汇实现呈现语义支持, 则它支持 #base 特性。

E.1.26 #base-general

如果 TTML 转换处理器 能识别并能够转换 6.1 配置文件元素词汇定义的所有允许该属性的词汇中所应用的 xml:base 属性,但以下除外:

如果 TTML 呈现处理器 为上文枚举的相同词汇实现呈现语义支持, 则它支持 #base-general 特性。

E.1.27 #base-version-2

如果 TTML 处理器支持 以下特性,则它支持 #base-version-2 特性:

#base-version-2 特性是 #base 特性的语法和语义扩展。

如果内容配置文件要求或允许使用 #base-version-2 特性 却禁止使用以下任何特性: #base#base-general,则为错误。

E.1.28 #bidi

如果 TTML 内容处理器支持 [TTML1] §D.1.6 定义的 #bidi 特性,则它支持 #bidi 特性。

注:

支持 #bidi 特性在功能上等价于支持 以下特性:

如果内容配置文件要求或允许使用 #bidi 特性 却禁止使用以下任何 特性:#direction#unicodeBidi#writingMode-horizontal,则为错误。

E.1.29 #bidi-version-2

如果 TTML 处理器支持 以下特性,则它支持 #bidi-version-2 特性:

#bidi-version-2 特性是 #bidi 特性的语法和语义扩展。

如果内容配置文件要求或允许使用 #bidi-version-2 特性却禁止使用以下任何 特性: #bidi#unicodeBidi-isolate,则为错误。

E.1.30 #border

如果 TTML 处理器支持 以下特性,则它支持 #border 特性:

如果内容配置文件要求或允许使用 #border 特性 却禁止使用以下任何 特性: #border-block#border-inline#border-region,则为错误。

E.1.31 #border-block

如果 TTML 转换处理器tts:border 属性应用于会在呈现处理期间生成 块区域的内容元素时,能识别并 能够转换该属性的所有已定义值, 则它支持 #border-block 特性。

如果 TTML 呈现处理器tts:border 属性应用于生成 块区域的内容元素时,为该属性实现呈现语义 支持, 则它支持 #border-block 特性。

E.1.32 #border-inline

如果 TTML 转换处理器tts:border 属性应用于会在呈现处理期间生成 行内区域的内容元素时,能识别并 能够转换该属性的所有已定义值, 则它支持 #border-inline 特性。

如果 TTML 呈现处理器tts:border 属性应用于生成 行内区域的内容元素时,为该属性实现呈现语义 支持, 则它支持 #border-inline 特性。

E.1.33 #border-radii

如果 TTML 处理器支持 以下特性,则它支持 #border-radii 特性:

如果内容配置文件要求或允许使用 #border-radii 特性却禁止使用以下任何 特性: #border-radii-1#border-radii-2,则为错误。

E.1.34 #border-radii-1

如果 TTML 转换处理器 能识别并能够转换 tts:border 属性中指定的 <border-radii> 值表达式的 单分量值, 则它支持 #border-radii-1 特性。

如果 TTML 呈现处理器tts:border 属性中指定的 <border-radii> 值表达式的 单分量值实现呈现语义支持, 则它支持 #backgroundClip 特性。

E.1.35 #border-radii-2

如果 TTML 转换处理器 能识别并能够转换 tts:border 属性中指定的 <border-radii> 值表达式的 双分量值, 则它支持 #border-radii-2 特性。

如果 TTML 呈现处理器tts:border 属性中指定的 <border-radii> 值表达式的 双分量值实现呈现语义支持, 则它支持 #backgroundClip 特性。

E.1.36 #border-region

如果 TTML 转换处理器tts:border 属性应用于 region 元素时,能识别并 能够转换该属性的所有已定义值, 则它支持 #border-region 特性。

如果 TTML 呈现处理器tts:border 属性应用于 region 元素时,为该属性实现呈现语义 支持, 则它支持 #border-region 特性。

E.1.37 #bpd

如果 TTML 转换处理器 能识别并能够 转换 tts:bpd 属性, 则它支持 #bpd 特性。

如果 TTML 呈现处理器tts:bpd 属性实现呈现语义支持, 则它支持 #bpd 特性。

E.1.38 #cellResolution

如果 TTML 内容处理器支持 [TTML1] §D.1.7 定义的 #cellResolution 特性,则它支持 #cellResolution 特性。

E.1.39 #chunk

如果 TTML 转换处理器 能识别并能够转换 9 嵌入内容定义的以下 词汇, 则它支持 #chunk 特性:

如果 TTML 呈现处理器 为上文枚举的相同词汇实现呈现语义支持, 则它支持 #chunk 特性。

E.1.40 #clockMode

如果 TTML 内容处理器支持 [TTML1] §D.1.8 定义的 #clockMode 特性,则它支持 #clockMode 特性。

E.1.41 #clockMode-gps

如果 TTML 内容处理器支持 [TTML1] §D.1.9 定义的 #clockMode-gps 特性,则它支持 #clockMode-gps 特性。

E.1.42 #clockMode-local

如果 TTML 内容处理器支持 [TTML1] §D.1.10 定义的 #clockMode-local 特性,则它支持 #clockMode-local 特性。

E.1.43 #clockMode-utc

如果 TTML 内容处理器支持 [TTML1] §D.1.11 定义的 #clockMode-utc 特性,则它支持 #clockMode-utc 特性。

E.1.44 #color

如果 TTML 内容处理器支持 [TTML1] §D.1.12 定义的 #color 特性,则它支持 #color 特性。

E.1.45 #condition

如果 TTML 处理器支持以下特性,则它支持 #condition 特性:

如果内容配置文件要求或允许使用 #condition 特性,却禁止使用以下任何 特性: #condition-fn-media#condition-fn-parameter#condition-fn-supports#condition-primary,则为错误。

E.1.46 #condition-fn-media

如果 TTML 内容处理器 支持在 <condition> 值 表达式中使用的 <media-function> 子表达式,则它支持 #condition-fn-media 特性。

E.1.47 #condition-fn-parameter

如果 TTML 内容处理器 支持在 <condition> 值 表达式中使用的 <parameter-function> 子表达式,则它支持 #condition-fn-parameter 特性。

E.1.48 #condition-fn-supports

如果 TTML 内容处理器 支持在 <condition> 值 表达式中使用的 <supports-function> 子表达式,则它支持 #condition-fn-supports 特性。

E.1.49 #condition-primary

如果 TTML 内容处理器 支持不包含 <condition-function> 子表达式的 <condition> 值表达式, 则它支持 #condition-primary 特性。

E.1.50 #content

如果 TTML 内容处理器支持 [TTML1] §D.1.13 定义的 #content 特性,则它支持 #content 特性。

E.1.51 #content-sizing

如果 TTML 处理器支持 以下特性,则它支持 #content-sizing 特性:

如果内容配置文件要求或允许使用 #content-sizing 特性却禁止使用以下任何 特性: #bpd#ipd,则为错误。

E.1.52 #contentProfiles

如果 TTML 转换处理器 (1) 支持非组合配置文件,并且 (2) 能识别并能够转换:

  1. 6.2 配置文件属性词汇定义的以下配置文件属性词汇:

  2. ttp:inferProcessorProfileSource 属性的 first 值,

  3. ttp:profile 元素上的 designator 属性,

  4. ttp:profile 元素上 type 属性的 content 值,以及

  5. ttp:featurettp:extension 元素上 value 属性的 prohibited 值。

如果 TTML 呈现处理器 为上文枚举的相同词汇实现呈现语义支持, 则它支持 #contentProfiles 特性。

注:

支持 #contentProfiles 特性并不意味着支持 组合配置文件嵌套配置文件

E.1.53 #contentProfiles-combined

如果 TTML 转换处理器 (1) 支持 #contentProfiles 特性, (2) 支持组合配置文件,并且 (3) 能识别并能够转换:

  1. 6.2 配置文件属性词汇定义的以下配置文件属性词汇:

  2. ttp:inferProcessorProfileSource 属性的 combined 值,以及

  3. ttp:profile 元素上的 combine 属性。

如果 TTML 呈现处理器 为上文枚举的相同词汇实现呈现语义支持, 则它支持 #contentProfiles-combined 特性。

#contentProfiles-combine 特性是 #contentProfiles 特性的语法和语义扩展。

如果内容配置文件要求或允许使用 #contentProfiles-combine 特性 却禁止使用 #contentProfiles 特性,则为错误。

注:

支持 #contentProfiles-combined 特性并不意味着支持 嵌套配置文件

E.1.54 #core

如果 TTML 内容处理器支持 [TTML1] §D.1.14 定义的 #core 特性,则它支持 #core 特性。

E.1.55 #data

如果 TTML 转换处理器 能识别并能够转换 9 嵌入内容定义的以下 词汇, 则它支持 #data 特性:

如果 TTML 呈现处理器 为上文枚举的相同词汇实现呈现语义支持, 则它支持 #data 特性。

E.1.56 #direction

如果 TTML 内容处理器支持 [TTML1] §D.1.15 定义的 #direction 特性,则它支持 #direction 特性。

E.1.57 #disparity

如果 TTML 转换处理器 能识别并能够 转换 tts:disparity 属性, 则它支持 #disparity 特性。

如果 TTML 呈现处理器tts:disparity 属性实现呈现语义支持, 则它支持 #disparity 特性。

注:

支持 #disparity 特性并不意味着支持 #region-implied-animation 特性。

E.1.58 #display

如果 TTML 内容处理器支持 [TTML1] §D.1.16 定义的 #display 特性,则它支持 #display 特性。

注:

支持 #display 特性在功能上等价于支持 以下特性:

如果内容配置文件要求或允许使用 #display 特性却禁止使用以下任何 特性: #display-block#display-inline#display-region,则为错误。

E.1.59 #display-block

如果 TTML 内容处理器支持 [TTML1] §D.1.17 定义的 #display-block 特性,则它支持 #display-block 特性。

E.1.60 #display-inline

如果 TTML 内容处理器支持 [TTML1] §D.1.18 定义的 #display-inline 特性,则它支持 #display-inline 特性。

E.1.61 #display-inlineBlock

如果 TTML 转换处理器tts:display 属性的 inlineBlock 值应用于会在呈现处理期间生成 行内区域的内容元素时,能识别并能够转换该值, 则它支持 #display-inlineBlock 特性。

如果 TTML 呈现处理器tts:display 属性的 inlineBlock 值应用于会在呈现处理期间生成 行内区域的内容元素时,支持该值的呈现语义, 则它支持 #display-inlineBlock 特性。

E.1.62 #display-region

如果 TTML 内容处理器支持 [TTML1] §D.1.19 定义的 #display-region 特性,则它支持 #display-region 特性。

E.1.63 #display-version-2

如果 TTML 处理器支持以下特性,则它支持 #display-version-2 特性:

#display-version-2 特性是 #display 特性的语法和语义扩展。

如果内容配置文件要求或允许使用 #display-version-2 特性, 却禁止使用以下任何特性: #display#display-block#display-inline#display-inlineBlock#display-region,则为错误。

E.1.64 #displayAlign

如果 TTML 内容处理器支持 [TTML1] §D.1.20 定义的 #displayAlign 特性,则它支持 #displayAlign 特性。

注:

支持 #displayAlign 特性在功能上等价于支持 以下特性:

如果内容配置文件要求或允许使用 #displayAlign 特性,却禁止使用以下任何 特性:#displayAlign-region#displayAlign-relative,则为错误。

E.1.65 #displayAlign-block

如果 TTML 转换处理器tts:displayAlign 属性应用于会在呈现处理期间生成块区域的 内容元素时,为该属性实现转换语义 支持,则它支持 #displayAlign-block 特性。

如果 TTML 呈现处理器tts:displayAlign 属性应用于生成块区域的 内容元素时,为该属性实现呈现语义 支持,则它支持 #displayAlign-block 特性。

E.1.66 #displayAlign-justify

如果 TTML 转换处理器能识别并 能够转换 tts:displayAlign 属性的 justify 值, 则它支持 #displayAlign-justify 特性。

如果 TTML 呈现处理器tts:displayAlign 属性的 justify 值实现呈现语义支持, 则它支持 #displayAlign-justify 特性。

E.1.67 #displayAlign-region

如果 TTML 转换处理器tts:displayAlign 属性应用于 region 元素时, 为该属性实现转换语义 支持,则它支持 #displayAlign-region 特性。

如果 TTML 呈现处理器tts:displayAlign 属性应用于 region 元素时, 为该属性实现呈现语义 支持,则它支持 #displayAlign-region 特性。

E.1.68 #displayAlign-relative

如果 TTML 转换处理器能识别并 能够转换 tts:displayAlign 属性的 beforecenterafter 值, 则它支持 #displayAlign-relative 特性。

如果 TTML 呈现处理器tts:displayAlign 属性的 beforecenterafter 值实现呈现语义 支持,则它支持 #displayAlign-relative 特性。

E.1.69 #displayAlign-version-2

如果 TTML 处理器支持以下特性,则它支持 #displayAlign-version-2 特性:

#displayAlign-version-2 特性是 #displayAlign 特性的语法和语义扩展。

如果内容配置文件要求或允许使用 #displayAlign-version-2 特性,却禁止使用以下任何 特性: #displayAlign#displayAlign-block#displayAlign-justify#displayAlign-region#displayAlign-relative,则为错误。

E.1.70 #displayAspectRatio

如果 TTML 转换处理器能识别并能够 转换 ttp:displayAspectRatio 属性,则它支持 #displayAspectRatio 特性。

如果 TTML 呈现处理器ttp:displayAspectRatio 属性实现呈现语义支持, 则它支持 #displayAspectRatio 特性。

E.1.71 #dropMode

如果 TTML 内容处理器支持 [TTML1] §D.1.21 定义的 #dropMode 特性,则它支持 #dropMode 特性。

注:

支持 #dropMode 特性在功能上等价于支持 以下特性:

如果内容配置文件要求或允许使用 #dropMode 特性,却禁止使用以下任何 特性:#dropMode-dropNTSC#dropMode-dropPAL#dropMode-nonDrop,则为错误。

E.1.72 #dropMode-dropNTSC

如果 TTML 内容处理器支持 [TTML1] §D.1.22 定义的 #dropMode-dropNTSC 特性,则它支持 #dropMode-dropNTSC 特性。

E.1.73 #dropMode-dropPAL

如果 TTML 内容处理器支持 [TTML1] §D.1.23 定义的 #dropMode-dropPAL 特性,则它支持 #dropMode-dropPAL 特性。

E.1.74 #dropMode-nonDrop

如果 TTML 内容处理器支持 [TTML1] §D.1.24 定义的 #dropMode-nonDrop 特性,则它支持 #dropMode-nonDrop 特性。

E.1.75 #embedded-audio

如果 TTML 处理器支持以下特性,则它支持 #embedded-audio 特性:

如果内容配置文件要求或允许使用 #embedded-audio 特性,却禁止使用以下任何 特性: #embedded-data#audio,则为错误。

E.1.76 #embedded-content

如果 TTML 处理器支持以下特性,则它支持 #embedded-content 特性:

如果内容配置文件要求或允许使用 #embedded-content 特性,却禁止使用以下任何 特性: #embedded-audio#embedded-font#embedded-image,则为错误。

E.1.77 #embedded-data

如果 TTML 处理器支持以下特性,则它支持 #embedded-data 特性:

如果内容配置文件要求或允许使用 #embedded-data 特性,却禁止使用以下任何 特性: #chunk#data#resources#source,则为错误。

E.1.78 #embedded-font

如果 TTML 处理器支持以下特性,则它支持 #embedded-font 特性:

如果内容配置文件要求或允许使用 #embedded-font 特性,却禁止使用以下任何 特性: #embedded-data#font,则为错误。

E.1.79 #embedded-image

如果 TTML 处理器支持以下特性,则它支持 #embedded-image 特性:

如果内容配置文件要求或允许使用 #embedded-image 特性,却禁止使用以下任何 特性: #embedded-data#image,则为错误。

E.1.80 #extent

如果 TTML 内容处理器支持 [TTML1] §D.1.25 定义的 #extent 特性,则它支持 #extent 特性。

注:

支持 #extent 特性在功能上等价于支持 以下特性:

如果内容配置文件要求或允许使用 #extent 特性 却禁止使用以下任何 特性:#extent-region#extent-root,则为错误。

注:

支持 #extent 特性并不意味着支持 #region-implied-animation 特性。

E.1.81 #extent-auto

如果 TTML 内容处理器支持 [TTML1] §8.2.7 定义的 tts:extent 属性的 auto 值的语法和语义,则它支持 #extent-auto 特性。

E.1.82 #extent-auto-version-2

如果 TTML 转换处理器能识别并能够 转换本规范定义的 tts:extent 属性的 auto 值的语法和语义, 则它支持 #extent-auto-version-2 特性。

如果 TTML 呈现处理器为上文描述的 tts:extent 属性的 auto 值的语义扩展实现呈现语义支持, 则它支持 #extent-auto-version-2 特性。

#extent-auto-version-2 特性是 #extent-auto 特性的语义扩展。

如果内容配置文件要求或允许使用 #extent-auto-version-2 特性,却禁止使用 (1) #extent-auto 特性 或 (2) 以下所有特性: #extent-root#extent-region#extent-image,则为错误。

注:

支持 #extent-auto-version-2 特性并不意味着支持 以下特性:

但是,如果支持这些特性中的任何一个,则支持 #extent-auto-version-2 特性 确实意味着相对于该特性支持 #extent-auto-version-2, 或更具体地说,相对于该特性所支持的元素支持它,也就是说,相对于 以下任何元素类型: ttregionimage,分别如此。

E.1.83 #extent-contain

如果 TTML 转换处理器能识别并能够 转换 tts:extent 属性的 contain 值, 则它支持 #extent-contain 特性。

如果 TTML 呈现处理器tts:extent 属性的 contain 值实现呈现语义支持, 则它支持 #extent-contain 特性。

E.1.84 #extent-cover

如果 TTML 转换处理器能识别并能够 转换 tts:extent 属性的 cover 值, 则它支持 #extent-cover 特性。

如果 TTML 呈现处理器tts:extent 属性的 cover 值实现呈现语义支持, 则它支持 #extent-cover 特性。

E.1.85 #extent-full-version-2

如果 TTML 处理器支持以下特性,则它支持 #extent-full-version-2 特性:

#extent-full-version-2 特性是 #extent-version-2 特性的语法和语义扩展。

如果内容配置文件要求或允许使用 #extent-full-version-2 特性,却禁止使用 以下任何特性: #extent-contain#extent-cover#extent-measure#extent-version-2,则为错误。

注:

支持 #extent-full-version-2 特性并不意味着支持 #region-implied-animation 特性。

E.1.86 #extent-image

如果 TTML 转换处理器支持 image 元素上所应用的 tts:extent 属性中由 #extent-auto-version-2#extent-length-version-2 特性支持的 属性值,则它支持 #extent-image 特性。

如果 TTML 呈现处理器为上文枚举的相同词汇实现呈现语义支持, 则它支持 #extent-image 特性。

如果内容配置文件要求或允许使用 #extent-image 特性,却禁止使用以下任何 特性:#extent, 特性:#extent-auto-version-2,或 #extent-length-version-2,则为错误。

E.1.87 #extent-length

如果 TTML 内容处理器支持 [TTML1] §8.2.7 定义的 tts:extent 属性的 <length> 分量值, 则它支持 #extent-length 特性。

E.1.88 #extent-length-version-2

如果 TTML 内容处理器在应用于 tts:extent 属性的 <length> 分量值时 支持 #length-version-2 特性, 则它支持 #extent-length-version-2 特性。

#extent-length-version-2 特性是 #extent-length 特性的语法和语义扩展。

如果内容配置文件要求或允许使用 #extent-length-version-2 特性, 却禁止使用 #extent-length 特性,则为错误。

E.1.89 #extent-measure

如果 TTML 转换处理器tts:extent 属性中使用时,能识别并能够 转换 <measure> 样式值表达式的以下值:

  • auto

  • fitContent

  • maxContent

  • minContent

如果 TTML 呈现处理器为 上文枚举的相同词汇实现呈现语义支持, 则它支持 #extent-measure 特性。

E.1.90 #extent-region

如果 TTML 内容处理器支持 [TTML1] §D.1.26 定义的 #extent-region 特性,则它支持 #extent-region 特性。

注:

支持 #extent-region 特性意味着在应用于 region 元素时,支持 #extent-auto#extent-length 特性。

E.1.91 #extent-region-version-2

如果 TTML 处理器支持以下特性,则它支持 #extent-region-version-2 特性:

#extent-region-version-2 特性是 #extent-region 特性的语法和语义扩展。

如果内容配置文件要求或允许使用 #extent-region-version-2 特性, 却禁止使用以下任何特性: #extent-region#extent-auto-version-2#extent-length-version-2,则为错误。

注:

支持 #extent-region-version-2 特性并不意味着支持 #region-implied-animation 特性。

E.1.92 #extent-root

如果 TTML 内容处理器支持 [TTML1] §D.1.27 定义的 #extent-root 特性,则它支持 #extent-root 特性。

注:

支持 #extent-root 特性意味着在应用于 tt 元素时,支持 #extent-auto#extent-length 特性。

E.1.93 #extent-root-version-2

如果 TTML 处理器支持以下特性,则它支持 #extent-root-version-2 特性:

#extent-root-version-2 特性是 #extent-root 特性的语法和语义扩展。

如果内容配置文件要求或允许使用 #extent-root-version-2 特性, 却禁止使用以下任何特性: #extent-root#extent-auto-version-2#extent-length-version-2,则为错误。

E.1.94 #extent-version-2

如果 TTML 处理器支持以下 特性,则它支持 #extent-version-2 特性:

#extent-version-2 特性是 #extent 特性的语法和语义扩展。

如果内容配置文件要求或允许使用 #extent-version-2 特性, 却禁止使用以下任何特性: #extent#extent-image#extent-region-version-2#extent-root-version-2,则为错误。

注:

支持 #extent-version-2 特性并不意味着支持以下任何 特性: #extent-contain#extent-cover#extent-measure#region-implied-animation

E.1.95 #font

如果 TTML 转换处理器能识别并能够转换 9 嵌入内容定义的以下 词汇, 则它支持 #font 特性:

如果 TTML 呈现处理器为 上文枚举的相同词汇实现呈现语义支持, 则它支持 #font 特性。

E.1.96 #fontFamily

如果 TTML 内容处理器支持 [TTML1] §D.1.28 定义的 #fontFamily 特性,则它支持 #fontFamily 特性。

注:

支持 #fontFamily 特性在功能上等价于支持 以下特性:

如果内容配置文件要求或允许使用 #fontFamily 特性,却禁止使用以下任何 特性:#fontFamily-generic#fontFamily-non-generic,则为错误。

E.1.97 #fontFamily-generic

如果 TTML 内容处理器支持 [TTML1] §D.1.29 定义的 #fontFamily-generic 特性,则它支持 #fontFamily-generic 特性。

E.1.98 #fontFamily-non-generic

如果 TTML 内容处理器支持 [TTML1] §D.1.30 定义的 #fontFamily-non-generic 特性,则它支持 #fontFamily-non-generic 特性。

E.1.99 #fontKerning

如果 TTML 转换处理器能识别并能够 转换 tts:fontKerning 属性,则它支持 #fontKerning 特性。

如果 TTML 呈现处理器tts:fontKerning 属性实现呈现语义支持, 则它支持 #fontKerning 特性。

E.1.100 #fontSelectionStrategy

如果 TTML 转换处理器能识别并能够 转换 tts:fontSelectionStrategy 属性的 auto 值, 则它支持 #fontSelectionStrategy 特性。

如果 TTML 呈现处理器tts:fontSelectionStrategy 属性的 auto 值实现呈现语义支持, 则它支持 #fontSelectionStrategy 特性。

E.1.101 #fontSelectionStrategy-character

如果 TTML 转换处理器能识别并能够 转换 tts:fontSelectionStrategy 属性的 character 值, 则它支持 #fontSelectionStrategy-character 特性。

如果 TTML 呈现处理器tts:fontSelectionStrategy 属性的 character 值实现呈现语义 支持,则它支持 #fontSelectionStrategy-character 特性。

E.1.102 #fontShear

如果 TTML 转换处理器能识别并能够 转换 tts:fontShear 属性, 则它支持 #fontShear 特性。

如果 TTML 呈现处理器tts:fontShear 属性实现呈现语义支持, 则它支持 #fontShear 特性。

E.1.103 #fontSize

如果 TTML 内容处理器支持 [TTML1] §D.1.31 定义的 #fontSize 特性,则它支持 #fontSize 特性。

注:

支持 #fontSize 特性在功能上等价于支持 以下特性:

如果内容配置文件要求或允许使用 #fontSize 特性,却禁止使用以下任何 特性:#fontSize-anamorphic#fontSize-isomorphic,则为错误。

E.1.104 #fontSize-anamorphic

如果 TTML 内容处理器支持 [TTML1] §D.1.32 定义的 #fontSize-anamorphic 特性,则它支持 #fontSize-anamorphic 特性。

E.1.105 #fontSize-isomorphic

如果 TTML 内容处理器支持 [TTML1] §D.1.33 定义的 #fontSize-isomorphic 特性,则它支持 #fontSize-isomorphic 特性。

E.1.106 #fontStyle

如果 TTML 内容处理器支持 [TTML1] §D.1.34 定义的 #fontStyle 特性,则它支持 #fontStyle 特性。

注:

支持 #fontStyle 特性在功能上等价于支持 (1) #fontStyle-italic#fontStyle-oblique 特性 以及 (2) tts:fontStyle 属性的 normal 值。

如果内容配置文件要求或允许使用 #fontStyle 特性,却禁止使用以下任何 特性:#fontStyle-italic#fontStyle-oblique,则为错误。

E.1.107 #fontStyle-italic

如果 TTML 内容处理器支持 [TTML1] §D.1.35 定义的 #fontStyle-italic 特性,则它支持 #fontStyle-italic 特性。

E.1.108 #fontStyle-oblique

如果 TTML 内容处理器支持 [TTML1] §D.1.36 定义的 #fontStyle-oblique 特性,则它支持 #fontStyle-oblique 特性。

E.1.109 #fontVariant

如果 TTML 转换处理器能识别并能够 转换 tts:fontVariant 属性,则它支持 #fontVariant 特性。

如果 TTML 呈现处理器tts:fontVariant 属性实现呈现语义支持, 则它支持 #fontVariant 特性。

E.1.110 #fontWeight

如果 TTML 内容处理器支持 [TTML1] §D.1.37 定义的 #fontWeight 特性,则它支持 #fontWeight 特性。

注:

支持 #fontWeight 特性在功能上等价于支持 (1) #fontWeight-bold 特性 以及 (2) tts:fontWeight 属性的 normal 值。

如果内容配置文件要求或允许使用 #fontWeight 特性,却禁止使用 #fontWeight-bold 特性,则为错误。

E.1.111 #fontWeight-bold

如果 TTML 内容处理器支持 [TTML1] §D.1.38 定义的 #fontWeight-bold 特性,则它支持 #fontWeight-bold 特性。

E.1.112 #frameRate

如果 TTML 内容处理器支持 [TTML1] §D.1.39 定义的 #frameRate 特性,则它支持 #frameRate 特性。

E.1.113 #frameRateMultiplier

如果 TTML 内容处理器支持 [TTML1] §D.1.40 定义的 #frameRateMultiplier 特性,则它支持 #frameRateMultiplier 特性。

E.1.114 #gain

如果 TTML 转换处理器能识别并能够 转换 tta:gain 属性, 则它支持 #gain 特性。

如果 TTML 呈现处理器tta:gain 属性实现呈现语义支持, 则它支持 #gain 特性。

E.1.115 #image

如果 TTML 转换处理器能识别并能够转换 9 嵌入内容定义的以下 词汇, 则它支持 #image 特性:

如果 TTML 呈现处理器为 上文枚举的相同词汇实现呈现语义支持, 则它支持 #image 特性。

E.1.116 #image-png

如果 TTML 转换处理器能识别并能够转换 [PNG] 定义的内容类型为 image/png图像 资源, 则它支持 #image-png 特性。

如果 TTML 呈现处理器[PNG] 定义的内容类型为 image/png图像 资源实现呈现语义支持, 则它支持 #image-png 特性。

E.1.117 #initial

如果 TTML 转换处理器能识别并能够转换 10 样式定义的以下 词汇:

如果 TTML 呈现处理器为 上文枚举的相同词汇实现呈现语义支持, 则它支持 #initial 特性。

E.1.118 #ipd

如果 TTML 转换处理器能识别并能够 转换 tts:ipd 属性, 则它支持 #ipd 特性。

如果 TTML 呈现处理器tts:ipd 属性实现呈现语义支持, 则它支持 #ipd 特性。

E.1.119 #layout

如果 TTML 内容处理器支持 [TTML1] §D.1.41 定义的 #layout 特性,则它支持 #layout 特性。

E.1.120 #length

如果 TTML 内容处理器支持 [TTML1] §D.1.42 定义的 #length 特性,则它支持 #length 特性。

E.1.121 #length-cell

如果 TTML 内容处理器支持 [TTML1] §D.1.43 定义的 #length-cell 特性,则它支持 #length-cell 特性。

E.1.122 #length-em

如果 TTML 内容处理器支持 [TTML1] §D.1.44 定义的 #length-em 特性,则它支持 #length-em 特性。

E.1.123 #length-integer

如果 TTML 内容处理器支持 [TTML1] §D.1.45 定义的 #length-integer 特性,则它支持 #length-integer 特性。

E.1.124 #length-negative

如果 TTML 内容处理器支持 [TTML1] §D.1.46 定义的 #length-negative 特性,则它支持 #length-negative 特性。

E.1.125 #length-percentage

如果 TTML 内容处理器支持 [TTML1] §D.1.47 定义的 #length-percentage 特性,则它支持 #length-percentage 特性。

E.1.126 #length-pixel

如果 TTML 内容处理器支持 [TTML1] §D.1.48 定义的 #length-pixel 特性,则它支持 #length-pixel 特性。

E.1.127 #length-positive

如果 TTML 内容处理器支持 [TTML1] §D.1.49 定义的 #length-positive 特性,则它支持 #length-positive 特性。

E.1.128 #length-real

如果 TTML 内容处理器支持 [TTML1] §D.1.50 定义的 #length-real 特性,则它支持 #length-real 特性。

E.1.129 #length-root-container-relative

如果 TTML 转换处理器能识别并 能够转换 根容器相对<length> 样式值 表达式值,则它支持 #length-root-container-relative 特性。

如果 TTML 呈现处理器根 容器相对<length> 样式 值表达式值实现呈现语义 支持,则它支持 #length-root-container-relative 特性。

E.1.130 #length-version-2

如果 TTML 处理器支持以下 特性,则它支持 #length-version-2 特性:

#length-version-2 特性是 #length 特性的语法和语义扩展。

如果内容配置文件要求或允许使用 #length-version-2 特性, 却禁止使用以下任何特性: #length#length-root-container-relative,则为错误。

E.1.131 #letterSpacing

如果 TTML 转换处理器能识别并能够 转换 tts:letterSpacing 属性,则它支持 #letterSpacing 特性。

如果 TTML 呈现处理器tts:letterSpacing 属性实现呈现语义支持, 则它支持 #letterSpacing 特性。

E.1.132 #lineBreak-uax14

如果 TTML 内容处理器支持 [TTML1] §D.1.51 定义的 #lineBreak-uax14 特性,则它支持 #lineBreak-uax14 特性。

E.1.133 #lineHeight

如果 TTML 内容处理器支持 [TTML1] §D.1.52 定义的 #lineHeight 特性,则它支持 #lineHeight 特性。

E.1.134 #lineShear

如果 TTML 转换处理器能识别并能够 转换 tts:lineShear 属性, 则它支持 #lineShear 特性。

如果 TTML 呈现处理器tts:lineShear 属性实现呈现语义支持, 则它支持 #lineShear 特性。

E.1.135 #luminanceGain

如果 TTML 转换处理器能识别并能够 转换 tts:luminanceGain 属性,则它支持 #luminanceGain 特性。

如果 TTML 呈现处理器tts:luminanceGain 实现呈现语义支持, 则它支持 #luminanceGain 特性。

E.1.136 #markerMode

如果 TTML 内容处理器支持 [TTML1] §D.1.53 定义的 #markerMode 特性,则它支持 #markerMode 特性。

注:

支持 #markerMode 特性在功能上等价于支持 以下特性:

如果内容配置文件要求或允许使用 #markerMode 特性,却禁止使用以下任何 特性:#markerMode-continuous#markerMode-discontinuous,则为错误。

E.1.137 #markerMode-continuous

如果 TTML 内容处理器支持 [TTML1] §D.1.54 定义的 #markerMode-continuous 特性,则它支持 #markerMode-continuous 特性。

E.1.138 #markerMode-discontinuous

如果 TTML 内容处理器支持 [TTML1] §D.1.55 定义的 #markerMode-discontinuous 特性,则它支持 #markerMode-discontinuous 特性。

E.1.139 #metadata

如果 TTML 内容处理器支持 [TTML1] §D.1.56 定义的 #metadata 特性,则它支持 #metadata 特性。

E.1.140 #metadata-item

如果 TTML 转换处理器能识别并能够转换 14 元数据定义的以下 词汇:

如果 TTML 呈现处理器为 上文枚举的相同词汇实现呈现语义支持, 则它支持 #metadata-item 特性。

注:

本规范不为元数据信息的呈现 定义标准化形式。元数据信息的呈现或 呈现能力被认为 依赖于实现。

E.1.141 #metadata-version-2

如果 TTML 处理器支持 以下特性,则它支持 #metadata-version-2 特性:

#metadata-version-2 特性是 #metadata 特性的语法和语义扩展。

如果内容配置文件要求或允许使用 #metadata-version-2 特性,却禁止使用以下任何 特性: #metadata#metadata-item,则为错误。

E.1.142 #nested-div

如果 TTML 内容处理器支持 [TTML1] §D.1.57 定义的 #nested-div 特性,则它支持 #nested-div 特性。

E.1.143 #nested-span

如果 TTML 内容处理器支持 [TTML1] §D.1.58 定义的 #nested-span 特性,则它支持 #nested-span 特性。

E.1.144 #opacity

如果 TTML 内容处理器支持 [TTML1] §D.1.59 定义的 #opacity 特性,则它支持 #opacity 特性。

注:

支持 #opacity 特性在功能上等价于支持 #opacity-region 特性。

如果内容配置文件要求或允许使用 #opacity 特性,却禁止使用 #opacity-region 特性,则为错误。

E.1.145 #opacity-block

如果 TTML 转换处理器tts:opacity 属性应用于会在呈现处理期间生成 块区域的内容元素时,能识别并 能够转换该属性的所有已定义值, 则它支持 #opacity-block 特性。

如果 TTML 呈现处理器(1) 在 tts:opacity 属性应用于生成 块区域的内容元素时,为该属性实现呈现语义 支持,并且 (2) 能够显示或生成可区分至少八 (8) 个 opacity 值的 输出显示 信号,则它支持 #opacity-block 特性。

E.1.146 #opacity-inline

如果 TTML 转换处理器tts:opacity 属性应用于会在呈现处理期间生成 行内区域的内容元素时,能识别并 能够转换该属性的所有已定义值, 则它支持 #opacity-inline 特性。

如果 TTML 呈现处理器(1) 在 tts:opacity 属性应用于生成 行内区域的内容元素时,为该属性实现呈现语义 支持,并且 (2) 能够显示或生成可区分至少八 (8) 个 opacity 值的 输出显示 信号,则它支持 #opacity-inline 特性。

E.1.147 #opacity-region

如果 TTML 转换处理器tts:opacity 属性应用于 region 元素时,能识别并 能够转换该属性的所有已定义值, 则它支持 #opacity-region 特性。

如果 TTML 呈现处理器(1) 在 tts:opacity 属性应用于 region 元素时, 为该属性实现呈现语义 支持,并且 (2) 能够显示或生成可区分至少八 (8) 个 opacity 值的输出显示 信号,则它支持 #opacity-region 特性。

注:

支持 #opacity-region 特性在功能上等价于支持 #opacity 特性。

如果内容配置文件要求或允许使用 #opacity-region 特性,却禁止使用 #opacity 特性,则为错误。

E.1.148 #opacity-version-2

如果 TTML 处理器支持 以下特性,则它支持 #opacity-version-2 特性:

#opacity-version-2 特性是 #opacity 特性的语法和语义扩展。

如果内容配置文件要求或允许使用 #opacity-version-2 特性, 却禁止使用以下任何特性: #opacity#opacity-block#opacity-inline#opacity-region,则为错误。

E.1.149 #origin

如果 TTML 内容处理器支持 [TTML1] §D.1.60 定义的 #origin 特性,则它支持 #origin 特性。

注:

支持 #origin 特性并不意味着支持 #region-implied-animation 特性。

E.1.150 #overflow

如果 TTML 内容处理器支持 [TTML1] §D.1.61 定义的 #overflow 特性,则它支持 #overflow 特性。

注:

支持 #overflow 特性在功能上等价于支持 (1) #overflow-visible 特性 以及 (2) tts:overflow 属性的 hidden 值。

如果内容配置文件要求或允许使用 #overflow 特性,却禁止使用 #overflow-visible 特性, 则为错误。

E.1.151 #overflow-visible

如果 TTML 内容处理器支持 [TTML1] §D.1.62 定义的 #overflow-visible 特性,则它支持 #overflow-visible 特性。

E.1.152 #padding

如果 TTML 内容处理器支持 [TTML1] §D.1.63 定义的 #padding 特性,则它支持 #padding 特性。

注:

支持 #padding 特性在功能上等价于支持 以下特性:

如果内容配置文件要求或允许使用 #padding 特性,却禁止使用以下任何特性: #padding-1#padding-2#padding-3#padding-4#padding-region

E.1.153 #padding-1

如果 TTML 内容处理器支持 [TTML1] §D.1.64 定义的 #padding-1 特性,则它支持 #padding-1 特性。

E.1.154 #padding-2

如果 TTML 内容处理器支持 [TTML1] §D.1.65 定义的 #padding-2 特性,则它支持 #padding-2 特性。

E.1.155 #padding-3

如果 TTML 内容处理器支持 [TTML1] §D.1.66 定义的 #padding-3 特性,则它支持 #padding-3 特性。

E.1.156 #padding-4

如果 TTML 内容处理器支持 [TTML1] §D.1.67 定义的 #padding-4 特性,则它支持 #padding-4 特性。

E.1.157 #padding-block

如果 TTML 转换处理器tts:padding 属性应用于会在呈现处理期间生成 块区域的内容元素时,能识别并 能够转换该属性的所有已定义值, 则它支持 #padding-block 特性。

如果 TTML 呈现处理器tts:padding 属性应用于生成 块区域的内容元素时,为该属性实现呈现语义 支持, 则它支持 #padding-block 特性。

E.1.158 #padding-inline

如果 TTML 转换处理器tts:padding 属性应用于会在呈现处理期间生成 行内区域的内容元素时,能识别并 能够转换该属性的所有已定义值, 则它支持 #padding-inline 特性。

如果 TTML 呈现处理器tts:padding 属性应用于生成 行内区域的内容元素时,为该属性实现呈现语义 支持, 则它支持 #padding-inline 特性。

E.1.159 #padding-region

如果 TTML 内容处理器支持 #padding 特性,则它支持 #padding-region 特性。

#padding-region 特性是 空 扩展, 属于 #padding 特性, 其中 空扩展 是指 某个特性在形式上被标记为另一特性的扩展,但该扩展 语义为空集,这等同于说 这两个特性在功能上等价。

如果内容配置文件要求或允许使用 #padding-region 特性, 却禁止使用以下任何特性: #padding#padding-1#padding-2#padding-3#padding-4,则为错误。

E.1.160 #padding-version-2

如果 TTML 处理器支持以下特性,则它支持 #padding-version-2 特性:

#padding-version-2 特性是 #padding 特性的语法和语义扩展。

注:

由于 #padding-region 特性是 空扩展,属于 #padding 特性, 因此 #padding-version-2 特性同样是 #padding-region 特性的 语法和语义扩展。

如果内容配置文件要求或允许使用 #padding-version-2 特性, 却禁止使用以下任何特性: #padding#padding-1#padding-2#padding-3#padding-4#padding-block#padding-inline#padding-region,则为错误。

E.1.161 #pan

如果 TTML 转换处理器能识别并能够 转换 tta:pan 属性, 则它支持 #pan 特性。

如果 TTML 呈现处理器tta:pan 属性实现呈现语义支持, 则它支持 #pan 特性。

E.1.162 #permitFeatureNarrowing

如果 TTML 转换处理器能识别并能够 转换 (1) ttp:permitFeatureNarrowing 属性,以及 (2) ttp:featurettp:extension 元素上的 extends 属性, 则它支持 #permitFeatureNarrowing 特性。

如果 TTML 呈现处理器为 上文枚举的相同词汇实现呈现语义支持, 则它支持 #permitFeatureNarrowing 特性。

注:

如果某个 TTML 处理器在 #permitFeatureNarrowing 特性被指定为可选时 不支持它,则会忽略 extends 属性的语义,也就是说,对被扩展特性的支持 不足以 认定该扩展特性受支持。

E.1.163 #permitFeatureWidening

如果 TTML 转换处理器能识别并能够 转换 (1) ttp:permitFeatureWidening 属性,以及 (2) ttp:featurettp:extension 元素上的 restricts 属性, 则它支持 #permitFeatureWidening 特性。

如果 TTML 呈现处理器为 上文枚举的相同词汇实现呈现语义支持, 则它支持 #permitFeatureWidening 特性。

注:

如果某个 TTML 处理器在 #permitFeatureWidening 特性被指定为可选时 不支持它,则会忽略 restricts 属性的语义,也就是说,对被限制特性的支持 不足以 认定该受限特性受支持。

E.1.164 #pitch

如果 TTML 转换处理器能识别并能够 转换 tta:pitch 属性, 则它支持 #pitch 特性。

如果 TTML 呈现处理器tta:pitch 属性实现呈现语义支持, 则它支持 #pitch 特性。

E.1.165 #pixelAspectRatio

如果 TTML 内容处理器支持 [TTML1] §D.1.68 定义的 #pixelAspectRatio 特性,则它支持 #pixelAspectRatio 特性。

E.1.166 #position

如果 TTML 转换处理器能识别并能够 转换 tts:position 属性, 则它支持 #position 特性。

如果 TTML 呈现处理器tts:position 属性实现呈现语义支持, 则它支持 #position 特性。

注:

支持 #position 特性并不意味着支持 #region-implied-animation 特性。

E.1.167 #presentation

如果 TTML 内容处理器支持 [TTML1] §D.1.69 定义的 #presentation 特性,则它支持 #presentation 特性。

E.1.168 #presentation-version-2

如果 TTML 处理器 (1) 满足 3.2.1 通用处理器一致性 定义的通用处理器条件,并且 (2) 支持以下特性,则它支持 #presentation-version-2 特性:

#presentation-version-2 特性是 #presentation 特性的语法和语义扩展。

如果内容配置文件要求或允许使用 #presentation-version-2 特性,却禁止使用以下任何 特性: #presentation#profile-version-2,则为错误。

E.1.169 #processorProfiles

如果 TTML 转换处理器 (1) 支持非组合配置文件,并且 (2) 能识别并能够转换:

  1. 6.2 配置文件属性词汇定义的以下配置文件属性词汇:

  2. ttp:profile 元素上的 designator 属性,以及

  3. ttp:profile 元素上 type 属性的 processor 值。

如果 TTML 呈现处理器为 上文枚举的相同词汇实现呈现语义支持, 则它支持 #processorProfiles 特性。

注:

支持 #processorProfiles 特性并不意味着支持组合配置文件嵌套配置文件

E.1.170 #processorProfiles-combined

如果 TTML 转换处理器 (1) 支持 #processorProfiles 特性, (2) 支持组合配置文件,并且 (3) 能识别并 能够转换:

  1. 6.2 配置文件属性词汇定义的以下配置文件属性词汇:

  2. ttp:profile 元素上的 combine 属性。

如果 TTML 呈现处理器为 上文枚举的相同词汇实现呈现语义支持, 则它支持 #processorProfiles-combined 特性。

#processorProfiles-combine 特性是 #processorProfiles 特性的语法和语义扩展。

如果处理器配置文件要求或允许使用 #processorProfiles-combine 特性, 却禁止使用 #processorProfiles 特性,则为错误。

注:

支持 #processorProfiles-combined 特性并不意味着支持 嵌套配置文件

E.1.171 #profile

如果 TTML 内容处理器支持 [TTML1] §D.1.70 定义的 #profile 特性,则它支持 #profile 特性。

E.1.172 #profile-full-version-2

如果 TTML 内容处理器支持以下特性,则它支持 #profile-full-version-2 特性:

#profile-full-version-2 特性是 #profile-version-2 特性的语法和语义扩展。

如果内容配置文件要求或允许使用 #profile-full-version-2 特性, 却禁止使用以下任何特性: #contentProfiles#contentProfiles-combined#permitFeatureNarrowing#permitFeatureWidening#processorProfiles#processorProfiles-combined#profile#profile-nesting#profile-version-2,则为错误。

E.1.173 #profile-nesting

如果 TTML 内容处理器支持嵌套配置文件, 则它支持 #profile-nesting 特性。

E.1.174 #profile-version-2

如果 TTML 内容处理器支持以下特性,则它支持 #profile-version-2 特性:

#profile-version-2 特性是 #profile 特性的语法和语义扩展。

如果内容配置文件要求或允许使用 #profile-version-2 特性, 却禁止使用以下任何特性: #contentProfiles#processorProfiles#profile,则为错误。

注:

支持 #profile-version-2 特性并不意味着支持 以下特性:

E.1.175 #region-implied-animation

如果 TTML 转换处理器能识别并能够转换 divp 元素上按照 11.1.2.1 行内动画的特殊 语义适用于隐含 region 的样式属性, 则它支持 #region-implied-animation 特性。

如果 TTML 呈现处理器divp 元素上按照 11.1.2.1 行内动画的特殊 语义适用于隐含 region 的样式属性 实现呈现语义支持,则它支持 #region-implied-animation 特性。

注:

支持 #region-implied-animation 特性并不意味着支持 以下特性:

但是,如果支持这些特性中的任何一个,则支持 #region-implied-animation 特性 确实意味着相对于该特性支持 11.1.2.1 行内动画的特殊 语义

E.1.176 #region-inline

如果 TTML 转换处理器能识别并能够 转换内容 元素的行内 region 元素子级,如 region 进一步定义, 则它支持 #region-inline 特性。

如果 TTML 呈现处理器内容元素的行内 region 元素子级实现呈现语义支持, 如 region 进一步定义, 则它支持 #region-inline 特性。

E.1.177 #region-timing

如果 TTML 转换处理器在以下词汇应用于 region 元素时,能识别并能够转换这些词汇, 则它支持 #region-timing 特性:

如果 TTML 呈现处理器在上文枚举的相同词汇 应用于 region 元素时, 为其实现呈现语义支持,则它支持 #region-timing 特性。

#region-timing 特性是 #timing 特性的语义限制。

注:

由于此特性表示 #timing 特性的一个语义子集,并且 后者是所有转换和呈现处理器的强制特性, 因此此特性 指称的用途实际上限于在内容配置文件定义中使用,其中该定义可以 选择禁止文档实例 使用此特性。

E.1.178 #resources

如果 TTML 转换处理器能识别并能够转换 9 嵌入内容定义的以下 词汇, 则它支持 #resources 特性:

如果 TTML 呈现处理器为 上文枚举的相同词汇实现呈现语义支持, 则它支持 #resources 特性。

E.1.179 #ruby

如果 TTML 转换处理器能识别并 能够转换 tts:ruby 属性的所有已定义值, 则它支持 #ruby 特性。

如果 TTML 呈现处理器tts:ruby 属性的所有已定义值实现呈现语义支持, 则它支持 #ruby 特性。

E.1.180 #ruby-full

如果 TTML 处理器支持以下特性,则它支持 #ruby-full 特性:

如果内容配置文件要求或允许使用 #ruby-full 特性 却禁止使用以下任何特性: #ruby#rubyAlign#rubyAlign-withBase#rubyPosition#rubyReserve,则为错误。

E.1.181 #rubyAlign

如果 TTML 处理器支持以下 特性,则它支持 #rubyAlign 特性:

如果内容配置文件要求或允许使用 #rubyAlign 特性,却禁止使用以下任何 特性: #rubyAlign-minimal#rubyAlign-withBase,则为错误。

E.1.182 #rubyAlign-minimal

如果 TTML 转换处理器能识别并能够转换 tts:rubyAlign 属性的 以下值, 则它支持 #rubyAlign-minimal 特性。

  • start

  • center

  • end

  • spaceAround

  • spaceBetween

如果 TTML 呈现处理器为 上文枚举的相同值 词汇实现呈现语义支持, 则它支持 #rubyAlign-minimal 特性。

E.1.183 #rubyAlign-withBase

如果 TTML 转换处理器能识别并能够转换 tts:rubyAlign 属性的 withBase 值, 则它支持 #rubyAlign-withBase 特性。

如果 TTML 呈现处理器为 上文枚举的相同值 实现呈现语义支持, 则它支持 #rubyAlign-withBase 特性。

E.1.184 #rubyPosition

如果 TTML 转换处理器能识别并能够 转换 tts:rubyPosition 属性, 则它支持 #rubyPosition 特性。

如果 TTML 呈现处理器tts:rubyPosition 属性实现呈现语义支持, 则它支持 #rubyPosition 特性。

E.1.185 #rubyReserve

如果 TTML 转换处理器能识别并能够 转换 tts:rubyReserve 属性, 则它支持 #rubyReserve 特性。

如果 TTML 呈现处理器tts:rubyReserve 属性实现呈现语义支持, 则它支持 #rubyReserve 特性。

E.1.186 #set

如果 TTML 内容处理器支持 #animation 特性, 则它支持 #set 特性,并且因此 #set 特性是 空扩展,属于 #animation 特性。

如果内容配置文件要求或允许使用 #set 特性, 却禁止使用 #animation 特性,则为错误。

E.1.187 #set-fill

如果 TTML 转换处理器能识别并能够 转换 set 元素的 fill 属性, 则它支持 #set-fill 特性。

如果 TTML 呈现处理器set 元素的 fill 属性 实现呈现语义支持, 则它支持 #set-fill 特性。

E.1.188 #set-multiple-styles

如果 TTML 转换处理器能识别并能够 转换 set 元素上指定的 TT Style Namespaces 中的 多个属性, 则它支持 #set-multiple-styles 特性。

如果 TTML 呈现处理器set 元素上指定的 TT Style Namespaces 中的 多个属性实现呈现语义支持, 则它支持 #set-multiple-styles 特性。

E.1.189 #set-repeat

如果 TTML 转换处理器能识别并能够 转换 set 元素的 repeatCount 属性, 则它支持 #set-repeat 特性。

如果 TTML 呈现处理器set 元素的 repeatCount 属性 实现呈现语义支持, 则它支持 #set-repeat 特性。

E.1.190 #shear

如果 TTML 转换处理器能识别并能够 转换 tts:shear 属性, 则它支持 #shear 特性。

如果 TTML 呈现处理器tts:shear 属性实现呈现语义支持, 则它支持 #shear 特性。

E.1.191 #showBackground

如果 TTML 内容处理器支持 [TTML1] §D.1.71 定义的 #showBackground 特性,则它支持 #showBackground 特性。

E.1.192 #source

如果 TTML 转换处理器能识别并能够转换 9 嵌入内容定义的以下 词汇, 则它支持 #source 特性:

如果 TTML 呈现处理器为 上文枚举的相同词汇实现呈现语义支持, 则它支持 #source 特性。

E.1.193 #speak

如果 TTML 转换处理器能识别并能够 转换 tta:speak 属性, 则它支持 #speak 特性。

如果 TTML 呈现处理器tta:speak 属性实现呈现语义支持, 则它支持 #speak 特性。

E.1.194 #speech

如果 TTML 处理器支持 语音合成处理器, 则它支持 #speech 特性。

E.1.195 #structure

如果 TTML 内容处理器支持 [TTML1] §D.1.72 定义的 #structure 特性,则它支持 #structure 特性。

E.1.196 #styling

如果 TTML 内容处理器支持 [TTML1] §D.1.73 定义的 #styling 特性,则它支持 #styling 特性。

E.1.197 #styling-chained

如果 TTML 内容处理器支持 [TTML1] §D.1.74 定义的 #styling-chained 特性,则它支持 #styling-chained 特性。

E.1.198 #styling-inheritance-content

如果 TTML 内容处理器支持 [TTML1] §D.1.75 定义的 #inheritance-content 特性,则它支持 #styling-inheritance-content 特性。

E.1.199 #styling-inheritance-region

如果 TTML 内容处理器支持 [TTML1] §D.1.76 定义的 #styling-inheritance-region 特性,则它支持 #styling-inheritance-region 特性。

E.1.200 #styling-inline

如果 TTML 内容处理器支持 [TTML1] §D.1.77 定义的 #styling-inline 特性,则它支持 #styling-inline 特性。

E.1.201 #styling-nested

如果 TTML 内容处理器支持 [TTML1] §D.1.78 定义的 #styling-nested 特性,则它支持 #styling-nested 特性。

E.1.202 #styling-referential

如果 TTML 内容处理器支持 [TTML1] §D.1.79 定义的 #styling-referential 特性,则它支持 #styling-referential 特性。

E.1.203 #subFrameRate

如果 TTML 内容处理器支持 [TTML1] §D.1.80 定义的 #subFrameRate 特性,则它支持 #subFrameRate 特性。

E.1.204 #textAlign

如果 TTML 内容处理器支持 [TTML1] §D.1.81 定义的 #textAlign 特性,则它支持 #textAlign 特性。

注:

支持 #textAlign 特性在功能上等价于支持 以下特性:

如果内容配置文件要求或允许使用 #textAlign 特性,却禁止使用以下任何特性: #textAlign-absolute#textAlign-relative,则为错误。

E.1.205 #textAlign-absolute

如果 TTML 内容处理器支持 [TTML1] §D.1.82 定义的 #textAlign-absolute 特性,则它支持 #textAlign-absolute 特性。

E.1.206 #textAlign-justify

如果 TTML 转换处理器能识别并 能够转换 tts:textAlign 属性的 justify 值, 则它支持 #textAlign-justify 特性。

如果 TTML 呈现处理器tts:textAlign 属性的 justify 值实现呈现语义支持, 则它支持 #textAlign-justify 特性。

E.1.207 #textAlign-relative

如果 TTML 内容处理器支持 [TTML1] §D.1.83 定义的 #textAlign-relative 特性,则它支持 #textAlign-relative 特性。

E.1.208 #textAlign-version-2

如果 TTML 处理器支持以下特性,则它支持 #textAlign-version-2 特性:

#textAlign-version-2 特性是 #textAlign 特性的语法和语义扩展。

如果内容配置文件要求或允许使用 #textAlign-version-2 特性, 却禁止使用以下任何特性: #textAlign#textAlign-absolute#textAlign-justify#textAlign-relative,则为错误。

E.1.209 #textCombine

如果 TTML 转换处理器能识别并能够 转换 tts:textCombine 属性, 则它支持 #textCombine 特性。

如果 TTML 呈现处理器tts:textCombine 属性实现呈现语义支持, 则它支持 #textCombine 特性。

E.1.210 #textDecoration

如果 TTML 内容处理器支持 [TTML1] §D.1.84 定义的 #textDecoration 特性,则它支持 #textDecoration 特性。

注:

支持 #textDecoration 特性在功能上等价于支持 以下特性:

如果内容配置文件要求或允许使用 #textDecoration 特性 却禁止使用以下任何特性: #textDecoration-over#textDecoration-through#textDecoration-under,则为错误。

E.1.211 #textDecoration-over

如果 TTML 内容处理器支持 [TTML1] §D.1.85 定义的 #textDecoration-over 特性,则它支持 #textDecoration-over 特性。

E.1.212 #textDecoration-through

如果 TTML 内容处理器支持 [TTML1] §D.1.86 定义的 #textDecoration-through 特性,则它支持 #textDecoration-through 特性。

E.1.213 #textDecoration-under

如果 TTML 内容处理器支持 [TTML1] §D.1.87 定义的 #textDecoration-under 特性,则它支持 #textDecoration-under 特性。

E.1.214 #textEmphasis

如果 TTML 处理器支持以下特性,则它支持 #textEmphasis 特性:

#textEmphasis 特性是 #textEmphasis-minimal 特性的语法和语义扩展。

如果内容配置文件要求或允许使用 #textEmphasis 特性 却禁止使用以下任何特性: #textEmphasis-color#textEmphasis-minimal#textEmphasis-quoted-string,则为错误。

E.1.215 #textEmphasis-color

如果 TTML 转换处理器能识别并能够 转换 tts:textEmphasis 属性中包含 <emphasis-color> 分量的值, 则它支持 #textEmphasis-color 特性。

如果 TTML 呈现处理器为 上文枚举的相同词汇实现呈现语义支持, 则它支持 #textEmphasis-color 特性。

E.1.216 #textEmphasis-minimal

如果 TTML 转换处理器能识别并能够 转换 tts:textEmphasis 属性的值,并且该值 (1) 不包含 <emphasis-color> 分量,且 (2) 不包含采用 <quoted-string> 值形式的 <emphasis-style> 分量, 则它支持 #textEmphasis-minimal 特性。

如果 TTML 呈现处理器为 上文枚举的相同词汇实现呈现语义支持, 则它支持 #textEmphasis-minimal 特性。

E.1.217 #textEmphasis-quoted-string

如果 TTML 转换处理器能识别并能够 转换 tts:textEmphasis 属性的值,并且该值包含采用 <quoted-string> 值形式的 <emphasis-style> 分量, 则它支持 #textEmphasis-quoted-string 特性。

如果 TTML 呈现处理器为 上文枚举的相同词汇实现呈现语义支持, 则它支持 #textEmphasis-quoted-string 特性。

E.1.218 #textOrientation

如果 TTML 转换处理器能识别并能够 转换 tts:textOrientation 属性, 则它支持 #textOrientation 特性。

如果 TTML 呈现处理器tts:textOrientation 属性实现呈现语义支持, 则它支持 #textOrientation 特性。

E.1.219 #textOutline

如果 TTML 内容处理器支持 [TTML1] §D.1.88 定义的 #textOutline 特性,则它支持 #textOutline 特性。

注:

支持 #textOutline 特性在功能上等价于支持 以下特性:

如果内容配置文件要求或允许使用 #textOutline 特性 却禁止使用以下任何特性: #textOutline-blurred#textOutline-unblurred,则为错误。

E.1.220 #textOutline-blurred

如果 TTML 内容处理器支持 [TTML1] §D.1.89 定义的 #textOutline-blurred 特性,则它支持 #textOutline-blurred 特性。

E.1.221 #textOutline-unblurred

如果 TTML 内容处理器支持 [TTML1] §D.1.90 定义的 #textOutline-unblurred 特性,则它支持 #textOutline-unblurred 特性。

E.1.222 #textShadow

如果 TTML 转换处理器能识别并能够 转换 tts:textShadow 属性, 则它支持 #textShadow 特性。

如果 TTML 呈现处理器tts:textShadow 属性实现呈现语义支持, 则它支持 #textShadow 特性。

E.1.223 #tickRate

如果 TTML 内容处理器支持 [TTML1] §D.1.91 定义的 #tickRate 特性,则它支持 #tickRate 特性。

E.1.224 #timeBase-clock

如果 TTML 内容处理器支持 [TTML1] §D.1.92 定义的 #timeBase-clock 特性,则它支持 #timeBase-clock 特性。

E.1.225 #timeBase-media

如果 TTML 内容处理器支持 [TTML1] §D.1.93 定义的 #timeBase-media 特性,则它支持 #timeBase-media 特性。

E.1.226 #timeBase-smpte

如果 TTML 内容处理器支持 [TTML1] §D.1.94 定义的 #timeBase-smpte 特性,则它支持 #timeBase-smpte 特性。

E.1.227 #timeContainer

如果 TTML 内容处理器支持 [TTML1] §D.1.95 定义的 #timeContainer 特性,则它支持 #timeContainer 特性。

E.1.228 #time-clock

如果 TTML 内容处理器支持 [TTML1] §D.1.96 定义的 #time-clock 特性,则它支持 #time-clock 特性。

E.1.229 #time-clock-with-frames

如果 TTML 内容处理器支持 [TTML1] §D.1.97 定义的 #time-clock-with-frames 特性,则它支持 #time-clock-with-frames 特性。

E.1.230 #time-offset

如果 TTML 内容处理器支持 [TTML1] §D.1.98 定义的 #time-offset 特性,则它支持 #time-offset 特性。

E.1.231 #time-offset-with-frames

如果 TTML 内容处理器支持 [TTML1] §D.1.99 定义的 #time-offset-with-frames 特性,则它支持 #time-offset-with-frames 特性。

E.1.232 #time-offset-with-ticks

如果 TTML 内容处理器支持 [TTML1] §D.1.100 定义的 #time-offset-with-ticks 特性,则它支持 #time-offset-with-ticks 特性。

E.1.233 #time-wall-clock

如果 TTML 转换处理器能识别并能够 转换所有满足以下时间表达式语法子集的 <time-expression> 值, 则它支持 #time-wall-clock 特性:

<time-expression>
  : wallclock-time

如果 TTML 呈现处理器为 上文指定的相同语法实现呈现 语义支持, 则它支持 #time-wall-clock 特性。

E.1.234 #timing

如果 TTML 内容处理器支持 [TTML1] §D.1.101 定义的 #timing 特性,则它支持 #timing 特性。

E.1.235 #transformation

如果 TTML 内容处理器支持 [TTML1] §D.1.102 定义的 #transformation 特性,则它支持 #transformation 特性。

E.1.236 #transformation-version-2

如果 TTML 处理器 (1) 满足 3.2.1 通用处理器一致性 定义的通用处理器条件,并且 (2) 支持以下特性,则它支持 #transformation-version-2 特性:

#transformation-version-2 特性是 #transformation 特性的语法和语义扩展。

如果内容配置文件要求或允许使用 #transformation-version-2 特性, 却禁止使用以下任何特性: #transformation#profile-version-2,则为错误。

E.1.237 #unicodeBidi

如果 TTML 内容处理器支持 [TTML1] §D.1.103 定义的 #unicodeBidi 特性,则它支持 #unicodeBidi 特性。

注:

支持 #unicodeBidi 特性并不意味着支持 #unicodeBidi-isolate 特性。

E.1.238 #unicodeBidi-isolate

如果 TTML 转换处理器能识别并能够 转换 tts:unicodeBidi 属性的 isolate 值, 则它支持 #unicodeBidi-isolate 特性。

如果 TTML 呈现处理器tts:unicodeBidi 属性的 isolate 值实现呈现语义支持, 则它支持 #unicodeBidi-isolate 特性。

E.1.239 #unicodeBidi-version-2

如果 TTML 内容处理器支持以下特性,则它支持 #unicodeBidi-version-2 特性:

#unicodeBidi-version-2 特性是 #unicodeBidi 特性的语法和语义扩展。

E.1.240 #validation

如果 TTML 转换处理器 满足以下条件,则它支持 #validation 特性:

  1. 它是验证内容处理器

  2. 能识别并能够转换 6.2 配置文件属性词汇定义的以下属性词汇:

如果 TTML 呈现处理器验证内容 处理器,并为 上文枚举的相同词汇实现呈现语义支持, 则它支持 #validation 特性。

E.1.241 #visibility

如果 TTML 内容处理器支持 [TTML1] §D.1.104 定义的 #visibility 特性,则它支持 #visibility 特性。

注:

支持 #visibility 特性在功能上等价于支持 以下特性:

如果内容配置文件要求或允许使用 #visibility 特性 却禁止使用以下任何特性: #visibility-block#visibility-inline#visibility-region,则为错误。

E.1.242 #visibility-block

如果 TTML 内容处理器支持 [TTML1] §D.1.105 定义的 #visibility-block 特性,则它支持 #visibility-block 特性。

E.1.243 #visibility-image

如果 TTML 转换处理器支持 image 元素上应用的 tts:visibility 属性的 所有已定义值, 则它支持 #visibility-image 特性。

如果 TTML 呈现处理器为 上文枚举的相同词汇实现呈现语义支持, 则它支持 #visibility-image 特性。

注:

支持 #visibility-image 特性并不意味着支持 #image 特性;不过,如果不支持 后者,则支持 前者没有作用。

E.1.244 #visibility-inline

如果 TTML 内容处理器支持 [TTML1] §D.1.106 定义的 #visibility-inline 特性,则它支持 #visibility-inline 特性。

E.1.245 #visibility-region

如果 TTML 内容处理器支持 [TTML1] §D.1.107 定义的 #visibility-region 特性,则它支持 #visibility-region 特性。

E.1.246 #visibility-version-2

如果 TTML 内容处理器支持以下特性,则它支持 #visibility-version-2 特性:

#visibility-version-2 特性是 #visibility 特性的语法和语义扩展。

如果内容配置文件要求或允许使用 #visibility-version-2 特性, 却禁止使用以下任何特性: #visibility#visibility-image,则为错误。

E.1.247 #wrapOption

如果 TTML 内容处理器支持 [TTML1] §D.1.108 定义的 #wrapOption 特性,则它支持 #wrapOption 特性。

E.1.248 #writingMode

如果 TTML 内容处理器支持 [TTML1] §D.1.109 定义的 #writingMode 特性,则它支持 #writingMode 特性。

注:

支持 #writingMode 特性在功能上等价于支持 以下特性:

如果内容配置文件要求或允许使用 #writingMode 特性 却禁止使用以下任何特性: #writingMode-horizontal#writingMode-vertical,则为错误。

E.1.249 #writingMode-horizontal

如果 TTML 内容处理器支持 [TTML1] §D.1.111 定义的 #writingMode-horizontal 特性,则它支持 #writingMode-horizontal 特性。

注:

支持 #writingMode-horizontal 特性在功能上 等价于支持以下特性:

如果内容配置文件要求或允许使用 #writingMode-horizontal 特性, 却禁止使用以下任何特性: #writingMode-horizontal-lr#writingMode-horizontal-rl,则为错误。

E.1.250 #writingMode-horizontal-lr

如果 TTML 内容处理器支持 [TTML1] §D.1.112 定义的 #writingMode-horizontal-lr 特性,则它支持 #writingMode-horizontal-lr 特性。

E.1.251 #writingMode-horizontal-rl

如果 TTML 内容处理器支持 [TTML1] §D.1.113 定义的 #writingMode-horizontal-rl 特性,则它支持 #writingMode-horizontal-rl 特性。

E.1.252 #writingMode-vertical

如果 TTML 内容处理器支持 [TTML1] §D.1.110 定义的 #writingMode-vertical 特性,则它支持 #writingMode-vertical 特性。

E.1.253 #xlink

如果 TTML 转换处理器能识别并能够转换 8.2 内容属性 词汇定义的以下属性 词汇,以供接纳此词汇的受支持元素类型使用, 则它支持 #xlink 特性:

如果 TTML 呈现处理器为 上文枚举的相同词汇实现呈现语义支持, 则它支持 #xlink 特性。

E.1.254 #zIndex

如果 TTML 内容处理器支持 [TTML1] §D.1.114 定义的 #zIndex 特性,则它支持 #zIndex 特性。

E.2 特性支持

下表 表 E-1 – 特性支持 枚举每个已定义的特性指称(不带 TT Feature Namespace 表达),并且对于每个被指称的特性,指定 (1) 首次定义该特性指称的 TTML 版本,以及 (2) 对于符合 3.2.2 转换处理器 一致性3.2.3 呈现 处理器一致性要求的 TTML 内容处理器, 该被指称特性是否必须实现,即为强制(M),或可以实现, 即为可选(O)。

注:

在某些情况下,本规范的此版本(或更高版本)定义了一个新的特性指称, 该指称此前未定义,然而 如此指称的底层功能特性此前已由更早版本定义。 例如,#padding-region 指称是在此处引入的;但是,它引用的功能此前包含在 #padding 指称之下, 而该指称现在以 #padding-region 来定义。在此,TTML1 中引入的 #padding 的底层含义, 与 TTML2 中引入的 #padding-region 仍保持相同。

表 E-1 – 特性支持
特性指称 版本 转换 呈现
#animate 2 O O
#animate-fill 2 O O
#animate-minimal 2 O O
#animate-paced 2 O O
#animate-spline 2 O O
#animate-repeat 2 O O
#animation 1 O O
#animation-out-of-line 2 O O
#animation-version-2 2 O O
#audio 2 O O
#audio-description 2 O O
#audio-speech 2 O O
#background 2 O O
#background-image 2 O O
#backgroundClip 2 O O
#backgroundColor 1 O O
#backgroundColor-block 1 O O
#backgroundColor-inline 1 O O
#backgroundColor-region 1 O O
#backgroundExtent 2 O O
#backgroundImage 2 O O
#backgroundOrigin 2 O O
#backgroundPosition 2 O O
#backgroundRepeat 2 O O
#base 2 O O
#base-general 2 O O
#base-version-2 2 O O
#bidi 1 O O
#bidi-version-2 2 O O
#border 2 O O
#border-block 2 O O
#border-inline 2 O O
#border-radii 2 O O
#border-radii-1 2 O O
#border-radii-2 2 O O
#border-region 2 O O
#bpd 2 O O
#cellResolution 1 O O
#chunk 2 O O
#clockMode 1 O O
#clockMode-gps 1 O O
#clockMode-local 1 O O
#clockMode-utc 1 O O
#color 1 O O
#condition 2 O O
#condition-fn-media 2 O O
#condition-fn-parameter 2 O O
#condition-fn-supports 2 O O
#condition-primary 2 O O
#content 1 M M
#content-sizing 2 O O
#contentProfiles 2 M M
#contentProfiles-combined 2 O O
#core 1 M M
#data 2 O O
#direction 1 O O
#disparity 2 O O
#display 1 O O
#display-block 1 O O
#display-inline 1 O O
#display-inlineBlock 2 O O
#display-region 1 O O
#display-version-2 2 O O
#displayAlign 1 O O
#displayAlign-block 2 O O
#displayAlign-justify 2 O O
#displayAlign-region 2 O O
#displayAlign-relative 2 O O
#displayAlign-version-2 2 O O
#displayAspectRatio 2 O O
#dropMode 1 O O
#dropMode-dropNTSC 1 O O
#dropMode-dropPAL 1 O O
#dropMode-nonDrop 1 O O
#embedded-audio 2 O O
#embedded-content 2 O O
#embedded-data 2 O O
#embedded-font 2 O O
#embedded-image 2 O O
#extent 1 O O
#extent-auto 2 O O
#extent-auto-version-2 2 O O
#extent-contain 2 O O
#extent-cover 2 O O
#extent-full-version-2 2 O O
#extent-image 2 O O
#extent-length 2 O O
#extent-length-version-2 2 O O
#extent-measure 2 O O
#extent-region 1 O O
#extent-region-version-2 2 O O
#extent-root 1 O O
#extent-root-version-2 2 O O
#extent-version-2 2 O O
#font 2 O O
#fontFamily 1 O O
#fontFamily-generic 1 O O
#fontFamily-non-generic 1 O O
#fontKerning 2 O O
#fontSelectionStrategy 2 O O
#fontSelectionStrategy-character 2 O O
#fontShear 2 O O
#fontSize 1 O O
#fontSize-anamorphic 1 O O
#fontSize-isomorphic 1 O O
#fontStyle 1 O O
#fontStyle-italic 1 O O
#fontStyle-oblique 1 O O
#fontVariant 2 O O
#fontWeight 1 O O
#fontWeight-bold 1 O O
#frameRate 1 O O
#frameRateMultiplier 1 O O
#gain 2 O O
#image 2 O O
#image-png 2 O O
#initial 2 O O
#ipd 2 O O
#layout 1 O O
#length 1 O O
#length-cell 1 O O
#length-em 1 O O
#length-integer 1 O O
#length-negative 1 O O
#length-percentage 1 O O
#length-pixel 1 O O
#length-positive 1 O O
#length-real 1 O O
#length-root-container-relative 2 O O
#length-version-2 2 O O
#letterSpacing 2 O O
#lineBreak-uax14 1 O O
#lineHeight 1 O O
#lineShear 2 O O
#luminanceGain 2 O O
#markerMode 1 O O
#markerMode-continuous 1 O O
#markerMode-discontinuous 1 O O
#metadata 1 O O
#metadata-item 2 O O
#metadata-version-2 2 O O
#nested-div 1 O O
#nested-span 1 O O
#opacity 1 O O
#opacity-block 2 O O
#opacity-inline 2 O O
#opacity-region 2 O O
#opacity-version-2 2 O O
#origin 1 O O
#overflow 1 O O
#overflow-visible 1 O O
#padding 1 O O
#padding-1 1 O O
#padding-2 1 O O
#padding-3 1 O O
#padding-4 1 O O
#padding-block 2 O O
#padding-inline 2 O O
#padding-region 2 O O
#padding-version-2 2 O O
#pan 2 O O
#permitFeatureNarrowing 2 O O
#permitFeatureWidening 2 O O
#pitch 2 O O
#pixelAspectRatio 1 O O
#position 2 O O
#presentation 1 O M
#presentation-version-2 2 O M
#processorProfiles 2 M M
#processorProfiles-combined 2 O O
#profile 1 M M
#profile-full-version-2 2 O O
#profile-nesting 2 O O
#profile-version-2 2 M M
#region-implied-animation 2 O O
#region-inline 2 O O
#region-timing 2 O O
#resources 2 O O
#ruby 2 O O
#ruby-full 2 O O
#rubyAlign 2 O O
#rubyAlign-minimal 2 O O
#rubyAlign-withBase 2 O O
#rubyPosition 2 O O
#rubyReserve 2 O O
#set 2 O O
#set-fill 2 O O
#set-multiple-styles 2 O O
#set-repeat 2 O O
#shear 2 O O
#showBackground 1 O O
#source 2 O O
#speak 2 O O
#speech 2 O O
#structure 1 M M
#styling 1 O O
#styling-chained 1 O O
#styling-inheritance-content 1 O O
#styling-inheritance-region 1 O O
#styling-inline 1 O O
#styling-nested 1 O O
#styling-referential 1 O O
#subFrameRate 1 O O
#textAlign 1 O O
#textAlign-absolute 1 O O
#textAlign-justify 2 O O
#textAlign-relative 1 O O
#textAlign-version-2 2 O O
#textCombine 2 O O
#textDecoration 1 O O
#textDecoration-over 1 O O
#textDecoration-through 1 O O
#textDecoration-under 1 O O
#textEmphasis 2 O O
#textEmphasis-color 2 O O
#textEmphasis-minimal 2 O O
#textEmphasis-quoted-string 2 O O
#textOrientation 2 O O
#textOutline 1 O O
#textOutline-blurred 1 O O
#textOutline-unblurred 1 O O
#textShadow 2 O O
#tickRate 1 O O
#timeBase-clock 1 O O
#timeBase-media 1 O O
#timeBase-smpte 1 O O
#timeContainer 1 O O
#time-clock 1 O O
#time-clock-with-frames 1 O O
#time-offset 1 M M
#time-offset-with-frames 1 O O
#time-offset-with-ticks 1 O O
#time-wall-clock 2 O O
#timing 1 M M
#transformation 1 M O
#transformation-version-2 2 M O
#unicodeBidi 1 O O
#unicodeBidi-isolate 2 O O
#unicodeBidi-version-2 2 O O
#validation 2 O O
#visibility 1 O O
#visibility-block 1 O O
#visibility-image 2 O O
#visibility-inline 1 O O
#visibility-region 1 O O
#visibility-version-2 2 O O
#wrapOption 1 O O
#writingMode 1 O O
#writingMode-horizontal 1 O O
#writingMode-horizontal-lr 1 O O
#writingMode-horizontal-rl 1 O O
#writingMode-vertical 1 O O
#xlink 2 O O
#zIndex 1 O O

为方便起见,下表 表 E-2 – 强制特性 - 转换 枚举了符合 3.2.2 转换处理器 一致性要求的 TTML 内容处理器的所有 强制特性,并提供附加 注释以概述使用上下文或特性的性质。 定义相应 TTML 转换配置文件的配置文件定义文档G.3 TTML2 转换配置文件中指定。

表 E-2 – 强制特性 - 转换
特性指称 注释
#content body, div, p, span, br
#contentProfiles
#core xml:id, xml:lang, xml:space
#processorProfiles
#profile
#profile-version-2
#structure tt, head
#time-offset
#timing begin, dur, end
#transformation
#transformation-version-2

为方便起见,下表 表 E-3 – 强制特性 - 呈现 枚举了符合 3.2.3 呈现处理器一致性要求的 TTML 内容处理器的所有强制特性,并提供附加 注释以概述使用上下文或特性的性质。 定义相应 TTML 呈现配置文件的配置文件定义文档G.2 TTML2 呈现配置文件中指定。

表 E-3 – 强制特性 - 呈现
特性指称 注释
#content body, div, p, span, br
#contentProfiles
#core xml:id, xml:lang, xml:space
#processorProfiles
#profile
#profile-version-2
#presentation
#presentation-version-2
#structure tt, head
#time-offset
#timing begin, dur, end

F 扩展

本附录是规范性的。

本附录规定扩展指称的语法形式,这些指称用于表达作者关于 TTML 处理器中扩展机制支持情况的意图。

F.1 扩展指称

扩展指称表示为一个遵守以下形式的字符串:

extension-designation
  : extension-namespace designation

extension-namespace
  : TT Extension Namespace                  // http://www.w3.org/ns/ttml/extension/
  | Other Extension Namespace               // expressed as an absolute URI

designation
  : "#" token-char+

token-char
  : { XML NameChar }                        // [XML 1.1] Production [4a]

如果某个扩展指称的扩展命名空间是 TT Extension Namespace,则后续 designation token 的所有值都保留给未来 标准化。

如果某个扩展指称的扩展命名空间不是 TT Extension Namespace,即为 Other Extension Namespace, 则该扩展命名空间必须表示为一个绝对 URI, 能够作为基 URI,与采用片段 标识符形式的 designation token 结合使用。

G 标准配置文件

本附录是规范性的。

本附录规定或通过引用纳入以下标准 TTML 配置文件:

每个 TTML 配置文件都依据一个配置文件 定义文档来定义, 该文档表示为 XML 文档,其中根元素遵守 6.1.1 ttp:profile

G.1 TTML2 完整配置文件

TTML2 完整配置文件预期用于 表达转换和呈现处理的最大一致性。

注:

此配置文件是 DFXP 完整配置文件的超集。

<?xml version="1.0" encoding="utf-8"?>
<!-- this file defines the "ttml2-full" profile of ttml -->
<profile xmlns="http://www.w3.org/ns/ttml#parameter"
  designator="http://www.w3.org/ns/ttml/profile/ttml2-full">
  <features xml:base="http://www.w3.org/ns/ttml/feature/">
    <!-- required (mandatory) feature support -->
    <feature value="required" extends="#animate-minimal">#animate</feature>
    <feature value="required">#animate-fill</feature>
    <feature value="required">#animate-minimal</feature>
    <feature value="required">#animate-paced</feature>
    <feature value="required">#animate-spline</feature>
    <feature value="required">#animate-repeat</feature>
    <feature value="required">#animation</feature>
    <feature value="required">#animation-out-of-line</feature>
    <feature value="required" extends="#animation">#animation-version-2</feature>
    <feature value="required">#audio</feature>
    <feature value="required">#audio-description</feature>
    <feature value="required">#audio-speech</feature>
    <feature value="required">#background</feature>
    <feature value="required">#background-image</feature>
    <feature value="required">#backgroundClip</feature>
    <feature value="required">#backgroundColor-block</feature>
    <feature value="required">#backgroundColor-inline</feature>
    <feature value="required">#backgroundColor-region</feature>
    <feature value="required">#backgroundColor</feature>
    <feature value="required">#backgroundExtent</feature>
    <feature value="required">#backgroundImage</feature>
    <feature value="required">#backgroundOrigin</feature>
    <feature value="required">#backgroundPosition</feature>
    <feature value="required">#backgroundRepeat</feature>
    <feature value="required">#base</feature>
    <feature value="required">#base-general</feature>
    <feature value="required" extends="#base">#base-version-2</feature>
    <feature value="required">#bidi</feature>
    <feature value="required" extends="#bidi">#bidi-version-2</feature>
    <feature value="required">#border</feature>
    <feature value="required">#border-block</feature>
    <feature value="required">#border-inline</feature>
    <feature value="required">#border-radii</feature>
    <feature value="required">#border-radii-1</feature>
    <feature value="required">#border-radii-2</feature>
    <feature value="required">#border-region</feature>
    <feature value="required">#bpd</feature>
    <feature value="required">#cellResolution</feature>
    <feature value="required">#chunk</feature>
    <feature value="required">#clockMode</feature>
    <feature value="required">#clockMode-gps</feature>
    <feature value="required">#clockMode-local</feature>
    <feature value="required">#clockMode-utc</feature>
    <feature value="required">#color</feature>
    <feature value="required">#condition</feature>
    <feature value="required">#condition-fn-media</feature>
    <feature value="required">#condition-fn-parameter</feature>
    <feature value="required">#condition-fn-supports</feature>
    <feature value="required">#condition-primary</feature>
    <feature value="required">#content</feature>
    <feature value="required">#content-sizing</feature>
    <feature value="required">#contentProfiles</feature>
    <feature value="required" extends="#contentProfiles">#contentProfiles-combined</feature>
    <feature value="required">#core</feature>
    <feature value="required">#data</feature>
    <feature value="required">#direction</feature>
    <feature value="required">#disparity</feature>
    <feature value="required">#display</feature>
    <feature value="required">#display-block</feature>
    <feature value="required">#display-inline</feature>
    <feature value="required">#display-inlineBlock</feature>
    <feature value="required">#display-region</feature>
    <feature value="required" extends="#display">#display-version-2</feature>
    <feature value="required">#displayAlign</feature>
    <feature value="required">#displayAlign-block</feature>
    <feature value="required">#displayAlign-justify</feature>
    <feature value="required">#displayAlign-region</feature>
    <feature value="required">#displayAlign-relative</feature>
    <feature value="required" extends="#displayAlign">#displayAlign-version-2</feature>
    <feature value="required">#displayAspectRatio</feature>
    <feature value="required">#dropMode</feature>
    <feature value="required">#dropMode-dropNTSC</feature>
    <feature value="required">#dropMode-dropPAL</feature>
    <feature value="required">#dropMode-nonDrop</feature>
    <feature value="required">#embedded-audio</feature>
    <feature value="required">#embedded-content</feature>
    <feature value="required">#embedded-data</feature>
    <feature value="required">#embedded-font</feature>
    <feature value="required">#embedded-image</feature>
    <feature value="required">#extent</feature>
    <feature value="required">#extent-auto</feature>
    <feature value="required" extends="#extent-auto">#extent-auto-version-2</feature>
    <feature value="required">#extent-contain</feature>
    <feature value="required">#extent-cover</feature>
    <feature value="required" extends="#extent-version-2">#extent-full-version-2</feature>
    <feature value="required">#extent-image</feature>
    <feature value="required">#extent-length</feature>
    <feature value="required" extends="#extent-length">#extent-length-version-2</feature>
    <feature value="required">#extent-measure</feature>
    <feature value="required">#extent-region</feature>
    <feature value="required" extends="#extent-region">#extent-region-version-2</feature>
    <feature value="required">#extent-root</feature>
    <feature value="required" extends="#extent-root">#extent-root-version-2</feature>
    <feature value="required" extends="#extent">#extent-version-2</feature>
    <feature value="required">#font</feature>
    <feature value="required">#fontFamily</feature>
    <feature value="required">#fontFamily-generic</feature>
    <feature value="required">#fontFamily-non-generic</feature>
    <feature value="required">#fontKerning</feature>
    <feature value="required">#fontSelectionStrategy</feature>
    <feature value="required">#fontSelectionStrategy-character</feature>
    <feature value="required">#fontShear</feature>
    <feature value="required">#fontSize</feature>
    <feature value="required">#fontSize-anamorphic</feature>
    <feature value="required">#fontSize-isomorphic</feature>
    <feature value="required">#fontStyle</feature>
    <feature value="required">#fontStyle-italic</feature>
    <feature value="required">#fontStyle-oblique</feature>
    <feature value="required">#fontVariant</feature>
    <feature value="required">#fontWeight</feature>
    <feature value="required">#fontWeight-bold</feature>
    <feature value="required">#frameRate</feature>
    <feature value="required">#frameRateMultiplier</feature>
    <feature value="required">#gain</feature>
    <feature value="required">#image</feature>
    <feature value="required">#image-png</feature>
    <feature value="required">#initial</feature>
    <feature value="required">#ipd</feature>
    <feature value="required">#layout</feature>
    <feature value="required">#length</feature>
    <feature value="required">#length-cell</feature>
    <feature value="required">#length-em</feature>
    <feature value="required">#length-integer</feature>
    <feature value="required">#length-negative</feature>
    <feature value="required">#length-percentage</feature>
    <feature value="required">#length-pixel</feature>
    <feature value="required">#length-positive</feature>
    <feature value="required">#length-real</feature>
    <feature value="required">#length-root-container-relative</feature>
    <feature value="required" extends="#length">#length-version-2</feature>
    <feature value="required">#letterSpacing</feature>
    <feature value="required">#lineBreak-uax14</feature>
    <feature value="required">#lineHeight</feature>
    <feature value="required">#lineShear</feature>
    <feature value="required">#luminance</feature>
    <feature value="required">#markerMode</feature>
    <feature value="required">#markerMode-continuous</feature>
    <feature value="required">#markerMode-discontinuous</feature>
    <feature value="required">#metadata</feature>
    <feature value="required">#metadata-item</feature>
    <feature value="required" extends="#metadata">#metadata-version-2</feature>
    <feature value="required">#nested-div</feature>
    <feature value="required">#nested-span</feature>
    <feature value="required">#opacity</feature>
    <feature value="required">#opacity-block</feature>
    <feature value="required">#opacity-inline</feature>
    <feature value="required">#opacity-region</feature>
    <feature value="required" extends="#opacity">#opacity-version-2</feature>
    <feature value="required">#origin</feature>
    <feature value="required">#overflow</feature>
    <feature value="required">#overflow-visible</feature>
    <feature value="required">#padding</feature>
    <feature value="required">#padding-1</feature>
    <feature value="required">#padding-2</feature>
    <feature value="required">#padding-3</feature>
    <feature value="required">#padding-4</feature>
    <feature value="required">#padding-block</feature>
    <feature value="required">#padding-inline</feature>
    <feature value="required">#padding-region</feature>
    <feature value="required" extends="#padding">#padding-version-2</feature>
    <feature value="required">#pan</feature>
    <feature value="required">#permitFeatureNarrowing</feature>
    <feature value="required">#permitFeatureWidening</feature>
    <feature value="required">#pitch</feature>
    <feature value="required">#pixelAspectRatio</feature>
    <feature value="required">#position</feature>
    <feature value="required">#presentation</feature>
    <feature value="required" extends="#presentation">#presentation-version-2</feature>
    <feature value="required">#processorProfiles</feature>
    <feature value="required" extends="#processorProfiles">#processorProfiles-combined</feature>
    <feature value="required">#profile</feature>
    <feature value="required" extends="#profile-version-2">#profile-full-version-2</feature>
    <feature value="required">#profile-nesting</feature>
    <feature value="required" extends="#profile">#profile-version-2</feature>
    <feature value="required">#region-implied-animation</feature>
    <feature value="required">#region-inline</feature>
    <feature value="required">#region-timing</feature>
    <feature value="required">#resources</feature>
    <feature value="required">#ruby</feature>
    <feature value="required">#ruby-full</feature>
    <feature value="required">#rubyAlign</feature>
    <feature value="required">#rubyAlign-minimal</feature>
    <feature value="required">#rubyAlign-withBase</feature>
    <feature value="required">#rubyPosition</feature>
    <feature value="required">#rubyReserve</feature>
    <feature value="required" extends="#animation">#set</feature>
    <feature value="required">#set-fill</feature>
    <feature value="required">#set-multiple-styles</feature>
    <feature value="required">#set-repeat</feature>
    <feature value="required">#shear</feature>
    <feature value="required">#showBackground</feature>
    <feature value="required">#source</feature>
    <feature value="required">#speak</feature>
    <feature value="required">#speech</feature>
    <feature value="required">#structure</feature>
    <feature value="required">#styling</feature>
    <feature value="required">#styling-chained</feature>
    <feature value="required">#styling-inheritance-content</feature>
    <feature value="required">#styling-inheritance-region</feature>
    <feature value="required">#styling-inline</feature>
    <feature value="required">#styling-nested</feature>
    <feature value="required">#styling-referential</feature>
    <feature value="required">#subFrameRate</feature>
    <feature value="required">#textAlign</feature>
    <feature value="required">#textAlign-absolute</feature>
    <feature value="required">#textAlign-justify</feature>
    <feature value="required">#textAlign-relative</feature>
    <feature value="required" extends="#textAlign">#textAlign-version-2</feature>
    <feature value="required">#textCombine</feature>
    <feature value="required">#textDecoration</feature>
    <feature value="required">#textDecoration-over</feature>
    <feature value="required">#textDecoration-through</feature>
    <feature value="required">#textDecoration-under</feature>
    <feature value="required" extends="#textEmphasis-minimal">#textEmphasis</feature>
    <feature value="required">#textEmphasis-color</feature>
    <feature value="required">#textEmphasis-minimal</feature>
    <feature value="required">#textEmphasis-quoted-string</feature>
    <feature value="required">#textOrientation</feature>
    <feature value="required">#textOutline</feature>
    <feature value="required">#textOutline-blurred</feature>
    <feature value="required">#textOutline-unblurred</feature>
    <feature value="required">#textShadow</feature>
    <feature value="required">#tickRate</feature>
    <feature value="required">#time-clock-with-frames</feature>
    <feature value="required">#time-clock</feature>
    <feature value="required">#time-offset-with-frames</feature>
    <feature value="required">#time-offset-with-ticks</feature>
    <feature value="required">#time-offset</feature>
    <feature value="required">#time-wall-clock</feature>
    <feature value="required">#timeBase-clock</feature>
    <feature value="required">#timeBase-media</feature>
    <feature value="required">#timeBase-smpte</feature>
    <feature value="required">#timeContainer</feature>
    <feature value="required">#timing</feature>
    <feature value="required">#transformation</feature>
    <feature value="required" extends="#transformation">#transformation-version-2</feature>
    <feature value="required">#unicodeBidi</feature>
    <feature value="required">#unicodeBidi-isolate</feature>
    <feature value="required" extends="#unicodeBidi">#unicodeBidi-version-2</feature>
    <feature value="required">#validation</feature>
    <feature value="required">#visibility</feature>
    <feature value="required">#visibility-block</feature>
    <feature value="required">#visibility-image</feature>
    <feature value="required">#visibility-inline</feature>
    <feature value="required">#visibility-region</feature>
    <feature value="required" extends="#visibility">#visibility-version-2</feature>
    <feature value="required">#wrapOption</feature>
    <feature value="required">#writingMode</feature>
    <feature value="required">#writingMode-horizontal-lr</feature>
    <feature value="required">#writingMode-horizontal-rl</feature>
    <feature value="required">#writingMode-horizontal</feature>
    <feature value="required">#writingMode-vertical</feature>
    <feature value="required">#xlink</feature>
    <feature value="required">#zIndex</feature>
    <!-- optional (voluntary) feature support -->
  </features>
  <extensions xml:base="http://www.w3.org/ns/ttml/extension/">
    <!-- required (mandatory) extension support -->
    <!-- optional (voluntary) extension support -->
  </extensions>
</profile>

G.2 TTML2 呈现配置文件

TTML2 呈现配置文件预期用于 表达呈现处理的最低一致性。

注:

此配置文件是 DFXP 呈现 配置文件的超集。

<?xml version="1.0" encoding="utf-8"?>
<!-- this file defines the "ttml2-presentation" profile of ttml -->
<profile xmlns="http://www.w3.org/ns/ttml#parameter"
  designator="http://www.w3.org/ns/ttml/profile/ttml2-presentation">
  <features xml:base="http://www.w3.org/ns/ttml/feature/">
    <!-- required (mandatory) feature support -->
    <feature value="required">#content</feature>
    <feature value="required">#contentProfiles</feature>
    <feature value="required">#core</feature>
    <feature value="required">#presentation</feature>
    <feature value="required" extends="#presentation">#presentation-version-2</feature>
    <feature value="required">#processorProfiles</feature>
    <feature value="required">#profile</feature>
    <feature value="required" extends="#profile">#profile-version-2</feature>
    <feature value="required">#structure</feature>
    <feature value="required">#time-offset</feature>
    <feature value="required">#timing</feature>
    <!-- optional (voluntary) feature support -->
    <feature value="optional">#animate</feature>
    <feature value="optional">#animate-fill</feature>
    <feature value="optional">#animate-minimal</feature>
    <feature value="optional">#animate-paced</feature>
    <feature value="optional">#animate-spline</feature>
    <feature value="optional">#animate-repeat</feature>
    <feature value="optional">#animation</feature>
    <feature value="optional">#animation-out-of-line</feature>
    <feature value="optional" extends="#animation">#animation-version-2</feature>
    <feature value="optional">#audio</feature>
    <feature value="optional">#audio-description</feature>
    <feature value="optional">#audio-speech</feature>
    <feature value="optional">#background</feature>
    <feature value="optional">#background-image</feature>
    <feature value="optional">#backgroundClip</feature>
    <feature value="optional">#backgroundColor-block</feature>
    <feature value="optional">#backgroundColor-inline</feature>
    <feature value="optional">#backgroundColor-region</feature>
    <feature value="optional">#backgroundColor</feature>
    <feature value="optional">#backgroundExtent</feature>
    <feature value="optional">#backgroundImage</feature>
    <feature value="optional">#backgroundOrigin</feature>
    <feature value="optional">#backgroundPosition</feature>
    <feature value="optional">#backgroundRepeat</feature>
    <feature value="optional">#base</feature>
    <feature value="optional">#base-general</feature>
    <feature value="optional" extends="#base">#base-version-2</feature>
    <feature value="optional">#bidi</feature>
    <feature value="optional" extends="#bidi">#bidi-version-2</feature>
    <feature value="optional">#border</feature>
    <feature value="optional">#border-block</feature>
    <feature value="optional">#border-inline</feature>
    <feature value="optional">#border-radii</feature>
    <feature value="optional">#border-radii-1</feature>
    <feature value="optional">#border-radii-2</feature>
    <feature value="optional">#border-region</feature>
    <feature value="optional">#bpd</feature>
    <feature value="optional">#cellResolution</feature>
    <feature value="optional">#chunk</feature>
    <feature value="optional">#clockMode</feature>
    <feature value="optional">#clockMode-gps</feature>
    <feature value="optional">#clockMode-local</feature>
    <feature value="optional">#clockMode-utc</feature>
    <feature value="optional">#color</feature>
    <feature value="optional">#condition</feature>
    <feature value="optional">#condition-fn-media</feature>
    <feature value="optional">#condition-fn-parameter</feature>
    <feature value="optional">#condition-fn-supports</feature>
    <feature value="optional">#condition-primary</feature>
    <feature value="optional">#content-sizing</feature>
    <feature value="optional" extends="#contentProfiles">#contentProfiles-combined</feature>
    <feature value="optional">#data</feature>
    <feature value="optional">#direction</feature>
    <feature value="optional">#disparity</feature>
    <feature value="optional">#display</feature>
    <feature value="optional">#display-block</feature>
    <feature value="optional">#display-inline</feature>
    <feature value="optional">#display-inlineBlock</feature>
    <feature value="optional">#display-region</feature>
    <feature value="optional" extends="#display">#display-version-2</feature>
    <feature value="optional">#displayAlign</feature>
    <feature value="optional">#displayAlign-block</feature>
    <feature value="optional">#displayAlign-justify</feature>
    <feature value="optional">#displayAlign-region</feature>
    <feature value="optional">#displayAlign-relative</feature>
    <feature value="optional" extends="#displayAlign">#displayAlign-version-2</feature>
    <feature value="optional">#displayAspectRatio</feature>
    <feature value="optional">#dropMode</feature>
    <feature value="optional">#dropMode-dropNTSC</feature>
    <feature value="optional">#dropMode-dropPAL</feature>
    <feature value="optional">#dropMode-nonDrop</feature>
    <feature value="optional">#embedded-audio</feature>
    <feature value="optional">#embedded-content</feature>
    <feature value="optional">#embedded-data</feature>
    <feature value="optional">#embedded-font</feature>
    <feature value="optional">#embedded-image</feature>
    <feature value="optional">#extent</feature>
    <feature value="optional">#extent-auto</feature>
    <feature value="optional" extends="#extent-auto">#extent-auto-version-2</feature>
    <feature value="optional">#extent-contain</feature>
    <feature value="optional">#extent-cover</feature>
    <feature value="optional" extends="#extent-version-2">#extent-full-version-2</feature>
    <feature value="optional">#extent-image</feature>
    <feature value="optional">#extent-length</feature>
    <feature value="optional" extends="#extent-length">#extent-length-version-2</feature>
    <feature value="optional">#extent-measure</feature>
    <feature value="optional">#extent-region</feature>
    <feature value="optional" extends="#extent-region">#extent-region-version-2</feature>
    <feature value="optional">#extent-root</feature>
    <feature value="optional" extends="#extent-root">#extent-root-version-2</feature>
    <feature value="optional" extends="#extent">#extent-version-2</feature>
    <feature value="optional">#font</feature>
    <feature value="optional">#fontFamily</feature>
    <feature value="optional">#fontFamily-generic</feature>
    <feature value="optional">#fontFamily-non-generic</feature>
    <feature value="optional">#fontKerning</feature>
    <feature value="optional">#fontSelectionStrategy</feature>
    <feature value="optional">#fontSelectionStrategy-character</feature>
    <feature value="optional">#fontShear</feature>
    <feature value="optional">#fontSize</feature>
    <feature value="optional">#fontSize-anamorphic</feature>
    <feature value="optional">#fontSize-isomorphic</feature>
    <feature value="optional">#fontStyle</feature>
    <feature value="optional">#fontStyle-italic</feature>
    <feature value="optional">#fontStyle-oblique</feature>
    <feature value="optional">#fontVariant</feature>
    <feature value="optional">#fontWeight</feature>
    <feature value="optional">#fontWeight-bold</feature>
    <feature value="optional">#frameRate</feature>
    <feature value="optional">#frameRateMultiplier</feature>
    <feature value="optional">#gain</feature>
    <feature value="optional">#image</feature>
    <feature value="optional">#image-png</feature>
    <feature value="optional">#initial</feature>
    <feature value="optional">#ipd</feature>
    <feature value="optional">#layout</feature>
    <feature value="optional">#length</feature>
    <feature value="optional">#length-cell</feature>
    <feature value="optional">#length-em</feature>
    <feature value="optional">#length-integer</feature>
    <feature value="optional">#length-negative</feature>
    <feature value="optional">#length-percentage</feature>
    <feature value="optional">#length-pixel</feature>
    <feature value="optional">#length-positive</feature>
    <feature value="optional">#length-real</feature>
    <feature value="optional">#length-root-container-relative</feature>
    <feature value="optional" extends="#length">#length-version-2</feature>
    <feature value="optional">#letterSpacing</feature>
    <feature value="optional">#lineBreak-uax14</feature>
    <feature value="optional">#lineHeight</feature>
    <feature value="optional">#lineShear</feature>
    <feature value="optional">#luminance</feature>
    <feature value="optional">#markerMode</feature>
    <feature value="optional">#markerMode-continuous</feature>
    <feature value="optional">#markerMode-discontinuous</feature>
    <feature value="optional">#metadata</feature>
    <feature value="optional">#metadata-item</feature>
    <feature value="optional" extends="#metadata">#metadata-version-2</feature>
    <feature value="optional">#nested-div</feature>
    <feature value="optional">#nested-span</feature>
    <feature value="optional">#opacity</feature>
    <feature value="optional">#opacity-block</feature>
    <feature value="optional">#opacity-inline</feature>
    <feature value="optional">#opacity-region</feature>
    <feature value="optional" extends="#opacity">#opacity-version-2</feature>
    <feature value="optional">#origin</feature>
    <feature value="optional">#overflow</feature>
    <feature value="optional">#overflow-visible</feature>
    <feature value="optional">#padding</feature>
    <feature value="optional">#padding-1</feature>
    <feature value="optional">#padding-2</feature>
    <feature value="optional">#padding-3</feature>
    <feature value="optional">#padding-4</feature>
    <feature value="optional">#padding-block</feature>
    <feature value="optional">#padding-inline</feature>
    <feature value="optional">#padding-region</feature>
    <feature value="optional" extends="#padding">#padding-version-2</feature>
    <feature value="optional">#pan</feature>
    <feature value="optional">#permitFeatureNarrowing</feature>
    <feature value="optional">#permitFeatureWidening</feature>
    <feature value="optional">#pitch</feature>
    <feature value="optional">#pixelAspectRatio</feature>
    <feature value="optional">#position</feature>
    <feature value="optional" extends="#processorProfiles">#processorProfiles-combined</feature>
    <feature value="optional" extends="#profile-version-2">#profile-full-version-2</feature>
    <feature value="optional">#profile-nesting</feature>
    <feature value="optional">#region-implied-animation</feature>
    <feature value="optional">#region-inline</feature>
    <feature value="optional">#region-timing</feature>
    <feature value="optional">#resources</feature>
    <feature value="optional">#ruby</feature>
    <feature value="optional">#ruby-full</feature>
    <feature value="optional">#rubyAlign</feature>
    <feature value="optional">#rubyAlign-minimal</feature>
    <feature value="optional">#rubyAlign-withBase</feature>
    <feature value="optional">#rubyPosition</feature>
    <feature value="optional">#rubyReserve</feature>
    <feature value="optional" extends="#animation">#set</feature>
    <feature value="optional">#set-fill</feature>
    <feature value="optional">#set-multiple-styles</feature>
    <feature value="optional">#set-repeat</feature>
    <feature value="optional">#shear</feature>
    <feature value="optional">#showBackground</feature>
    <feature value="optional">#source</feature>
    <feature value="optional">#speak</feature>
    <feature value="optional">#speech</feature>
    <feature value="optional">#styling</feature>
    <feature value="optional">#styling-chained</feature>
    <feature value="optional">#styling-inheritance-content</feature>
    <feature value="optional">#styling-inheritance-region</feature>
    <feature value="optional">#styling-inline</feature>
    <feature value="optional">#styling-nested</feature>
    <feature value="optional">#styling-referential</feature>
    <feature value="optional">#subFrameRate</feature>
    <feature value="optional">#textAlign</feature>
    <feature value="optional">#textAlign-absolute</feature>
    <feature value="optional">#textAlign-justify</feature>
    <feature value="optional">#textAlign-relative</feature>
    <feature value="optional" extends="#textAlign">#textAlign-version-2</feature>
    <feature value="optional">#textCombine</feature>
    <feature value="optional">#textDecoration</feature>
    <feature value="optional">#textDecoration-over</feature>
    <feature value="optional">#textDecoration-through</feature>
    <feature value="optional">#textDecoration-under</feature>
    <feature value="optional" extends="#textEmphasis-minimal">#textEmphasis</feature>
    <feature value="optional">#textEmphasis-color</feature>
    <feature value="optional">#textEmphasis-minimal</feature>
    <feature value="optional">#textEmphasis-quoted-string</feature>
    <feature value="optional">#textOrientation</feature>
    <feature value="optional">#textOutline</feature>
    <feature value="optional">#textOutline-blurred</feature>
    <feature value="optional">#textOutline-unblurred</feature>
    <feature value="optional">#textShadow</feature>
    <feature value="optional">#tickRate</feature>
    <feature value="optional">#time-clock-with-frames</feature>
    <feature value="optional">#time-clock</feature>
    <feature value="optional">#time-offset-with-frames</feature>
    <feature value="optional">#time-offset-with-ticks</feature>
    <feature value="optional">#time-wall-clock</feature>
    <feature value="optional">#timeBase-clock</feature>
    <feature value="optional">#timeBase-media</feature>
    <feature value="optional">#timeBase-smpte</feature>
    <feature value="optional">#timeContainer</feature>
    <feature value="optional">#transformation</feature>
    <feature value="optional" extends="#transformation">#transformation-version-2</feature>
    <feature value="optional">#unicodeBidi</feature>
    <feature value="optional">#unicodeBidi-isolate</feature>
    <feature value="optional" extends="#unicodeBidi">#unicodeBidi-version-2</feature>
    <feature value="optional">#validation</feature>
    <feature value="optional">#visibility</feature>
    <feature value="optional">#visibility-block</feature>
    <feature value="optional">#visibility-image</feature>
    <feature value="optional">#visibility-inline</feature>
    <feature value="optional">#visibility-region</feature>
    <feature value="optional" extends="#visibility">#visibility-version-2</feature>
    <feature value="optional">#wrapOption</feature>
    <feature value="optional">#writingMode</feature>
    <feature value="optional">#writingMode-horizontal-lr</feature>
    <feature value="optional">#writingMode-horizontal-rl</feature>
    <feature value="optional">#writingMode-horizontal</feature>
    <feature value="optional">#writingMode-vertical</feature>
    <feature value="optional">#xlink</feature>
    <feature value="optional">#zIndex</feature>
  </features>
  <extensions xml:base="http://www.w3.org/ns/ttml/extension/">
    <!-- required (mandatory) extension support -->
    <!-- optional (voluntary) extension support -->
  </extensions>
</profile>

G.3 TTML2 转换配置文件

TTML2 转换配置文件预期用于 表达转换处理的最低一致性。

注:

此配置文件是 DFXP 转换 配置文件的超集。

<?xml version="1.0" encoding="utf-8"?>
<!-- this file defines the "ttml2-transformation" profile of ttml -->
<profile xmlns="http://www.w3.org/ns/ttml#parameter"
  designator="http://www.w3.org/ns/ttml/profile/ttml2-transformation">
  <features xml:base="http://www.w3.org/ns/ttml/feature/">
    <!-- required (mandatory) feature support -->
    <feature value="required">#content</feature>
    <feature value="required">#contentProfiles</feature>
    <feature value="required">#core</feature>
    <feature value="required">#processorProfiles</feature>
    <feature value="required">#profile</feature>
    <feature value="required" extends="#profile">#profile-version-2</feature>
    <feature value="required">#structure</feature>
    <feature value="required">#time-offset</feature>
    <feature value="required">#timing</feature>
    <feature value="required">#transformation</feature>
    <feature value="required" extends="#transformation">#transformation-version-2</feature>
    <!-- optional (voluntary) feature support -->
    <feature value="optional">#animate</feature>
    <feature value="optional">#animate-fill</feature>
    <feature value="optional">#animate-minimal</feature>
    <feature value="optional">#animate-paced</feature>
    <feature value="optional">#animate-spline</feature>
    <feature value="optional">#animate-repeat</feature>
    <feature value="optional">#animation</feature>
    <feature value="optional">#animation-out-of-line</feature>
    <feature value="optional" extends="#animation">#animation-version-2</feature>
    <feature value="optional">#audio</feature>
    <feature value="optional">#audio-description</feature>
    <feature value="optional">#audio-speech</feature>
    <feature value="optional">#background</feature>
    <feature value="optional">#background-image</feature>
    <feature value="optional">#backgroundClip</feature>
    <feature value="optional">#backgroundColor-block</feature>
    <feature value="optional">#backgroundColor-inline</feature>
    <feature value="optional">#backgroundColor-region</feature>
    <feature value="optional">#backgroundColor</feature>
    <feature value="optional">#backgroundExtent</feature>
    <feature value="optional">#backgroundImage</feature>
    <feature value="optional">#backgroundOrigin</feature>
    <feature value="optional">#backgroundPosition</feature>
    <feature value="optional">#backgroundRepeat</feature>
    <feature value="optional">#base</feature>
    <feature value="optional">#base-general</feature>
    <feature value="optional" extends="#base">#base-version-2</feature>
    <feature value="optional">#bidi</feature>
    <feature value="optional" extends="#bidi">#bidi-version-2</feature>
    <feature value="optional">#border</feature>
    <feature value="optional">#border-block</feature>
    <feature value="optional">#border-inline</feature>
    <feature value="optional">#border-radii</feature>
    <feature value="optional">#border-radii-1</feature>
    <feature value="optional">#border-radii-2</feature>
    <feature value="optional">#border-region</feature>
    <feature value="optional">#bpd</feature>
    <feature value="optional">#cellResolution</feature>
    <feature value="optional">#chunk</feature>
    <feature value="optional">#clockMode</feature>
    <feature value="optional">#clockMode-gps</feature>
    <feature value="optional">#clockMode-local</feature>
    <feature value="optional">#clockMode-utc</feature>
    <feature value="optional">#color</feature>
    <feature value="optional">#condition</feature>
    <feature value="optional">#condition-fn-media</feature>
    <feature value="optional">#condition-fn-parameter</feature>
    <feature value="optional">#condition-fn-supports</feature>
    <feature value="optional">#condition-primary</feature>
    <feature value="optional">#content-sizing</feature>
    <feature value="optional" extends="#contentProfiles">#contentProfiles-combined</feature>
    <feature value="optional">#data</feature>
    <feature value="optional">#direction</feature>
    <feature value="optional">#disparity</feature>
    <feature value="optional">#display</feature>
    <feature value="optional">#display-block</feature>
    <feature value="optional">#display-inline</feature>
    <feature value="optional">#display-inlineBlock</feature>
    <feature value="optional">#display-region</feature>
    <feature value="optional" extends="#display">#display-version-2</feature>
    <feature value="optional">#displayAlign</feature>
    <feature value="optional">#displayAlign-block</feature>
    <feature value="optional">#displayAlign-justify</feature>
    <feature value="optional">#displayAlign-region</feature>
    <feature value="optional">#displayAlign-relative</feature>
    <feature value="optional" extends="#displayAlign">#displayAlign-version-2</feature>
    <feature value="optional">#displayAspectRatio</feature>
    <feature value="optional">#dropMode</feature>
    <feature value="optional">#dropMode-dropNTSC</feature>
    <feature value="optional">#dropMode-dropPAL</feature>
    <feature value="optional">#dropMode-nonDrop</feature>
    <feature value="optional">#embedded-audio</feature>
    <feature value="optional">#embedded-content</feature>
    <feature value="optional">#embedded-data</feature>
    <feature value="optional">#embedded-font</feature>
    <feature value="optional">#embedded-image</feature>
    <feature value="optional">#extent</feature>
    <feature value="optional">#extent-auto</feature>
    <feature value="optional" extends="#extent-auto">#extent-auto-version-2</feature>
    <feature value="optional">#extent-contain</feature>
    <feature value="optional">#extent-cover</feature>
    <feature value="optional" extends="#extent-version-2">#extent-full-version-2</feature>
    <feature value="optional">#extent-image</feature>
    <feature value="optional">#extent-length</feature>
    <feature value="optional" extends="#extent-length">#extent-length-version-2</feature>
    <feature value="optional">#extent-measure</feature>
    <feature value="optional">#extent-region</feature>
    <feature value="optional" extends="#extent-region">#extent-region-version-2</feature>
    <feature value="optional">#extent-root</feature>
    <feature value="optional" extends="#extent-root">#extent-root-version-2</feature>
    <feature value="optional" extends="#extent">#extent-version-2</feature>
    <feature value="optional">#font</feature>
    <feature value="optional">#fontFamily</feature>
    <feature value="optional">#fontFamily-generic</feature>
    <feature value="optional">#fontFamily-non-generic</feature>
    <feature value="optional">#fontKerning</feature>
    <feature value="optional">#fontSelectionStrategy</feature>
    <feature value="optional">#fontSelectionStrategy-character</feature>
    <feature value="optional">#fontShear</feature>
    <feature value="optional">#fontSize</feature>
    <feature value="optional">#fontSize-anamorphic</feature>
    <feature value="optional">#fontSize-isomorphic</feature>
    <feature value="optional">#fontStyle</feature>
    <feature value="optional">#fontStyle-italic</feature>
    <feature value="optional">#fontStyle-oblique</feature>
    <feature value="optional">#fontVariant</feature>
    <feature value="optional">#fontWeight</feature>
    <feature value="optional">#fontWeight-bold</feature>
    <feature value="optional">#frameRate</feature>
    <feature value="optional">#frameRateMultiplier</feature>
    <feature value="optional">#gain</feature>
    <feature value="optional">#image</feature>
    <feature value="optional">#image-png</feature>
    <feature value="optional">#initial</feature>
    <feature value="optional">#ipd</feature>
    <feature value="optional">#layout</feature>
    <feature value="optional">#length</feature>
    <feature value="optional">#length-cell</feature>
    <feature value="optional">#length-em</feature>
    <feature value="optional">#length-integer</feature>
    <feature value="optional">#length-negative</feature>
    <feature value="optional">#length-percentage</feature>
    <feature value="optional">#length-pixel</feature>
    <feature value="optional">#length-positive</feature>
    <feature value="optional">#length-real</feature>
    <feature value="optional">#length-root-container-relative</feature>
    <feature value="optional" extends="#length">#length-version-2</feature>
    <feature value="optional">#letterSpacing</feature>
    <feature value="optional">#lineBreak-uax14</feature>
    <feature value="optional">#lineHeight</feature>
    <feature value="optional">#lineShear</feature>
    <feature value="optional">#luminance</feature>
    <feature value="optional">#markerMode</feature>
    <feature value="optional">#markerMode-continuous</feature>
    <feature value="optional">#markerMode-discontinuous</feature>
    <feature value="optional">#metadata</feature>
    <feature value="optional">#metadata-item</feature>
    <feature value="optional" extends="#metadata">#metadata-version-2</feature>
    <feature value="optional">#nested-div</feature>
    <feature value="optional">#nested-span</feature>
    <feature value="optional">#opacity</feature>
    <feature value="optional">#opacity-block</feature>
    <feature value="optional">#opacity-inline</feature>
    <feature value="optional">#opacity-region</feature>
    <feature value="optional" extends="#opacity">#opacity-version-2</feature>
    <feature value="optional">#origin</feature>
    <feature value="optional">#overflow</feature>
    <feature value="optional">#overflow-visible</feature>
    <feature value="optional">#padding</feature>
    <feature value="optional">#padding-1</feature>
    <feature value="optional">#padding-2</feature>
    <feature value="optional">#padding-3</feature>
    <feature value="optional">#padding-4</feature>
    <feature value="optional">#padding-block</feature>
    <feature value="optional">#padding-inline</feature>
    <feature value="optional">#padding-region</feature>
    <feature value="optional" extends="#padding">#padding-version-2</feature>
    <feature value="optional">#pan</feature>
    <feature value="optional">#permitFeatureNarrowing</feature>
    <feature value="optional">#permitFeatureWidening</feature>
    <feature value="optional">#pitch</feature>
    <feature value="optional">#pixelAspectRatio</feature>
    <feature value="optional">#position</feature>
    <feature value="optional">#presentation</feature>
    <feature value="optional" extends="#presentation">#presentation-version-2</feature>
    <feature value="optional" extends="#processorProfiles">#processorProfiles-combined</feature>
    <feature value="optional" extends="#profile-version-2">#profile-full-version-2</feature>
    <feature value="optional">#profile-nesting</feature>
    <feature value="optional">#region-implied-animation</feature>
    <feature value="optional">#region-inline</feature>
    <feature value="optional">#region-timing</feature>
    <feature value="optional">#resources</feature>
    <feature value="optional">#ruby</feature>
    <feature value="optional">#ruby-full</feature>
    <feature value="optional">#rubyAlign</feature>
    <feature value="optional">#rubyAlign-minimal</feature>
    <feature value="optional">#rubyAlign-withBase</feature>
    <feature value="optional">#rubyPosition</feature>
    <feature value="optional">#rubyReserve</feature>
    <feature value="optional" extends="#animation">#set</feature>
    <feature value="optional">#set-fill</feature>
    <feature value="optional">#set-multiple-styles</feature>
    <feature value="optional">#set-repeat</feature>
    <feature value="optional">#shear</feature>
    <feature value="optional">#showBackground</feature>
    <feature value="optional">#source</feature>
    <feature value="optional">#speak</feature>
    <feature value="optional">#speech</feature>
    <feature value="optional">#styling</feature>
    <feature value="optional">#styling-chained</feature>
    <feature value="optional">#styling-inheritance-content</feature>
    <feature value="optional">#styling-inheritance-region</feature>
    <feature value="optional">#styling-inline</feature>
    <feature value="optional">#styling-nested</feature>
    <feature value="optional">#styling-referential</feature>
    <feature value="optional">#subFrameRate</feature>
    <feature value="optional">#textAlign</feature>
    <feature value="optional">#textAlign-absolute</feature>
    <feature value="optional">#textAlign-justify</feature>
    <feature value="optional">#textAlign-relative</feature>
    <feature value="optional" extends="#textAlign">#textAlign-version-2</feature>
    <feature value="optional">#textCombine</feature>
    <feature value="optional">#textDecoration</feature>
    <feature value="optional">#textDecoration-over</feature>
    <feature value="optional">#textDecoration-through</feature>
    <feature value="optional">#textDecoration-under</feature>
    <feature value="optional" extends="#textEmphasis-minimal">#textEmphasis</feature>
    <feature value="optional">#textEmphasis-color</feature>
    <feature value="optional">#textEmphasis-minimal</feature>
    <feature value="optional">#textEmphasis-quoted-string</feature>
    <feature value="optional">#textOrientation</feature>
    <feature value="optional">#textOutline</feature>
    <feature value="optional">#textOutline-blurred</feature>
    <feature value="optional">#textOutline-unblurred</feature>
    <feature value="optional">#textShadow</feature>
    <feature value="optional">#tickRate</feature>
    <feature value="optional">#time-clock-with-frames</feature>
    <feature value="optional">#time-clock</feature>
    <feature value="optional">#time-offset-with-frames</feature>
    <feature value="optional">#time-offset-with-ticks</feature>
    <feature value="optional">#time-wall-clock</feature>
    <feature value="optional">#timeBase-clock</feature>
    <feature value="optional">#timeBase-media</feature>
    <feature value="optional">#timeBase-smpte</feature>
    <feature value="optional">#timeContainer</feature>
    <feature value="optional">#unicodeBidi</feature>
    <feature value="optional">#unicodeBidi-isolate</feature>
    <feature value="optional" extends="#unicodeBidi">#unicodeBidi-version-2</feature>
    <feature value="optional">#validation</feature>
    <feature value="optional">#visibility</feature>
    <feature value="optional">#visibility-block</feature>
    <feature value="optional">#visibility-image</feature>
    <feature value="optional">#visibility-inline</feature>
    <feature value="optional">#visibility-region</feature>
    <feature value="optional" extends="#visibility">#visibility-version-2</feature>
    <feature value="optional">#wrapOption</feature>
    <feature value="optional">#writingMode</feature>
    <feature value="optional">#writingMode-horizontal-lr</feature>
    <feature value="optional">#writingMode-horizontal-rl</feature>
    <feature value="optional">#writingMode-horizontal</feature>
    <feature value="optional">#writingMode-vertical</feature>
    <feature value="optional">#xlink</feature>
    <feature value="optional">#zIndex</feature>
  </features>
  <extensions xml:base="http://www.w3.org/ns/ttml/extension/">
    <!-- required (mandatory) extension support -->
    <!-- optional (voluntary) extension support -->
  </extensions>
</profile>

G.4 DFXP 完整配置文件

DFXP 完整配置文件由 [TTML1] 附录 F.3,DFXP 完整配置文件规定。

G.5 DFXP 呈现配置文件

DFXP 呈现配置文件由 [TTML1] 附录 F.2,DFXP 呈现 配置文件规定。

G.6 DFXP 转换配置文件

DFXP 转换配置文件由 [TTML1] 附录 F.1,DFXP 转换 配置文件规定。

H 根容器区域语义

本附录是规范性的。

本附录规定用于确定根容器区域及其使用的基本特征的语义,包括:

H.1 宽高比

有三种宽高比适用于根容器区域

显示宽高比(DAR)

根容器的显示宽高比对应于根容器 以预期在假想显示设备上呈现的显示像素计的宽高比。 此显示宽高比通过 tt 元素上的 ttp:displayAspectRatio 属性 明确指定,或使用如下所述的其他信息推断。

注:

根容器像素的实际物理呈现,在所定义的 TTML 呈现处理之后,可能会受到 宽高比、采样分辨率和颜色空间方面的许多变换。此类后 TTML 处理完全不在本规范范围内。

存储宽高比(SAR)

根容器的存储宽高比对应于根容器 在文档坐标空间中 以逻辑像素计的宽高比, 其中一个双射(单射且满射)映射将每个逻辑像素关联到 唯一的显示像素。 此存储宽高比通过 tt 元素上的 tts:extent 属性 明确指定,或使用如下所述的其他信息推断。

当在 tt 元素上指定 tts:extent 属性时,则

  1. 如果 tts:extent 属性的值 由两个以像素为单位的 <length> 表达式组成,则认为 存储宽高比已指定,并且具有等于 extent 的 宽度除以其高度的数值;

  2. 否则(计算值为 contain), 认为存储宽高比未指定,并使用下文所述的其他信息推断。

注:

就其本身而言,逻辑像素没有固有 宽高比;但是,当映射到 显示像素时,它采用如下所指定的 根容器像素宽高比所定义的固定值。

像素宽高比(PAR)

根容器的像素宽高比定义根容器每个显示像素的宽高比, 由此文档坐标空间中的每个 逻辑像素 都采用关联显示像素的固定宽高比, 使得 DAR = SAR × PAR。 此像素宽高比通过 tt 元素上的 ttp:pixelAspectRato 属性 明确指定,或使用如下所述的其他信息推断。

以下小节规定如何根据文档中指定了哪些(宽高比)来解析这些宽高比。

H.1.1 无宽高比

如果三种宽高比均未指定,则按以下有序步骤确定这三种宽高比:

  1. 如果存在相关媒体对象且具有已定义的 DAR, 则 DAR 的解析值为该相关媒体对象的显示宽高比; 否则,DAR 的值由 文档处理上下文(任意)确定;

  2. SARPAR 的值随后按下文 H.1.2 一个宽高比解析。

H.1.2 一个宽高比

如果三种宽高比中仅指定了一种,则另外两种宽高比的解析值按如下方式确定:

  1. 如果 DAR 已指定,或已由上文 H.1.1 无宽高比解析, 则其解析值为其指定值或解析值,并且 SARPAR 的值按如下方式确定:

    1. SAR 的解析值为 DAR 的解析值;

    2. PAR 的解析值为 1(一)。

  2. 如果 SAR 已指定,则其解析值为其指定值,并且 DARPAR 的值 按如下方式确定:

    1. 如果存在相关媒体对象且 具有已定义的 DAR, 则 DAR 的解析值为该 相关媒体对象的显示宽高比,并且 PAR 的值 随后按下文 H.1.3 两个宽高比解析;

    2. 否则,DAR 的解析值 由文档 处理上下文确定,并且 PAR 的值 随后按下文 H.1.3 两个宽高比解析;

  3. 如果 PAR 已指定, 则其解析值为其指定值,并且 DARSAR 的值按如下方式确定:

    1. 如果存在相关媒体对象且 具有已定义的 DAR, 则 DAR 的解析值为该 相关媒体对象的显示宽高比,并且 SAR 的值 随后按下文 H.1.3 两个宽高比解析;

    2. 否则,SAR 的解析值 由文档 处理上下文确定,并且 DAR 的值 随后按下文 H.1.3 两个宽高比解析。

H.1.3 两个宽高比

如果三种宽高比中的两种已指定或先前已解析, 则使用等式 DAR = SAR × PAR 确定第三种宽高比的解析值。

H.1.4 三个宽高比

如果全部三种宽高比均已指定,且其值满足等式 DAR = SAR × PAR, 则认为它们是已解析的宽高比。但是,如果该等式不满足, 则在执行 验证处理时,应报告错误 (受验证处理器配置制约),并且在执行 呈现处理时,将忽略指定的 PAR 值,且 PAR 的解析值由上文 H.1.3 两个宽高比确定。

H.2 分辨率

根容器区域被细分为一个由逻辑 像素组成的网格,具有固定数量的行像素 和固定数量的列像素,其中列像素的数量表示根容器区域在 水平轴上的分辨率,而行像素的数量表示 根容器区域在 垂直轴上的分辨率,其中前者分别定义为 根容器区域的宽度,后者定义为 根容器区域的高度,并且沿两个 轴的(这两个)分辨率集合称为根容器区域的综合 分辨率空间范围

注:

如上文在存储 宽高比(SAR)下所述, 逻辑像素没有固有宽高比,也就是说, 逻辑像素没有已定义形状,这又 意味着它没有已定义大小。 只有当逻辑像素映射到 显示像素时,它才采用固定形状和 大小。 尽管如此,将逻辑像素视为正方形并具有 可测量的绝对大小通常很方便;但是,提醒读者不要得出这种过早的 (且可能不正确的)结论。

如果 tt 元素上指定了 tts:extent 属性的值,且该值由 两个以像素为单位的 <length> 表达式组成, 则这两个表达式表示根容器 区域的宽度高度,并且 因而确定其综合 分辨率; 否则,根容器区域的综合分辨率文档 处理上下文以一种遵守上文 H.1 宽高比所确定的 SAR 解析值的方式(任意)确定。

注:

文档处理上下文根容器区域指定任意 分辨率的情况下,它可以采用任何便于 其内部处理约束和正在处理的文档 实例的方式进行指定。 例如,它可以指定与相关媒体对象的 存储宽高比相适用的相同分辨率,或者它可以评估文档中 长度表达式的精度, 以便指定保持该相同精度的逻辑分辨率。

H.3 坐标空间

根容器区域的坐标空间,也称为 文档坐标空间, 是一个无界的二维平面,在其上定义了一个闭合集的逻辑像素,其形式为矩形 R,使得 所述像素位于 R 的边界内部(以内),并且此坐标空间的原点 (位置)与 R 的左上角重合,垂直轴上的正向像素向下延伸, 水平轴上的正向像素向右延伸。 此外,R宽度高度被设置为 根容器区域的解析分辨率。 最后,适用于 R 的宽高比根据上文所示的 DARSARPAR 的解析值建立。

除非适用更高级协议, 否则在处理给定文档实例时, 文档坐标空间只确定一次且仅确定一次。

I 时间表达式语义

本附录是规范性的。

本附录规定用于解释文档实例中时间表达式的语义。

注:

下文所用短语本地实时时间旨在对文档处理上下文中的虚拟实时时钟建模,其中 本地表示处于该处理上下文实现的直接邻近范围内。 定义与此虚拟时钟的关系的目的,是为了教学目的建立一种局部有效的物理 时间实现。

注:

下文所用短语播放速率旨在对文档处理上下文中的一个(可能可变的)参数建模,其中 时间的播放(或解释)速率可能被人为拉伸或收窄,例如 在减慢或加快相关媒体对象的 播放速率时。以下讨论不失一般性地假定使用固定播放速率。在 播放速率可变的情况下,可能需要对所得计算作出适当调整。

文档处理上下文定义适用的 纪元以及在建立合成文档 同步基时要使用的任何纪元相关偏移。

I.1 时钟时间基

当使用 clock 时间基运行时,以下语义适用于解释 由 <time-expression> 定义的 时间表达式,以及它们与媒体时间和本地实时时间的关系。

时钟时间基 C 与 以纪元 E(由 文档处理上下文定义) 表达的本地实时时间 R 的关系如下:

TTML 语义 – 时钟时间与实时时间的关系


R = C + epochOffset + discontinuityOffset

其中 C ∈ ℜ0 ≤ C < ∞C 以秒为单位, 自以下时间起: (1) 当相关 <time-expression> 采用 无日期形式时,相对于参考时钟基的最近先前午夜;或 (2) 当相关 <time-expression> 采用 有日期形式时,相对于参考时钟基的指定日期的午夜;

epochOffset ∈ ℜ0 ≤ epochOffset < ∞epochOffset 以秒为单位,0 表示纪元 E 的开始, 且 epochOffset 的值根据 ttp:clockMode 参数的计算值 按如下方式确定:

(1) 如果为 local,则为最近先前本地午夜的本地实时时间与 纪元 E 开始时的本地实时时间之间的差值,以秒表示;

(2) 如果为 gps,则为最近先前 GPS 午夜的 GPS 时间 与纪元 E 开始时的 GPS 时间之间的差值,以秒表示;

(3) 如果为 utc,则为最近先前 UTC 午夜的 UTC 时间 与纪元 E 开始时的 UTC 时间之间的差值,以秒表示;

discontinuityOffset ∈ ℜ−∞ < discontinuityOffset < ∞discontinuityOffset 以秒为单位,并且 discontinuityOffset 的值等于 自参考时钟基中最近先前午夜以来已经 增加(或减少)的闰秒(及其分数)的总和;

并且 epochOffsetdiscontinuityOffset根时间范围开始之前 只确定一次且仅确定一次,使得在值确定和 根时间范围开始之间的期间内 不发生本地午夜或参考时钟基不连续。

<time-expression> 表示的时间值表达式 与时钟时间 C 的关系如下:

TTML 语义 – 时间表达式与时钟时间的关系


如果某个 <time-expression> 形式 不使用 ticks(t)度量,则:

C = 3600 * hours + 60 * minutes + seconds

其中 hoursminutesseconds 分量在存在时从时间表达式提取,否则为零;此外, 如果存在 fraction 分量,则将其加到 seconds 分量以形成实数值秒分量。

否则,如果 <time-expression> 形式使用 ticks(t)度量,则:

C = ticks / tickRate

注:

当使用 clock 时间基时,时间表达式中的 framessub-frames 项以及 frames(f)度量不适用。

时钟时间基 C 独立于媒体时间 M

TTML 语义 – 时钟时间与媒体时间的关系


M ¬∝ C

注:

也就是说,当使用 clock 时间基时,计时与媒体时间脱离 (不一定成比例)。例如,如果媒体播放速率为零 (0),则媒体 播放暂停;但是,计时坐标 将按照时钟时间的自然进展继续前进,并与参考时钟基成正比。 此外,如果媒体播放速率在播放期间发生变化, 呈现计时不受影响。

I.2 媒体时间基

当使用 media 时间基运行时,以下语义适用于解释 由 <time-expression> 定义的 时间表达式,以及它们与媒体时间、文档时间和本地实时时间的关系。

I.2.1 与本地实时时间的关系

媒体时间基 M 与 以纪元 E(由 文档处理上下文定义)表达的 本地实时时间 R 的关系如下:

TTML 语义 – 媒体时间与实时时间的关系


R = playRate * M + epochOffset

其中 M ∈ ℜ0 ≤ M < ∞M 以 秒为单位,0 对应于 文档时间 坐标空间的开始;

playRate ∈ ℜ−∞ < playRate < ∞playRate 无单位,并且 playRate 的值由文档处理 上下文确定,若未如此确定则为 1.0

并且 epochOffset ∈ ℜ0 ≤ epochOffset < ∞epochOffset 以秒为单位,0 对应于 纪元 E 的开始,并且 epochOffset 的值是 文档时间 坐标空间开始时的本地实时时间与纪元 E 开始时的本地实时时间之间的差值,以秒表示。

注:

如果 playRate 的值由 文档处理上下文确定, 即未设置为默认值 1.0,则该值可能在文档 呈现过程中实时变化,在这种情况下,对于给定 M 值的 R 值预期会基于新的 playRate 值重新求值。

I.2.2 与媒体时间的关系

<time-expression> 表示的时间值表达式, 根据 ttp:frameRatettp:subFrameRatettp:frameRateMultiplier 参数,与媒体时间 M 的关系如下:

TTML 语义 – 时间表达式与媒体时间的关系


如果时间表达式使用 clock-time 形式,或使用不采用 ticks(t)度量的 offset-time 形式,则:

M = referenceBegin + 3600 * hours + 60 * minutes + seconds + ((frames + (subFrames / subFrameRate)) / effectiveFrameRate)

其中 referenceBegin 根据最近祖先时间容器采用 并行(par)还是顺序(seq)语义来确定:如果为 并行,或者如果为顺序且不存在先前兄弟 计时元素,则 referenceBegin 是与最近祖先时间容器开始相对应的媒体时间,或者 如果此时间容器是根时间范围,则为 零 (0);否则, 如果为顺序且存在先前兄弟 计时元素,则 referenceBegin 是与 紧邻先前兄弟计时元素的活动结束相对应的媒体时间;

hoursminutessecondsframessubFrames 分量 在存在时从时间表达式提取,否则为零; 此外,如果时间表达式采用 clock-time 表达式形式,则如果存在 fraction 分量,将其加到 seconds 分量以形成实数值 分量;或者,如果时间表达式采用 offset-time 表达式形式,则如果存在 fraction 分量, 将其加到 time-count 分量,以根据指定的偏移度量 形成实数值时间计数分量;

subFrameRatettp:subFrameRate 参数的计算值;

并且 effectiveFrameRate(以每秒帧数为单位)为 frameRate * frameRateMultiplier,其中 frameRatettp:frameRate 参数的计算值,且 frameRateMultiplierttp:frameRateMultiplier 参数的计算值。

否则,如果时间表达式使用采用 ticks(t)度量的 offset-time 形式,则:

M = referenceBegin + ticks / tickRate

其中 referenceBegin 如上所述;

ticks 分量从时间表达式提取;

并且 tickRatettp:tickRate 参数的计算值;

注:

如果计算得到的 frameRateMultiplier 比值不是整数,则 effectiveFrameRate 将是非整数有理数。

注:

上述形式化描述假定文档时间坐标空间的开始时间 与相关媒体对象的 开始时间相关。如果此假定不成立,则在计算媒体时间 M 时可能会引入一个用于说明该差异的附加偏移。

I.2.3 与文档时间的关系

本小节是非规范性的。

ttp:timeBase="media" 时,计算得到的文档时间 会作为无偏移的等价媒体时间使用。

注:

由例如包装格式强加的任何附加媒体时间处理 不在 TTML 规范范围内。

例如,[ISOBMFF TT] 提供了一种机制,用于将 TTML 文档包装为分段和非分段文件中的样本,[MPEG DASH] 为通过 HTTP 和 MPEG-2 TS 进行片段化传递提供进一步的分段语义。

以下文档片段在计时上是等价的:

示例片段 – 媒体计时 1
<tt ttp:timeBase="media" ...>
...
<body>
   <div xml:id="d1" begin="1s">
      <p xml:id="p1" begin="0s" end="1s">First paragraph</p>
      <p xml:id="p2" begin="2s" end="3s">Second paragraph</p>
   </div>
</body>
</tt>

示例片段 – 媒体计时 2
<tt ttp:timeBase="media" ...>
...
<body>
   <div xml:id="d1">
      <p xml:id="p1" begin="1s" end="2s">First paragraph</p>
      <p xml:id="p2" begin="3s" end="4s">Second paragraph</p>
   </div>
</body>
</tt>

在没有其他外部信息时,显示文档时间到媒体 时间映射的计时图。
Media time

在此示例中,使用 [SMIL 3.0] 的术语,body 元素的隐式持续时间等同于其计算持续时间,该持续时间也是 根时间 范围。但是,如果 文档处理 上下文指定了适用媒体时间的范围,则这些范围会限制 解析的开始和结束时间,因而也限制 根时间 范围

在以下示例中,处理上下文定义文档处于活动状态的 媒体时间范围为 1.5s 到 3.5s,并且这定义了根时间范围,因为在这两个时间点均存在 计时内容。

当媒体时间范围受处理上下文约束时,显示文档时间到媒体 时间映射的计时图。
Media time

灰色背景表示 文档处理 上下文定义文档为非活动状态的时段。 文档时间坐标空间 不受此变换影响。

如果文档处理上下文定义媒体 时间范围为 0-3s,则 根时间范围 将为从 1s 到 2s,如 p1 所定义,且 p2 将永远不会 显示。

I.3 SMPTE 时间基

当使用 smpte 时间基运行时,以下语义适用于解释 由 <time-expression> 定义的 时间表达式,以及它们与媒体时间和本地实时时间的关系。

如果 ttp:markerMode 参数的计算值为 discontinuous, 则时间表达式与媒体时间 M 或 本地实时时间 R 之间没有直接关系。在 这种情况下,时间表达式指代由文档处理上下文相关媒体对象中遇到 smpte 时间码时 发出的同步事件(标记)。

否则,如果 ttp:markerMode 参数的计算值为 continuous,则时间表达式与 本地实时时间和媒体时间之间的关系如下文所述,以 合成 smpte 文档同步基表示,此处 称为 SMPTE 时间基 S

TTML 语义 – 时间表达式与 SMPTE 时间的关系


S = (countedFrames - droppedFrames + (subFrames / subFrameRate)) / effectiveFrameRate

其中

countedFrames = (3600 * hours + 60 * minutes + seconds) * frameRate + frames

hoursminutessecondsframessubFrames 分量 在存在时从时间表达式提取,否则为零; 此外,如果时间表达式采用 clock-time 表达式形式,则如果存在 fraction 分量,将其加到 seconds 分量以形成实数值 分量;或者,如果时间表达式采用 offset-time 表达式形式,则如果存在 fraction 分量, 将其加到 time-count 分量,以根据指定的偏移度量形成实数值 时间计数分量;

droppedFrames 按如下方式计算:

1. 令 dropModettp:dropMode 参数的计算值;

2. 如果 dropModedropNTSC,令 droppedFrames = (hours * 54 + minutes - floor(minutes/10)) * 2

3. 否则,如果 dropModedropPAL,令 droppedFrames = (hours * 27 + floor(minutes/2) - floor(minutes/20)) * 4

4. 否则,令 droppedFrames = 0

frameRatettp:frameRate 参数的计算值;

subFrameRatettp:subFrameRate 参数的计算值;

并且 effectiveFrameRate(以每秒帧数为单位)为 frameRate * frameRateMultiplier,其中 frameRatettp:frameRate 参数的计算值,且 frameRateMultiplierttp:frameRateMultiplier 参数的计算值。

尽管有上述规定,如果时间表达式包含一个根据 7.2.4 ttp:dropMode被指定为 丢弃的帧码,则该时间表达式 必须被视为对验证评估而言无效。

注:

关于在适用 smpte 时间基时, 时间表达式的 offset-time 形式和 fraction 分量均被弃用,参见 <time-expression>

SMPTE 时间基 S 与媒体时间基 M 的关系如下:

TTML 语义 – SMPTE 时间与媒体时间的关系


M = referenceBegin + S

其中 referenceBegin 根据最近祖先时间容器采用 并行(par)还是顺序(seq)语义来确定:如果为 并行,或者如果为顺序且不存在先前兄弟 计时元素,则 referenceBegin 是与最近祖先时间容器开始相对应的 SMPTE 时间,或者 如果此时间容器是根时间范围,则为 零 (0);否则,如果 为顺序且存在先前兄弟 计时元素,则 referenceBegin 是与 紧邻先前兄弟计时元素的活动结束 相对应的 SMPTE 时间;

给定如上所述派生的媒体时间基,则 媒体时间基 M 与本地实时时间 R 的关系如上文 I.2 媒体时间基所述。

J 中间文档语法

本附录是规范性的。

本附录规定 定时文本中间文档的语法元素和结构。 ISD 实例可以表示为独立文档实例,或表示为 ISD Sequence 实例中的一个集合。

所有 ISD 相关词汇都定义在 TTML ISD Namespace 中,此处定义为 http://www.w3.org/ns/ttml#isd, 其中推荐前缀为 isd

注:

除了使用 TTML ISD Namespace 中的元素之外,ISD 文档实例通常还会 包含来自 5.1 命名空间中定义的一个或多个其他 TTML 命名空间的词汇。

TTML 中间同步文档,简称 ISDISD 实例, 表示源 TTML 文档的一个离散、时间上不重叠的区间,即一个 ISD 区间, 在该区间内,除非离散动画之外,所有内容、样式和布局 信息都保持静态。 特别是,TTML 文档的计时层级会被展平,然后细分为时间上 不重叠的区间,其中每个这样的 区间定义源 TTML 文档在该区间内的静态视图,并且该静态 视图表示为 ISD 实例。 TTML 中间同步文档的一个具体独立实例必须指定 isd:isd 元素作为其根文档元素。当 中间同步文档的实例包含在 中间同步文档序列 实例中时,则 ISD 实例由根 isd:sequence 元素的 isd:isd 子元素表示。

注:

ISD 实例可以包含一个或多个表示关联区间内连续动画的 animate 元素。 连续动画样式会跨 ISD 区间边界细分,使得它们逐步串接起来,在任何相交的 ISD 区间上表达等价的连续 动画。

TTML 中间同步文档 序列表示一个由时间上不重叠的 中间同步 文档实例组成的集合,这些实例按其开始时间排序。 TTML 中间同步文档序列的具体实例 必须指定 isd:sequence 元素作为其根文档元素。

J.1 ISD 词汇

J.1.1 isd:sequence

isd:sequence 元素用作 中间 同步文档序列文档的根文档元素。

isd:sequence 元素接受零个或多个 ttm:metadata 元素作为其子级, 后跟零个或一个 ttp:profile 元素, 后跟零个或多个 isd:isd 元素。

isd:isd 元素必须按照其开始时间的等价媒体时间排序; 此外,任何两个子 isd:isd 元素的时间区间不得(在时间上)重叠。

XML 表示 – 元素信息项:isd:sequence
<isd:sequence
  extent = xsd:string
  size = xsd:nonNegativeInteger
  version = xsd:positiveInteger
  xml:base = <uri>
  xml:id = ID
  xml:lang = xsd:string
  {any attributes in the ISD Parameter Attribute Set}>
  Content: ttm:metadata*, ttp:profile?, isd:isd*
</isd:sequence>

如果指定了 extent 属性,则它必须遵守 <extent> 值 语法的子集,该子集由两个以像素为单位的 <length> 表达式组成,在这种情况下,指定值 表达根容器 区域的空间范围,如 H.2 分辨率所定义, 其中此空间范围全局适用于每一个 由子 isd:isd 元素表示的组成 中间同步文档

如果指定了 size 属性,则它必须是一个非负整数, 对应于 isd:isd 子元素的数量。 如果未指定,则在 isd:sequence 元素终止之前, size 必须被视为不定;在终止的情况下, size 可以通过检查确定。

注:

在实时字幕的情况下,通常会省略 size 属性。

如果指定了 version 属性,则它必须是一个正整数, 对应于创作 ISD 序列文档时使用的 中间同步文档语法 规范的版本。如果指定,其数值必须大于或等于二 (2)。如果未指定,则 version 必须被 视为等于二 (2)。与本 中间同步文档语法 规范关联的版本是二 (2)。

注:

[TTML1] §9.3.2 所引用或暗含的 ISD 抽象 并未由该规范具体定义。此处我们保留版本一 (1) 供非正式讨论该早期抽象及其各种(非标准化的) 实现。

必须在 isd:sequence 元素上指定 xml:lang 属性。 如果其值为空,则表示没有默认语言适用于 中间同步文档 序列内的内容。否则, 指定值表示适用于每个组成 中间同步文档的默认语言。

可以从 J.2 ISD 参数属性集中枚举的受限参数属性集 指定一个或多个参数属性。 如果指定,则它们全局适用于每个组成 中间同步文档

如果存在子 ttp:profile 元素, 则该 ttp:profile 元素必须 满足以下约束:

  • 未指定 combine 属性;

  • 未指定 designator 属性;

  • 未指定 type 属性;

  • 未指定 use 属性;

  • 没有后代元素是 ttp:profile 元素;

  • 没有后代 ttp:feature 元素指定值为 prohibitedvalue 属性;

  • 没有后代 ttp:extension 元素指定值为 prohibitedvalue 属性。

此外,这样的子 ttp:profile 元素必须指定一个配置文件,该配置文件等价于已获取所有外部引用配置文件文档的 源 TTML 文档的组合 处理器配置文件

注:

允许在 isd:sequence 中指定单个 ttp:profile 的意图,是提供一种简化 机制,用来声明 为处理该文档(在没有最终用户覆盖的情况下)必须满足的处理器配置文件要求。

J.1.2 isd:isd

isd:isd 元素用作 (1) 独立 中间同步文档的根文档元素,或 (2) 中间同步文档 序列文档的 isd:sequence 元素的子元素, 其中 isd:isd 元素从每个中间同步文档形式 DOCinter 中保留的根 tt 元素派生并替换该元素; 该中间同步文档形式由 构造中间文档 过程创建。

isd:isd 元素接受零个或多个 ttm:metadata 元素作为其子级, 后跟零个或一个 ttp:profile 元素, 后跟零个或多个 isd:css 元素, 后跟零个或多个 isd:region 元素。

XML 表示 – 元素信息项:isd:isd
<isd:isd
  begin = <time-expression>
  end = <time-expression> | "indefinite"
  extent = xsd:string
  version = xsd:positiveInteger
  xml:base = <uri>
  xml:id = ID
  xml:lang = xsd:string
  {any attributes in the ISD Parameter Attribute Set}>
  Content: ttm:metadata*, ttp:profile?, isd:css*, isd:region*
</isd:isd>

必须指定 begin 属性,其值必须采用 <time-expression>offset-time 形式,并且还被限制为使用 s(秒)、 f(帧)、 t(tick)度量,或者可以省略度量,在这种情况下暗含 s 秒。 此 开始时间表示为相对于源 TTML 文档的 文档时间坐标空间 开始时间的偏移;该 isd:isd 元素即从该源 TTML 文档派生。

必须类似地指定 end 属性,并适用相同约束。 如果 end 属性的值采用 <time-expression> 形式, 则此结束时间表示为相对于源 TTML 文档的 文档时间坐标空间 开始时间的偏移;该 isd:isd 元素即从该源 TTML 文档派生; 否则(值为 indefinite),时间范围在编码该属性时 未知,或者不存在时间终点。

注:

[SMIL 3.0] 的术语表示,这些 beginend 属性的值 对应于相对于文档开始活动持续时间的解析开始和结束时间。

如果指定了 extent 属性,则它必须遵守 <extent> 值 语法的子集,该子集由两个以像素为单位的 <length> 表达式组成,在这种情况下,指定值 表达根容器 区域的空间范围,如 H.2 分辨率所定义,其中此 空间范围 适用于由此 isd:isd 元素表示的 中间同步 文档。此外, 如果此 isd:isd 元素包含在 中间同步文档 序列文档中,则 如果容器 isd:sequence 元素指定了 extent 属性,则此 isd:isd 元素 不应指定 extent 属性,并且如果指定,则必须等于容器 isd:sequence 元素上指定的 extent 属性的值。

如果 isd:isd 元素是独立的 中间 同步文档文档,则必须在该元素上指定 xml:lang 属性;否则,可以指定该属性, 并且如果 isd:isd 元素的默认语言不同于其 父 isd:sequence 元素的默认语言, 则应指定该属性。 如果其值为空,则表示没有默认语言适用于 中间 同步文档内的内容。否则, 指定值表示适用的默认语言。

version 属性遵循 isd:sequence 元素类型上同名属性的语法和语义。 version 属性不得指定在不是根文档元素的 isd:isd 元素上, 即作为 isd:sequence 元素子元素的元素上。

如果 isd:isd 元素是独立的 中间 同步文档文档,则可以存在子 ttp:profile 元素,在这种情况下,适用 J.1.1 isd:sequence中指定的相同约束和语义; 否则,如果不是独立文档,则不得存在子 ttp:profile 元素。

J.1.3 isd:css

isd:css 元素用于表示某些元素集合的唯一计算样式集, 这些元素共享同一组计算样式。特别是,对于源 TTML 文档中 被选中并复制到给定 中间同步文档isd:region 元素中的每个 元素 E, 将确定 E 的计算样式 集 CSS(E),并且如果该 CSS(E) 尚未由现有 isd:css 元素指定,则会为其分配唯一标识符并实例化为新的 isd:css 元素。

isd:css 元素接受零个或多个 ttm:metadata 元素作为其子级。

XML 表示 – 元素信息项:isd:css
<isd:css
  xml:base = <uri>
  xml:id = ID
  xml:lang = xsd:string
  {any attributes in TT Style Namespaces}
  Content: ttm:metadata*
</isd:css>

对于 isd:isd 元素的任意一对子 isd:css 元素 S1S2S1 的指定样式集 不得与 S2 的指定样式集相同。为了比较两个 指定样式集,必须将样式放入规范顺序,然后按项 比较值是否相等,其中规范顺序依据限定 属性名 顺序,每个限定名由一个元组 <namespace URL, local name>组成, 并且这些元组按组成部分以区分大小写的词法字符串顺序进行比较。

J.1.4 isd:region

isd:region 元素用于表示布局和呈现 region 以及选入该 region 的内容,其中该内容采用 body 元素及其后代 内容元素的形式。

isd:region 元素接受零个或多个 ttm:metadata 元素作为其子级, 后跟零个或多个 animate 元素, 后跟恰好一个 body 元素。

XML 表示 – 元素信息项:isd:region
<isd:region
  style = IDREF
  ttm:role = xsd:string
  xml:base = <uri>
  xml:id = ID
  xml:lang = xsd:string
  Content: ttm:metadata*, animate*, body
</isd:region>

如果由 isd:region 元素表示的 region 的计算样式集不是 适用于 region 的初始样式值集,则必须指定 style 属性,该属性引用一个 isd:css 元素,该元素指定该 region 的计算样式集。

以下约束适用于 body 元素 及其后代元素:

  • 未指定 animate 属性;

  • 未指定 begin 属性;

  • 未指定 dur 属性;

  • 未指定 end 属性;

  • 未指定 region 属性;

  • 未指定 timeContainer 属性;

  • 未指定 TT Style Namespaces 中的任何属性;

  • 不存在 set 元素;

  • 任何重要文本节点,即 #PCDATA 上下文中的文本节点,不得不包含在 不包含其他子级的 span 元素中。

此外,对于 body 元素 B 及其 每个后代内容元素 C,如果 B 或每个 C 的计算样式集 不等于其父元素的计算样式集,则该元素 BC 必须指定 style 属性,该属性引用一个 isd:css 元素,该元素指定该 元素的计算样式集。

J.3 ISD 交换

采用中间同步文档 语法的具体文档实例,必须编码为使用 UTF-8 字符编码的格式良好的 [XML 1.0] 文档。 此外,这样的文档必须指定 isd:sequence 元素或 isd:isd 元素作为根文档元素。

当由具体 ISD Sequence 或 ISD 实例组成的资源被交换,并且使用媒体 类型来标识该资源的内容类型时,则应使用媒体类型 application/ttml+xml,关于该媒体类型另见 [TTML1] 附录 C。 如果使用此媒体类型,则不得指定可选的 profile 参数,或者 如果指定,处理器必须忽略它。

K 参考文献

本附录是规范性的。

CSS3 Color
Tantek Çelik and Chris Lilley, CSS Color Module Level 3, W3C Recommendation, 07 June 2011. (参见 http://www.w3.org/TR/2011/REC-css3-color-20110607/.)
Data Encodings
S. Josefsson, The Base16, Base32, and Base64 Data Encodings, RFC 4648, October 2006, IETF. (参见 http://www.rfc-editor.org/rfc/rfc4648.txt.)
GPS
Global Positioning System, US Air Force. (参见 https://www.gps.gov/technical/.)
JLREQ
Richard Ishida et al., Requirements for Japanese Text Layout W3C Working Group Note, 3 April 2012. (参见 http://www.w3.org/TR/2012/NOTE-jlreq-20120403/.)
Media Queries
Florian Rivoal, Media Queries, W3C Recommendation, 19 June 2012. (参见 http://www.w3.org/TR/2012/REC-css3-mediaqueries-20120619/.)
MIME
Ned Freed and Nathaniel Borenstein, Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies, RFC 2045, November 1996, IETF. (参见 http://www.rfc-editor.org/rfc/rfc2045.txt.)
MIME Media Types
Ned Freed and Nathaniel Borenstein, Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types, RFC 2046, November 1996, IETF. (参见 http://www.rfc-editor.org/rfc/rfc2046.txt.)
PNG
David Duce, Ed., Portable Network Graphics (PNG) Specification (Second Edition), W3C Recommendation, 10 November 2003. (参见 https://www.w3.org/TR/2003/REC-PNG-20031110/.)
RELAX NG
ISO/IEC 19757-2:2003, Information technology – Document Schema Definition Language (DSDL) – Part 2: Regular-grammar-based validation – RELAX NG, International Organization for Standardization (ISO).
Ruby
Masayasu Ishikawa et al., Ruby Annotation W3C Recommendation, 31 May 2001. (参见 http://www.w3.org/TR/2001/REC-ruby-20010531/.)
SMIL 3.0
Dick Bultermann, et al., Synchronized Multimedia Integration Language (SMIL 3.0), W3C Recommendation, 1 December 2008. (参见 http://www.w3.org/TR/2008/REC-SMIL3-20081201/.)
SMPTE ST 12-1
SMPTE ST 12-1:2014, Time and Control Code, SMPTE Standard.
SRGB
IEC 61966-2-1:1999/AMD1:2003, Multimedia systems and equipment – Colour measurement and management – Part 2-1: Colour management – Default RGB colour space – sRGB, International Electrotechnical Commission (IEC).
SVG 1.1
Erik Dahlström et al., Eds., Scalable Vector Graphics (SVG) 1.1 Second Edition, W3C Recommendation, 16 August 2011. (参见 http://www.w3.org/TR/2011/REC-SVG11-20110816/.)
TTML1
Glenn Adams and Pierre-Anthony Lemieux, Eds., Timed Text Markup Language 1 (TTML1) (Third Edition), W3C Recommendation, 08 November 2018. (参见 https://www.w3.org/TR/2018/REC-ttml1-20181108/.)
UAAG
Ian Jacobs, Jon Gunderson, and Eric Hansen, Eds., User Agent Accessibility Guidelines 1.0, W3C Recommendation, 17 December 2002. (参见 http://www.w3.org/TR/2002/REC-UAAG10-20021217/.)
UAX9
M. Davis, A. Lanin, and A. Glass, Unicode Bidirectional Algorithm, Unicode Consortium, 14 May 2017. (参见 http://www.unicode.org/reports/tr9/tr9-37.html.)
UAX14
Asmus Freytag, Line Breaking Properties, Unicode Consortium, 29 August 2005. (参见 http://www.unicode.org/reports/tr14/tr14-17.html.)
URI
T. Berner-Lee, R. Fielding, and L. Masinter, Uniform Resource Identifiers (URI): Generic Syntax, RFC 3986, January 2005, IETF. (参见 http://www.rfc-editor.org/rfc/rfc3986.txt.)
UTC
Recommendation TF.460-6, Standard-Frequency and Time-Signal Emissions, International Telecommunciations Union, Radio Sector (ITU-R).
UTR50
K. Ishii, Unicode Vertical Text Layout, Unicode Consortium, 23 November 2016. (参见 http://www.unicode.org/reports/tr50/tr50-17.html.)
WCAG
Ben Caldwell, et al., Eds., Web Content Accessibility Guidelines (WCAG) 2.0, W3C Recommendation, 11 December 2008. (参见 http://www.w3.org/TR/2008/REC-WCAG20-20081211/.)
XLink 1.1
Steve DeRose, et al. XML Linking Language (XLink) Version 1.1, W3C Recommendation, 06 May 2010. (参见 http://www.w3.org/TR/2010/REC-xlink11-20100506/.)
XML 1.0
Tim Bray, et al. Extensible Markup Language (XML) 1.0 (Fifth Edition), W3C Recommendation, 26 November 2008. (参见 http://www.w3.org/TR/2008/REC-xml-20081126/.)
XML Base
Jonathan Marsh and Richard Tobin, Eds., XML Base (Second Edition), W3C Recommendation, 28 January 2009. (参见 http://www.w3.org/TR/2009/REC-xmlbase-20090128/.)
XML ID
Jonathan Marsh, Daniel Veillard, Norman Walsh, Eds., xml:id Version 1.0, W3C Recommendation, 09 September 2005. (参见 http://www.w3.org/TR/2005/REC-xml-id-20050909/.)
XML InfoSet
John Cowan and Richard Tobin, Eds., XML Information Set (Second Edition), W3C Recommendation, 04 February 2004. (参见 http://www.w3.org/TR/2004/REC-xml-infoset-20040204/.)
XML Media Types
Makato Murata, Simon St. Laurent, Kan Khon, Eds., XML Media Types, RFC 3023, January 2001, IETF. (参见 http://www.rfc-editor.org/rfc/rfc3023.txt.)
XML Namespaces 1.0
Tim Bray, et al. Namespaces in XML 1.0 (Third Edition), W3C Recommendation, 8 December 2009. (参见 http://www.w3.org/TR/2009/REC-xml-names-20091208/.)
XML 1.1
Tim Bray, et al. Extensible Markup Language (XML) 1.1 (Second Edition), W3C Recommendation, 16 August 2006, edited in place 29 September 2006. (参见 http://www.w3.org/TR/2006/REC-xml11-20060816/.)
XML Schema Part 1
Henry S. Thompson, David Beech, Murray Maloney, Noah Mendelsohn, Eds., XML Schema Part 1: Structures, W3C Recommendation, 28 October 2004. (参见 https://www.w3.org/TR/2004/REC-xmlschema-1-20041028/.)
XML Schema Part 2
Paul Biron and Ashok Malhotra, XML Schema Part 2: Datatypes, W3C Recommendation, 28 October 2004. (参见 https://www.w3.org/TR/2004/REC-xmlschema-2-20041028/.)
XSL-FO 1.1
Anders Berglund, Extensible Stylesheet Language (XSL) Version 1.1, W3C Recommendation, 05 December 2006. (参见 http://www.w3.org/TR/2006/REC-xsl11-20061205/.)

L 其他参考文献(非规范性)

CC-DECODER-REQ
Closed Caption Decoder Requirements for Analog Television Receivers, United States Code of Federal Regulations, Title 47, Volume 1, Part 79, §79.101. (参见 http://www.gpo.gov/fdsys/pkg/CFR-2012-title47-vol4/pdf/CFR-2012-title47-vol4-sec79-101.pdf.)
CLREQ
Bobby Tung et al., Requirements for Chinese Text Layout, W3C Working Draft, 29 December 2017. (参见 https://www.w3.org/TR/2017/WD-clreq-20171229/.)
CSS2
Bert Bos et al., Cascading Style Sheets, Level 2 Revision 1, W3C Recommendation, 07 June 2011. (参见 http://www.w3.org/TR/2011/REC-CSS2-20110607/.)
CSS Backgrounds and Borders
Bert Bos, Elika Etamad and Brad Kemper, CSS Backgrounds and Borders Module Level 3, W3C Candidate Recommendation, 17 October 2017. (参见 https://www.w3.org/TR/2017/CR-css-backgrounds-3-20171017/.)
CSS Box Model
Bert Bos, Anton Prowse, CSS3 Basic Box Model, W3C Working Draft, 09 August 2018. (参见 https://www.w3.org/TR/2018/WD-css-box-3-20180809/.)
CSS Flex
Tab Atkins, Elika Etemad, and Rossen Atanassov, CSS Flexible Box Layout Module Level 1, W3C Candidate Recommendation, 19 October 2017. (参见 https://www.w3.org/TR/2017/CR-css-flexbox-1-20171019/.)
CSS Fonts
John Daggett, Myles Maxfield, and Chris Lilley, CSS Fonts Module Level 3, W3C Recommendation, 20 September 2018. (参见 https://www.w3.org/TR/2018/REC-css-fonts-3-20180920/.)
CSS Fragmentation
Rossen Atanassov and Elika Etemad, CSS Fragmentation Module Level 3, W3C Candidate Recommendation, 09 February 2017. (参见 https://www.w3.org/TR/2017/CR-css-break-3-20170209/.)
CSS Ruby
Elika Etemad and Koji Ishii, CSS Ruby Layout Module Level 1, W3C Working Draft, 05 August 2014. (参见 https://www.w3.org/TR/2014/WD-css-ruby-1-20140805/.)
CSS Text
Elika Etamad and Koji Ishii, CSS Text Module Level 3, W3C Working Draft, 20 September 2018. (参见 https://www.w3.org/TR/2018/WD-css-text-3-20180920/.)
CSS Text Decoration
Elika Etamad and Koji Ishii, CSS Text Decoration Module Level 3, W3C Candidate Recommendation, 03 July 2018. (参见 https://www.w3.org/TR/2018/CR-css-text-decor-3-20180703/.)
CSS Transforms
Simon Fraser, Dean Jackson, Theresa O'Connor, and Dirk Schulze, CSS Transforms Module Level 1, W3C Working Draft, 30 November 2017. (参见 https://www.w3.org/TR/2017/WD-css-transforms-1-20171130/.)
CSS Writing Modes
Elika Etamad and Koji Ishii, CSS Writing Modes Level 3, W3C Candidate Recommendation, 24 May 2018. (参见 https://www.w3.org/TR/2018/CR-css-writing-modes-3-20180524/.)
CTA-608-E
EIA/CTA-608-E, Line 21 Data Services, EIA/CTA Standard, Consumer Technology Association (CTA).
CTA-708-E
CTA-708-D, Digital Television (DTV) Closed Captioning, CTA Standard, Consumer Technology Association (CTA).
Data Scheme
L. Masinter, The "data" URL Scheme, RFC 2397, August 1998, IETF. (参见 http://www.rfc-editor.org/rfc/rfc2397.txt.)
DCMES 1.1
Dublin Core Metadata Initiative, Dublin Core Metadata Element Set, Version 1.1: Reference Description. (参见 http://dublincore.org/documents/dces/.)
EBU-TT-D
EBU Tech 3380, EBU-TT-D Subtitling Distribution Format, Version 1.0, European Broadcasting Union (EBU), March 2015. (参见 https://tech.ebu.ch/publications/tech3380.)
EBU-TT-Live
EBU Tech 3370, EBU-TT Part 3 Live Subtitling Applications, Version 1.0, European Broadcasting Union (EBU), May 2017. (参见 https://tech.ebu.ch/publications/tech3370.)
DVBSS
ETSI EN 300 743, Digital Video Broadcasting (DVB); Subtitling systems, Version 1.5.1, ETSI, January 2014. (参见 https://www.etsi.org/deliver/etsi_en/300700_300799/300743/01.05.01_60/en_300743v010501p.pdf.)
HTML 5.2
Steve Faulkner, Arron Eicholz, Travis Leithead, Alex Danilo, and Sangwhan Moon, Eds., HTML 5.2, W3C Recommendation, 14 December 2017. (参见 https://www.w3.org/TR/html52/.)
ISOBMFF TT
ISO/IEC 14496-30, Information technology – Coding of audio-visual objects – Part 30: Timed text and other visual overlays in ISO base media file format, International Organization for Standardization (ISO).
ITU BT.2100-1
Recommendation ITU-R BT.2100-1, Image parameter values for high dynamic range television for use in production and international programme exchange
MPEG DASH
ISO/IEC 23009-1, Information technology – Dynamic adaptive streaming over HTTP (DASH), International Organization for Standardization (ISO).
MPEG7-5
ISO/IEC 15938-5, Information technology – Multimedia content description interface – Part 5: Multimedia description schemes, International Organization for Standardization (ISO).
NSOriginal
Tim Bray, et al. Namespaces in XML, W3C Recommendation, 14 January 1999. (参见 http://www.w3.org/TR/1999/REC-xml-names-19990114/.)
NSState
Norman Walsh, Ed., The Disposition of Names in an XML Namespace, TAG Finding, 9 January 2006. (参见 http://www.w3.org/2001/tag/doc/namespaceState-2006-01-09.)
OFF
ISO/IEC 14496-22, Information technology – Coding of audio-visual objects – Part 22: Open Font Format, International Organization for Standardization (ISO).

注:

有关本规范公开可用的免费版本,参见 http://standards.iso.org/ittf/PubliclyAvailableStandards/c066391_ISO_IEC_14496-22_2015.zip。 有关相关 OpenType Specification 的 Microsoft 版本,参见 https://docs.microsoft.com/en-us/typography/opentype/spec/。 OpenType 是 Microsoft Corporation 的注册商标。

PQ PNG
Pierre-Anthony Lemieux, Using the ITU BT.2100 PQ EOTF with the PNG Format, W3C Working Group Note, 11 September 2017. (参见 https://www.w3.org/TR/png-hdr-pq/.)
QAF SG
Karl Dubost, et al., QA Framework: Specifications Guidelines, W3C Recommendation, 17 August 2005. (参见 http://www.w3.org/TR/qaframe-spec/.)
SDP US
Glenn Adams, Monica Martin, Sean Hayes, TTML Simple Delivery Profile for Closed Captions (US), W3C WG Note, 5 February 2013. (参见 http://www.w3.org/TR/2013/NOTE-ttml10-sdp-us-20130205/.)
SMITH
Smith, Michael D.; Malia, Jason, Controlling Miniaturization in Stereoscopic 3D Imagery, in Motion Imaging Journal, SMPTE , vol.124, no.3, pp.50-58, April 2015 doi: 10.5594/m001513.
SMPTE RP 2052-11:2013
SMPTE RP 2052-11:2013, Conversion from CTA-708 Caption Data to SMPTE-TT, SMPTE Recommended Practice.
SMPTE ST 170
SMPTE ST 170:2004, Television – Composite Analog Video Signal – NTSC for Studio Applications, SMPTE Standard.
SMPTE ST 2052-1
SMPTE ST 2052-1:2013, Timed Text Format (SMPTE-TT), SMPTE Standard.
SSML 1.0
Daniel Burnett, et al., Speech Synthesis Markup Language (SSML) Version 1.0, W3C Recommendation, 7 September 2004. (参见 http://www.w3.org/TR/2004/REC-speech-synthesis-20040907/.)
TTAF1-REQ
Glenn Adams, Ed., Timed Text (TT) Authoring Format 1.0 Use Cases and Requirements, W3C Working Group Note, 27 April 2006. (参见 http://www.w3.org/TR/2006/NOTE-ttaf1-req-20060427/.)
WEBAUDIO
Paul Adenot, Raymond Toy, Eds., Web Web Audio API, W3C Candidate Recommendation, 18 September 2018. (参见 https://www.w3.org/TR/2018/CR-webaudio-20180918/.)
XHTML 1.0
Steven Pemberton, et al., XHTML™ 1.0, The Extensible Hypertext Markup Language (Second Edition), W3C Recommendation, 01 August 2002. (参见 http://www.w3.org/TR/2002/REC-xhtml1-20020801/.)
XML Guidelines
Scott Hollenbeck, et al., Guidelines for the use of Extensible Markup Language (XML) within IETF Protocols, RFC 3470, January 2003, IETF. (参见 http://www.rfc-editor.org/rfc/rfc3470.txt.)
XYZ
ISO 11664-1:2007, Joint ISO/CIE Standard: Colorimetry Part 1. CIE Standard Colorimetric Observers, International Organization for Standardization (ISO). (参见 https://www.iso.org/standard/52495.html.)
XPROC
Norman Walsh, Alex Milowski, Henry S. Thompson, Eds., XProc: An XML Pipeline Language, W3C Recommendation, 11 May 2010. (参见 https://www.w3.org/TR/xproc/.)
XSLT3
XSL Transformations (XSLT) Version 3.0, Michael Kay, Ed., W3C Recommendation 8 June 2017. (参见 https://www.w3.org/TR/xslt-30/.)

M 需求(非规范性)

Timed Text Markup Language(TTML),也称为 Timed Text Authoring Format(TTAF)的 Distribution Format Exchange Profile(DFXP),满足 [TTAF1-REQ] 所建立需求的一个子集。下表枚举这些需求,并 指出本规范满足它们的程度,其中 S 表示需求已满足,P 表示 需求部分满足,N 表示 需求未满足。

表 M-1 – 需求满足情况
ID 名称 状态 注释
R100 规范格式 S
R101 规范模块化 S
R102 规范组织 S
R103 核心和外围 S TT 扩展命名空间
R104 核心的演进 S TT 扩展命名空间
R105 核心的所有权 S TT 命名空间
R106 核心的满射 S
R107 外围的演进 S TT 扩展命名空间
R108 外围的所有权 S 非 TT 命名空间
R109 转换 S 支持 3GPP、QText、RealText、SAMI
R110 可流式转换 S 渐进式解码
R111 无障碍 – 内容 S 替代文档实例
R112 无障碍 – 创作系统 S
R200 可创作性 S
R201 多种自然语言 S 替代文档实例
R202 自然语言覆盖 S Unicode 4.0
R203 自然语言关联粒度 S 参见 xml:lang
R204 最低字符可表示性 S Unicode 4.0
R205 内在和外在文本内容 P 仅内在
R206 标记关联 P 仅内在
R207 条件内容 S 参见 condition
R208 流式文本 S
R209 逻辑流式文本词汇 S
R210 呈现性流式文本词汇 S 从逻辑流式文本进行隐含映射。
R211 流式文本词汇关系 S
R212 流式文本词汇分离 N
R213 非流式文本 N
R214 非流式文本词汇 N
R215 混合流式和非流式文本 N
R216 超链接 S 参见 xlink
R217 嵌入图形 P 参见 image 和下文注 1。
R218 非嵌入图形 S 参见 image
R219 嵌入字体 S 参见 font
R220 非嵌入字体 S 参见 font
R221 描述性词汇 S 参见 ttm:agentttm:role
R222 嵌入音频 S 参见 audio
R223 非嵌入音频 S 参见 audio
R290 标记格式 S
R291 标记格式和 Unicode 交互 S
R292 外在资源引用 S 参见 xlink
R293 模式有效性规范 S
R300 行内样式 S
R301 行内样式形式 P 行内和引用式样式
R302 非行内样式 N
R303 非行内样式形式 N
R304 样式优先级 S
R305 样式参数 – 听觉 P 参见 tta:gaintta:pantta:pitchtta:speak
R306 样式参数 – 视觉 P 支持 绝对位置、 背景色、 双向处理、 块进展维度、 边框(before、after、start、end)、 颜色、 display none、 display inline block、 显示对齐、 字体族、 字体大小、 字体样式、 字体粗细、 高度、 行内进展维度、 行高、 换行选项、 不透明度、 原点、 溢出、 padding(before、after、start、end)、 相对位置、 文本对齐、 文本装饰、 文本阴影、 可见性、 空白折叠、 空白处理、 宽度、 writing mode、 z-index
R390 样式参数对称性 S
R391 样式参数定义 S
R392 样式参数简写 S
R401 行内计时 S
R402 非行内计时 N
R403 同步参数 P 支持 begin、end、dur
R404 同步参数值空间 P 支持偏移值、媒体标记值(SMPTE 12M)、挂钟值
R405 时间包含语义 P 支持顺序、并行
R500 动画模式 S 参见 animateanimationset
R501 滚动动画 N
R502 高亮动画 S <set tts:backgroundColor="..."/>
R503 淡入淡出过渡动画 S <animate tts:opacity="..."/>
R504 可动画样式参数 – 听觉 P <animate tta:pan="..."/> ,也应用于 tta:gaintta:pitchtta:speak
R505 可动画样式参数 – 视觉 P 支持动画化 背景色、 边框颜色、 颜色、 display、 不透明度、 原点、 可见性
N506 动画内容 S
R600 元数据项关联 S 参见 metadataMetadata.class
R601 元数据项组成部分 P 支持 name、value
R602 元数据项值表示 P 参见 metadata
R603 元数据项可扩展性 S 参见 metadatattm:item
R604 元数据项验证 S 参见 metadata
R690 Dublin Core 偏好 N 使用 ttm:copyrightttm:descttm:title 和 通用 ttm:item

注:

  1. R217 包含一项关于原始文本存在性的子需求;但是,本 规范不对作者使用方式施加限制,因此该子需求已被判定超出范围。

N 词汇派生(非规范性)

本附录提供关于 TTML 词汇派生的信息,分别描述元素和 属性的派生。

N.1 元素派生

表 N-1 – 元素的第一列 指定一个 TTML 元素词汇项;第二列指定该词汇项所基于的 语法和/或语义模型; 第三列指定定义该模型的引用 (如果指示了模型); 第四列指定有关派生的详细信息;最后一 列引用描述该派生性质的附加注释。

在描述派生详细信息的第四列中,使用一种 记法来指示属性的添加或移除。 例如,在 tt:div 元素的派生中, 详细信息列包含 "-@class",这表示为 xhtml:div 模型元素指定使用的 class 属性,并未指定用于相应的 TTML 元素;相反,详细信息列包含 "+@begin",这表示添加了一个未指定用于 xhtml:div 模型元素的 begin 属性。

表 N-1 – 元素
元素 模型 引用 详细信息 注释
tt:animate svg:animate [SVG 1.1] -@*,begin、calcMode、dur、end、fill、keySplines、keyTimes、repeatCount 除外;+style, +@tts:*, +@xml:id 3,6
tt:animation tt:styling [TTML1] 概念性派生 4,12
tt:audio audio [HTML 5.2] -@accesskey, -@autoplay, -@class, -@contenteditable, -@controls, -@crossorigin, -@dir, -@draggable, -@hidden, -@id, -@lang, -@loop, -@muted, -@preload, -@spellcheck, -@tabindex, -@title, -@translate; +@animate, +@begin, +@clipBegin, +@clipEnd, +@condition, +@dur, +@end, +@format, +@style, +@timeContainer, +@type, +@tta:*, +@tts:*, +@ttm:*, +@xml:id, +@xml:lang, +@xml:space 2,3
tt:body xhtml:body [XHTML 1.0] -@class, -@dir, -@lang, -@on*, -@title; +@begin, +@dur, +@end, +@region, +@timeContainer, +@ttm:*, +@tts:*;内容模型 被子集化为零个或多个 division (div) 子级,并由 可选的 metadata 和 animation 子级超集化 1,2
tt:br xhtml:br [XHTML 1.0] -@class, -@title; +@ttm:*, +@tts:*, +@xml:lang, +@xml:space; 内容模型由 可选的 metadata 和 animation 子级超集化,以便与其他 内容词汇保持一致 1,2
tt:chunk [Data Scheme], [Data Encodings] 概念性派生 4
tt:data [Data Scheme], [Data Encodings] 概念性派生 4
tt:div xhtml:div [XHTML 1.0] -@class, -@dir, -@lang, -@on*, -@title; +@begin, +@dur, +@end, +@region, +@timeContainer, +@ttm:*, +@tts:*, +@xml:space;内容模型 被子集化为零个或多个 paragraph (p) 子级,并由 可选的 metadata 和 animation 子级超集化 1,2,3
tt:font
tt:head xhtml:head [XHTML 1.0] -@dir, -@lang, -@profile; +@id, +@xml:space;内容模型改为 可选的 metadata 子级,后跟可选的 styling 子级, 再后跟可选的 layout 子级 1,3
tt:image img [HTML 5.2] -@accesskey, -@alt, -@class, -@contenteditable, -@crossorigin, -@dir, -@draggable, -@height, -@hidden, -@id, -@ismap, -@lang, -@longdesc -@referrerpolicy -@sizes, -@spellcheck, -@srcset, -@tabindex, -@title, -@translate; -@usemap, -@width; +@animate, +@begin, +@condition, +@dur, +@end, +@format, +@region, +@timeContainer, +@type, +@tta:*, +@tts:*, +@ttm:*, +@xlink:href, +@xlink:role, +@xlink:show, +@xlink:title, +@xml:id, +@xml:lang, +@xml:space 2,3
tt:initial
tt:layout fo:simple-page-master [XSL-FO 1.1] 概念性派生 4
tt:metadata svg:metadata [SVG 1.1] +@ttm:*, +@xml:lang, +@xml:space;内容模型 不是混合的(无 #PCDATA) 3
tt:p xhtml:p [XHTML 1.0] -@class, -@dir, -@lang, -@on*, -@title; +@begin, +@dur, +@end, +@region, +@timeContainer, +@ttm:*, +@tts:*, +@xml:space;内容模型 被子集化为零个或多个 span 子级,并由可选的 metadata 和 animation 子级超集化 1,2,3
tt:region fo:region-* [XSL-FO 1.1] 概念性派生 4
tt:resources svg:defs 概念性派生 4
tt:set svg:set [SVG 1.1] -@*,begin、dur、end 除外;+@tts:*, +@xml:lang, +@xml:space 3,6
tt:source source [HTML 5.2] -@media, @srcset, @sizes; +@condition, @format, @xml:space 3
tt:span xhtml:span [XHTML 1.0] -@class, -@dir, -@lang, -@on*, -@title; +@begin, +@dur, +@end, +@region, +@timeContainer, +@ttm:*, +@tts:*, +@xml:space;内容模型 被子集化为零个或多个 #PCDATA 或 break (br) 子级,并 由可选的 metadata 和 animation 子级超集化 1,2,3
tt:style style specification [CSS2] 已标识的样式属性 名称和值的成对集合的 XML 表示,可选地通过引用 其他 style 元素来包含其他样式 7
tt:styling xhtml:style [XHTML 1.0] 样式规范集集合的 XML 表示,每个 集合由一个 style 子元素表示 1,7
tt:tt xhtml:html [XHTML 1.0] -@dir, -@lang; +@id, +@ttp:*, +@xml:space;内容模型通过 允许 body 和/或 head 为可选而被子集化 1,8
ttm:actor mpeg7:Creator [MPEG7-5] 概念性派生 4
ttm:agent mpeg7:Agent [MPEG7-5] 概念性派生 4
ttm:copyright mpeg7:CopyrightString [MPEG7-5] 概念性派生 4
ttm:desc svg:desc [SVG 1.1] -@class, -@style 2,9
ttm:item meta [HTML 5.2] 概念性派生 4
ttm:name mpeg7:Name [MPEG7-5] 概念性派生 4
ttm:title svg:title [SVG 1.1] -@class, -@style 2,9
ttp:extension @requiredExtensions [SVG 1.1] 概念性派生 10
ttp:extensions @requiredExtensions [SVG 1.1] 概念性派生 10
ttp:feature @requiredFeatures [SVG 1.1] 概念性派生 10
ttp:features @requiredFeatures [SVG 1.1] 概念性派生 10
ttp:profile @baseProfile [SVG 1.1] 概念性派生 11

注:

  1. 派生相对于 [XHTML 1.0] §A.1 定义的严格 DTD 来指示。

  2. class 属性实际上被 style 属性取代,后者不是指定行内样式, 而是间接引用一个或多个 style 元素,这些元素定义样式规范集的集合。

  3. xml:langxml:space 属性定义在所有 元素 类型上,以支持其继承语义在外来命名空间元素上下文中 运作。

  4. 派生仅为概念性(名义性)。

  5. 已删除

  6. svg:setattributeNameto 属性 被替换为通过使用 tts:* 属性直接表达目标属性名称和值。

  7. CSS 样式规范语法通过使用 TT Style Namespace 中定义的属性映射到 XML。

  8. xml:id 属性定义为可用于所有元素类型。

  9. style 属性在 10.2.1 style中枚举的元素类型上受支持。

  10. 派生自 svg:svg 元素上 @requiredExtensions@requiredFeatures 的使用, 但扩展为支持对可选性的不同指定。

  11. 派生自 svg:svg 元素上 @baseProfile@version 的使用。

  12. 从现有 tt:styling 元素概念性派生, 该元素是样式规范的通用容器,但此处用于 定义动画规范。

N.2 属性派生

表 N-2 – 属性的第一列 指定一个 TTML 属性词汇项;第二列指定该词汇项所基于的 语法和/或语义模型; 第三列指定定义该模型的引用 (如果指示了模型); 第四列指定有关派生的详细信息;最后一 列引用描述该派生性质的附加注释。

在描述派生详细信息的第四列中,使用一种 记法来指示属性 值的添加或移除。例如,在 timeContainer 属性的派生中, 详细信息列包含 "-excl",这表示为 timeContainer 模型属性指定使用的 excl 值,并未指定用于相应的 TTML 属性;类似地,详细信息列中的 "+value" 表示该属性的值已被扩展为包含 value

下面仅列出那些指定用于多个 TTML 元素类型的属性。那些针对每个元素、唯一地为某个特定 TTML 元素类型定义的命名空间属性 不在下面列出,但被认为是 上文 表 N-1 – 元素中描述的特定元素 类型派生的一部分。

样式属性派生在下文单独列出。

表 N-2 – 属性
属性 模型 引用 详细信息 注释
begin begin [SMIL 3.0] 参见注释 1,2,3
dur dur [SMIL 3.0] 参见注释 1,2,3
end end [SMIL 3.0] 参见注释 1,2,3
region master-reference [XSL-FO 1.1] 概念性派生
style class [CSS2] 直接解引用样式规范
timeContainer timeContainer [SMIL 3.0] -excl, -none; 无默认属性值 4
ttm:agent 用于标明内容的 agent
ttm:role 用于标明内容的 role
ttp:cellResolution 表达基于单元格坐标的均匀网格分辨率
ttp:clockMode 确定如何解释时间表达式
ttp:frameRate 表达整数帧率
ttp:frameRateMultiplier 用于表达非整数有理帧率
ttp:markerMode 表达标记连续性语义
ttp:pixelAspectRatio 表达根容器的像素宽高比
ttp:profile 表达文档实例所使用的 TTML 的配置文件
ttp:dropMode 表达帧计数(丢弃)模式
ttp:subFrameRate 表达子帧率
ttp:tickRate 用于解释基于 tick 的时间表达式
ttp:timeBase 用于解释时间表达式的语义
xml:id xml:id [XML ID] 符合模型
xml:lang xml:lang [XML 1.0] 符合模型
xml:space xml:space [XML 1.0] 参见注释 5

注:

  1. 受限为表达一个时钟值,该值根据 ttp:timeBase 属性表达的参数分别为 mediasmpteclock, 表示以下之一: (1) 从链接到媒体时间 线的隐式同步基开始的偏移,(2) 表示隐式媒体标记发生的事件时间, 或 (3) 挂钟 时间。

  2. 在语法上按如下方式对子集化和超集化 [SMIL 3.0] Clock-value 语法: (1) 要求非负 Full-clock-valueTimecount-value; (2) 如果为 Full-clock-value, 则 hours 必须为两位或更多位数字; (3) 如果为 Timecount-value,则必须指定 metric; (4) 使用 m 作为 min 度量的别名,以表示 分钟; (5) 添加 ft 度量,分别表示帧和 tick; (6) 通过指定帧计数或带有子帧计数的帧 计数,在 Full-clock-value 中添加可选 Fraction 的替代表达。

  3. 时间表达式的解释进一步受到 ttp:clockModettp:dropModettp:frameRatettp:frameRateMultiplierttp:markerModettp:subFrameRatettp:tickRatettp:timeBase 属性所表达参数的约束。

  4. 如果未指定,则并行(par)容器语义适用于 12.2.4 timeContainer所指定的元素类型。

  5. 在根元素上,默认属性值指定为 default,它依据空白 规范化来定义。保留和默认规范化的语义 由 8.2.10 xml:space依据呈现语义定义。

N.2.1 样式属性派生

本节列出每个样式属性所派生自的引用,或可被视为 等价项的引用,并指出相对于所引用 来源的任何差异。它可用作将 TTML 样式属性映射到 等价 CSS 属性的信息性参考,并在可用时映射到 XSL 属性。其他映射 也是可能的,例如映射到 [SVG 1.1]

CSS 等价性假定每个 中间同步文档 都映射到一个等价的 [HTML 5.2] DOM 结构,其元素 被赋予所述样式属性。

注:

在 TTML 中,样式属性名称和值被规范化为使用 lowerCamelCase 命名约定。

N.2.1.1 tts:backgroundClip
引用 [CSS Backgrounds and Borders], §3.7
模型 background-clip
值直接映射。
注释
N.2.1.2 tts:backgroundColor
XSL 派生 CSS 派生
引用 [XSL-FO 1.1], §7.8.2 [CSS2], §14.2.1
模型 background-color background-color
-inherit 值直接映射
注释 使用模型中命名颜色的子集,并向其中添加两个别名,如下: magenta 作为 fuchsia,以及 cyan 作为 aqua 使用模型中命名颜色的子集,并向其中添加两个别名,如下: magenta 作为 fuchsia,以及 cyan 作为 aqua。不支持命名颜色 orange
N.2.1.3 tts:backgroundExtent
引用 [CSS Backgrounds and Borders], §3.9
模型 background-size
值直接映射
注释
N.2.1.4 tts:backgroundImage
XSL 派生 CSS 派生
引用 [XSL-FO 1.1], §7.8.3 [CSS2], §14.2.1
模型 background-image background-image
-inherit -inherit
注释
N.2.1.5 tts:backgroundOrigin
引用 [CSS Backgrounds and Borders], §3.8
模型 background-origin
值直接映射
注释
N.2.1.6 tts:backgroundPosition
引用 [CSS2], §14.2
模型 background-position
值直接映射
注释
N.2.1.7 tts:backgroundRepeat
XSL 派生 CSS 派生
引用 [XSL-FO 1.1], §7.8.4 [CSS2], §14.2.1
模型 background-repeat background-repeat
  • -inherit,

  • repeatX 映射到 repeat-x,

  • repeatY 映射到 repeat-y,

  • noRepeat 映射到 no-repeat

  • -inherit,

  • repeatX 映射到 repeat-x,

  • repeatY 映射到 repeat-y,

  • noRepeat 映射到 no-repeat

注释
N.2.1.8 tts:border
引用 [XSL-FO 1.1], §7.31.3,以及 [CSS Backgrounds and Borders], §4 和 §5
模型 border
-inherit
注释
N.2.1.9 tts:bpd
引用 [XSL-FO 1.1] §7.15.6 和 [CSS Box Model] §9 定义的 height 属性
模型 插入模型
值直接映射
注释
N.2.1.10 tts:color
XSL 派生 CSS 派生
引用 [XSL-FO 1.1], §7.18.1 [CSS2], §14.1
模型 color color
-inherit -inherit
注释 使用模型中命名颜色的子集,并向其中添加两个别名,如下: magenta 作为 fuchsia,以及 cyan 作为 aqua 使用模型中命名颜色的子集,并向其中添加两个别名,如下: magenta 作为 fuchsia,以及 cyan 作为 aqua。不支持命名颜色 orange
N.2.1.11 tts:direction
XSL 派生 CSS 派生
引用 [XSL-FO 1.1], §7.29.1 [CSS Writing Modes], §2.1
模型 direction direction
-inherit。适用特殊继承 语义 适用特殊继承 语义
注释 无` 无`
N.2.1.12 tts:disparity

无派生,即在本规范中引入。

注:

tts:disparity 的计算值等价于 [DVBSS] 中定义的 disparity shift 值的一半。

N.2.1.13 tts:display
引用 [CSS2], §9.2.4
模型 display
autonone
注释
N.2.1.14 tts:displayAlign
XSL 派生 CSS 派生
引用 [XSL-FO 1.1], §7.14.4 [CSS Flex], §8.2
模型 display-align justify-content(见下方注释)
-inherit, +justify
  • before 映射到 flex-start

  • center 映射到 center

  • after 映射到 flex-end

  • justify 映射到 space-between

注释 CSS 提供多种布局;其中一种提供与 tts:displayAlign 属性等价语义的布局在此描述:
  • 使用 flex 布局,将主轴设置为从上到下的垂直方向: display: flex; flex-direction: column; position: absolute;

  • tts:displayAlign 映射到 justify-content

N.2.1.15 tts:extent
引用 [XSL-FO 1.1], §7.15.6 和 §7.15.14
模型 width, height
值直接映射
注释 简写属性
N.2.1.16 tts:fontFamily
XSL 派生 CSS 派生
引用 [XSL-FO 1.1], §7.9.2 [CSS2], §15.3
模型 font-family font-family
-inherit。子集化并扩展通用族名 -inherit。子集化并扩展通用族名
注释 可以像 CSS 中一样,在列表定界符周围包含空白。
N.2.1.17 tts:fontKerning
引用 [CSS Fonts], §6.3
模型 font-kerning
-auto
注释
N.2.1.18 tts:fontSelectionStrategy

引用 [XSL-FO 1.1], §7.9.3.
模型 font-selection-strategy
-inherit, character 映射到 character-by-character
选择准则已扩展。 无。
N.2.1.19 tts:fontShear
引用 [CSS Transforms], §9.1
模型 skewX()skewY() 2D 变换函数
  • 当行内进展维度为 X 轴时,skewX() 适用;

  • 当行内进展维度为 Y 轴时,skewY() 适用;

  • 百分比值必须映射为以度为单位的角度。

注释 [SVG 1.1] 中有类似的变换函数可用
N.2.1.20 tts:fontSize
XSL 派生 CSS 派生
引用 [XSL-FO 1.1], §7.9.4. [CSS2], §15.7.
模型 font-size font-size
-inherit, -<absolute-size>, -<relative-size>. -inherit, -<absolute-size>, -<relative-size>.
注释
  • 适用特殊 继承语义

  • 将大小限制为长度规范,该规范可以是百分比;

  • 添加可选的第二个长度(或百分比),用于 分别指定字形 EM 方块的水平和垂直缩放;

  • 添加第二个长度组件以允许独立指定字体 宽度和高度,是 TTML 引入的扩展。

  • 适用特殊 继承语义

  • 将大小限制为长度规范,该规范可以是百分比;

  • 添加可选的第二个长度(或百分比),用于 分别指定字形 EM 方块的水平和垂直缩放;

  • 添加第二个长度组件以允许独立指定字体 宽度和高度,是 TTML 引入的扩展。

N.2.1.21 tts:fontStyle
XSL 派生 CSS 派生
引用 [XSL-FO 1.1], §7.9.7 [CSS2], §15.4
模型 font-style font-style
-inherit, -backslant -inherit
注释
N.2.1.22 tts:fontVariant
引用 [CSS Fonts], §6.11
模型 font-variant-east-asianfont-variant-position 以及 font-feature-settings
  • font-variant-east-asian: full-width, ruby

  • font-variant-position: normal, sub, super

  • font-feature-settings: hwid

注释
N.2.1.23 tts:fontWeight
引用 [XSL-FO 1.1], §7.9.9 [CSS2], §15.6
模型 font-weight font-weight
-inherit, -bolder, -lighter, -<number> -inherit, -initial, -bolder, -lighter, -<number>, -unset
注释
N.2.1.24 tts:ipd
引用 [XSL-FO 1.1] §7.15.14 和 [CSS Box Model] §9 定义的 width 属性
模型 插入模型
插入值
注释 插入注释
N.2.1.25 tts:letterSpacing
引用 [CSS Text], §8.2
模型 letter-spacing
值直接映射
注释
N.2.1.26 tts:lineHeight

行堆叠语义旨在匹配 CSS line box 堆叠策略。

XSL 派生 CSS 派生
引用 [XSL-FO 1.1], §7.16.4 [CSS2], §10.8
模型 line-height line-height
-inherit, -<number>, -<space> -inherit, -<number>, -<space>, -calc, -initial, -unset
注释 本规范的意图是,行的 分配矩形与 [XSL-FO 1.1] §4.5 定义的 per-inline-height-rectangle 保持一致,即使用 CSS 风格的 line box 堆叠策略。
N.2.1.27 tts:luminanceGain

无派生,即在本规范中引入。

N.2.1.28 tts:lineShear
引用 [CSS Transforms], §9.1
模型 skewX()skewY() 2D 变换函数
  • 当行内进展维度为 X 轴时,skewX() 适用;

  • 当行内进展维度为 Y 轴时,skewY() 适用;

  • 百分比值必须映射为以度为单位的角度。

注释 [SVG 1.1] 中有类似的变换函数可用
N.2.1.29 tts:opacity
引用 [CSS3 Color], §3.2
模型 opacity
-inherit
注释
N.2.1.30 tts:origin
引用 [XSL-FO 1.1]
模型 top, left
值直接映射
注释 简写属性
N.2.1.31 tts:overflow
XSL 派生 CSS 派生
引用 [XSL-FO 1.1], §7.21.2 [CSS2], §11.1.1
模型 overflow overflow
-inherit, -auto, -error-if-overflow -inherit, -auto, -initial, -scroll, -unset
注释
N.2.1.32 tts:padding
XSL 派生 CSS 派生
引用 [XSL-FO 1.1], §7.31.15 [CSS2], §8.4
模型 padding padding
-inherit。各个简写值映射到 [XSL-FO 1.1] §7.8.31、 7.8.32、7.8.33 和 7.8.34 定义的相对于书写模式的 padding 值 -calc, -inherit, -unset
注释 以相对于书写模式的 padding 属性表示, 而不是以绝对 padding 属性表示。 TTML 和 XSL 边缘描述符映射到 [CSS Writing Modes] §6.2 定义的抽象流相对边缘描述符:
  • before 映射到 block-start

  • end 映射到 inline-end

  • after 映射到 block-end

  • start 映射到 inline-start

这些抽象边缘描述符继而映射到 [CSS Writing Modes] §6.4 中 定义的物理边缘。
N.2.1.33 tts:position
引用 [CSS Backgrounds and Borders], §3.6
模型 background-position
值直接映射
注释
N.2.1.34 tts:ruby
引用 [Ruby][CSS Ruby]
模型 ruby-*
见注释和规范文本。
注释 另见 [JLREQ] §3.3 以获取进一步信息。也可以替代性地 映射到 [HTML 5.2] ruby 标记。
N.2.1.35 tts:rubyAlign
引用 [CSS Ruby], §4.3
模型 ruby-align
+end, +withBase。 此样式属性的语义由本规范扩展。
注释 引用中所示的示例和示例渲染适用。
N.2.1.36 tts:rubyPosition
引用 [CSS Ruby], §4.1
模型 插入模型
插入值
注释 引用中所示的示例和示例渲染,在按本规范定义的 映射取模后适用。
N.2.1.37 tts:rubyReserve

无派生,即在本规范中引入。

N.2.1.38 tts:shear
引用 [CSS Transforms], §9.1
模型 skewX()skewY() 2D 变换函数
  • 当行内进展维度为 X 轴时,skewX() 适用;

  • 当行内进展维度为 Y 轴时,skewY() 适用;

  • 百分比值必须映射为以度为单位的角度。

注释 [SVG 1.1] 中有类似的变换函数可用
N.2.1.39 tts:showBackground
引用 [SMIL 3.0], §7.4.2
模型 showBackground
-inherit
注释
N.2.1.40 tts:textAlign
XSL 派生 CSS 派生
引用 [XSL-FO 1.1], §7.16.9 [CSS2], §16.2
模型 text-align text-align
-inherit -inherit, +start, +end
注释 text-align-last 必须设置为 "relative" TTML 添加了依赖书写模式的值 startend, 它们可被视为抽象的流相对方向,并根据 [CSS Writing Modes] §6.4 映射到 物理方向。更多 细节参见 tts:padding CSS 派生
N.2.1.41 tts:textCombine
引用 [CSS Writing Modes], §9.1
模型 text-combine-upright
值直接映射
注释
N.2.1.42 tts:textDecoration
XSL 派生 CSS 派生
引用 [XSL-FO 1.1], §7.17.4 [CSS2], §16.3.1
模型 text-decoration text-decoration
-blink, -inherit(关键字), -no-blink -blink, -inherit(关键字), +noUnderline, +noLineThrough, +noOverline. lineThrough 映射到 line-through.
注释 定义为可继承,并具有 特殊继承 语义 适用特殊继承 语义。 用于确定下划线位置的 XSL 语义适用。
N.2.1.43 tts:textEmphasis
引用 [CSS Text Decoration], §3
模型
auto 外,值直接映射。 auto 的语义依赖书写模式。
注释
N.2.1.44 tts:textOrientation
引用 [UTR50][CSS Writing Modes], §5.1
模型 text-orientation
-inherit, -sideways-left, -sideways-right, -use-glyph-orientation
注释
N.2.1.45 tts:textOutline
引用 [XSL-FO 1.1]
模型 text-shadow
-inherit(关键字),定义为可继承
注释 仅使用一个长度规范而不是两个,其中一个长度 定义轮廓效果相对于字形轮廓名义边缘、 垂直于字形轮廓点的距离。 还添加了百分比长度,以相对于字体大小表达轮廓效果。 轮廓效果旨在绘制在外部闭合 轮廓之外以及内部闭合轮廓之内。
N.2.1.46 tts:textShadow
引用 [CSS Text Decoration], §4
模型 text-shadow
值直接映射
注释
N.2.1.47 tts:unicodeBidi
引用 [XSL-FO 1.1], §7.29.6 和 [CSS Writing Modes], §2.2
模型 unicode-bidi
-inherit,+isolate
注释 [CSS Writing Modes] 添加 isolate
N.2.1.48 tts:visibility
XSL 派生 CSS 派生
引用 [XSL-FO 1.1], §7.30.17 [CSS2], §11.2
模型 visibility visibility
-inherit, -collapse -inherit, -collapse
注释
N.2.1.49 tts:wrapOption
引用 [XSL-FO 1.1], §7.16.13
模型 wrap-option
-inherit
注释
N.2.1.50 tts:writingMode
引用 [XSL-FO 1.1], §7.29.7
模型 writing-mode
-inherit, -bt-lr, -bt-rl, -lr-bt, -rl-bt, -lr-alternating-rl-bt, -lr-alternating-rl-tb, -lr-inverting-rl-bt, -lr-inverting-rl-tb, -tb-lr-in-lr-pairs
注释
N.2.1.51 tts:zIndex
XSL 派生 CSS 派生
引用 [XSL-FO 1.1], §7.30.18 [CSS2], §9.9.1
模型 z-index z-index
-inherit -inherit
注释

O QA Framework 符合性(非规范性)

本附录规定本规范对 QA Framework Specifications Guidelines[QAF SG] 所定义的 需求和指南的符合情况。

O.2 指南

表 O-2 – QA Framework 指南检查清单
指南 不适用 注释
良好 实践 01:在一致性 条款中定义规范的一致性模型。
良好 实践 02:在一致性条款中说明如何区分规范性内容和 信息性内容。
良好 实践 03:提供一致性声明的措辞。
良好实践 04: 提供实现一致性声明形式模板。
良好 实践 05:要求将实现一致性声明作为有效 一致性声明的一部分。
良好 实践 06:提供示例、用例和图形。
良好 实践 07:编写示例代码或测试。
良好 实践 08:当通过规范性引用施加需求时,处理一致性 依赖关系。 1
良好 实践 09:在行内定义不熟悉的术语,并在 术语表节中汇总定义。
良好 实践 10:使用已定义的术语而不改变其定义。 2
良好 实践 11:尽可能使用形式语言。
良好 实践 12:编写测试断言。 3
良好 实践 13:在有必要时创建技术细分。
良好 实践 14:如果技术被配置文件化,则定义创建新 配置文件的规则。
良好 实践 15:在有必要时使用可选特性。
良好 实践 16:清楚标识可选特性。
良好 实践 17:指出可选特性的任何限制或约束。
良好 实践 18:如果允许可扩展性,则定义扩展机制。
良好 实践 19:警示扩展创建者创建不会干扰 一致性的扩展。
良好 实践 20:定义未知扩展的错误处理。 4
良好 实践 21:解释如何避免使用已弃用特性。
良好 实践 22:标识废止特性。 不适用 5
良好 实践 23:定义错误处理机制。

注:

  1. 在对外部规范进行规范性引用时, 会引用具体条款或章节。

  2. 另见 N 词汇派生

  3. 测试断言和测试套件将在进入 Proposed Recommendation(PR)阶段之前提供。

  4. 参见 3.2 处理器一致性 中的准则 #3 以及 TTML 抽象文档实例的定义。

  5. 本版本 TTML 没有废止任何特性。

P 安全和隐私注意事项(非规范性)

P.1 使用 XML 作为具体编码

[XML 1.0] 用作 定时文本文档实例的具体编码时,适用 [XML Media Types][XML Guidelines] 所规定的安全 注意事项。

注:

XML 实体不包含在精简 XML 信息集中, 该信息集属于定时文本文档实例; 然而, 鼓励实现提供针对递归实体展开的保护,或 在 TTML 处理器中完全防止实体展开。

P.2 文档处理

定时文本文档实例旨在 由内容处理器以某种方式处理。 尽管本规范定义了此类处理器对 定时文本文档实例进行符合规范处理的含义, 但该处理器的实际实现不在本规范范围内。

P.3 资源获取

本规范定义了允许定时 文本文档实例 引用外部资源的机制,包括音频、字体、图像和无类型(通用)数据 资源。 此类资源的获取以及 定时文本文档实例 的具体表示的获取,完全由内容处理器控制。因此, 旨在允许或限制访问此类资源的任何控制机制也不在 本规范范围内。

获取外部资源时,内容处理器应确定是否需要 一个 可能启用 CORS 的请求,其定义见 [HTML 5.2]

如果内容 处理器阻止获取此类资源, 则整个文档或文档的某些部分可能无法按预期处理,并且 因此,文档的部分或全部 内容可能无法用于呈现处理。

在媒体播放期间下载外部资源的用户代理,会向该资源的源服务器 指示用户的 媒体消费进度。在许多情况下,此类媒体进度信息可通过其他机制提供给 媒体的源服务器,例如 通过脚本或监视流媒体请求。

在下载外部资源时不强制执行跨源策略的用户代理,会在未经提供 媒体的网站同意且未经用户同意的情况下,将此类 媒体进度信息以及可能的 其他用户跟踪信息暴露给其他源。本 规范不定义 API,也不说明实现应如何获取 被引用资源。

P.4 资源或处理状态的缓存

本文所定义的定时文本文档实例 的处理, 不以任何方式规定或依赖内容 处理器 缓存或存储任何资源或处理状态。

P.5 无脚本语言

本规范不包含也不引用任何脚本语言或 可执行代码的处理。

P.6 无外部样式表

本规范不包含也不引用任何外部样式表 或样式规范的处理;相反, 所有样式信息都直接集成到 TTML 文档语法中,并依据 该语法的精简 XML 信息集表示进行处理。

P.7 访问处理状态

本文定义了一种机制,允许对内容进行条件处理,其中条件 表达式 可以考虑某些处理状态,包括用户语言偏好、相关 媒体语言、 是否启用强制字幕,以及媒体查询表达式是否满足。 然而,TTML 内容并不直接访问此状态;相反,内容处理器 访问此状态,并作出条件是否满足的二元(是或否)判断。

P.8 超链接机制

本文定义了一种基于 [XLink 1.1] 的机制,允许作者将内容 关联到 外部文档。内容处理器是否为该机制提供 语义支持,是在本规范范围之外作出的决定。 此外,如果支持链接激活,其语义同样不在本 规范范围内。

P.9 偏好的隐私

选择并导致下载或解释 定时文本文档实例的用户代理,可能会向 源服务器指示该用户 需要说明文字或字幕,并且因此可能指示用户用于获取说明文字或字幕的语言偏好。 这种语言偏好构成 关于用户的信息。然而,提供定时文本文档实例 以及选择是否检索和处理它,是发出该提供的应用的特征(例如基于 [HTML 5.2] 的 Web 应用),而不是文档实例本身的特征。

Q 高动态范围合成(非规范性)

本附录说明如何将 [SRGB] 像素合成到高动态范围 (HDR)像素上。

Q.1 感知量化器

以下说明如何使用 tts:luminanceGain[SRGB] 像素合成到符合 [ITU BT.2100-1] 中指定的系统色度、使用 感知量化器(PQ)EOTF 和全范围量化的 HDR 像素上。

  1. (r, g, b) 为一个全范围 8-bit [SRGB] 像素,其 opacity 介于 0 和 1 之间。

  2. (R, G, B)(Rc, Gc, Bc)[ITU BT.2100-1] 中指定的系统色度中的全范围 10-bit 像素,使用 PQ EOTF 和全范围量化,其 opacity AAc 介于 0 和 1 之间。

  3. 反转 8-bit 全范围量化:

    (r, g, b) / 255 → (r, g, b)

  4. 使用 [SRGB] EOTF 线性化:

    (r2.4, g2.4, b2.4) → (r, g, b)

  5. 使用 tts:luminanceGain 属性和 [SRGB] illuminant 计算 HDR 绝对亮度:

    80 ∙ tts:luminanceGain ∙ (r, g, b) → (r, g, b)

  6. [SRGB] 色彩空间转换到 [ITU BT.2100-1] 色彩空间:

    [(0.62740389593470, 0.32928303837789, 0.04331306568741), (0.06909728935823, 0.91954039507545, 0.01136231556630), (0.01639143887515, 0.08801330787723, 0.89559525324763)] ∙ (r, g, b) → (r, g, b)

  7. 归一化到 10,000 cd∙m-2

    (r, g, b) / 10000 → (r, g, b)

  8. 应用 [ITU BT.2100-1] 中指定的逆 PQ EOTF:

    (PQ(r), PQ(g), PQ(b)) → (r, g, b)

    其中 PQ(L) = [(c1 + c2 ∙ Lm1) / (1 + c3 ∙ Lm1)]m2m1 = 0.1593017578125m2 = 78.84375c1 = 0.8359375c2 = 18.8515625,以及 c3 = 18.6875

  9. 应用 opacity:

    (1-a) ∙ (r, g, b) → (r, g, b)

  10. 应用 10-bit 全范围量化:

    (Q(r), Q(g), Q(b)) → (r, g, b)

    其中 Q(N) = floor(1023 ∙ N + 0.5)

  11. 应用合成以产生 (Rc, Gc, Bc)

    (clamp(r + R), clamp(g + G), clamp(b + B)) → (Rc, Gc, Bc)

    1 + (1 - a) ∙ (A - 1) → Ac

    其中

    clamp(x) = 0,当 x < 0

    clamp(x) = x,当 0 ≤ x ≤ 1023

    clamp(x) = 1023,当 x > 1023

Q.2 Hybrid Log-Gamma HDR

以下说明如何将 [SRGB] 像素合成到 Hybrid Log-Gamma (HLG) HDR 像素上。

  1. (r, g, b) 为一个全范围 8-bit [SRGB] 像素,其 opacity A 介于 0 和 255 之间。

  2. (R,G,B)(Rc,Gc,Bc)[ITU BT.2100-1] 中指定的系统色度中的窄范围 10-bit 像素,使用 HLG EOTF 和窄范围量化。下标 c 表示合成后的视频信号。

  3. (X,Y,Z) 为 CIE 1931 XYZ colour space [XYZ] 中指定的系统色度中的像素。

  4. 反转 8-bit 全范围量化:

    (r, g, b)/255 → (r, g, b)

    A/255 → A

  5. 使用 [SRGB] EOTF 线性化:

    (r2.0,g2.0,b2.0) → (r,g,b)

  6. [SRGB] 色彩空间转换到 [ITU BT.2100-1] 色彩空间:

    [(0.4124, 0.3576, 0.1805), (0.2126, 0.7152, 0.0722), (0.0193,0.1192,0.9505)]•(r,g,b)→(X,Y,Z)

    [(1.7167, −0.3557, −0.2534), (−0.6667, 1.6165, 0.0158), (0.0176,−0.04277,0.9421)]•(X,Y,Z)→(r,g,b)

  7. 应用简化逆 HLG OOTF:

    ((0.265r),(0.265g),(0.265b)) → (r,g,b)

  8. 应用 [ITU BT.2100-1] 中指定的 HLG OETF:

    (HLG(r),HLG(g),HLG(b)) → (r,g,b)

    其中

    HLG(x) = (3x)0.5,当 0 ≤ x ≤ 1/12

    HLG(x) = a•ln(12x−b)+c,当 x > 1/12

    a = 0.17883277b = 1−4ac = 0.5−a•ln(4a)

  9. 应用 10-bit 窄范围量化:

    (Q(r),Q(g),Q(b)) → (r,g,b)

    其中 Q(x) = floor((940 − 64) • x + 64.5)

  10. 将前景图形 (r,g,b) 以 opacity A 合成到背景视频 (R,G,B) 上,以产生 (Rc,Gc,Bc)

    ((A•r+(1−A)R),(A•g+(1−A)G),(A•b+(1−A)B)) → (Rc,Gc,Bc)

  11. 将输出钳制到 10-bit 信号范围:

    (clamp(Rc),clamp(Gc),clamp(Bc)) → (Rc,Gc,Bc)

    其中

    clamp(x) = 0,当 x < 0

    clamp(x) = x,当 0 ≤ x ≤ 1023

    clamp(x) = 1023,当 x > 1023

注:

上述算法不使用 tts:luminanceGain 属性,因为 HLG HDR 不需要绝对增益级别。相反, 此算法将峰值 [SRGB] 白映射到 HLG 中的 “graphics white”,其定义为 [ITU BT.2100-1] 中定义的窄范围 信号的 75%。

注:

gamma 指数 2.0 有意不同于 [SRGB] 中指定的 gamma 2.2。 该规范中的 2.2 值特定于其中指定的观看环境, 并包含 针对这些条件的心理视觉渲染调整。此调整对于 不包含显示渲染的 HLG 信号而言并不需要。

R 流式传输 TTML 内容(非规范性)

可以创作 TTML 内容以满足以下在 流式传输场景中可能有用的特征:

R.1 根和分支分片

TTML 内容可以被流式传输的一种可能方式,是将 文档实例的信息集划分为 不重叠的片段,其中一个特定片段,称为 根片段,表示 文档实例的前置材料(head)及其顶层结构 元素,而 其他片段表示其时间区间预期将并行 活动的内容。

在需要任意(随机)进入 流的应用中,即能够从任意数据访问单元开始读取数据的属性, 根片段将被重复 传输(插入)到流中,以允许解码器 重新同步并在信息集中获取足够的结构信息, 以便解释后续内容 片段。

这种文档实例分片的一个示例 如 图 2 – 片段流式传输 所示。

图 2 – 片段流式传输
Fragment Streaming

注:

本规范不定义传输缓冲区模型或解码器 能力模型。

R.2 时间分片

TTML 内容可以被流式传输的另一种方式,是将 文档实例的信息集划分为 有时间边界的片段,每个片段本身都是一个文档实例,包含呈现它所需的所有 前置材料(head)和内容,其中每个 片段的时间区间受到文档 交换上下文 文档处理上下文或两者的约束,使得与其他片段的时间重叠得到 解析。

例如,某些文档处理上下文通过指定在时间轴上的任一时刻 最多只能有一个文档实例处于活动状态来解析时间重叠,并且还 指定优先级规则,以在存在多个 候选项时确定该文档实例。

为了确保所有内容都被正确显示,任何落入其区间与多个 分片区间重叠的 ISD 的内容,可能需要在生成该 ISD 所需的 每个片段中重复。实现可以识别相邻且除区间外相同的 ISD, 并用覆盖组合区间的单个 ISD 替换它们。

此方法的意图是,呈现处理器能够生成与文档 实例的非流式版本所生成的 ISD 序列等价的 序列,同时通过改变片段持续时间,利用避免重复某些可控数量 前置材料的能力。不能保证重构原始源会 得到相同的文档实例。

注:

例如,此技术用于 [ISOBMFF TT][EBU-TT-Live]

这种文档实例分片的一个示例 如 图 3 – 时间分片 所示。

图 3 – 时间分片
Temporal Fragmentation

注:

在上面的示例中,单个文档实例在 T1 到 T6 的区间内有可见内容,并被分片为两个文档实例(片段), 第一个包含 T1 到 T3 期间所需的全部内容以及被引用的样式和 region,第二个包含 T4 到 T6 期间所需的全部内容以及被引用的样式和 region。

R.3 ISD 流式传输

可以将文档实例转换为 一系列定时文本 中间文档实例,并将它们作为离散实体进行流式传输。

此技术将客户端处理需求降至最低,同时要求在每个适用的 ISD 中 重复所有相关前置材料。不能保证重构原始源会 得到相同的文档实例。

S 常见字幕样式示例(非规范性)

本节提供以下常见字幕样式的示例,这些样式使用 TTML 内容 来获得所需行为:

S.1 弹出式字幕示例

paint-on 字幕的一个示例。在此示例中,两个 region 被交替的 paint-on 内容作为目标,其中内容 使用显式顺序时间包含规则进行计时。每个段落在时间上不重叠,并 出现在其目标 region 的同一单行中。

示例 – 弹出式字幕
<tt ttp:cellResolution="60 20" xml:lang="en" xmlns="http://www.w3.org/ns/ttml"
  xmlns:ttp="http://www.w3.org/ns/ttml#parameter" xmlns:tts="http://www.w3.org/ns/ttml#styling">
  <head>
    <layout>
      <region xml:id="r1" tts:color="white" tts:origin="10c 4c" tts:extent="40c 1c"/>
      <region xml:id="r2" tts:color="yellow" tts:origin="10c 8c" tts:extent="40c 1c"/>
    </layout>
  </head>
  <body>
    <div timeContainer="seq">
      <p region="r1" dur="4s">Lorem ipsum dolor sit</p>
      <p region="r2" dur="4s">Amet consectetur adipiscing elit</p>
      <p region="r1" dur="6s">Sed do eiusmod tempor incididunt labore</p>
      <p region="r2" dur="4s">et dolore magna aliqua</p>
      <p region="r1" dur="7s">Ut enim ad minim veniam quis, nostrud</p>
    </div>
  </body>
</tt>

S.2 上卷式字幕示例

上卷式字幕的一个示例。上卷效果通过使用重叠的时间区间实现, 在给定时间有零个、一个或两个段落出现在 region 中。 每个段落占用 region 的单行,因为不会发生换行。 取决于呈现处理器是否支持 相邻同步 中间文档实例之间的平滑滚动,过渡,即将 旧段落(行)移出并将新段落(行)移入,将是平滑的或离散的。

示例 – 上卷式字幕
<tt ttp:cellResolution="60 20" xml:lang="en" xmlns="http://www.w3.org/ns/ttml"
  xmlns:ttp="http://www.w3.org/ns/ttml#parameter" xmlns:tts="http://www.w3.org/ns/ttml#styling">
  <head>
    <layout>
      <region xml:id="r1" tts:color="white" tts:origin="10c 4c" tts:extent="40c 2c"
              tts:displayAlign="after"/>
    </layout>
  </head>
  <body>
    <div region="r1">
      <p>
        <span begin="0s" end="8s">Lorem ipsum dolor sit</span>
        <span begin="4s" end="12s"><br/>Amet consectetur adipiscing elit</span>
        <span begin="8s" end="18s"><br/>Sed do eiusmod tempor incididunt labore</span>
        <span begin="14s" end="25s"><br/>et dolore magna aliqua</span>
        <span begin="18s" end="29s"><br/>Ut enim ad minim veniam quis, nostrud</span>
      </p>
    </div>
  </body>
</tt>

S.3 绘制式字幕示例

绘制式字幕的一个示例。绘制效果通过使用计时的 span 元素来暴露(绘制)行内文本单元,例如单词, 持续某个时间区间。在这里,五个段落的各个单词被顺序计时, 以便每秒绘制一个新单词。每个行内元素的活动持续时间结束 与 div 元素的并行时间容器结束一致, 因此,一旦某个单词被绘制,它就会保持在 region 中(在其渲染行上),直到 div 元素的活动时间区间结束。

示例 – 绘制式字幕
<tt ttp:cellResolution="60 20" xml:lang="en" xmlns="http://www.w3.org/ns/ttml"
  xmlns:ttp="http://www.w3.org/ns/ttml#parameter" xmlns:tts="http://www.w3.org/ns/ttml#styling">
  <head>
    <layout>
      <region xml:id="r1" tts:color="white" tts:origin="10c 4c" tts:extent="40c 5c"/>
    </layout>
  </head>
  <body>
    <div begin="0s" end="25s">
      <p>
        <span begin="0s">Lorem</span>
        <span begin="1s">ipsum</span>
        <span begin="2s">dolor</span>
        <span begin="3s">sit</span>
      </p>
      <p>
        <span begin="4s">Amet</span>
        <span begin="5s">consectetur</span>
        <span begin="6s">adipiscing</span>
        <span begin="7s">elit</span>
      </p>
      <p>
        <span begin="8s">Sed</span>
        <span begin="9s">do</span>
        <span begin="10s">eiusmod</span>
        <span begin="11s">tempor</span>
        <span begin="12s">incididunt </span>
        <span begin="13s">labore</span>
     </p>
     <p>
        <span begin="14s">et</span>
        <span begin="15s">dolore</span>
        <span begin="16s">magna</span>
        <span begin="17s">aliqua</span>
      </p>
      <p>
        <span begin="18s">Ut</span>
        <span begin="19s">enim</span>
        <span begin="20s">ad</span>
        <span begin="21s">minim</span>
        <span begin="22s">veniam</span>
        <span begin="23s">quis,</span>
        <span begin="24s">nostrud</span>
      </p>
    </div>
  </body>
</tt>

T 呈现自定义选项(非规范性)

本节为文档作者和实现者可用于自定义任何给定文档实例呈现的选项 提供高级摘要。

请注意,此上下文中的自定义是对指定呈现 行为的修改。本节并不尝试枚举未指定呈现 行为可以如何实现的方式,例如字体光栅化算法。

T.1 使用 Condition 自定义

condition 属性允许文档作者 基于创作时已知的 输入参数修改预期呈现。例如,在封闭系统中,可能存在预定义的 text-size 参数枚举值,可用于修改 应用于内容的样式。或者可以使用媒体函数 基于媒体查询来修改适用 region 的位置和范围——参见 [Media Queries]

T.2 使用预处理器自定义

可以应用预处理技术,在呈现之前修改文档实例, 例如使用 [XSLT3],可能在 [XPROC] 管道的上下文中,用于修改样式属性的初始值,或被继承的根 元素样式属性。此类预处理不在本 规范范围内,除非此类预处理器被视为 转换处理器的实例。

T.3 通过破坏呈现 一致性进行自定义

虽然本规范尝试在 可能的范围内定义 呈现处理器一致性 需求,但这并不排除任何实现有意偏离此类一致性, 如果认为这样做合适。例如,呈现处理器可以 标识呈现文本与其他视觉指示器(如视频 播放控件)之间的位置冲突,并通过临时移动受影响的 TTML region 来解决这些冲突。或者 呈现处理器可以向用户提供选项,以减小呈现字体大小, 同时不引入意外换行。

按照定义,任何此类不一致性都不在本规范范围内。

U 从 TTML1 开始的词汇变更(非规范性)

本节提供 Timed Text Markup Language (TTML) Version 1 (TTML1) 与 Version 2 (TTML2) 之间词汇变更的高级摘要。本摘要无意穷尽所有内容。有关 变更的更多细节, 参见 Timed Text Markup Language 2 (TTML2) Change Summary

U.1 新元素词汇

本规范的以下节中添加了新元素词汇,如下进一步描述:

U.1.1 动画词汇

为了增强对动画功能的支持,添加了以下元素:

tt:animate

支持在一个或多个时间上连续的活动 时间区间内以及跨这些区间的连续动画。

tt:animation

支持在头部材料中对非行内动画指令进行分组。

U.1.2 嵌入内容词汇

为了支持嵌入内容和内容引用,添加了以下元素:

tt:audio

支持使用内置、嵌入和外部音频资源。

tt:chunk

支持在嵌入音频、数据、字体和图像资源时使用分块, 其中分块指将资源内容细分为连续 数据段(块)。

tt:data

支持使用内置、嵌入和外部数据资源。

tt:font

支持使用内置、嵌入和外部字体资源。

tt:image

支持使用内置、嵌入和外部图像资源。

tt:resources

支持在头部材料中对可共享的嵌入内容和内容引用进行分组。

tt:source

支持嵌入内容和内容引用的替代来源。

U.1.3 元数据词汇

为了扩展元数据功能,添加了以下元素:

ttm:item

支持可扩展的命名元数据项集合。

注:

此特性源于这样一种需求:避免为由名称和值组成的元数据项 定义额外的新词汇,其中通用的命名元数据项元素可以 服务于未来定义 此类项的无界集合的需求。

U.1.4 样式词汇

为了扩展样式功能,添加了以下元素:

tt:initial

支持作者为样式属性指定初始值。

注:

此特性由多个需求推动,包括 (1) 希望能够为 本规范定义为依赖实现的某些继承样式属性的 初始值指定固定、确定的值,例如 tts:color 的初始值, 以及 (2) 希望能够覆盖某些非继承样式 属性的初始值,而不是被迫在每种情况下显式指定样式值, 例如,对于 tts:showBackground ,可能更偏好使用 whenActive 的初始值,而不是默认初始值 always

U.2 新属性词汇

本规范的以下节中添加了新属性词汇,如下进一步 描述:

U.2.1 动画属性

为了扩展动画功能,添加了以下属性:

U.2.2 内容属性

为了扩展内容功能,添加了以下属性:

U.2.3 参数属性

为了扩展参数功能,添加了以下属性:

U.2.6 音频样式属性

为了扩展音频样式功能,添加了以下属性:

V 致谢(非规范性)

编辑感谢 Timed Text Working Group 的现任和前任成员、其他 W3C Working Group 的成员,以及其他论坛中的行业专家, 他们以如下方式直接或间接地为本文档的 过程或内容作出了贡献:

Thomas Bause-Mason, John Birch, Kees Blom, Bert Bos, Brad Botkin, Dick Bulterman, Cyril Concolato, Frans de Jong, Mike Dolan, Martin Dürst, Donald Evans, Geoff Freed, Al Gilman, Giles Godart-Brown, Markus Gylling, Markku Hakkinen, Sean Hayes, Erik Hodge, Philipp Hoschka, Suzi Hyun, Richard Ishida, Michael Jordan, Masahiko Kaneko, Courtney Kennedy, George Kerscher, Dae Kim, David Kirby, Andrew Kirkpatrick, Philippe Le Hégaret, Pierre-Anthony Lemieux, Chris Lilley, Jason Livingston, Monica Martin, Matthew May, Nigel Megitt, Thierry Michel, Frank Olivier, Soohong Daniel Park, Silvia Pfeiffer, Addison Phillips, Stefan Pöschel, Rohit Puri, Brian Raymor, David Ronca, Patrick Schmitz, David Singer, Craig Smithpeters, Andreas Tai, and Mohamed Zergaoui.

编辑还希望特别感谢以下现任和前任成员的贡献:Mike Dolan(SMPTE time codes、streaming;SMPTE liaison)、David Kirby(introductory example document;SMPTE time codes、descriptive metadata;EBU/AAF liaison)、Geoff Freed(styling and example images of style properties)、Sean Hayes(advanced profile concepts,包括 applicative timing、HTML/CSS mapping proposal)、Erik Hodge(timing)、 Thierry Michel(metadata)以及 Dave Singer(animation、scrolling)。

编辑还希望感谢以下现任和前任赞助者对其在本规范上工作的支持: Cox Communications、Microsoft、Netflix 和 Samsung Electronics。

工作组将本规范献给我们的同事 David Kirby。