W3C

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

W3C 候选推荐标准快照 2021 年 3 月 9 日

本版本:
https://www.w3.org/TR/2021/CR-ttml2-20210309/
最新版本:
https://www.w3.org/TR/ttml2/
上一版本:
https://www.w3.org/TR/2020/CR-ttml2-20200128/
实现报告:
https://www.w3.org/wiki/TimedText/TTML2SecondEditionImplementationReport
编辑:
Glenn Adams, 特邀专家
Cyril Concolato, Netflix
贡献作者:
Glenn Adams, 特邀专家
Cyril Concolato, Netflix
Mike Dolan, 特邀专家
Sean Hayes, 微软
Frans de Jong, 欧洲广播联盟
Dae Kim, Netflix
Pierre-Anthony Lemieux, MovieLabs
Nigel Megitt, 英国广播公司
Dave Singer, 苹果电脑公司
Jerry Smith, 微软
Andreas Tai, 广播技术研究所有限公司
参与:
GitHub w3c/ttml2
提交错误报告
提交历史
拉取请求

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


摘要

本文档规定定时文本标记语言 (TTML) 版本 2 的第二版, 亦称 TTML2 (2e),具体规定其词汇及相应的 语义。

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

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

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

本文档的状态

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

本文档是定时文本标记语言 2 (TTML2) 第二版的第二份 候选 推荐标准 (CR2), 预计将晋级为提案 推荐标准,时间不早于 2021 年 4 月 6 日。 本第二份 候选推荐标准 (CR2) 未对 先前的第一份 候选 推荐标准 (CR1) 进行技术更改;也就是说,仅进行了编辑性(非实质性)更改。

本规范要退出 CR 阶段,必须满足以下标准:对于受到 本规范引入的实质性 更改影响的每项特性(扩展),必须至少有两个独立实现支持 已经受到 上述影响的特性(扩展)。本次修订未添加或移除任何(底层)特性(扩展),因此, 没有任何特性 (扩展)被标记为有风险。

已提供一份 实现 报告。 相较于 TTML2 第 1 版的技术更改摘要可 在 定时文本标记语言 2 (TTML2) 更改摘要 中查阅。 欢迎通过在 GitHub 上提交 议题 或 发送电子邮件至 public-tt@w3.org (订阅, 归档) 提交对本文档的意见,主题行须以 [ttml2] 开头。

本文档由 定时文本 (TT) 工作 组 作为候选推荐标准快照发布。

作为候选推荐标准发布并不意味着获得 W3C 会员的认可。 候选推荐标准快照已经过 广泛审查 ,旨在收集实现经验。

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

本文档受 2020 年 9 月 15 日的 W3C 流程文档 管辖。

1 引言

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

定时文本标记语言 (TTML) 版本 2,亦称 TTML2, 为文本信息的一个特定子集提供标准化表示, 作者或创作系统为交换和处理目的,将样式、布局和定时语义 与这些文本信息关联。

TTML 专门设计为仅满足一组有限的要求, 这些要求由 [TTAF1-REQ] 确立,并在 M 要求 中汇总。具体而言,仅满足那些服务于 与现有传统分发系统进行交换 这一需求的要求。

除了用于传统分发内容 格式之间的交换,TTML 内容也可以直接用作分发格式,例如, 提供一种标准内容格式,供 <track> 元素(位于 [HTML] 文档中),或 <text> 或 <textstream> 媒体元素(位于 [SMIL 3.0] 文档中)引用。TTML 的某些 特性支持 内容的流式传输,如 R 流式传输 TTML 内容 所述。

注:

虽然 TTML 并非专门为直接(嵌入式)集成到 HTML 或 SMIL 文档实例中而设计,但并不排除这种集成。

注:

在某些使用场景中,使用 动画内容来描绘定时文本 文档实例 所表达的同一内容的 手语表示可能是适当的。这一使用场景 并未 由 TTML 机制明确处理,但可以通过某些 外部多媒体集成技术来处理,例如 SMIL。

注:

在本规范的早期草案中,TTML 被称为 DFXP(分发 格式交换配置规范)。出于历史原因,后一术语在 某些上下文中仍予以保留,例如配置规范名称和指示符。

1.1 系统模型

TTML 预期用于更广泛的定时文本 创作、转码、分发和呈现机制环境,这些机制基于 图 1 – 系统模型 所示的系统模型,其中定时 文本标记语言 充当一组异构 创作系统之间的双向交换格式,并在按需转码 或编译为目标分发格式之后,充当面向 一组异构分发格式的单向交换格式, 其中一种特定的分发格式就是 TTML 内容文档。

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

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

图 1 – 系统模型
系统模型

1.2 文档示例

以下各节描述 TTML 文档 实例 的简单示例:

1.2.1 单区域示例

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>定时文本 TTML 示例</ttm:title>
  <ttm:copyright>作者 (c) 2006</ttm:copyright>
</metadata>

样式信息可以以样式规定定义的形式指定, 由布局和内容信息引用, 也可以与内容信息一起内联指定,或同时采用两种方式。

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

示例片段 – TTML 样式
<styling xmlns:tts="http://www.w3.org/ns/ttml#styling">
  <!-- s1 指定默认颜色、字体和文本对齐方式 -->
  <style xml:id="s1"
    tts:color="white"
    tts:fontFamily="proportionalSansSerif"
    tts:fontSize="22px"
    tts:textAlign="center"
  />
  <!-- 使用黄色文本的替代样式,其余与样式 s1 相同 -->
  <style xml:id="s2" style="s1" tts:color="yellow"/>
  <!-- 基于 s1 但右对齐的样式 -->
  <style xml:id="s1Right" style="s1" tts:textAlign="end" />     
  <!-- 基于 s2 但左对齐的样式 -->
  <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 元素) 按指定的词法顺序流入其目标区域;此外, 每个段落的活动时间区间根据适用的 时间包含语义,相对于其父元素或兄弟元素进行定时 — 在此例中,作为父元素的 div 被(默认)解释为并行时间 容器。

示例片段 – TTML 主体
<body region="subtitleArea">
  <div>
    <p xml:id="subtitle1" begin="0.76s" end="3.45s">
      这似乎是个悖论,不是吗,
    </p>
    <p xml:id="subtitle2" begin="5.0s" end="10.0s">
      视网膜上形成的图像<br/>
      竟然是倒置的?
    </p>
    <p xml:id="subtitle3" begin="10.0s" end="16.0s" style="s2">
      真令人困惑,为什么<br/>
      我们看到的东西不是上下颠倒的?
    </p>
    <p xml:id="subtitle4" begin="17.2s" end="23.0s">
      那么,你从未听过这样的理论,<br/>
      说大脑也是倒置的?
    </p>
    <p xml:id="subtitle5" begin="23.0s" end="27.0s" style="s2">
      确实没有!多么美妙的事实!
    </p>
    <p xml:id="subtitle6a" begin="28.0s" end="34.6s" style="s2Left">
      但这是怎么证明的?
    </p>
    <p xml:id="subtitle6b" begin="28.0s" end="34.6s" style="s1Right">
      是这样的:我们所说的
    </p>
    <p xml:id="subtitle7" begin="34.6s" end="45.0s" style="s1Right">
      大脑的顶部<br/>
      实际上是它的底部
    </p>
    <p xml:id="subtitle8" begin="45.0s" end="52.0s" style="s1Right">
      而我们所说的底部<br/>
      实际上是它的顶部,
    </p>
    <p xml:id="subtitle9a" begin="53.5s" end="58.7s">
      这只是个命名问题。
    </p>
    <p xml:id="subtitle9b" begin="53.5s" end="58.7s" style="s2">
      真是令人欣喜!
    </p>
  </div>    
</body>

第一条字幕 字幕 1 – 时间区间 [0.76, 3.45) 在 0.76 至 3.45 秒的时间区间内呈现。 这条 字幕从其呈现所在的区域继承字体族、字号、 前景色和文本对齐 方式。由于段落上没有显式指定区域, 指定了区域的最近祖先元素决定 目标区域。还要注意,内容在 包含它的区域底部(后边缘)呈现,这是因为 tts:displayAlign="after" 已在区域定义中指定。

注:

记法 "[X,Y]" 表示 从 X 到 Y 的闭区间,包括 X 和 Y; "[X,Y)" 表示 从 X 到 Y 的右半开区间,包括 X 但不包括 Y; "(X,Y]" 表示 从 X 到 Y 的左半开区间,不包括 X 但包括 Y; "(X,Y)" 表示 从 X 到 Y 的开区间,既不包括 X 也不包括 Y。

注:

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

注:

在此示例中,region 属性 指定在 body 元素上。 如果改为指定在 div 元素上,或确实指定在每个单独的 p 元素上,呈现效果也相同。通常, region 会指定在文档层次结构的适当位置, 以便于表达,同时减少冗长。

还要注意,将 region 放在 body 上的一个效果 是阻止任何后代元素在不同的 区域中呈现。这是因为任何这样的后代元素都会从呈现中被剪除, 这是 [构建 中间文档] 过程的结果。

字幕 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

1.2.2 多区域示例

上述示例展示了内容按时间和词法顺序 流入单个区域的方式。 这一概念可以扩展到多个区域, 使内容的不同部分在各自独立的时间 流入各个区域。 例如,在 示例文档 – TTML 的 多区域布局 中,有两个 字幕段落,分别位于不同的区域。第二个段落 在第一个段落从视图中移除之前变为可见, 并在此后保持可见,因此可见字幕的数量 依次为一条、两条,再到一条。

示例文档 – TTML 的多区域布局
<tt xml:lang="en" xmlns="http://www.w3.org/ns/ttml"
    xmlns:tts="http://www.w3.org/ns/ttml#styling">
  <head>
    <styling xmlns:tts="http://www.w3.org/ns/ttml#styling">
      <style xml:id="pStyle"
        tts:backgroundColor="cyan"
        tts:textAlign="center"
        tts:fontSize="6.7rh"/>
      <style xml:id="spanStyle"
        tts:color="white"
        tts:backgroundColor="black"
        tts:fontFamily="proportionalSansSerif"/>
    </styling>
    <layout xmlns:tts="http://www.w3.org/ns/ttml#styling">
      <region xml:id="topCenterArea"
        tts:position="center top 10% "
        tts:extent="80% 20%"
        tts:displayAlign="before"
        tts:backgroundColor="purple"
        tts:showBackground="whenActive"/>
      <region xml:id="bottomLeftArea"
        tts:position="left 10% bottom 10% "
        tts:extent="60% 20%"
        tts:displayAlign="after"
        tts:backgroundColor="green"
        tts:showBackground="whenActive"/>
    </layout>  
  </head>
  <body>
    <div>
      <p xml:id="subtitle1" begin="00:00:00.500" end="00:00:01.500"
         region="topCenterArea" style="pStyle">
        <span style="spanStyle">我要问问我们的生理学讲师,为什么<br/>
        他从未给我们讲过那个精妙的理论!</span>
      </p>
      <p xml:id="subtitle2" begin="00:00:01" end="00:00:02"
         region="bottomLeftArea" style="pStyle">
        <span style="spanStyle">我愿付出些代价,只求在提出<br/>
        这个问题时能在场!</span>
      </p>
    </div>    
  </body>
</tt>

此示例包含两条在时间上重叠的字幕。 它在 0.5s 到 2s 之间产生三个不同的区间。 文档中的时间采用 hh:mm:ss 格式表示。 每个区域和段落均被指定为比其内容更大的尺寸, 并以对比鲜明的背景色显示, 以使其位置及其后代的位置更加清晰可见。 上方区域为紫色,下方区域为绿色。 每个 p 为青色,每个 span 为黑底白字。

字幕 1 – 时间区间 [0.5, 1.0)
复杂布局字幕 1

在第一个区间,即 0.5 到 1.0 秒之间,呈现两行文本, 与顶部居中区域的前边缘对齐。 因此,该区域未被占用的部分在文本的下方显示为紫色 区域。 同样,p 元素未被占用的部分显示为青色, 围绕着表示 span 元素所占空间的黑色背景。

字幕 1 和 2 – 时间区间 [1.0, 1.5)
复杂布局字幕 2

在第二个区间,即 1.0 到 1.5 秒之间,第一条字幕保持可见, 由两行文本组成的第二条字幕在左下区域呈现。 新文本与其所在区域的后边缘对齐, 因此,该区域未被占用的部分在文本的上方显示为绿色。

字幕 2 – 时间区间 [1.0, 1.5)
复杂布局字幕 3

在第三个区间,即 1.5 到 2.0 秒之间,第一条字幕不再 呈现。

上述示例展示了可以使用 TTML 创作的主要信息类型:元数据、样式、布局、定时和内容。通常, 样式和布局信息在 文档实例 中分别指定。内容信息 以层次化方式表达,体现空间(流动)和 定时信息的组织方式。内容直接或间接引用样式和布局 信息, 并且可以指定内联样式覆盖。

2 定义

2.1 缩略语

BPD

块推进尺寸

DAR

显示宽高比

DFXP

分发格式交换配置规范

IPD

内联推进尺寸

ISD

中间同步文档

PAR

像素宽高比

SAR

存储宽高比

TT

定时文本

TTML

定时文本标记语言

TTAF

定时文本创作格式

TTWG

定时文本工作组

2.2 术语

[绝对尺寸]

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

[抽象文档实例]

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

[抽象文档类型]

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

[可动画化样式]

一种 样式属性,或其作为 样式特性 的内部表示, 其定义规定它可以通过 离散 或 连续 动画实现动画效果。 一种 样式属性,如果其定义 (1) 将其可动画性指定为 none,或 (2) 未指定其可动画性,则称为 不可动画化样式。

[匿名配置规范]

参见 无指示符配置规范。

[匿名 span]

一种 span 元素,它不存在于 文档实例 中,而是被合成并插入相应的 文档, 即 抽象文档实例 中,执行此操作的是 [构建匿名 span] 过程, 该过程发生于 11.3.1.3 中间同步 文档构建 或 11.3.1.4 同步流处理 步骤期间。

[区]

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

[属性信息项]

XML 文档中每个显式指定或采用默认值的属性都对应一个属性 信息 项,其定义见 [XML InfoSet],§2.3。

[音频定义上下文]

一种上下文,其中 audio 元素被指定为 可共享的定义,供另一个 audio 元素 在 音频呈现上下文 中引用。

[音频生成元素]

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

[音频呈现上下文]

一种上下文,其中 audio 元素被指定 用于呈现(渲染)。这样的 audio 元素 可以通过在 data 元素中内联指定音频数据,该元素位于 source 子元素内;也 可以引用另一个 audio 元素,该元素指定于 音频定义上下文 中;或者同时采用两种方式。

[音频资源]

一种 数据资源,包含已编码或未编码的音频 样本。

[音频流]

音频样本序列。

[背景绘制矩形]

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

[背景定位 矩形]

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

[基线配置规范]

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

[块区]

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

[块显示]

块显示是一组布局语义,可以应用于 内容元素, 适用于某些上下文,其中子区沿块推进 方向依次排布。

注:

在 [CSS2] 中, 当值为 block 的 CSS display 属性在呈现处理期间应用于 内容元素 时,就表示块显示。在 [XSL-FO 1.1] 中,块显示 发生于排布 fo:block 元素时。

[块推进尺寸]

块推进轴上的 相对尺寸, 即正向 块推进 方向 上的尺寸, 缩写为 bpd 或 BPD。

[块推进方向]

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

[内置数据资源]

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

[字符信息项]

XML 文档中出现的每个数据字符都对应一个字符信息 项,其定义见 [XML InfoSet],§2.6。 共享同一父 元素信息项 的一个或多个连续字符信息项组成的序列 称为 文本节点。

注:

参见 B.4 字符信息项, 了解更多信息。

[分块数据嵌入]

一种 data 元素,它直接 嵌入实际字节的表示, 这些字节属于 嵌入数据资源,所采用的方式是使用 子 chunk 元素。

[组合配置规范]

一种 配置规范,其 constituents 分量 属于 组合 规定集,该规定集属于 关联的 配置规范实例,且该分量包含 多于一个非 null 指示符。

[组件]

(1) 功能单元;(2) 语法表达式的一部分;(3) 状态对象的字段 (或变量)。

[计算单元格尺寸]

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

注:

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

[计算样式集]

一种 样式集,包含计算样式值,其确定方式 见 10.4.4.3 计算样式集 处理。

[条件化元素]

本规范定义或供本规范使用的某种类型的任何元素,该类型允许 指定 condition 属性,其求值 结果 决定该元素已定义的语义是适用还是被忽略。如果没有 此 属性,则该元素的语义始终适用。

[有条件排除(或包含)]

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

注:

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

当某元素被有条件排除时,除非另有规定,其所有 语义都被忽略,相关 说明见 condition,其中给出了 有条件排除的详细语义。

注:

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

[内容元素]

内容 模块 定义的任何元素类型,以及 音频模块 和 图像模块 定义的任何元素类型,后两者分别出现于 音频呈现上下文 或 图像呈现上下文 中。

注:

tt 和 head 元素类型, 定义于 8.1 内容元素 词汇, 被有意排除在上述定义的范围之外,但包含在 相应模块的定义中,即 文档 和 头部 模块,见 表 5-3 – 元素词汇。

除上述元素类型外,还包括由 扩展模块 指定为内容元素类型的元素类型。

[内容图像]

一种 图像资源,包含具有语义意义的 内容,例如,表示字幕渲染结果的 栅格图像。

[内容处理器]

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

[内容配置规范]

一种 配置规范,满足以下条件:(1) type 分量 所属的关联 配置规范实例 中,该分量的值为 content,并且 (2) 其中的 特性 和 扩展 集合 是定时文本标记语言内容不得、必须或可以使用的集合。

[内容区域]

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

[核心模块]

在本规范正文中定义的 模块, 具体而言,是 表 5-3 – 元素词汇 和 表 5-5 – 属性词汇 定义的模块。

[数据绑定上下文]

一种上下文,其中 data 元素被指定 用于语义绑定(关联)。这样的 data 元素 可以通过在 data 元素中内联指定数据,该元素位于 source 子元素内;也 可以引用另一个 data 元素,该元素指定于 数据定义上下文 中;或者同时采用两种方式。仅仅 在此(或任何)上下文中 存在 data 元素,并不意味着具有呈现(渲染) 语义。

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

一种 data 元素, 其父元素为 metadata 元素。

[源的 数据绑定上下文]

一种 data 元素, 其父元素为 source 元素。

[数据定义上下文]

一种上下文,其中 data 元素被指定为 可共享的定义,供另一个 data 元素 在 数据绑定上下文 中引用,即一种 data 元素, 其父元素为 resources 元素。

[数据元素]

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

[数据资源]

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

[默认处理器配置规范]

一种默认的 处理器配置规范,用于计算 有效处理器配置规范,适用于不存在 已声明或推断出的 处理器配置规范 的情况,其中该默认处理器 配置规范由 构建默认处理器配置规范 过程确定。

[默认区域]

一种默认的 非内联区域,在 不存在 显式指定的非内联 region 元素时隐含存在,即 未将任何 region 元素指定为 子元素, 其父元素为 layout 元素的情况。

[有指示符配置规范]

一种 配置规范,它与 <profile-designator> 关联, 关联方式为使用 designator 属性或配置规范定义中的叙述性文字。

[显示宽高比]

参见 DAR 的定义。

[文档坐标空间]

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

[文档实例]

一个 定时文本文档实例。

[文档交换上下文]

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

[文档处理上下文]

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

[文档时间坐标 空间]

一种时间坐标系,相对于该坐标系解释计算后的时间表达式,这些表达式位于 一个 文档实例 中,更多信息参见 7.2.11 ttp:timeBase。

[有效内容配置规范]

一种 内容配置规范,由全部 内容配置规范 的集合计算得出, 这些配置规范由 TTML 文档实例 显式或隐式引用,或分配给该实例,并应用任何 显式或隐式的配置规范组合方法和配置规定组合方法,相关说明参见 以下 构建有效内容配置规范 过程。 对给定的 文档 实例 执行验证时, 该验证使用文档的 有效内容配置规范 执行。

[有效处理器配置规范]

一种 处理器配置规范,由全部 处理器配置规范 的集合计算得出, 这些配置规范由 TTML 文档实例 显式或隐式引用,或分配给该实例,并应用任何 显式或隐式的配置规范组合方法和配置规定组合方法,相关说明参见 以下 构建有效处理器配置规范 过程。 在确定 内容处理器 能否处理给定的 文档实例 时, 该判断 使用文档的 有效 处理器配置规范 作出。

[有效验证配置规范]

一种配置规范,用于选择 验证处理 期间使用的模式(或模式集), 它由 构建有效 验证配置规范 过程确定。

[有效验证模式]

在 验证 处理 期间使用的一组模式, 它由 构建有效 验证模式 过程确定。

注:

由于没有任何模式语言能够表达本规范所定义的针对 TTML 内容的全部 约束,因此预期还将采用额外的 内置程序化(基于代码的)模式,使用这些模式的是 执行验证的内容处理器。

[元素信息项]

XML 文档中出现的每个元素都对应一个元素信息 项,其定义见 [XML InfoSet],§2.2。 也称为 元素节点。

注:

参见 B.2 元素信息项, 了解更多信息。

[嵌入内容元素]

音频模块、 数据模块、 字体模块 或 图像模块 定义的任何元素类型。

[嵌入内容资源]

一种 音频资源、数据 资源、字体资源, 或 图像资源。

[嵌入数据资源]

一种 数据资源,嵌入在 定时文本内容文档 实例 中,其表示方式为使用 data 元素,无论 该 data 元素表示的是 实际字节,这些字节属于 数据资源,还是引用 外部数据资源。

[空数据资源]

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

[包含文档实例]

一个 文档实例,它包围或以其他方式 包含 某个被包含的特性或 组件。

[交换配置规范]

一种内容配置规范,服务于一组内容交换需求。

[扩展]

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

[扩展模块]

一种 模块,它不是 核心 模块。

[扩展规定]

关于某项 扩展 的约束或要求的规定,通常通过 ttp:extension 元素表达。

[外部数据资源]

一种 数据资源,其表示位于 外部(不包含在内部),相对于 定时文本内容文档 实例 而言,它通过 src 属性(属于 source 元素 或 嵌入 内容元素)引用。

[外部源]

以下两者之一:(1) source 元素或 src 属性, 它引用 外部数据资源;或 (2) 被引用的 外部数据资源。

[特性]

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

[特性规定]

关于某项 特性 的约束或要求的规定,通常通过 ttp:feature 元素表达。

[强制字幕]

一种字幕(或说明字幕),即使未启用字幕(说明字幕), 也预期始终显示。强制字幕(说明字幕) 用于避免将有关外语、异族语言,或媒体中出现的文字 (例如标牌中的文字)的翻译字幕(说明字幕) 制作为开放式字幕,即烧录到画面中。

[字体定义上下文]

一种上下文,其中 font 元素被指定为 可共享的定义,供 字体选择过程 间接引用。

[字体选择过程]

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

[字体资源]

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

[高度]

一种 绝对尺寸,位于 垂直轴 上。

注:

在某些例外情况下,术语高度可能指 水平轴, 更多信息参见 10.2.27 tts:lineHeight。

[片段标识符]

<uri> 值的一个语法子集,它遵循 以下 片段标识符语法:[URI],§3.5 所定义的语法。

[字形区]

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

[字形区后代]

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

[图像定义上下文]

一种上下文,其中 image 元素被指定为 可共享的定义,供另一个 image 元素 在 图像呈现上下文 中引用。

[图像呈现上下文]

一种上下文,其中 image 元素被指定 用于呈现(渲染)。这样的 image 元素 可以使用一个 data 元素内联指定图像数据,该元素位于 source 子元素中;或者 可以引用另一个 image 元素,该元素指定于 图像定义上下文 中;也可以同时采用两种方式。

[图像资源]

一种 数据资源,包含栅格图像。

[推断的处理器配置规范]

一种 处理器配置规范,由 构建推断的 处理器配置规范 过程确定,它可以 作为 有效处理器配置规范, 用于执行 验证处理。

[内联动画]

Animation.class 元素组中的一个元素, 它以内联方式定义,作为 与该动画关联的 内容元素 或 region 元素的直接 子元素。 内联动画元素 与其父 内容 元素 或 region 元素之间存在一对一关系。

[内联区]

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

[内联块显示]

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

[内联显示]

内联显示是一组布局语义,可以应用于 内容元素, 适用于某些上下文,其中子区沿内联推进 方向依次排布。

注:

在 [CSS2] 中, 当 CSS display 属性的值为 inline,并在呈现处理期间应用于 内容元素 时,就表示内联显示。在 [XSL-FO 1.1] 中,内联显示 发生于排布 fo:inline 元素时。

[内联推进尺寸]

内联推进轴上的 相对尺寸, 即正向 内联推进 方向 上的尺寸, 缩写为 ipd 或 IPD。

[内联推进方向]

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

[内联区域]

一种 区域,它相对于某个 内容元素 以内联方式定义,该内容元素将被选入(以该区域为目标) 此区域。 内联区域由 region 子元素指定,该子元素属于 某些 内容元素。 内联 region 元素与其 父 内容元素 之间存在一对一关系。内联区域被赋予 其父元素的时间区间,作为自身的活动 时间区间。没有任何 region 属性引用内联区域。

[中间同步 文档]

根据使用上下文,指 定时文本中间文档 或 定时文本中间文档 实例, 其根(文档)元素为 isd:isd 元素,表示 一个不重叠的时间区间,该区间与源文档的内容、样式、布局和 定时相交,该源文档为 定时文本内容文档。

[中间 同步文档序列]

根据使用上下文,指 定时文本中间文档 或 定时文本中间文档 实例, 其根(文档)元素为 isd:sequence 元素,并且 表示 一系列 中间同步 文档 实例, 这些实例有效地表示源 定时文本内容文档 的内容、样式、布局和定时。

[中间文档语法]

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

[内部数据资源]

一种 数据资源,其表示位于 内部(包含于其中),相对于 定时文本内容文档 实例 而言,它通过 src 属性(属于 source 元素 或 嵌入 内容元素)引用。

[固有块内容尺寸]

一系列块级内容的尺寸,即宽度和高度,其确定方式为 将内容格式化到无界的块 容器区中,并确定所得格式化块 容器的宽度和高度。

[固有图像尺寸]

根据图像自身内部的信息确定的图像尺寸,即宽度和高度, 例如, 图像像素数组的宽度和高度。

[固有内联内容 尺寸]

一系列内联级内容的尺寸,即宽度和高度,其确定方式为 将内容格式化到无界的内联 容器区中,并确定所得格式化内联 容器的宽度和高度。

[更高层协议]

属于 文档处理 上下文 的协议或过程, 它不在本规范的范围内。

[水平轴]

与地平面平行的轴。

[行区]

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

[元数据元素]

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

[模块]

一组 特性 和(或)扩展 定义,被定义为 核心模块 或 扩展模块。

注:

模块与 配置规范 不同(且相互正交), 因为前者 定义功能(不考虑使用它的应用),而后者选择 功能(供处理器支持 或文档使用)。还要注意,单个规范可以定义 与某个模块相关联(显式或隐式)的功能, 并且同时定义配置规范。例如,本规范定义了 一组 核心模块, 还定义了三个 配置规范,相关说明分别参见 5.4.1 核心目录 和 G 标准配置规范。

[嵌套配置规范]

一个组成部分 配置规范,属于某个 包含嵌套的配置规范,即 更高层(祖先)ttp:profile 元素的后代 ttp:profile 元素之一。给定的 ttp:profile 可以同时 作为 嵌套配置规范 和 包含嵌套的配置规范。

注:

嵌套配置规范可以出现在 定时文本内容文档 实例 中,或 定时文本配置规范文档 实例 中。

[包含嵌套的配置规范]

一种 配置规范,通过引用一个或多个子 ttp:profile 元素定义,其中, 配置规范组合方法决定如何组合多个子 ttp:profile 元素中的配置规定。 constituents 分量 所属的 配置规范实例 与 包含嵌套的配置规范关联,该分量不为 null。

[嵌套嵌入源]

一种 source 元素, 它指定了一个子 data 元素,后者嵌入 实际字节,这些字节属于 嵌入数据资源,所采用的方式可以是 简单数据嵌入 或 分块数据嵌入。

[非组合配置规范]

一种 配置规范,其 constituents 分量 属于 组合 规定集,该规定集属于 关联的 配置规范实例,且该分量包含 不超过一个非 null 指示符。

[非内容图像]

一种 图像资源,不包含具有语义 意义的内容,例如,表示背景设计的栅格图像, 即使不呈现它,也不会影响具有语义意义的 内容的呈现。

[非嵌套嵌入源]

一种 source 元素, 它指定了一个子 data 元素,后者不 嵌入实际字节的表示,这些字节属于 嵌入数据资源。

[不包含嵌套的配置规范]

一种 配置规范,其定义不引用任何子 ttp:profile 元素,即 不包含子 ttp:profile 元素。 constituents 分量 所属的 配置规范实例 与 不包含嵌套的配置规范关联,该分量为 null。

[非内联动画]

Animation.class 元素组中的一个元素,它以非内联方式定义,独立于 与该动画关联的 内容元素 或 region 元素 之外。 非内联动画作为 animation 元素的子元素出现,后者位于头部 (head 元素)中, 该头部属于 文档实例。一对多 关系存在于 被引用的非内联动画元素与引用它的 内容元素 以及 region 元素之间。

[非内联区域]

一种 region 元素,它以 非内联方式定义,独立于 与该区域关联(将被选入该区域)的 内容元素 之外。 非内联区域作为 layout 元素的子元素出现,后者位于头部 (head 元素)中, 该头部属于 文档实例。一对多 关系存在于 被引用的非内联区域元素与引用它的 内容元素 之间。 如果未显式指定 非内联区域,则隐含存在一个 默认非内联区域。

[覆盖内容配置规范]

一种 内容配置规范,被确定为覆盖所有 其他 可能确定的 内容配置规范。

[覆盖处理器配置规范]

一种 处理器配置规范,被确定为覆盖所有 其他 可能确定的 处理器配置规范。

注:

例如,可选的 profile 或 codecs 参数,其定义 见 [TTML Profile Registry],§2,媒体类型注册,可以 由 内容处理器 使用, 作为 更高层协议, 以确定覆盖配置规范。

[像素宽高比]

参见 PAR 的定义。

[呈现上下文]

参见 呈现处理上下文。

[呈现处理 上下文]

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

[呈现上下文 坐标空间]

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

注:

对于给定的 呈现 处理器 实现,可能存在这样的情况: 显示像素 与 逻辑像素 关联,后者位于 文档坐标空间 中,而这些显示像素 恰好对应于 呈现像素,后者位于 呈现上下文 坐标空间 中; 但是,不一定存在这种精确对应,尤其是, 这些坐标空间之间的映射(由实现定义) 可能涉及像素宽高比、分辨率、颜色空间、 颜色样本位深 以及其他实现特定属性的转换。

[呈现相关元素]

满足以下任一条件的元素:(1) 包含或表达可呈现内容;或 (2) 影响 内容的呈现。前者的示例 包括所有 内容元素 和某些 嵌入内容元素,尤其是 audio 以及 image。 后者的示例包括内联的 animate 和 set。请特别注意, 元数据元素 不在此定义范围内。

[呈现处理器]

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

[处理器]

参见 内容处理器。

[处理器配置规范]

一种 配置规范,满足以下条件:(1) 关联实例的 type 分量 的值,该关联实例为 配置规范实例,是 processor,并且 (2) 其中的 特性 和 扩展 集合 是内容处理器必须或可以实现(支持)的集合。

[配置规范]

一组 特性 和 扩展 规定,在 内部化(实例化)后,由 配置规范实例 状态对象表示。 配置规范的类型为 内容配置规范 或 处理器配置规范。

[配置规范定义文档]

根据使用上下文,指 定时文本配置规范文档 或 定时文本配置规范文档 实例。

[配置规范片段标识符]

一种 片段标识符,用于标记或引用 内部定义的 配置规范,其中, 内部是指位于 文档 实例 内部。

[配置规范处理]

执行 [若不支持 处理器配置规范则中止] 过程的过程,它附带 确定 有效内容配置规范(如果需要)和 有效处理器配置规范,二者属于 文档实例。

[配置规定]

一种 特性规定 或 扩展规定, 或其内部状态表示。

[精简的 XML 信息集]

一种 XML 信息集 [XML InfoSet],满足 B 精简的 XML 信息集 规定的约束。

[引用式数据嵌入]

一种 嵌入内容元素,它间接 引用 嵌入内容资源 的内容,所采用的方式是 使用 src 属性。

[区域]

根容器区域 或 内容区域,如果使用时没有限定, 则指后者。

注:

虽然与文档呈现关联的根容器区域只有一个, 且是唯一的, 但本规范不限制随时间推移使用的 内容区域数量, 也不限制给定时刻的数量。不过,某些 内容配置规范 确实 规定了这类限制。

[相关媒体对象]

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

[相关媒体对象区域]

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

[相对尺寸]

一个标量值,表示内联推进轴或块推进轴上的长度, 具体依据 适用的书写模式。

[根容器区域]

一个唯一的逻辑矩形区域,它建立一个坐标系, 内容区域 被放置在其中,并可选择进行裁剪, 相关说明另见 H 根容器区域 语义。

注:

根容器区域 没有边框或 内边距;因此,其边框矩形、内边距矩形和 内容矩形的边界重合。

[根时间范围]

由 文档实例 的时间起点和终点定义的时间范围(区间), 它相对于某个外部应用或呈现上下文确定。

[Ruby 容器 span]

一种 span 元素,其计算 值,即 tts:ruby 的值,为 "container"、"baseContainer", 或 "textContainer"。

[有意义的文本节点]

有意义的文本节点是一种 文本节点,它包含 至少一个 有意义的 数据字符, 其中,某个 数据 字符 是否有意义,由 所声明的内容模型以及所定义的元素类型语义决定,该元素类型属于 文本节点 的 父 元素节点,更多信息参见 [XML 1.0],§3.2。 具体而言,如果父元素类型的内容模型为 元素 内容, 则没有任何 数据字符 是有意义的;但是, 如果父元素类型的内容模型为 混合内容, 则父元素类型的语义及其应用的样式特性(由本规范 定义)决定 某个 数据字符 在某个使用上下文中是否有意义(不被忽略), 或没有意义(被忽略)。

注:

数据字符 是任何 被 视为 字符数据 的字符,其定义 见 [XML 1.0],§2.4;对于不基于 A 具体编码 的具体编码,则指其等价物。

[简单数据嵌入]

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

[SMPTE 时间码]

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

[源式数据嵌入]

一种 嵌入内容元素,它间接 引用 嵌入内容资源 的内容,所采用的方式是 使用 子 source 元素。

[指定样式集]

一种 样式集,包含指定样式值,其确定方式 见 10.4.4.2 指定样式集 处理。

[语音数据资源]

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

[语音合成处理器]

一个可选的 组件,属于 内容处理器, 其功能是将文本内容合成为音频语音呈现。

[存储宽高比]

参见 SAR 的定义。

[样式集]

一种样式特性集,其定义 见 样式特性集。

[样式化元素]

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

[样式属性]

一种全局属性,定义于以下二者之一:(1) 某个 TT 样式命名空间;或 (2) 某个 其他命名空间,且 定义它的 模块 将该属性声明为样式属性。

注:

为定义 10.4.4 样式解析 处理 的语义,样式属性(无论是显式指定 还是采用默认值)都预期被内部化(实例化)为 样式特性。

[合成文档同步基准]

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

[合成 SMPTE 文档 同步基准]

一种 合成文档同步基准,其构建依据为 SMPTE 时间码 值,这些值嵌入于或关联于 相关 媒体对象,或 由 文档处理 上下文 以其他方式确定。

[时间上活动]

一种语法或语义特性,例如元素或元素的呈现, 在所选时间基准的当前时间与 该特性的 活动时间区间相交时,称为时间上活动。

[时间上活动的区域]

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

[文本方向]

以旋转角度描述 字形区 的 朝向,其中, 0° 表示 upright 朝向, 90°,即顺时针旋转 90 度,表示 sideways 朝向, 相关说明另见 10.2.45 tts:textOrientation。

[定时元素]

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

[定时文本]

以内在或外在方式 与定时信息关联的文本信息。

[定时文本创作系统]

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

[定时文本内容文档]

一种抽象文档,声称或已确认是 有效抽象文档实例, 属于 TTML 内容文档类型。

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

定时文本内容 文档 的一种具体实现, 相关说明另见 A 具体编码。

[定时文本文档实例]

以下文档的一种具体实现: 定时文本标记语言 文档, 其具体形式取决于引用上下文。 也称为 TTML 文档实例, 或简称为 文档实例。

[定时文本中间 文档]

一种抽象文档,声称或已确认是 有效抽象文档实例, 属于 TTML 中间文档类型。

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

定时文本 中间文档 的一种具体实现, 相关说明参见 A 具体编码。

[定时文本标记语言]

一种内容类型,表示定时文本内容、该内容的中间表示, 或该内容或内容处理器的配置规范。

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

一种抽象文档,声称或已确认是 有效抽象文档实例。

[定时文本配置规范文档]

一种抽象文档,声称或已确认是 有效抽象文档实例, 属于 TTML 配置规范文档类型。

[定时文本配置规范 文档实例]

定时文本配置规范 文档 的一种具体实现, 相关说明参见 A 具体编码。

[顶层配置规范]

一种 配置规范,由 ttp:profile 元素定义,该元素 作为子元素 出现于 head 元素中,该头部元素属于 定时文本内容文档 实例。

[转换处理器]

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

[无指示符配置规范]

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

[有效抽象文档 实例]

一种 抽象文档实例,已经 过有效性评估, 并根据 4 文档类型 中的定义被认定为有效。

[验证处理]

由 验证 处理器 执行的功能。

[验证处理器]

一个可选的 组件,属于 内容处理器,其功能是 对候选文档进行验证处理,该 候选文档为 文档实例,验证发生于执行 某些其他类型的处理之前, 并且该验证处理包括执行 [验证文档] 过程, 其定义见 5.3 验证。

[执行验证的内容处理器]

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

注:

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

注:

在执行验证处理时,符合规范的、执行验证的内容处理器 可以交错执行验证 处理和内容处理,前提是对于给定的内容单元, 后者在时间上不先于前者。

[垂直轴]

与地平面垂直的轴。

[宽度]

一种 绝对尺寸,位于 水平轴 上。

[书写模式]

一个枚举标记集合,其中每个标记指定 内联和块方向内容的流动轴及 流动方向的组合,相关说明参见 10.2.51 tts:writingMode。

2.3 文档约定

在本规范的规范性文字中, 可以、应当和必须这些词 定义如下:

可以

符合规范的文档和(或)TTML 处理器被允许 按所述方式行事,但不必如此。

应当

强烈建议符合规范的文档和(或)TTML 处理器 按所述方式行事,但不必如此。

必须

符合规范的文档和(或)TTML 处理器被要求 按所述方式行事;否则即为错误。

如果规范性规定采用祈使句形式, 则应将其视为适用必须 一词。此外,如果规范性文字采用陈述句形式, 且该文字受必须约束, 则也应将其视为适用必须 一词。

注:

例如,“将 X 视为错误”和“认定 X 为错误”这两个短语,在使用上下文中应解读为强制性要求。同样,如果 规范 文字为“X 必须适用”、“X 适用”或“X 是强制性的”,且“X”进一步定义为“X 是 Y 和 Z”, 则通过传递闭包,最后这个陈述性短语在使用上下文中应解读为“Y 是强制性的”和 “Z 是强制性的”。

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

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

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

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

注:

除 N.1 元素派生 外, 属性名称(可能带有命名空间限定) 前面会加上 '@'(商业 AT 符)字符,以消除 属性与同名元素类型之间的歧义,在这种情况下, '@' 字符并非属性字面名称的一部分。 例如,@ttm:agent 指 ttm:agent 属性,而 ttm:agent 指 ttm:agent 元素。

以浅黄橙色背景 显示的信息项已弃用(例如, 上面所示 size 属性的 tiny 值)。 已弃用的信息项可以但不应当出现在 TTML 文档实例中, 如果它确实出现,执行验证的内容处理器 应当报告 警告。 以浅品红色背景 显示的信息项已废止(例如, 上面所示 size 属性的 micro 值)。 已废止的信息项不得出现在 TTML 文档实例中, 如果它确实出现,执行验证的内容处理器 应当报告 错误。 对某个信息项作出的这些标记 也会在规范文字中明确指出。

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

术语线性空白 (LWSP) 应解释为以下字符组成的非空序列: 空格 (U+0020)、制表符 (U+0009)、回车 (U+000D) 或换行 (U+000A), 它对应于 [XML 1.0] 定义的产生式 [3] S。

值语法表达式的规定采用以下约定:

  • 字面项(在引号内指定)如果出现,必须与 指定内容完全一致 (不包括引号本身);

  • 字面量 '\\' 解释为单个反斜杠,即反斜线 (U+005C);

  • 串联(并置)的项表示所有项必须按所述顺序出现,例如, a b 表示 a 和 b 两项均出现,且前者先于后者;

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

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

  • 左右圆括号(())用于分组和确定运算符 优先级;

  • 左右方括号([])用于表示字符类;

  • 左右花括号({})有两种用法,上下文 通常足以确定 适用哪一种(如果不足以确定,周围的文字会明确说明适用哪一种):

    • 表示重复次数或范围,采用以下形式之一:

      • {count}

      • {minimum,maximum}

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

  • Kleene 运算符 ?、* 和 + 分别表示 前一项出现零次或一次、 零次或多次,以及一次或多次;

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

    1. 分组

    2. 串联(并置)

    3. ||

    4. |

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

除非另有相反说明,术语水平和垂直均按 绝对意义解释,而非相对于书写模式; 宽度指沿水平轴的尺寸, 高度指沿垂直轴的尺寸。所有例外 均在正文中明确注明。

短语“和(或)”表示相容析取(p∨q),而句式 “二者择一……或……”表示互斥析取(p⊕q)。其他情况下,“或”的含义 由 其使用上下文隐含确定。

本规范中所有未明确标记为 非规范性的内容均视为规范性内容。如果某节或附录 标题包含“非规范性”这一表述,则该节或附录的 全部内容均视为非规范性内容。

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

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

示例片段 – 样例
<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,并符合 [TTML Profile Registry] 第 2 节媒体类型注册的规定。

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

  3. 该 精简的 XML 信息集 对应于该 文档实例,并且已经或可以 与某个 抽象文档 类型 相关联,这些类型由 4 文档类型 定义。

  4. 该 精简的 XML 信息集 对应于该 文档实例,并且是一个 有效的抽象文档实例,其所属类型 为所关联的 抽象文档类型。

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

3.2 处理器符合性

本节从以下方面规定 TTML2 处理器的符合性要求: 通用处理器符合性 以及两种专用处理器符合性, 转换处理器符合性 和 呈现处理器符合性。

注:

本节定义的符合性要求适用于处理 静态表示的 TTML 文档实例 的处理器。具体 而言, 修改 TTML 文档实例 的处理器,例如 创作或 编辑工具,不受本规范约束,唯一的例外是: 对 TTML 文档实例 执行一系列修改的最终结果 应满足 TTML 内容的形式有效性,其定义见 3.1 文档符合性。

3.2.1 通用处理器符合性

一个 TTML2 内容处理器 符合本规范, 前提是以下 通用处理器条件得到 满足:

  1. 该处理器至少提供一种机制,用于在概念上 实例化一个 精简的 XML 信息集, 作为符合规范的 文档实例 的表示。

  2. 该处理器执行 配置规范处理。

    注:

    执行 配置规范处理 意味着 进行一定程度的部分验证, 但尚未执行下一个条目中介绍的 [验证文档] 过程。 具体而言,预期实现在使用与配置规范相关的词汇之前, 会对这些词汇的语法表达形式以及 适用于这些词汇用法的任何必要语法或语义约束 进行基本验证。如果 配置规范 处理 已完成,且未检测到严重违反 语法或语义约束的情况,那么可以 通过 [验证 文档] 过程执行更完整的验证。

  3. 如果处理器是一个 执行验证的内容 处理器,那么它

    1. 至少提供一种机制,用于将候选文档的 精简的 XML 信息集 表示, 即候选 文档实例 的表示, 隐式或显式地关联到某个 抽象文档类型,这些类型由 4 文档 类型 定义;并且

    2. 执行 [验证文档] 过程。

    注:

    本规范未规定执行 验证处理 与执行 配置规范处理 之间的严格顺序,后者已在前一个条目中介绍。具体而言,这两个 处理步骤可以交错执行(或重复执行),只要二者都在进一步对 文档实例 执行(转换或呈现)处理之前完成即可。

    尽管如此,验证处理 与 配置规范处理 之间仍存在隐含的顺序关系;具体而言,为了 执行 验证处理,必须 解析 有效验证配置规范 的值,而为了得到该值, 必须解析 有效内容配置规范 的值,或者,如果该 值为 null,则解析 有效处理器配置规范 的值,后面这两个 值是在 配置规范处理 期间获得的。

    注:

    关于交错执行 验证 处理 和 配置规范处理 的示例,请考虑以下 场景(按给定顺序):

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

    • 将输入文档源实例化为一个可能有效的抽象文档 实例(通用处理);

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

    • 使用内置的应用程序语义初始化配置规范状态(配置规范 处理);

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

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

    • 验证与配置规范相关的词汇(验证处理);

    • 使用有效的、与配置规范相关的词汇更新配置规范状态(配置规范 处理);

    • 执行 [如果 处理器配置规范不受支持则中止] 过程的中止步骤(配置规范 处理);

    • 验证整个文档,根据新的配置规范状态,按需重新验证与验证及配置规范 相关的词汇(验证处理);

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

  4. 该处理器不会预先拒绝或中止 对符合规范的 文档实例 的处理, 除非:

    1. 该处理器不支持某项必需的 (强制性)特性,该特性由声明适用于此 文档 实例 的 TTML 配置规范指定或隐含;或者

    2. 有 验证错误 发生在执行 [验证 文档] 过程期间。

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

    注:

    短语强制性语义指所有显式使用符合性 关键短语必须和不得 的情况,以及 可以从这些关键短语合理推断出的任何陈述。

    注:

    对某个 特性 或 扩展 的强制性语义的支持,仅在该 特性 或 扩展 受到 TTML 内容处理器 支持时才适用。

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

    注:

    短语可选语义指所有显式使用符合性 关键短语应当、不应当 、 可以和可以不的情况, 以及可以从这些关键短语合理推断出的任何 陈述。

3.2.2 转换处理器符合性

一个 TTML 内容处理器 是符合规范的 TTML2 转换处理器, 前提是以下条件得到满足:

  1. 该处理器满足以下章节规定的所有要求: 3.2.1 通用处理器符合性。

  2. 该处理器支持 TTML 转换配置规范,其规定 见 G.3 TTML2 转换配置规范。

  3. 该处理器支持 DFXP 转换配置规范,其规定 见 G.6 DFXP 转换配置规范。

3.2.3 呈现处理器符合性

一个 TTML 内容处理器 是符合规范的 TTML2 呈现处理器, 前提是以下条件得到满足:

  1. 该处理器满足以下章节规定的所有要求: 3.2.1 通用处理器符合性。

  2. 该处理器支持 TTML 呈现配置规范,其规定 见 G.2 TTML2 呈现配置规范。

  3. 该处理器支持 DFXP 呈现配置规范,其规定 见 G.5 DFXP 呈现配置规范。

  4. 该处理器执行 11.3.1.3 中间 同步文档构建 和 11.3.1.4 同步流 处理。

注:

两个符合规范的呈现处理器在处理同一个符合规范的文档时, 不必产生相同的呈现结果。 例如,不同的呈现处理器可以使用不同的字体、不同的字体 光栅化器、不同的换行算法, 以及对本规范未规定的行为采用不同的实现。

3.3 声明

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

实现符合性声明必须标识本规范中 文档实例或内容处理器实现所满足的所有 强制性和可选特性。具体而言,该声明必须 标识所使用或支持的 TTML 词汇配置规范,其 定义见 5.2 配置规范;如果使用或支持子集或 超集配置规范,还必须标识该子集或超集配置规范 排除或包含了哪些特性。

注:

上文给出的 转换处理器符合性 和 呈现处理器符合性 的定义 要求 这两类处理器各自(至少)支持两个特定的配置规范:一个是 [TTML1] 定义的类型专用配置规范, 另一个是本规范定义的类型专用配置规范。

尽管存在这一要求,仍可以构建一个 TTML 内容处理器, 使其执行转换或呈现处理功能,并满足 通用处理器符合性 要求, 但既不支持 转换 处理器符合性 要求的配置规范,也不支持 呈现处理器符合性 要求的配置规范, 而是 仅支持在本规范范围之外定义的配置规范。在这种情况下,可以声明 该处理器 满足 通用处理器 符合性,并且是一个 TTML 转换处理器 或一个 TTML 呈现处理器, 但不得声明其满足 转换 处理器符合性 或 呈现处理器符合性。

对于提出了符合性声明的 文档实例,它必须 关联以下其中一项:

  1. 一个非空的 有效内容配置规范, 该配置规范源自显式指定的 ttp:contentProfiles 属性, 或一个或多个 顶层 内容配置规范;或者

  2. 一个非空的 有效处理器配置规范, 该配置规范源自显式指定的 ttp:processorProfiles 或 ttp:profile 属性, 或一个或多个 顶层 处理器配置规范。

3.4 兼容性

本小节为非规范性内容。

3.4.1 向前兼容性

符合规范的 TTML1 处理器可能能够处理 TTML2 内容文档实例,前提是它 忽略未知词汇, 并忽略那些出现在符合规范的 TTML1 文档中不允许出现的上下文中的已知词汇, 这里的文档是指 内容文档实例; 然而,这种处理可能会丢弃内容或无法呈现内容,也可能以不同于 符合规范的 TTML2 处理器所预期的 方式呈现内容。

注:

例如,如果 TTML1 处理器忽略 TTML2 中定义的 tts:ruby 属性, 那么该处理器 仍可能呈现使用行间注音特性的 TTML2 内容,尽管呈现结果 不符合预期。类似地, 如果 TTML1 处理器遇到一个 style 元素,而它是另一个 style 元素的子元素,那么前一个 嵌套样式可以被忽略(因为 TTML1 未定义此功能)。

3.4.2 向后兼容性

TTML2 的设计满足以下条件:

  • 符合规范的 TTML1 内容文档 实例 也是符合规范的 TTML2 内容 文档实例。

  • 符合规范的 TTML2 处理器在处理符合规范的 TTML1 内容文档实例 时, 所生成的输出 处于 TTML1 允许的差异范围内;但是,如果遇到已弃用的特性, 它可以发出警告。

4 文档类型

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

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

一个 抽象文档实例 可以接受 有效性评估, 并被视为一个 有效的抽象文档 实例,如果它 满足以下条件:在执行下列操作之后

  1. 裁剪所有这样的元素信息 项:其名称不属于相关联的 抽象文档类型 所定义的元素类型集合,然后

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

  3. 裁剪所有这样的属性 信息项:其扩展名称的 命名空间 URI 未列于 表 5-1 – 命名空间,或者虽列于 表 5-1 – 命名空间,但这些属性并非 相关联的 抽象文档类型 为其所属 元素信息项定义的属性集合的成员,

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

注:

虽然符合规范的处理器不得预先拒绝一个 符合规范的 文档实例,但给定的 文档实例 可以 受到作者或创作工具的约束,以满足更 严格的有效性定义。

注:

如下例所示,一个 抽象 文档实例 可以是一个 有效的抽象文档实例,即使它 包含这样的元素和属性: 其命名空间名称列于 表 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 内容文档类型是一个 抽象文档 类型,它属于 定时文本标记语言的一个配置规范,并通过一组功能 模块 定义。

本规范引用了两类模式,它们可用于验证一个超集或子集, 该集合由 定时文本内容文档实例 构成:

TTML 内容 文档 实例 的(根)文档元素必须是一个 tt 元素,其定义见 8.1.1 tt。

注:

本规范引用的模式不会验证本规范定义的所有语法 约束,因此,它们表示符合规范的 TTML 内容的一个超集。具体而言,使用上面引用的某个 模式进行验证,可能会产生有效性的假阳性结果。 例如,RNC 和 XSD 模式都规定 tts:fontFamily 属性必须 满足 xsd:string 这一 XSD 数据类型;但是,该数据类型是 允许用于 tts:fontFamily 属性的值的超集。

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

注:

本规范引用的模式旨在以下裁剪步骤 (1)-(3) 执行之后使用, 这些步骤由 4 文档类型 规定。

注:

符合规范的 通用处理器 必须 支持接收和处理 定时文本内容文档。

4.2 TTML 中间文档类型

TTML 中间文档类型是一个 抽象文档 类型,旨在 用于表示以下文档的内容: 定时文本内容文档, 其定时信息以非层次化(扁平)、时间上线性的 方式表示,并且 某些信息(例如样式内容)可以进行解析或合并,以简化 后续处理。 此文档类型通过一组功能 模块 定义。

本规范引用了两类模式,它们可用于验证 定时文本中间文档 实例:

TTML 中间同步 文档实例 的(根)文档元素必须是一个 isd:sequence 或 isd:isd 元素,其定义见 J 中间文档语法。

注:

符合规范的 通用处理器 不必 支持接收或处理 定时文本中间文档。

4.3 TTML 配置规范文档类型

TTML 配置规范文档类型是一个 抽象文档 类型,旨在 用于定义和传达对 TTML 特性或扩展的支持或使用所施加的约束。 此文档类型 通过一组功能 模块 定义。

本规范引用了两类模式,它们可用于验证 定时文本配置规范文档实例:

TTML 配置规范 文档 实例 的(根)文档元素必须是一个 ttp:profile 元素,其定义见 6.1.1 ttp:profile。

注:

建议符合规范的 通用处理器 支持接收或处理 定时文本配置规范文档,但这不是强制要求。不过,一个 内容处理器 如果声明支持 http://www.w3.org/ns/ttml/feature/#profile 特性, 就必须支持此功能(接收和处理 定时文本配置规范文档)。

5 词汇

本节定义 定时文本标记语言(TTML)的命名空间、配置规范和词汇 (以元素和属性目录的形式),具体如下:

5.1 命名空间

定时文本标记语言(TTML)采用若干 XML 命名空间 [XML Namespaces 1.0],用于元素和某些 全局属性,它们统称为 TTML 命名空间, 并在 表 5-1 – 命名空间 中定义,其中每个 命名空间都被分配一个描述性名称、 一个默认命名空间前缀和一个 URI。 所有未在 表 5-1 – 命名空间 中定义的命名空间 都称为 其他命名空间。

表 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 配置规范 无 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 词汇, 而是用于指示配置规范、特性、扩展,以及 解引用标准配置规范定义等用途。

5.2 配置规范

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

5.2.1 引言

本小节为非规范性内容。

定时文本标记语言内容的作者可以使用给定的配置规范来实现以下两种 功能之一:(1) 声明一个 文档实例 遵守一组约束, 这些约束规定 使用哪些词汇以及如何使用;或 (2) 声明一个 处理器 必须满足有关 内容处理方式的某些条件。第一种功能称为 内容配置规范, 第二种称为 处理器配置规范。

一个 内容配置规范 允许作者在 创作时声明, 作者打算对 文档 实例 施加哪些约束。这样的 声明允许下游处理器执行内容验证或核验,并且 指导或限制后续 对内容的转换或编辑,以保持对作者指定的 内容配置规范的遵守。此外, 下游处理器可以使用内容配置规范声明,提前确定 自身能否处理 该内容配置规范所隐含的特性。

内容配置规范通过以下方式声明:(1) 使用 ttp:contentProfiles 属性,该属性位于根 tt 元素上;或 (2) 使用一个或多个顶层 ttp:profile 元素,其类型为 content。如果未声明,则不隐含任何内容配置规范。

注:

当内容配置规范使用 ttp:contentProfiles 属性进行声明时, 一个或多个指定的配置规范指示符可以引用顶层 ttp:profile 元素,因此, 可以结合上述两种配置规范声明机制的功能。 更多详情,请参见 构建有效内容配置规范 过程。

一个 处理器配置规范 允许作者 在创作时声明, 处理 文档 实例 时必须支持哪些处理,从而使得,如果某个 处理器无法执行所指示的处理,就应当中止处理。 这样的声明允许下游 处理器避免处理那些无法以满足 内容作者要求的方式进行处理的内容。

处理器配置规范通过以下方式声明:(1) 使用 ttp:processorProfiles 属性,该属性位于根 tt 元素上;(2) 使用一个或多个 ttp:profile 元素,其类型为 processor;或 (3) 使用 ttp:profile 属性, 该属性位于根 tt 元素上。如果未声明,则从 已声明的内容配置规范或 默认处理器配置规范 推断出一个处理器配置规范。

注:

当处理器配置规范使用 ttp:processorProfiles 属性进行声明时, 一个或多个指定的配置规范指示符可以引用顶层 ttp:profile 元素,因此, 可以结合上述配置规范声明机制中前两种 机制的功能。更多详情,请参见 构建有效处理器配置规范 过程。

注:

对于符合规范的 文档 实例,并不要求在文档中 声明处理器配置规范。更具体地说,允许通过 有效处理器配置规范 的多种后备确定机制来确定它,包括 (1) 从内容配置规范 推断处理器配置规范, (2) 从默认处理器配置规范隐含出处理器配置规范,以及 (3) 允许 文档 处理上下文 覆盖该确定结果,例如,使用 文档 交换上下文 确定一个 覆盖处理器配置规范。

注:

设计意图是: ttp:processorProfiles 或 ttp:profile 属性用于 作者希望引用一个(或多个)标准的、预定义的处理器配置规范 的情况,这些配置规范属于 TTML 内容,且作者不希望(通过扩充或缩减) 修改该配置规范。作者还可以使用这些属性指示使用 非标准配置规范,在这种情况下,指定的 <profile-designator> 表达 一个 URI,该 URI 表示外部定义的 配置规范定义文档。 但是,并不要求符合规范的 TTML 内容处理器 能够 解引用这种外部指定的配置规范定义。

相比之下,设计意图是:ttp:profile 元素 用于作者希望使用修改后的预定义配置规范,或 希望在 文档实例 中包含一个 非标准配置规范定义的情况, 该定义不基于任何预定义配置规范。

通过将某项特性或扩展指定为 required(强制),可以扩充预定义配置规范,前提是该特性或扩展未在基础的 基线 配置规范中指定,或在基线配置规范中指定为 optional(自愿)。 通过将某项特性或扩展指定为 optional(自愿),可以缩减预定义配置规范,前提是该特性或扩展被指定为 required(强制), 且该指定出现在基础的基线配置规范中。

当通过缩减来修改基线配置规范时,得到的派生配置规范 称为删减型配置规范;当通过扩充进行修改时,得到的结果 称为增补型配置规范。 也可以定义一个同时具有删减性 和增补性的派生配置规范。

内容作者不限于使用单个配置规范,而可以引用上述任一类型的多个 配置规范,即 多个内容配置规范和(或)多个处理器配置规范。当引用多个配置规范时, 它们各自的规定 会组合形成一个适用于文档的有效内容配置规范,以及一个 有效处理器配置规范, 后者在处理器处理该文档时适用。此外,作者也不限于 引用外部 定义的配置规范,而可以在文档内部以内联方式定义一个或多个配置规范。

注:

配置规范组合本身是一项可选 特性,它 根据以下条件确定: 处理器 是否支持 E.1.53 #contentProfiles-combined 或 以下 E.1.173 #processorProfiles-combined 特性。

注:

尽管作者声明了使用特定内容配置规范或 处理器配置规范的意图,但 处理器 仍被允许覆盖作者对内容配置规范和(或)处理器配置规范的声明。 预期这会是 处理器 仅支持单个配置规范或 有限数量配置规范时的典型行为,尤其是在 处理器 无法解引用(下载)并 处理 配置规范定义文档,且不 支持 顶层配置规范 时。

5.2.2 配置规范示例

本小节为非规范性内容。

作者定义的 TTML 呈现配置规范的 增补型派生配置规范的一个示例 如下所示,见 示例片段 – TTML 增补型 配置规范。

示例片段 – TTML 增补型配置规范
<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>

注:

在上面的示例中,基线配置规范被声明为 TTML2 呈现配置规范,随后通过将 #fontStyle-italic 特性设为必需来对其进行增补修改(而不是 将其保留为可选, 如 G.2 TTML2 呈现配置规范 中所定义的那样)。还请 注意, profile 元素上的默认 XMLNS 绑定被重置为 TT 参数命名空间。

5.2.3 配置规范指示符

配置规范通过两种方式之一进行引用,具体取决于该配置规范是在引用文档的 外部定义, 还是在引用文档的内部(内联)定义。当在外部定义时,配置规范 通过以下其中一种表达式 <absolute-profile-designator> 或 <relative-profile-designator> 进行引用。 当在内部(内联)定义时,配置规范可以被隐式引用, 也可以通过 <fragment-profile-designator> 表达式引用。

配置规范指示符必须遵守 <uri> 值的 语法。 如果配置规范指示符表示为相对 URI, 则必须对其进行 绝对化,使用 TT 配置规范 命名空间的值 作为基 URI,其中术语 绝对化 表示 按照 [URI] 第 5 节所述,将相对 URL 解析为绝对 URL。

所有以 TT 配置规范命名空间为前缀,但未 列于 表 5-2 – 配置规范 或 [TTML Profile Registry] 第 4 节注册表中的配置规范指示符,都保留供 将来进行标准化,且不得出现在符合规范的 文档实例 中。尽管存在这一约束, 配置规范指示符并不限于 表 5-2 – 配置规范 中列举的指示符集合,而可以是任何 能够实际解引用 TTML 配置规范定义 文档 的 URI, 只要它不使用 TT 配置规范命名空间作为前缀即可。

5.2.3.1 标准指示符

定时文本标记语言(TTML)采用若干 标准的、预定义的配置规范,用于其 词汇及相关语义。

下表规定了这组 配置规范,并 为每个 预定义配置规范 指明一个规范性名称和一个指示符, 其中每个配置规范都在以下附录中作了正式阐述: G 标准配置规范。

表 5-2 – 配置规范
名称 绝对指示符
DFXP 完整 http://www.w3.org/ns/ttml/profile/dfxp-full
DFXP 呈现 http://www.w3.org/ns/ttml/profile/dfxp-presentation
DFXP 转换 http://www.w3.org/ns/ttml/profile/dfxp-transformation
TTML2 完整 http://www.w3.org/ns/ttml/profile/ttml2-full
TTML2 呈现 http://www.w3.org/ns/ttml/profile/ttml2-presentation
TTML2 转换 http://www.w3.org/ns/ttml/profile/ttml2-transformation

注:

关于 DFXP 配置规范的定义,请参见 [TTML1]。 关于其他配置规范指示符,请参见 [TTML Profile Registry] 第 4 节, 注册表。

5.2.4 配置规范语义

5.2.4.1 配置规范状态对象概念

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

[配置 规定]

一个 配置规定 表示以下内部状态信息,这些信息对应于 一个 ttp:feature 或 ttp:extension 元素。

designator

一个 <uri> 值,表示特性或 扩展指示符,具体取决于 type。

type

"feature" | "extension"

value

"optional" | "required" | "prohibited"

[组合 配置规定集]

一个 组合 配置规定集 表示以下内部状态信息, 这些信息对应于一组 配置 规定, 并额外记录构成该集合的 配置规范,这些规定从那些配置规范中获取(或派生)。

constituents

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

specifications

一个由 配置 规定 组成的有序列表。

[空 配置规定集]

一个 组合 配置规定集,其 constituents 和 specifications 分量 均为空集

[配置规范实例]

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

designator

一个 <absolute-profile-designator> 表达式, 它与此配置规范相关联(并唯一标识此配置规范)。

type

"content" | "processor"

combine

"leastRestrictive" | "mostRestrictive" | "replace"

use

值为 null 或一个 <profile-designator> 表达式, 该表达式表示用作此配置规范的基线配置规范的配置规范。

constituents

如果配置规范是一个 包含嵌套的配置规范,则为 一个有序列表,其中包含 <fragment-profile-designator> 表达式,每个指示符表示一个 组成该配置规范的 嵌套配置规范;否则为 null。

注:

如果一个 嵌套配置规范 指定了 一个 xml:id 属性,则可以将该标识符用于 constituents 分量;否则,预期 处理器 实现 使用一个在内部合成的标识符。

specifications

如果配置规范是一个 不包含嵌套的配置规范, 则为一个有序列表,其中包含 配置 规定;否则为 null。

组合 规定集

一个 组合 配置规定集, 表示对此配置规范指定或引用的 规定进行组合的结果。

注:

当本规范提到 组合 规定集 时,对于某个 配置规范,所指的是 组合 配置规定集 状态对象,该对象由 组合 规定集 分量 引用,该分量位于一个 配置规范实例 中, 而该实例关联着这一 配置规范。

5.2.4.2 内容配置规范语义
[构建 有效内容配置规范]

每个 TTML 文档实例 都关联着 一个(可能为空的) 有效内容配置规范,它可以 由 内容处理器 用于执行以下任意(或全部) 操作:

  1. 推断有效处理器配置规范;

  2. 执行 验证处理,处理对象为 该 文档实例;

  3. 约束对 文档实例 的转换处理, 以维持内容配置规范的不变量。

有效内容配置规范 按照以下 过程构建:

  1. 如果 文档处理 上下文 确定某个特定的 覆盖内容配置规范 PO 将覆盖所有其他确定结果,则 有效内容配置规范 为 PO;

    注:

    例如,一个 [EBU-TT-D] 文档,如果符合 本规范, 可以指定一个 ebuttm:conformsToStandard 元素,以表明 其符合 [EBU-TT-D] 内容配置规范。 在这种情况下,一个 内容 处理器,如果支持该配置规范,就可以利用 该元素的存在作为覆盖依据,以确定 有效内容 配置规范。

  2. 否则,如果根元素上指定了 ttp:contentProfiles 属性, 该根元素为 tt,则 有效内容配置规范 为 一个 配置规范实例, 其 组合 规定集 通过组合以下集合来构建:组合 规定集,这些集合属于所指示的配置规范,其中 应用的内容配置规范组合方法由 ttp:contentProfileCombination 属性指定(或由其默认值指定),该属性位于根 tt 元素上;

  3. 否则,如果一个或多个 顶层 内容配置规范 已被定义,则 有效内容配置规范 为 一个 配置规范实例, 其 组合 规定集 通过组合以下集合来构建:组合 规定集,这些集合属于所有此类 顶层 内容配置规范,其中 应用的内容配置规范组合方法由 ttp:contentProfileCombination 属性指定(或由其默认值指定),该属性位于根 tt 元素上;

  4. 否则,有效内容 配置规范 为 null。

为了满足 通用 处理器符合性, 在处理给定的 文档实例 时, 有效内容配置规范 一旦 被设置为指向一个 配置规范实例 的非空引用, 就在整个处理期间保持为指向一个不变的 配置规范实例 的不变引用。同样,如果设置为 null 引用,则在整个处理期间保持为不变的 null 引用, 直至该处理结束。

5.2.4.3 处理器配置规范语义
[如果 处理器配置规范不受支持则中止]
  1. 将 EPP 设置为 有效处理器 配置规范,该配置规范通过执行 构建有效处理器配置规范 过程获得;

  2. 对于每个 配置 规定 S(其所在的 组合 规定集 属于 EPP),执行以下步骤:

    1. 如果 value 分量 属于 S,且其值为 required,并且 内容处理器 不支持 S,则中止处理 文档实例,除非 这一行为被覆盖, 覆盖方为最终用户,或某个可追溯到最终用户、 用户配置设置或系统配置设置的实现特定参数;

[构建 有效处理器配置规范]

每个 TTML 文档实例 都关联着 一个(非空的) 有效处理器配置规范,它 由 内容处理器 用于确定自身是否 满足 内容作者所表明的最低处理要求。

有效处理器配置规范 按照以下 过程构建:

  1. 如果 文档处理 上下文 确定某个特定的 覆盖处理器配置规范 PO 将覆盖所有其他确定结果,则 有效处理器配置规范 为 PO;

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

    1. 如果 ttp:processorProfiles 属性是 使用 all(...) 函数语法指定的,或 未使用函数语法,即仅作为指示符列表指定,则 此时的 有效处理器 配置规范 为一个 配置规范 实例,其 组合 规定集 通过组合以下集合来构建:组合 规定集,这些集合属于所指示的配置规范,其中 应用的内容配置规范组合方法由 ttp:processorProfileCombination 属性指定(或由其默认值指定),该属性位于根 tt 元素上;

    2. 否则,如果 ttp:processorProfiles 属性 是使用 any(...) 函数语法指定的, 则对于每个所指示的配置规范, 有效处理器 配置规范 为一个 配置规范 实例,其 组合 规定集 是以下集合的副本:组合 规定集,该集合属于所指示的配置规范列表中 第一个受到支持的配置规范,支持方为 内容处理器;

  3. 否则,如果一个或多个 顶层 处理器配置规范 已被定义,则 有效处理器配置规范 为一个 配置规范 实例,其 组合 规定集 通过组合以下集合来构建:组合 规定集,这些集合属于所有此类 顶层 处理器配置规范,其中 应用的处理器配置规范组合方法由 ttp:processorProfileCombination 属性指定(或由其默认值指定),该属性位于根 tt 元素上;

  4. 否则,如果 ttp:profile 属性被指定于根 tt 元素上,则 有效处理器配置规范 为一个 配置规范 实例,其 组合 规定集 是以下集合的副本:组合 规定集, 该集合属于此属性所指示的配置规范;

  5. 否则,有效 处理器配置规范 为 执行 构建推断的处理器配置规范 过程所得的结果;

为了满足 通用 处理器符合性, 在处理给定的 文档实例 时, 有效处理器配置规范 一旦被设置为指向一个 配置规范实例 的引用, 就保持为指向一个不变的 配置规范实例 的不变引用,直至该处理结束。

[构建 推断的处理器配置规范]
  1. 将 ECP 设置为 有效 内容配置规范;

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

    1. 如果 ttp:inferProcessorProfileSource 参数的计算值为 combine,则 推断的处理器 配置规范 为以下应用操作的结果:将 推断处理器配置规范 函数 应用于 组合 规定集,该集合属于 ECP;

    2. 否则,如果 ttp:inferProcessorProfileSource 参数的计算值为 first,则 推断的处理器 配置规范 为第一个推断的处理器配置规范, IPP, 该配置规范通过将 推断处理器配置规范 函数 应用于 组合 规定集 而产生,该集合属于一个 配置规范 实例, 该实例与以下集合的每个组成配置规范相关联:组合 规定集,该集合属于 ECP,并且要求 IPP 受到以下处理器的支持: 内容处理器;

  3. 否则,推断的处理器 配置规范 为 执行 构建默认处理器配置规范 过程所得的结果;

[推断处理器 配置规范](组合 配置规定集 CPSS)
  1. 将推断的处理器配置规范 IPP 初始化为一个 配置规范实例, 其 组合 规定集 是以下集合的副本:空 配置规定集;

  2. 对于每个配置规定 S,它来自 组合 配置规定集 CPSS:

    1. 将内容配置规定 S 映射为处理器配置 规定 S' ,映射依据是 ttp:inferPresentationProfileMethod 参数的计算值以及 表 6-2 – 推断处理器配置规范的方法;

    2. 将 S'  添加到 组合 规定集 中,该集合属于 IPP;

  3. 返回 IPP 作为推断的处理器配置规范;

[构建默认 处理器配置规范]
  1. 如果 文档交换 上下文 关联着一个 处理器配置规范,或关联着一个 内容配置规范, 且可以从中推断出一个 处理器配置规范, 则 默认处理器配置规范 为 该 处理器配置规范;

  2. 否则,如果 内容处理器 主要被归类为 呈现处理器,则 默认处理器配置规范 为 一个 配置规范实例, 它通过将 TTML2 呈现配置规范内部化而构建 (http://www.w3.org/ns/ttml/profile/ttml2-presentation);

  3. 否则,如果 内容处理器 主要被归类为 转换处理器,则 默认处理器配置规范 为 一个 配置规范实例, 它通过将 TTML2 转换配置规范内部化而构建 (http://www.w3.org/ns/ttml/profile/ttml2-transformation)。

注:

一个 内容处理器,如果打算 用于 一个或多个不同版本的 TTML,可以选择一个 默认处理器配置规范, 其依据为 TTML 呈现或转换配置规范的未来版本。

5.3 验证

本节介绍 TTML 验证子系统及适用于该 子系统的高层要求。

验证是一项可选功能,由 验证 处理器 执行, 可以在候选 文档实例 被 执行验证的 内容处理器 接收或以其他方式处理时发生。如果进行这种处理, 且出现异常情况,则可以中止处理, 具体细节见下文。

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

  • 不符合规范的文档可能只有部分内容被 转换处理器 转换, 从而产生不完整的转换结果;

  • 不符合规范的文档可能只有部分内容被 呈现处理器 呈现, 从而产生不完整的呈现结果。

如果确实因 验证 处理 而中止处理,则 文档实例 中从哪个位置起不再处理后续内容, 本规范并未定义。具体 而言,实现可以在遇到第一个 验证错误 时中止处理,也 可以在遇到任意数量的 验证错误 之后中止处理。因此, 从不符合规范的文档中接收的输入内容量,以及相应的(转换或 呈现)输出,可能因实现而异。

5.3.1 验证语义

5.3.1.1 验证状态对象概念

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

[验证 异常]

一个 验证异常 表示以下内部状态信息,这些信息对应于一种异常 情况,该情况发生在 验证 处理 期间

message

一个任意的(由实现定义的)字符串,用于描述或表征 该异常。

type

"error" | "warning"

一个 验证异常, 如果其类型为 error,则称为 验证 错误, 而一个 验证 异常, 如果其类型为 warning,则称为 验证 警告。

除非适用某个 更高层协议, (1) 如果检测到某个 文档实例 违反了本规范的强制要求或禁止规定, 则将其 视为 错误,在这种情况下, 适用一个 验证错误 异常;并且 (2) 如果检测到违反本规范的建议或不建议事项的 情况,则 验证警告 适用。

注:

此上下文中更高层协议的一个示例是由系统或最终用户 定义的 配置选项,该选项属于 文档处理上下文, 并使警告被视为错误,或反之亦然。

5.3.1.2 验证处理语义
[构建 有效验证配置规范]
  1. 如果文档的 有效内容 配置规范 不为 null,则 有效验证 配置规范 为 有效内容配置规范;

  2. 否则,有效 验证配置规范 为 有效处理器 配置规范。

为了满足 通用 处理器符合性, 在处理给定的 文档实例 时, 有效验证配置规范 一旦被设置为指向一个 配置规范实例 的引用, 就保持为指向一个不变的 配置规范实例 的不变引用,直至该处理结束。

[构建 有效验证模式]
  1. 如果文档的 有效 验证配置规范 关联着一个或多个 模式,则 有效验证 模式 的集合是这些关联模式的一个适当子集, 该子集根据 文档处理 上下文 的要求确定;

  2. 否则,有效 验证模式 是一组默认模式,由 文档处理 上下文 选择。

注:

对于怎样的一组模式才算适当, 本规范未作正式定义;但是, 预期选择过程会利用 (1) 可供 处理器 实现使用且受其支持的模式类型,以及 (2) 作为启发式依据,与必需或可选特性 相关联的最大版本号,该特性由 有效验证配置规范 确定。

[验证文档]
  1. 如果验证被某个 更高 层协议 禁用, 或者 ttp:validation 参数的计算值为 prohibited, 则退出此过程,除非最终用户或应用程序覆盖了这一 禁止规定;

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

  3. 否则,使用 有效 验证模式,并根据需要使用其他 验证工具,验证文档符合性,使得

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

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

    • 根据文档解析得到的字符编码,输入文档的编码字符 是良构的;并且,

    • 输入文档是一个良构的 XML 文档;并且

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

  • 验证输入文档遵守本规范定义的所有其他语法和语义 约束,这些约束未被 有效验证 模式 直接表达。

如果上述任何验证步骤检测到不符合 强制要求(必须)或禁止规定(不得)的状态,则 验证错误 情况适用。如果上述任何验证步骤检测到不符合 建议(应当)或不建议事项 (不应当)的状态,则 验证警告 情况适用。

注:

由于 有效验证模式 的确定 依赖于 实现,并且没有要求 有效验证模式 检测 每一种可能的 验证错误,因此执行 [验证文档] 过程来处理无效文档实例时,不一定会产生 验证 异常,在这种情况下, 验证处理 的结果 可以视为假阳性。

例如,一个 内容配置规范 可以 禁止使用某项特性,具体方式是将 prohibited 用作 value 属性的值,该属性属于一个 ttp:feature 或 ttp:extension 元素;但是,某个特定的 [验证文档] 过程实现可能无法检测到这种被禁止的用法, 即使它出现在 文档实例 中,因此 产生假阳性验证结果。

由于这些限制,[验证文档] 过程的规范措辞以潜在的 验证错误 或 验证 警告 是否被检测到为前提,但并不强制要求所有可能的 验证错误 和 验证 警告 都被检测到。

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

5.4 目录

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

核心目录定义 TTML 的基线核心词汇, 尤其是 TTML 内容的词汇。扩展目录 为 TTML 定义的核心词汇的扩展 提供预留位置。

5.4.1 核心目录

核心词汇目录旨在满足 TTML 的需求,同时为未来的配置规范提供基线词汇。此词汇 分为不同的类别,具体规定 见以下各节:

规定用于 文档 实例 的核心元素词汇 以一组带标签的 模块 的形式列于 表 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
配置规范 ttp:features, ttp:feature, ttp:extensions, ttp:extension, ttp:profile
样式 initial, styling, style

用于定义 TTML 元素类型内容模型的元素词汇组 以一组组的形式列于 表 5-4 – 元素词汇组,其中 每个组都被定义为一项内容规定,该规定满足产生式 [46], 此产生式见 [XML 1.0],并且每个组都可以被扩展(但不能限制),扩展由 一个或 多个 扩展模块 提供。

表 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
音频样式属性 tta:gain, tta:pan, tta:pitch, tta:speak
条件化属性 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,
配置规范属性 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

注:

只有被定义为以下两类之一的属性:(1) 全局属性,即经过命名空间限定的属性;或 (2) 共享的元素专用属性,即未经命名空间限定但由多个 元素类型共享的属性,才列于上面的 表 5-5 – 属性 词汇 中。

注:

TTML 定义的所有词汇都一致采用 所谓的 lowerCamelCase 命名约定。在某些情况下,如果某个名称 基于采用不同命名约定的其他规范, 这就会导致该名称发生变化。

5.4.2 扩展目录

扩展词汇目录旨在供 TTML 的未来 配置规范使用,本版本 TTML 未对其作进一步 定义。

除了标准化的扩展词汇之外,符合规范的 文档实例 还可以包含任意经过命名空间 限定的 元素,这些元素所在的命名空间可以是任何命名空间,只要不是 为本规范定义的命名空间即可。此外,符合规范的 文档实例 还可以在 TTML 定义的词汇上包含任意经过命名空间 限定的 属性,只要这些属性所在的命名空间 不是为本规范定义的任何 命名空间即可。

6 配置规范

本节规定核心词汇目录中的配置规范 内容,其中配置规范内容应理解为表达相关要求或可选性的信息, 这些要求或可选性涉及创作或处理 定时文本内容文档。

6.1 配置规范元素词汇

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

注:

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

6.1.1 ttp:profile

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

注:

特性与 扩展之间的区别在于其定义位置和标识方式: 如果在本规范(或其未来修订版)中定义,并且 使用 E 特性 中的特性标识进行标记,则 将其视为特性;如果在其他规范中定义, 并在该规范中使用扩展标识进行标记,则 将其视为扩展。通常,预期特性通过 W3C 标准流程定义,而扩展则预期由 第三方定义。

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

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

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

ttp:profile 元素接受零个或多个子元素, 这些元素属于 Metadata.class 元素 组,后跟以下两者之一:(1) 零个或多个 ttp:features 元素,后跟 零个或多个 ttp:extensions 元素;或 (2) 零个或多个 ttp:profile 元素。 当 ttp:profile 元素包含一个子 ttp:profile 元素时, 该子元素称为 嵌套配置规范,而父元素称为 包含嵌套的配置规范; 否则,该元素称为 不包含嵌套的配置规范。

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

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

combine 属性用于指定 特性规定或扩展规定的组合方式,适用于 多个规定分别作用于同一特性或扩展的情况。

如果 combine 属性的值为 replace 或 ignore,则 在词法上靠后的特性规定或扩展规定,相应地替换词法上靠 前的 规定,或被忽略,其中规定元素按以下顺序排列:

  1. 由 基线配置规范 定义的规定, 该配置规范由 use 属性引用;

  2. 由后代 ttp:profile 元素定义的规定,按后序 遍历顺序排列;

  3. 作为后代 ttp:feature 或 ttp:extension 元素定义的规定,按后序遍历顺序排列。

如果值为 leastRestrictive,则限制最少的规定值 适用; 如果值为 mostRestrictive,则限制最多的规定值 适用。限制程度的顺序如下(从少到多): optional、required、prohibited。

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

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

如果指定了 use 属性,它必须遵守 <absolute-profile-designator> 或 <relative-profile-designator> 值语法,并且必须引用以下两者之一:(1) 标准的、预定义的 配置规范,其定义见 5.2.3.1 标准指示符; 或 (2) 一个实际可解引用的资源,表示有效的 配置规范定义文档 实例。 在这两种情况下,被引用的配置规范都充当 基线配置规范,所属元素为指定该属性的 ttp:profile 元素。

注:

由于 use 属性必须引用整个(完整的)配置规范定义文档, 因此它不能用于引用 顶层配置规范 或 嵌套配置规范。 这就排除了使用以下 use 属性的情况:其 <uri> 值包含 片段 分量。

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

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

  1. 将 CPSS 初始化为空集;

  2. 如果存在 use 属性,则合并 组合 规定集,该集合属于被引用的 基线 配置规范,合并目标为 CPSS;

  3. 对于 P 的每个 ttp:profile 子元素, 使用后序遍历,将 组合 规定集,即该子配置规范的组合规定集, 合并到 CPSS;

  4. 对于每个 ttp:feature 和 ttp:extension 子元素,其父元素为 ttp:profile 元素, 使用后序遍历,将特性规定或扩展规定 合并到 CPSS。

符合规范的 TTML 处理器不必能够 解引用 配置规范定义文档,如果该文档 不属于 标准的预定义配置规范,这些配置规范由 G 标准 配置规范 定义。此外, 符合规范的 TTML 处理器可以使用每个标准预定义配置规范的 内置静态形式,从而无需 解引用网络资源。

如果 TTML 处理器无法解引用非标准的 配置规范定义文档,则它不得 继续处理 该文档,除非存在来自最终用户的显式覆盖, 或来自某个实现特定参数的显式覆盖,而该参数可追溯到最终用户、 用户配置设置或系统配置设置。如果 TTML 处理器中止 处理某个 文档实例,原因是无法 引用非标准的 配置规范定义 文档,则应当 向最终用户提供某种通知,除非最终用户或系统 已禁用这种通知,或者处理器不允许 或不涉及最终用户的干预。

符合规范的 TTML 处理器不必能够支持 组合配置规范 或 包含嵌套的配置规范。如果 (1) 组合配置规范 不受支持,并且处理 某个 配置规范 会使其被视为 组合配置规范,或者 (2) 包含嵌套的配置规范 不受支持,并且处理 某个 配置规范 会使其被视为 包含嵌套的配置规范, 则不得继续处理该 配置规范,除非 存在来自最终用户的显式覆盖, 或来自某个实现特定参数的显式覆盖,而该参数可追溯到最终用户、用户配置设置或系统 配置设置。如果 TTML 处理器中止 处理某个 文档实例,原因是缺乏 对 组合配置规范 或 包含嵌套的配置规范 的支持, 则应当向最终用户提供某种通知,除非最终用户或系统已禁用 这种通知, 或者处理器不允许或不涉及最终用户的干预。

注:

如果某个 文档实例 不要求支持 组合配置规范,则它不应当使用:

注:

如果某个 文档实例 不要求支持 包含嵌套的配置规范,则它不应当使用 嵌套配置规范。

以下示例展示了 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 呈现配置规范用作 基线配置规范。随后,通过要求支持以下特性来扩充该基线配置规范 (从而创建一个增补型派生配置规范): #text-outline 特性。

6.1.2 ttp:features

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

ttp:features 元素接受零个或多个子元素, 这些元素属于 Metadata.class 元素 组,后跟 零个或多个 ttp:feature 元素。

XML 表示 – 元素信息项:ttp:features
<ttp:features
  xml:base = <uri> : TT 特性命名空间
  xml:id = ID
  Content: Metadata.class*, ttp:feature*
</ttp:features>

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

xml:base 属性 用于允许缩写特性标识 URI,这些 URI 由 子 ttp:feature 元素表达。

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 属性,则 restricts 属性不得 指定在 ttp:feature 元素上;同样,如果 restricts 属性 已被指定,则不得指定 extends 属性。

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

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

value 属性根据配置规范类型,指定对所指示特性的 支持或使用所施加的约束。

如果该配置规范是一个 处理器配置规范, 则适用以下语义:

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

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

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

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

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

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

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

如果该配置规范是一个 内容配置规范, 则适用以下语义:

  • 如果 value 属性的值 为 optional,则该特性可以但不必出现在一个文档中, 该文档声明符合此配置规范;

  • 如果 value 属性的值 为 required,则该特性必须出现在一个文档中, 该文档声明符合此配置规范;

  • 如果 value 属性的值 为 prohibited,则该特性不得出现在一个文档中, 该文档声明符合此配置规范;

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

值 use,作为 value 属性的一个值,已 弃用。如果它 出现在配置规定中,则必须将其解释为如同 required 已被指定。

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

注:

具体而言,如果某个特性未出现在内容配置规范定义中, 则不应将其解释为不允许或以其他方式禁止(在 文档实例 中) 使用该特性。如果某个特性旨在被 内容配置规范禁止, 则应当使用 prohibited 值来指定它。

如果某个 文档实例 使用了以下章节定义的特性: E.1 特性标识,并且该文档的预期 使用 要求识别和处理该特性,则 该文档必须在其某个已声明或引用的配置规范中包含一项 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 呈现配置规范用作 基线配置规范。随后,通过三个 ttp:feature 元素修改该基线配置规范,以便 (1) 扩充基线配置规范(因为 #fontStyle-italic 和 #textDecoration-under 均不是 TTML 呈现配置规范所必需的),以及 (2) 禁止使用 #textOutline-blurred 特性 (该特性在 TTML 呈现配置规范中是可选的)。

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

6.1.4 ttp:extensions

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

ttp:extensions 元素接受零个或多个子元素, 这些元素属于 Metadata.class 元素 组,后跟 零个或多个 ttp:extension 元素。

XML 表示 – 元素信息项:ttp:extensions
<ttp:extensions
  xml:base = <uri> : TT 扩展命名空间
  xml:id = ID
  Content: Metadata.class*, ttp:extension*
</ttp:extensions>

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

xml:base 属性 用于允许缩写特性标识 URI,这些 URI 由 子 ttp:extension 元素表达。

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 属性,则 restricts 属性不得 指定在 ttp:extension 元素上;同样,如果 restricts 属性 已被指定,则不得指定 extends 属性。

如果以下来源表达的 URI:(1) ttp:extension 元素的内容,(2) extends 属性,或 (3) restricts 属性, 是相对 URI,则当它与扩展命名空间值 组合时,该命名空间值由 xml:base 属性表达,该属性位于 最近的祖先 ttp:extensions 元素上,组合结果必须表达一个 绝对 URI。无论是哪种情况(原始绝对 URI,还是得到的 绝对化 URI),由 ttp:extension 元素表达的 URI 还必须遵守扩展标识的语法, 其定义见 F.1 扩展标识, 而由 extends 属性和(或) restricts 属性表达的 URI 必须遵守特性标识 或扩展标识的语法,其定义分别见 E.1 特性 标识 或 F.1 扩展标识。

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

value 属性根据配置规范类型,指定对所指示扩展的 支持或使用所施加的约束。

如果该配置规范是一个 处理器配置规范, 则适用以下语义:

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

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

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

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

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

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

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

如果该配置规范是一个 内容配置规范, 则适用以下语义:

  • 如果 value 属性的值 为 optional,则该扩展可以但不必出现在一个文档中, 该文档声明符合此配置规范;

  • 如果 value 属性的值 为 required,则该扩展必须出现在一个文档中, 该文档声明符合此配置规范;

  • 如果 value 属性的值 为 prohibited,则该扩展不得出现在一个文档中, 该文档声明符合此配置规范;

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

值 use,作为 value 属性的一个值,已 弃用。如果它 出现在配置规定中,则必须将其解释为如同 required 已被指定。

如果某个广为人知的扩展未由 内容配置规范中的 ttp:extension 元素指定,则必须将其解释为如同 该扩展已被指定, 且其 value 属性等于 optional。但是,如果未在 处理器配置规范中指定,则不隐含 任何关于支持或不支持该扩展的声明。

注:

具体而言,如果某个扩展未出现在内容配置规范定义中, 则不应将其解释为不允许或以其他方式禁止(在 文档实例 中) 使用该扩展。如果某个扩展旨在被 内容配置规范禁止, 则应当使用 prohibited 值来指定它。

如果某个 文档实例 使用 一个可按 F.1 扩展 标识 指示的扩展,并且该文档的预期使用 要求识别和处理该扩展,则该 文档必须包含一项 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="required">#prefilter-by-language</ttp:extension>
  </ttp:extensions>
</ttp:profile>

注:

在上面的示例中,TTML 转换配置规范用作 基线配置规范。随后,通过指定必须支持一个私有扩展 来扩充该基线配置规范, 该扩展在第三方命名空间中定义。

此示例的效果是表达作者的以下意图: 接收方处理器必须支持 TTML 转换配置规范,并且 还必须支持由第三方定义的一个扩展。

6.2 配置规范属性词汇

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

6.2.1 ttp:contentProfiles

ttp:contentProfiles 属性可以由内容作者使用, 用于表达一个或多个 内容配置规范,它们属于 定时文本标记语言(TTML),并且 包含它的文档实例 声明符合 一组配置规范中的全部, 这组配置规范是所指定的 内容配置规范。

如果指定了此属性,其值必须遵守以下语法, 其中每个 profile-designator 项都遵守 <uri> 值语法,并且 还须遵守配置规范指示符的约束,这些约束依据 5.2 配置规范 定义。

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

designators
  : designator (<lwsp> designator)*

designator
  : <profile-designator>

如果指示符列表包含在函数语法 all(...) 中,或者未 使用函数语法, 则声明符合所有指示的 内容 配置规范。

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

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

6.2.2 ttp:contentProfileCombination

ttp:contentProfileCombination 属性用于指定 组合多个 内容配置规范 的方法。

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

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

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

给定两个有序的配置规定值 arg1 和 arg2,以及一种内容 配置规范组合方法, 表 6-1 – 内容配置规范组合 规定了组合这两个规定值的结果,其中实参 顺序根据以下配置规范的词法顺序确定: 内容配置规范,它们位于一个 文档实例 中。

表 6-1 – 内容配置规范组合
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 属性用于指定 将内容配置规定值映射为相应处理器 配置规定值的方法。

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

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

如果此参数的值为 loose,则从内容配置规定 推断处理器配置规定时, 适用宽松(宽容)的映射。

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

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

给定一个输入的内容配置规定值 input,以及一种推断处理器 配置规范的方法, 表 6-2 – 推断处理器配置规范的 方法 规定了映射该输入规定值的结果。

表 6-2 – 推断处理器配置规范的方法
input loose strict
optional optional required
required required required
prohibited optional optional

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

6.2.4 ttp:inferProcessorProfileSource

ttp:inferProcessorProfileSource 属性用于指定 将内容配置规定值映射为相应处理器 配置规定值时所使用的来源。

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

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

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

如果此参数的值为 first,则在推断处理器配置规范时, 选取第一个组成配置规范,该配置规范属于 组合规定 集,而该集合属于 有效内容配置规范, 并且从该组成配置规范推断出的处理器配置规范受到 内容处理器 的支持, 将其用作推断来源,更多详情请参见 构建推断的处理器 配置规范 过程。

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

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

6.2.5 ttp:permitFeatureNarrowing

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

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

语法表示 – ttp:permitFeatureNarrowing
ttp:permitFeatureNarrowing
  : xsd:boolean                             // 参见 [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                             // 参见 [XML Schema Part 2],第 3.2.2 节

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

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

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

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

6.2.7 ttp:profile

ttp:profile 属性 表示一个 处理器配置规范, 它属于定时文本标记语言(TTML),适用于处理 文档实例 的情况。

注:

如果作者希望指定一组处理器配置规范中的一个或多个适用, 而非单个处理器配置规范适用,则建议内容作者使用 ttp:processorProfiles,其规定见 6.2.8 ttp:processorProfiles。

注:

有关指明内容配置规范的信息,请参见 6.2.1 ttp:contentProfiles。

如果指定了此属性,其值必须遵守以下语法, 其中 designator 遵守 <uri> 值语法,并且还必须指定一个 配置规范指示符,该指示符符合 5.2 配置规范。

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

designator
  : <profile-designator>

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

如果一个 顶层 处理器配置规范 在 文档实例 中被定义,则 ttp:profile 属性不应当指定在 tt 元素上。

注:

请参见 5.2.4 配置规范语义,以了解 如何确定 有效处理器配置规范, 当一个或多个机制 指示了一个或多个配置规范,供处理文档时(可能)使用。

6.2.8 ttp:processorProfiles

ttp:processorProfiles 属性可以由内容作者使用, 用于表达一个或多个 处理器配置规范,它们属于 定时文本标记语言(TTML),并且 包含它的文档实例 要求支持 (1) 一组配置规范中的全部, 这组配置规范是所指定的 处理器配置规范;或 (2) 一组配置规范中的任意一个, 这组 配置规范是所指定的 处理器配置规范。

如果指定了此属性,其值必须遵守以下语法, 其中每个 profile-designator 项都遵守 <uri> 值语法,并且 还须遵守配置规范指示符的约束,这些约束依据 5.2 配置规范 定义。

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

designators
  : designator (<lwsp> designator)*

designator
  : <profile-designator>

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

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

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

6.2.9 ttp:processorProfileCombination

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

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

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

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

给定两个有序的配置规定值 arg1 和 arg2,以及一种处理器 配置规范组合方法, 表 6-3 – 处理器配置规范 组合 规定了组合这两个规定值的结果, 其中实参的 顺序根据以下配置规范的词法顺序确定: 处理器配置规范,它们位于一个 文档实例 中。

表 6-3 – 处理器配置规范组合
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,则除非中止处理的行为被 最终用户或应用程序覆盖, 否则 执行验证的内容处理器 必须中止处理 TTML 文档实例,如果有 验证错误 异常发生。

如果此参数的值为 warn,则一个 执行验证的内容处理器 应当在以下情况发生时警告最终用户:验证错误 或 验证警告 异常 发生, 并让最终用户选择继续还是中止处理。

如果此参数的值为 ignore,则一个 执行验证的内容处理器 不应当中止处理,也不应当警告最终用户,即使 验证异常 发生。

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

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

7 参数

本节规定核心词汇目录中的参数 内容,其中 参数应理解为以下信息:(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
  : <non-negative-integer>

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

注:

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

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

注:

均匀网格仅用于 测量长度和表达坐标。具体而言,并不 假定文本的呈现或各个 字形区 的对齐 与此网格相协调。这种对齐是可能的,但 需要使用等宽字体,并采用其 EM 方框恰好 匹配单元格大小的字号。

除非另有说明,当一个 <length> 以单元格 表示,且表示平行于内联或块推进尺寸的尺寸时, 分别适用单元格在内联或块推进尺寸上的尺寸。

注:

例如,如果(所有四条边的)内边距指定为 0.1c,单元格分辨率 为 20 × 10,并且 根容器 区域 的大小为 640 × 480,那么,假设采用从上到下、 从左到右的书写模式,起始侧和结束侧的内边距将为 (640 / 20) * 0.1 像素,而 其 前侧和后侧的内边距将为 (480 / 10) * 0.1 像素。

7.2.2 ttp:clockMode

ttp:clockMode 属性用于指定 将时间表达式解释为实时时间坐标的方式,适用于 采用 clock 时基运行的情况,该时基的定义见 7.2.11 ttp:timeBase。

注:

请参见 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(国际原子时) + 自 1972 年以来累计的 闰秒。TAI 由国际 计量局(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
  : <non-negative-integer>

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

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

7.2.4 ttp:dropMode

ttp:dropMode 属性用于指定 对帧计数的解释和使用的约束, 这些帧计数对应于 [SMPTE ST 12-1] 时间坐标,适用于 采用 smpte 时基运行的情况,该时基的定义见 7.2.11 ttp:timeBase。

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

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

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

注:

当以 nonDrop 模式运行时,在正常(1 倍速)向前播放期间,时间表达式中的一秒 可能等于,也可能不等于实际时间中的 一秒。如果指定了 ttp:frameRateMultiplier 参数,且其值不 等于 1:1,则时间表达式中的一秒会 短于或长于实际播放所经过的 一秒。

如果此参数的值为 dropNTSC,则在时间表达式的任意 给定秒内(秒数为 00 的情况除外), 帧从 0 计数到 N−1,其中 N 是 ttp:frameRate 参数指定的值,但 忽略以下参数指定的任何值: ttp:frameRateMultiplier 参数。如果时间 表达式的秒数为 00,并且时间表达式的分钟数 不是 00、10、20、30、 40 或 50,则帧码 00 和 01 在该秒内被跳过;否则,这些 帧码不会被跳过。

注:

例如,当以 dropNTSC 模式运行,且 ttp:frameRate 为 30 时, 连续帧之间的帧计数会出现不连续,如以下 时间表达式序列所示:01:08:59:28、 01:08:59:29、01:09:00:02、 01:09:00:03。

如果此参数的值为 dropPAL,则在时间表达式的任意 给定秒内(秒数为 00 的情况除外), 帧从 0 计数到 N−1,其中 N 是 ttp:frameRate 参数指定的值,但 忽略以下参数指定的任何值: ttp:frameRateMultiplier 参数。如果时间 表达式的秒数为 00,并且时间表达式的分钟数 为偶数,但不是 00、20 或 40, 则帧码 00 到 03 在该秒内被跳过;否则,这些帧码不会被跳过。

注:

例如,当以 dropPAL 模式运行,且 ttp:frameRate 为 30 时, 连续帧之间的帧计数会出现不连续,如以下 时间表达式序列所示:01:09:59:28、 01:09:59:29、01:10:00:04、 01:10:00:05。

注:

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

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

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

7.2.5 ttp:frameRate

ttp:frameRate 属性用于指定相关 媒体对象的帧率,或者 文档 实例 的固有帧率,如果该实例打算 作为独立媒体对象发挥作用。

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

语法表示 – ttp:frameRate
ttp:frameRate
  : <non-negative-integer>                                // value > 0

适用于 文档实例 的帧率,其用途 是 解释以帧为单位表达的时间表达式, 这些表达式的定义见 12.3.1 <time-expression>。

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

注:

请参见 I.2 媒体时基,以了解更多 细节, 这些细节涉及 media 时基的时间表达式解释方式。

如果未指定,则必须将帧率视为等于某个 由应用程序定义的帧率;或者,如果没有适用的应用程序定义帧率, 则为每秒三十 (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
  : <non-negative-integer>

当所需帧率无法 表示为每秒整数帧时,使用帧率乘数。

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

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

注:

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

注:

除 PAL/M 的情况外,用于与 PAL 格式的视频对象在每秒 25 帧下同步的帧率乘数,其标称值为 1:1。

7.2.7 ttp:markerMode

ttp:markerMode 属性用于指定 对时间表达式的解释和使用的约束, 这些表达式对应于 [SMPTE ST 12-1] 时间坐标,适用于 采用 smpte 时基运行的情况,该时基的定义见 7.2.11 ttp:timeBase。

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

语法表示 – 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 标记模式运行时,存在一个隐含的时间坐标 空间,即 合成 SMPTE 文档 同步基准, 它由单调递增(或递减)的 [SMPTE ST 12-1] 时间坐标定义,同时考虑 计算得到的帧率和丢帧模式。所有时间表达式都相对于 此时间坐标空间进行解释,其依据为 SMPTE 时间码 同步事件(标记), 其中 文档处理上下文 发出 这些事件,并隐含以下约束: 关于时间坐标单调性,以及存在丢帧时 重新同步的约束。

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

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

注:

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

以 discontinuous 模式运行的另一个副作用是,子元素的时间表达式与其时间容器的 时间表达式没有必然关系;也就 是说,时间容器及这些容器的子元素, 根据带标签的同步(标记)事件的发生, 在时间上独立地激活或停用。

注:

对 <time-expression> 与带标签的同步事件(标记)的比较,被视为依赖于实现。 具体而言,本规范不要求实现使用 特定的内部格式来表示 时间表达式或标记,也不要求采用特定的比较算法。但是,预期 实现 在进行这种比较时,遵守时间表达式的语义, 以及适用于标记标签的任何 隐含语义。

注:

此参数所表达的标记不连续性概念, 在逻辑上独立于帧计数方法, 后者由 ttp:dropMode 参数表达。具体而言, 即使 ttp:dropMode 参数指定为 dropNTSC 或 dropPAL,标记模式也可以 指定为 continuous,即使存在由帧计数 方法引起的帧计数不连续,除非 标记标签中存在其他非线性或不连续情况,例 如,两个连续帧分别标记为 10:00:00:00 和 10:00:01:00。

7.2.8 ttp:pixelAspectRatio

ttp:pixelAspectRatio 属性用于指定 像素宽高比,该比例属于 根容器区域,具体阐述见 H 根容器区域语义

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

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

numerator | denominator
  : <non-negative-integer>

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

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

不应当指定 ttp:pixelAspectRatio 属性, 除非同时指定一个 tts:extent 属性,它由 两个 <length> 规定组成,且使用 px (像素)单位, 并指定在 tt 元素上, 如果不存在该属性,则使用 ttp:pixelAspectRatio 属性的做法 已被弃用。

7.2.9 ttp:subFrameRate

ttp:subFrameRate 属性用于指定相关 媒体对象的子帧率,或者 文档 实例 的固有子帧率,如果该实例打算 作为独立媒体对象发挥作用。

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

语法表示 – ttp:subFrameRate
ttp:subFrameRate
  : <non-negative-integer>                                // value > 0

适用于 文档实例 的子帧率, 用于 解释以子帧为单位表达的时间表达式, 这些表达式的定义见 12.3.1 <time-expression>。

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

注:

请参见 I.2 媒体时基,以了解更多 细节, 这些细节涉及 media 时基的时间表达式解释方式。

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

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

注:

子帧有时也称为场,适用于 与隔行扫描视频媒体对象同步的上下文。

7.2.10 ttp:tickRate

ttp:tickRate 属性用于指定相关 媒体对象的滴答率,或者一个 文档实例 的内容的固有滴答率,如果该实例打算 作为独立媒体对象发挥作用。

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

语法表示 – ttp:tickRate
ttp:tickRate
  : <non-negative-integer>                                // value > 0

适用于 文档实例 的滴答率,其用途 是 解释以滴答为单位表达的时间表达式,这些表达式 使用 t 度量单位,其定义见 12.3.1 <time-expression>。

如果适用 media 时基, 则将一个滴答解释为媒体时间中一秒的整数 等分之一,即如果滴答率指定为 T,则 将媒体时间中的一秒划分为 T 个 持续时间相等的区间,其中每个区间标记为滴答 t, 且 t ∈ [0…T−1]。

注:

请参见 I.2 媒体时基,以了解更多 细节, 这些细节涉及 media 时基的时间表达式解释方式。

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

注:

滴答与帧或子帧之间不存在预定义的 关系。滴答是对秒的任意划分,允许 使用定点算术,而不是以分数形式(并且可能 不精确地)表达秒数。

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

7.2.11 ttp:timeBase

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

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

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

如果时基被指定为 media,则时间 表达式表示某个媒体对象时间线中的一个坐标, 其中媒体对象可以是外部媒体对象, 文档实例 的内容将与之同步,或者 它也可以 是 文档实例 本身的内容,适用于以下 情况: 定时文本内容打算建立独立的时间 线。

注:

使用媒体时基时,如果该时基被暂停或 进行正向或负向缩放,即媒体播放速率 不为一,则预期 相关定时文本内容的呈现也会相应地 暂停、加速或减速。 控制外部 媒体时基的方式不在本规范的范围之内。

如果时基被指定为 smpte, 则时间表达式表示一个 [SMPTE ST 12-1] 时间 坐标,文档实例 的内容 将与该坐标 同步。在这种情况下,ttp:markerMode 和 ttp:dropMode 参数的值适用,其定义分别见 7.2.7 ttp:markerMode 和 7.2.4 ttp:dropMode。

注:

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

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

如果未指定,则必须将默认时基视为 media。

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

当采用 media 或 smpte 时基运行时,文档 实例 的历时呈现可以 受到控制时间线的变换影响,例如 时间反转、扩张(扩展)或收缩 (压缩);但是,当采用 clock 时基运行时,不允许任何变换,历时 呈现沿着一条基于实际时间流逝的线性、 单调递增的时间线进行。

注:

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

注:

请参见 I 时间表达式语义,以了解更多 细节, 这些细节涉及如何根据指定时基解释时间表达式。

8 内容

本节规定核心词汇目录中的内容 部分。

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
  {TT 参数命名空间中的任意属性}
  Content: head?, body?
</tt>

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

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

注:

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

注:

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

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

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

8.1.2 head

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

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 元素或 Embedded.class 元素组中的元素。

由以下元素组中的子元素指定的任何元数据: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")
  {TT 元数据命名空间中的任意属性}
  {任意 样式属性}
  Content: Metadata.class*, Animation.class*, (div|Embedded.class)*
</body>

作者可以为 body 元素指定一个时间区间,使用 begin、dur 和 end 属性。如果此区间的起始点 仍未指定,则将起始点解释为以下两个 起始 点中较晚的一个:文档时间坐标 空间 的起始点, 以及 根时间范围 的起始点。 如果此区间的结束点仍未指定,则将 结束点解释为 根 时间范围 的结束点。

注:

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

如果在 body 元素上指定了相对起始或结束时间,则这些时间通过引用以下空间的起始点 来解析:文档时间坐标 空间。

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

作者可以将一组样式特性关联到 body 元素,方式是使用 style 属性、内联样式属性,或二者的组合。

注:

与 body 元素相关联的样式特性, 如果位于 文档实例 中,则可供 样式继承使用,继承方为 后代 内容元素。

如果未将 timeContainer 属性指定在 body 元素上,则必须将其解释为具有 并行 时间包含语义。

8.1.4 div

div 元素充当逻辑容器和时间 结构化元素,用于一系列文本内容单元,这些单元表示为 逻辑子分区或段落。

注:

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

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

div 元素接受零个或多个子元素, 这些元素属于 Metadata.class 元素 组, 后跟零个或多个 属于 Animation.class 元素组的元素, 后跟零个或一个 属于 Layout.class 元素 组的元素, 后跟零个或多个属于以下元素组的元素:Block.class 或 Embedded.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")
  {TT 元数据命名空间中的任意属性}
  {任意 样式属性}
  Content: Metadata.class*, Animation.class*, Layout.class?, (Block.class|Embedded.class)*
</div>

作者可以将一组样式特性关联到 div 元素,方式是 使用 style 属性、内联样式属性,或二者的组合。

注:

相关联的样式特性, 如果关联到一个 div 元素,且该元素位于 文档实例 中, 则可供后代 内容 元素 进行样式继承。

如果未将 timeContainer 属性指定在 div 元素上,则必须将其解释为具有 并行时间包含语义。

8.1.5 p

p 元素表示一个逻辑段落,充当 块级与内联级格式化语义之间的过渡。

p 元素接受零个或多个子元素, 这些元素属于 Metadata.class 元素 组, 后跟零个或多个 属于 Animation.class 元素组的元素, 后跟零个或一个 属于 Layout.class 元素 组的元素, 后跟零个或多个属于以下元素组的元素:Inline.class 或 Embedded.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")
  {TT 元数据命名空间中的任意属性}
  {任意 样式属性}
  Content: Metadata.class*, Animation.class*, Layout.class?, (Inline.class|Embedded.class)*
</p>

作者可以将一组样式特性关联到 p 元素,方式是使用 style 属性、内联样式属性,或二者的组合。

注:

与 p 元素相关联的样式特性, 如果位于 文档实例 中,则可供 样式继承使用,继承方为 后代 内容元素。

如果未将 timeContainer 属性指定在 p 元素上,则必须将其解释为具有 并行时间包含语义。

如果 p 元素的一系列子项 仅由 字符信息项 组成, 则该序列 须接受 [构建 匿名 span] 处理。

注:

TTML 的呈现语义实际上 隐含了 p 元素构成一次换行。具体而言, 它在第一个生成的行区之前,以及最后一个生成的 行区之后,都关联着块堆叠约束。请参见 11.3.1.4 同步流处理, 以了解更多细节。

8.1.6 span

span 元素充当逻辑容器和时间 结构化元素,用于一系列具有内联 级格式化语义的文本内容单元。

当在视觉媒介上呈现时,span 元素旨在 生成一系列内联区,每个内联区包含一个或多个 字形区。

span 元素接受零个或多个子元素, 这些元素属于 Metadata.class 元素 组, 后跟零个或多个 属于 Animation.class 元素组的元素, 后跟零个或多个属于以下元素组的元素:Inline.class 或 Embedded.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") : none
  xlink:title = xsd:string
  xml:base = <uri>
  xml:id = ID
  xml:lang = xsd:string
  xml:space = ("default" | "preserve")
  {TT 元数据命名空间中的任意属性}
  {任意 样式属性}
  Content: Metadata.class*, Animation.class*, (Inline.class|Embedded.class)*
</span>

作者可以将一组样式特性关联到 span 元素,方式是使用 style 属性、内联样式属性,或二者的组合。

注:

与 span 元素相关联的样式特性, 如果位于 文档实例 中,则可供 样式继承使用,继承方为 后代 内容元素。

如果未将 timeContainer 属性指定在 span 元素上,则必须将其解释为具有 并行时间包含语义。

链接属性 xlink:* 可以用于将 span 元素链接到 相关内容,使用 指定的位置(href)、角色和标题。链接激活的行为 受 xlink:show 属性影响, 该属性的确切含义由 文档处理上下文 确定。

注:

xlink:show 的默认值最初 (在 TTML2 第一版 中) 被指定为 new;但是,进一步考虑后认为, none 更能反映实现实践, 尤其是因为 none 的语义完全依赖于实现, 而 new 的语义 仅仅是 none 语义的一种可能实现。

如果 span 元素指定了 xlink:href 属性,则后代 元素不得指定 xlink:href 属性;如果指定了,则在 呈现或链接激活处理时,必须忽略后者。

如果 span 元素的一系列子项 仅由 字符信息项 组成, 则该序列 须接受 [构建 匿名 span] 处理。

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")
  {TT 元数据命名空间中的任意属性}
  {任意 样式属性}
  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 属性可以用于 (1) 核心词汇目录中的任意 元素, 但配置规范相关内容除外,即属于配置规范 模块的元素除外,以及 (2) 由扩展模块定义的任意元素,前提是该 元素的类型 允许指定 condition 属性。

condition 属性的值必须符合 <condition> 表达式, 该表达式在呈现处理时求值(惰性求值) 或在呈现处理之前求值(即时求值),其中即时求值 仅可在求值结果 在呈现处理期间不可能改变或已知不会改变时进行。

注:

例如,如果条件表达式依赖于条件函数的值, 那么该条件表达式的值可能在呈现处理期间改变,在这种 情况下不能使用即时求值。

对于呈现处理,如果元素指定了 condition 属性,并且 其 <condition> 表达式的求值结果为 false, 那么必须忽略该元素及其后代元素的语义, 除非这些语义被明确列为例外, 也就是说,该元素及其后代元素被 按条件排除, 无论这些后代元素上指定的任何 <condition> 表达式 的求值结果如何。

注:

例如,如果 p 元素指定了一个 condition 属性,其求值结果为 false,那么在呈现时, 该元素及其后代的内容将被忽略。

注:

无需对元素的 condition 属性求值(求值也没有意义), 如果该元素被按条件排除, 原因是它的某个祖先元素被按条件排除。 也就是说,元素不能被按条件 包含, 即使对其 condition 属性求值, 只要有一个祖先被按条件 排除。

注:

在某些情况下,通过 condition 属性忽略(排除)元素的语义, 指的是部分而非完全忽略该元素的语义,相关说明请参见 下文以及具体元素的定义。

除非有适用的更高层协议,否则以下 例外适用于 确定应忽略哪些语义的过程,当 <condition> 表达式 的求值结果为 false 时:

注:

上述例外也适用于 按条件排除的元素的后代。

8.2.2 xlink:arcrole

xlink:arcrole 属性的用法遵循 [XLink 1.1] 中的定义。

xlink:arcrole 属性可以用于任意 span 或 image 元素。

8.2.3 xlink:href

xlink:href 属性的用法遵循 [XLink 1.1] 中的定义。

xlink:href 属性可以用于任意 span 或 image 元素。

为实现 xlink:href 语义, xlink:type 的语义固定为与 simple 值关联的语义,而 xlink:actuate 的语义固定为与 onRequest 值关联的语义,其定义见 [XLink 1.1]。

注:

xlink:type 和 xlink:actuate 属性均未被定义为 可直接用于 文档实例中的属性。

8.2.4 xlink:role

xlink:role 属性的用法遵循 [XLink 1.1] 中的定义。

xlink:role 属性可以用于任意 span 或 image 元素。

8.2.5 xlink:show

xlink:show 属性的用法遵循 [XLink 1.1] 中的定义。

xlink:show 属性可以用于任意 span 或 image 元素。

8.2.6 xlink:title

xlink:title 属性的用法遵循 [XLink 1.1] 中的定义。

xlink:title 属性可以用于任意 span 或 image 元素。

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)字符能够生成字形区。 因此,在 #PCDATA 内容中使用 TAB(U+0009)字符, 如果该内容位于 p 和 span 元素内, 则不推荐这样做。

8.3 内容值表达式

核心词汇可以使用以下表达式:

8.3.1 <absolute-profile-designator>

<absolute-profile-designator> 值表达式用于 (1) 定义绝对 指示符,该指示符关联于 本地定义的配置规范,或 (2) 引用远程定义的配置规范。

语法表示 – <absolute-profile-designator>
<absolute-profile-designator>
  : <absolute-uri>

注:

在当前上下文中,本地定义是指在当前文档中定义,而 远程定义 是指在另一个文档中定义。

8.3.2 <absolute-uri>

<absolute-uri> 值表达式用于指定绝对 URI [URI]。

语法表示 – <absolute-uri>
<absolute-uri>
  : <uri>                                     // 仅限绝对形式

在 <absolute-uri> 值表达式的上下文中,<uri> 表达式的值语法 必须符合 [URI] 第 4.3 节定义的 URI 绝对形式。

8.3.3 <arguments>

<arguments> 值是一个子表达式,与 function-expression 非终结符一起使用,该非终结符属于 <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>

注:

为免疑义,请注意,不允许在以下二者之间出现线性空白(LWSP): identifier 词元和后续表达式起始处的左 圆括号“(”字符,该字符属于后续的 <arguments> 表达式,而该表达式属于一个 function-expression。

8.3.8 <fragment-profile-designator>

<fragment-profile-designator> 值表达式用于通过引用指示一个本地的,即 在内部定义的(内联的)配置规范。

语法表示 – <fragment-profile-designator>
<fragment-profile-designator>
  : <fragment-uri>

8.3.9 <fragment-uri>

<fragment-uri> 值表达式用于指定片段 URI [URI]。

语法表示 – <fragment-uri>
<fragment-uri>
  : <uri>                                     // 仅限片段分量

在 <fragment-uri> 值表达式的上下文中,<uri> 表达式的值语法 必须符合 URI 的片段分量,其定义见 [URI] 第 3 节和第 3.5 节, 即方案、授权机构、路径和查询分量为空 (未指定),且只有片段分量非空 (已指定)。

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_query_list 的语法,其定义见 [Media Queries] 第 3 节。

<media-function> 值表达式的求值结果为 true,如果指定的媒体 查询 的求值结果为 true;否则,该值表达式的求值结果为 false。

如果不支持 <media-function> 表达式的语义,那么该表达式的求值结果 必须 为 false。

8.3.11 <profile-designator>

<profile-designator> 值表达式用于指示配置规范,其目的可以是 定义配置规范, 也可以是引用已定义的配置规范。

语法表示 – <profile-designator>

如果 <profile-designator> 采用 <fragment-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 1.0] 第 3.3.3 节属性值 规范化的约束, 当构建精简的 XML 信息集时,如果其来源是 定时文本文档实例。

8.3.14 <relative-profile-designator>

<relative-profile-designator> 值表达式用于引用标准化的配置规范, 该引用相对于 TT 配置规范命名空间,该命名空间用作基准 URI,相对配置规范指示符 依此进行绝对化。

语法表示 – <relative-profile-designator>
<relative-profile-designator>
  : <relative-uri>

注:

对 <relative-profile-designator> 进行绝对化时, 不适用 xml:base 处理(因为 TT 配置规范命名空间 始终用作基准 URI)。

注:

例如,如果 <relative-profile-designator> 表示为 ttml2-presentation,那么经过绝对化的配置规范指示符 将为 http://www.w3.org/ns/ttml/profile/ttml2-presentation。

8.3.15 <relative-uri>

<relative-uri> 值表达式用于指定相对 URI [URI]。

语法表示 – <relative-uri>
<relative-uri>
  : <uri>                                     // 不存在方案分量

在 <relative-uri> 值表达式的上下文中,<uri> 表达式的值语法 必须符合 [URI] 第 3 节定义的 URI 相对形式, 即方案和授权机构分量为空(未 指定),但指定了路径,以及可选的查询和片段分量。

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-namespace 或 extension-namespace 分量是可选的,如果 未指定,则视为分别等于 TT 特性命名空间或 TT 扩展命名空间 的值。

<supports-function> 值表达式的求值结果为 true,如果指定的 特性或扩展 指示符在语义上受内容 处理器支持。

8.3.17 <uri>

<uri> 值表达式用于指定 URI [URI]。

语法表示 – <uri>
<uri>
  : xsd:anyURI

xsd:anyURI 数据类型的值语法必须符合 [XML Schema Part 2] 第 3.2.17 节规定的定义。

注:

为免疑义,URI 中被指定为应排除的字符,其规定见 [URI] 第 2 节 字符,更具体地说, 即 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 嵌入内容

本节规定核心词汇目录中的嵌入内容 相关内容,在此上下文中, 内容应理解为任意内容类型(格式)的数据, 而嵌入是指嵌入(内联)这些数据,或嵌入 对外部数据的引用。

9.1 嵌入内容元素词汇

以下元素可以用于指定嵌入内容:

9.1.3 data 元素用作 通用容器元素,容纳嵌入数据 资源,该资源可以分块,也可以不分块, 分块时,数据片段使用 9.1.2 chunk 元素表示。 9.1.1 audio、 9.1.4 font 和 9.1.5 image 元素是专用 元素, 用于引用特定类型的嵌入内容。 9.1.6 resources 元素用于 将嵌入内容的定义分组,以供后续元素引用。 9.1.7 source 元素可以用于 表示嵌入内容的来源。

9.1.1 audio

audio 元素用于定义或引用音频资源。

audio 元素可以出现在两种上下文中:(1) 作为 resources 元素的子元素,以及 (2) 作为 body 元素的子元素, 或作为 Block.class 元素组中的元素的子元素,即 作为 div 或 p 元素的子元素,或 作为 span 元素的子元素。前者 称为 音频定义上下文,后者称为音频呈现上下文。

当 audio 元素出现在音频 定义上下文中时,它 用作音频资源的可共享定义, 可以被其他 audio 元素引用,这些元素位于 包含它的文档实例中。

注:

音频资源的可共享定义指定一个 xml:id 属性,以便被 引用, 引用者是 audio 元素,它位于音频 呈现上下文中。

当 audio 元素出现在音频呈现上下文中时,它 用作音频资源的非共享定义, 隐含呈现(渲染)语义,即该资源预期会被播放。

注:

音频资源的非共享定义可以指定, 也可以不指定 xml:id 属性,但 这个 标识符不会被其他 audio 元素引用,或者,如果被引用,该 引用会被忽略。

audio 元素接受以下子元素: 零个或多个属于 Metadata.class 元素组的元素,随后 是 零个或多个属于 Animation.class 元素组的元素, 随后是零个或多个 source 元素。

注:

对于文本节点后代,如果其祖先是 audio 元素,则它不是有意义的文本节点,这里指的是 执行 [构建匿名 span] 过程时。

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")
  {任意样式属性}
  {TT 元数据命名空间中的任意属性}
  Content: Metadata.class*, Animation.class*, source*
</audio>

audio 元素指示一个音频资源, 通过使用 引用式数据嵌入或 源式数据嵌入,这涉及 (1) 引用内置数据资源, (2) 引用外部数据资源,或 (3) 定义或引用嵌入数据 资源, 其中数据资源包含音频内容。

如果 audio 元素指定了 src 属性,那么它不得 指定 子 source 元素。反之, 如果 audio 元素未指定 src 属性,那么它必须指定 一个或多个 子 source 元素。

如果 audio 元素指定了 src 属性,且其值并未 引用 内部数据资源,那么它应当指定一个 type 属性,在这种情况下, 该 type 属性的值必须与 所引用资源的媒体(内容)类型 对应。否则,type 属性不得被 指定。

如果指定了 clipBegin 属性,其值必须符合 offset-time 形式,该形式属于 12.3.1 <time-expression>,在这种 情况下,此表达式的值表示相对于所引用音频内容 起始位置的正常播放时间偏移,并指示音频呈现 开始的位置。 如果指定的值大于所引用音频内容的固有 持续时间,那么 clipBegin 的解析值被视为 该固有持续时间。 如果未指定 clipBegin 属性,则采用值 0。

同样,如果指定了 clipEnd 属性,其值必须符合 offset-time 形式,该形式属于 12.3.1 <time-expression>,在这种 情况下,此表达式的值表示相对于所引用音频内容 起始位置的正常播放时间偏移,并指示呈现停止的位置。 如果指定的值大于所引用音频内容的固有 持续时间,那么 clipEnd 的解析值被视为 该固有持续时间。 如果未指定 clipEnd 属性,则采用等于音频内容固有持续时间 的值。

以下示例说明了 audio 元素的用法。

示例片段 – 外部音频资源
...
<audio src="http://example.com/audio/description.mp3" type="audio/mp3"/>
...

9.1.2 chunk

chunk 元素用于表示一个独立的数据块(片段)。

chunk 元素可以作为 data 元素的子元素出现。

XML 表示 – 元素信息项:chunk
<chunk
  encoding = ("base16" | "base32" | "base32hex" | "base64" | "base64url") : base64
  length = <non-negative-integer>
  xml:id = ID
  Content: #PCDATA
</chunk>

如果指定了 encoding 属性, 那么它必须表示所代表字节序列的实际编码,该字节序列由 chunk 元素表示。如果未指定 encoding 属性, 那么必须将编码视为 base64。

任何线性空白(<lwsp>) 字符,只要出现在此元素的 #PCDATA 内容中,都必须在 执行解码处理时被忽略。

如果指定了 length 属性,那么它必须表示解码后的字节数, 所属字节序列由 chunk 元素表示。解码时,如果指定的长度值与解码后的字节数 不匹配,那么该块及其容器 data 元素必须返回一个长度为零的字节序列。 如果未指定 length 属性,那么该块的长度被视为 等于实际解码后的字节数。

以下示例说明了分块数据的用法。

示例片段 – 分块数据
...
<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 元素的子元素, 称为源的 数据绑定上下文, 后两种上下文统称为数据绑定上下文。

当 data 元素出现在数据 定义上下文中时,它 用作数据资源的可共享定义,可以通过 src 属性引用,属性所属元素可以是 (1) 另一个 data 元素, (2) 嵌入内容元素,或 (3) source 元素。 在这种情况下,data 元素由上下文确定的活动时间区间是 以下两者的交集: 其父 resources 元素的活动时间区间,以及 引用它的元素的活动时间区间。

注:

数据资源的可共享定义指定一个 xml:id 属性,以便被 引用, 引用方式是在数据绑定 上下文中使用片段标识符。

当 data 元素出现在数据绑定 上下文中时,它 用作数据资源的非共享定义,隐含绑定语义,即 该资源预期会绑定到(关联于)其直接的引用 上下文。在这种情况下,data 元素的活动时间区间 与其最近的祖先定时 元素的活动时间区间相同。

注:

数据资源的非共享定义可以指定,也可以不指定 xml:id 属性,但这个 标识符不会在其他数据绑定 上下文中被引用,或者,如果被引用,也不具有绑定语义。

data 元素接受以下四种内容模型之一: (1) 一个或多个文本节点(即 #PCDATA), (2) 零个或多个属于 Metadata.class 元素组的元素,前提是 src 属性已指定; (3) 零个或多个属于 Metadata.class 元素组的元素,随后 是一个或多个 chunk 元素,或 (4) 零个或多个属于 Metadata.class 元素组的元素,随后 是一个或多个 source 元素,其中 第一种称为简单数据嵌入, 第二种称为引用式数据嵌入, 第三种称为分块数据嵌入, 第四种称为源式数据嵌入。

使用简单数据嵌入时,数据资源 通过解码 #PCDATA 内容获得。 使用引用式数据嵌入时,数据 资源通过解引用数据资源获得, 该数据资源由 src 属性引用。 使用分块数据嵌入时,数据 资源通过连接各个解码所得的字节序列获得,解码对象是每个 子 chunk 元素。 使用源式数据嵌入时,数据 资源取自第一个 子 source 元素,该元素能够 解析为 数据资源,如果没有任何元素能够解析,则采用空数据资源。 此外,子 source 元素不得 包含 data 元素,但可以 引用 data 元素,该元素位于数据定义上下文中。

XML 表示 – 元素信息项:data
<data
  condition = <condition>
  encoding = ("base16" | "base32" | "base32hex" | "base64" | "base64url") : 参见下文
  format = <data-format>
  length = <non-negative-integer>
  src = <data>
  type = xsd:string : 参见下文
  xml:base = <uri>
  xml:id = ID
  xml:lang = xsd:string
  xml:space = ("default" | "preserve")
  Content: #PCDATA | (Metadata.class*, (chunk+ | source+)? )
</data>

如果使用简单数据嵌入,那么 encoding 属性 可以指定,如果未指定,则必须视为 base64。 如果使用引用式数据嵌入、分块数据嵌入或源式数据嵌入,那么 encoding 属性不得 指定,如果指定,则必须在 内容处理时被忽略。

此外,如果使用简单数据嵌入,那么任何线性空白(<lwsp>) 字符,只要出现在此元素的 #PCDATA 内容中,都必须在 执行解码处理时被忽略。

如果指定了 length 属性,那么它必须表示解码后的字节数, 所属字节序列由 data 元素表示。解码时,如果指定的长度值与解码后的字节数 不匹配,那么必须返回一个长度为零的字节序列。 如果未指定 length 属性,那么数据资源的长度被视为 等于实际解码后的字节数。 不得指定 length 属性,如果使用的是引用式数据嵌入或源式数据嵌入。

注:

length 属性旨在提供一种对解码后的数据执行简单 完整性检查的方法。请注意,此检查不保证 传输过程中的数据完整性,即数据可能被修改,而 长度不变。

如果使用引用式数据嵌入, 则必须指定 src 属性;否则(对于所有其他类型的数据嵌入), 则 不得指定 src 属性。

如果使用简单数据嵌入或分块数据嵌入,则必须指定 type 属性, 且其值必须与数据资源的媒体(内容)类型对应。在这些情况下,如果 没有已定义的类型,则应当使用 application/octet-stream 类型。 如果使用引用式数据嵌入,那么,如果它 引用了 外部数据资源, 则应当指定 type 属性, 并且, 如果指定,其值必须与所引用数据资源的媒体(内容)类型对应; 否则(引用的是内部数据资源), 则不得指定 type 属性, 在这种情况下,所引用的 data 元素的媒体(内容)类型用作该类型。 如果使用源式数据嵌入, 则不得指定 type 属性, 在这种情况下,解析得到的 source 元素的媒体(内容)类型用作该类型。

如果 type 属性未指定、 未解析得到,或指定为通用类型, 例如 application/octet-stream,并且已知 所引用数据资源的额外格式信息,而这些信息无法 通过媒体类型 [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>附带元数据的说明字幕,元数据包含透传数据</ttm:desc>
    <data encoding="base64" type="application/octet-stream">
      TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0aGlz
      IHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1c3Qgb2Yg
      dGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0aGUgY29udGlu
      dWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRo
      ZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4=
    </data>
  </metadata>
  <p>包含透传数据的说明字幕</p>
</div>

示例片段 – 源的数据绑定上下文中的简单数据嵌入
<div>
  <image>
    <source>
      <data type="image/png" length="119">
        iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAMSURBVBhXY2BgYAAAAAQAAVzN/2kAAAAASUVORK5CYII=
      </data>
    </source>
  </image>
</div>

以下示例说明了引用式数据嵌入的 用法。

示例片段 – 数据定义上下文中的引用式数据嵌入
<head>
  <resources>
    <data xml:id="sharedImageData" src="test.png" type="image/png"/>
    <image xml:id="sharedImage1" src="#sharedImageData"/>
    <image xml:id="sharedImage2" src="#sharedImageData"/>
  </resources>
</head>
<body xmlns:tts="http://www.w3.org/ns/ttml#styling">
  <div tts:backgroundImage="#sharedImage1"/>
  <div tts:backgroundImage="#sharedImage2"/>
</body>

以下示例说明了分块数据嵌入的 用法。

示例片段 – 数据定义上下文中的分块数据嵌入
<head>
  <resources>
    <data xml:id="sharedImageData" type="image/png" length="119">
      <chunk length="60">
        iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
      </chunk>
      <chunk length="59">
        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAMSURBVBhXY2BgYAAAAAQAAVzN/2kAAAAASUVORK5CYII=
      </chunk>
    </data>
    <image xml:id="sharedImage1" src="#sharedImageData"/>
    <image xml:id="sharedImage2" src="#sharedImageData"/>
  </resources>
</head>
<body xmlns:tts="http://www.w3.org/ns/ttml#styling">
  <div tts:backgroundImage="#sharedImage1"/>
  <div tts:backgroundImage="#sharedImage2"/>
</body>

以下示例说明了源式数据嵌入的 用法。

示例片段 – 数据定义上下文中的源式数据嵌入
<head>
  <resources>
    <data xml:id="sharedImageData">
      <source src="test.svg" type="image/svg+xml"/>
      <source src="test.png" type="image/png"/>
    </data>
    <image xml:id="sharedImage1" src="#sharedImageData"/>
    <image xml:id="sharedImage2" src="#sharedImageData"/>
  </resources>
</head>
<body xmlns:tts="http://www.w3.org/ns/ttml#styling">
  <div tts:backgroundImage="#sharedImage1"/>
  <div tts:backgroundImage="#sharedImage2"/>
</body>

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 属性不得被 指定。

如果 family、range、style 或 weight 属性中的任何一个被指定,那么 它们会覆盖实际资源的字体族名称、支持的字符范围、样式和字重,该资源是字体资源。具体而言, 如果指定的属性值与这些字体特征的值不同,而后者 编码于字体资源中,那么 应当使用指定的属性值,代替编码于 字体资源中的字体特征。

如果 family、range、style 或 weight 属性中的任何一个未指定,那么它们的值 必须被视为等于同名字体特征的值,这些特征编码于 字体资源中。

如果 family 属性的计算值(无论是否显式指定) 匹配一个 <generic-family-name>(通过区分大小写的 比较), 那么这被视为错误,并且 在呈现处理时必须忽略所引用的字体资源。

注:

上一段的作用是,内容作者不能覆盖与通用字体族对应的内置 字体资源。

注:

建议作者尽可能使用子集字体。子集字体是一种语法 有效的字体资源, 其中移除了未引用的字形和未引用的字形度量信息。通常,子集字体 与特定文档相关联,因为它可能是 根据该文档的实际字符内容生成的。

在解引用(下载)字体资源时,内容处理器 可以推迟下载过程,直到为了执行必要的 (转换或呈现)处理而必须使用 字体资源内容时再下载。

以下示例说明了 font 元素的用法。

示例片段 – 字体
...
<head>
  <resources>
    <data xml:id="lastResortFont" type="application/font-woff">
      ... base64 编码的数据 ...
    </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">使用我的字体或最后备用字体</p>
...

9.1.5 image

image 元素用于定义或引用图像资源。

image 元素可以出现在两种上下文中:(1) 作为 resources 元素的子元素,以及 (2) 作为以下元素的子元素:(i) body 元素, (ii) Block.class 元素组中的元素, 即作为 div 或 p 元素的子元素,或 (iii) span 元素。前者 称为 图像定义上下文,后者称为图像呈现上下文。

当 image 元素出现在图像 定义上下文中时,它 用作图像资源的可共享定义, 可以被另一个 image 元素引用,或者被 tts:backgroundImage 样式 属性引用, 引用者位于包含它的文档实例中。

注:

图像资源的可共享定义指定一个 xml:id 属性,以便被 引用, 引用者是 image 元素或 tts:backgroundImage 样式 属性, 位于图像呈现上下文中。

当 image 元素出现在图像呈现上下文中时,它 用作图像资源的非共享定义, 隐含呈现(渲染)语义。

注:

图像资源的非共享定义可以指定, 也可以不指定 xml:id 属性,但 这个 标识符不会被其他 image 元素引用,或者,如果被引用,该 引用会被忽略。

当 image 元素作为 body 元素或 div 元素的子元素出现时,其呈现 会生成一个块区,图像在其中渲染;即 image 元素前后隐含块边界。相反, 当 image 元素作为 p 或 span 元素的子元素出现时,其呈现会生成一个内联区,图像在其中渲染;即 image 元素前后不隐含块边界。

注:

在 [CSS2] 中,这些语义分别对应于 image 元素关联的 display 样式特性 具有 block 或 inline 值。

对于图像资源的呈现,如果该资源由 tts:backgroundImage 样式属性引用, 则不得影响内容布局。

image 元素接受以下子元素: 零个或多个属于 Metadata.class 元素组的元素,随后 是 零个或多个属于 Animation.class 元素组的元素, 随后是 零个或多个 source 元素。

注:

对于文本节点后代,如果其祖先是 image 元素,则它不是有意义的文本节点,这里指的是 执行 [构建匿名 span] 过程时。

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") : none
  xlink:title = xsd:string
  xml:base = <uri>
  xml:id = ID
  xml:lang = xsd:string
  xml:space = ("default" | "preserve")
  {任意样式属性}
  {TT 元数据命名空间中的任意属性}
  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 样式属性时,其呈现须经过 一个(可能使图像变形的) 缩放操作,以获得指定范围的宽度和高度。

链接属性 xlink:* 可以用于将 image 元素 与相关内容链接起来,使用 指定的位置(href)、角色和标题。链接激活的行为 受 xlink:show 属性影响, 该属性的确切含义由文档处理上下文确定。

注:

xlink:show 的默认值最初被指定 (在 TTML2 第 1 版中) 为 new;但是,进一步考虑后认为, none 值更能反映实现实践, 尤其是因为 none 的语义完全取决于实现, 而 new 的语义 只是 none 语义的一种可能实现。

当 image 出现在图像定义 上下文中时,适用以下附加 约束:

  1. 属性 animate、 begin、 dur、 end、 region 和 timeContainer 不得指定,如果出现,则必须在 呈现处理时被忽略;

  2. 属于 Animation.class 元素组的元素 不得 作为子元素出现,如果出现,则必须在 呈现处理时被忽略。

以下示例说明了 image 元素的用法。

示例片段 – 外部图像资源
<div>
  <p>此分区包含一个内容图像,它以块区的形式出现在本段落之后。</p>
  <image src="http://example.com/images/caption.png" type="image/png"/>
<div>
...
<div tts:backgroundImage="http://example.com/images/background.png">
  <p>此分区包含一个背景图像,它出现在本段落的底层。</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 元素纳入并扩展了 #image 扩展的能力,该扩展由 [SMPTE ST 2052-1] 引入。具体 而言, 如果 smpte:backgroundImage 属性引用一个内容图像,则可以将其映射为 image 元素, 其 src 属性等于 smpte:backgroundImage 属性的值。

9.1.6 resources

resources 元素是一个容器元素,用于对 嵌入内容的定义进行分组,包括适用于这些嵌入内容的元数据。

resources 元素接受以下子元素:零个或多个 属于 Metadata.class 元素 组的元素, 随后是零个或多个属于以下元素组的元素: Data.class、 Embedded.class 或 Font.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 属性引用外部 资源;或者称为 非嵌套的嵌入源, 如果 src 属性引用一个 嵌入资源, 该资源位于包含它的文档实例中。

如果 source 元素未指定 src 属性,那么它必须指定 一个 子 data 元素,在这种情况下, 它被称为 嵌套的嵌入源。

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 属性, 那么它提供有关嵌入内容格式(即形式语法)的 额外提示信息。在尚未定义标准媒体(内容)类型 标签,或该信息无法 通过媒体类型参数 [MIME Media Types] 表示的情况下,此类信息可能有用。根据 具体 source 元素的使用上下文,此属性的值可能受到进一步 约束。

如果指定了 src 属性,并且 其值引用包含它的 文档实例中的一个片段, 那么必须存在一个 data 元素, 它是 resources 元素的子元素,并由该片段标识,即具有一个 xml:id 属性,其 值与该片段标识符匹配。

如果指定了 src 属性,并且 其值并未引用 包含它的文档实例中的片段,那么 应当指定 type 属性,在这种情况下,其值必须与所引用资源的媒体(内容)类型 对应。

如果指定了 src 属性,并且 其值确实引用 包含它的文档实例中的片段,那么 不得指定 type 属性;嵌入资源的内容类型应由 type 属性的值确定, 该属性位于所引用或嵌入的 data 元素上。

以下示例说明了 source 元素的用法。

示例片段 – 外部源
...
<image>
  <source src="http://example.com/images/caption.png" type="image/png"/>
</image>
...

示例片段 – 非嵌套的嵌入源
...
<data xml:id="caption" type="image/png" length="119">
  iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
  YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAMSURBVBhXY2BgYAAAAAQAAVzN/2kAAAAASUVORK5CYII=
</data>
...
<image>
  <source src="#caption"/>
</image>
...

示例片段 – 嵌套的嵌入源
...
<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 属性,其值必须符合 Content-Type MIME 标头的值语法,该标头由 [MIME] 第 5.1 节定义。

如果未指定,则媒体(内容)类型未知或被有意留空。

解码指定了 type 属性的数据资源时,内容 处理 必须遵循指定的类型,无论它是否正确。也就是说,如果 type 属性错误地指定了 数据资源的类型,那么内容处理不得尝试通过执行内容 嗅探 来覆盖该类型。

9.3 嵌入内容值表达式

嵌入内容元素以及某些样式特性值使用以下 表达式:

9.3.1 <audio>

<audio> 值表达式用于通过引用指定音频 资源。

语法表示 – <audio>
<audio>
  : <uri>

如果 <audio> 值表达式采用裸片段标识符的形式, 那么该片段标识符必须引用一个 audio 元素,该元素必须是 一个 resources 元素的子元素,后者位于包含它的文档实例中。

如果 <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> 值表达式采用片段标识符的形式, 那么该片段标识符必须引用一个 data 元素,该元素必须是 resources 元素的子元素,后者位于包含它的文档实例中。

9.3.3 <data-format>

<data-format> 表达式用于指定数据资源的格式。额外的 格式信息很有用,如果 数据资源缺少已注册的媒体(内容)类型。

语法表示 – <data-format>
<data-format>
  : xsd:NCName
  | <uri>

如果格式表达式采用 <uri> 值的形式, 那么它必须表示绝对 URI。

注:

本规范不对用于数据内容的格式词元集合进行标准化。 鼓励作者 使用通用的词元,或者在没有此类词元时,添加前缀 "x-",形成 私用词元。

9.3.4 <font>

<font> 表达式用于指定字体资源, 指定方式为引用。

语法表示 – <font>
<font>
  : <uri>

如果 <font> 表达式采用片段 标识符的形式, 那么该片段标识符必须引用一个 font 元素,该元素必须是 resources 元素的子元素,后者位于包含它的文档实例中。

9.3.5 <image>

<image> 表达式用于通过引用指定图像 资源。

语法表示 – <image>
<image>
  : <uri>

如果 <image> 表达式采用片段 标识符的形式, 那么该片段标识符必须引用一个 image 元素,该元素必须是 一个 resources 元素的子元素,后者位于包含它的文档实例中。

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 样式

本节规定核心词汇目录中的样式 相关内容,其中 样式应理解为一个可分离的信息层,它应用于 内容,并表达作者对该内容 呈现方式的意图。

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")
  {任意 样式属性}
  内容: 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")
  {任意 样式属性}
  内容: Metadata.class*
</style>

如果 style 元素作为 region 元素的后代出现,则在计算引用式样式时,必须 忽略该 style 元素,引用式样式定义于 10.4.1.2 引用式样式设置和 10.4.1.3 链式引用 样式设置。

注:

也就是说,当元素使用引用式样式设置来 引用 style 元素时,被引用的 style 元素必须作为 styling 元素的后代出现, 而不能出现在任何其他上下文中。

注:

如果 condition 属性应用于 style 元素,且该条件求值为 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")
  内容: Metadata.class*, initial*, style*
</styling>

当时间语义适用于 styling 元素的内容时,此元素的隐含时间区间 被定义为与根时间 范围具有相同的起止边界。

10.2 样式属性词汇

本节定义 10.2.1 style 属性,该属性用于 某些动画元素、内容元素、某些 布局元素和样式定义元素。

此外,本节规定 TT 样式命名空间中的以下属性, 用于支持内联样式规范的样式定义元素、某些布局元素和内容元素 中:

除上述视觉样式属性外,本节还规定 TT 音频样式命名空间中的以下音频 样式属性, 用于支持内联样式规范的样式定义元素和内容元素 中:

本节定义的每个样式属性(及其对应的属性)都使用 样式属性定义表, 该表 规定样式的以下一个或多个方面:值语法、初始值、 样式在语义上适用的元素、样式是否继承、百分比 值如何解释(如果适用)、 样式是否(以及如何)可动画化,以及语义依据(推导)。

注:

在解释 样式属性定义表中的条目时, 适用于的定义 采用 [CSS2] 第 1.4.2.3 节中的规定。

对于可动画化样式,术语离散指使用 set 元素,或使用 animate 元素,其 discrete 值用于 <calculation-mode>。术语连续指 使用 animate 元素,将 linear、paced 或 spline 用作其 <calculation-mode> 的值。术语 无表示该样式 不可动画化。

注:

本规范使用小驼峰形式的局部 名称来命名样式属性,这些属性 基于 [XSL-FO 1.1] 所定义的同名属性。 此约定同样扩展到这些 属性的词元值。

注:

可继承的样式属性可以作为指定的属性表示在 region 元素上,或 内容元素类型上, 而不受该属性是否适用于该 元素类型的限制。此能力允许在祖先元素上表示可继承的 样式属性,即使该属性 不适用于这些祖先元素。

注:

由于本规范(及其引用的模式)关于 样式属性指定方式的一般语法,特别是为了支持继承, 作者可能无意中在某个元素上指定不可继承的样式属性, 该属性既不适用于此元素,也不适用于其任何后代,但从内容有效性的角度 来看仍然符合规范。内容作者可以考虑使用 TTML 内容验证工具来检测此类用法并发出警告。

10.2.1 style

style 属性由引用式样式关联使用, 用于引用一个或多个 style 元素,每个元素都定义一个样式(属性) 集。

style 属性可以指定在以下 元素类型的实例上:

如果指定了 style 属性,则其值必须 遵循 [XML Schema Part 2] 定义的 IDREFS 数据类型, 见第 3.3.10 节;此外,每个 IDREF 必须引用一个 style 元素, 该元素具有 styling 元素作为祖先。

如果同一个 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
继承: 否
百分比: 不适用
可动画化: 离散
语义依据: backgroundClip 推导

以下示例说明 tts:backgroundClip 样式。

示例片段 – 背景裁剪
<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>

示例呈现 – 背景裁剪
TTML backgroundClip 样式属性

10.2.3 tts:backgroundColor

tts:backgroundColor 属性用于指定一个样式属性, 该属性定义区域或流入区域的内容所生成的区域的背景颜色。

值: <color>
初始值: transparent
适用于: body, div, image, p, region, span
继承: 否
百分比: 不适用
可动画化: 离散;连续
语义依据: backgroundColor 推导

以下示例说明 tts:backgroundColor 样式。

示例片段 – 背景颜色
<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">
  闪呀,闪呀,小蝙蝠!<br/>
  真是 <span tts:backgroundColor="green">让我好奇</span> 你在哪里!
</p>

示例呈现 – 背景颜色
TTML backgroundColor 样式属性

10.2.4 tts:backgroundExtent

tts:backgroundExtent 属性可用于指定 背景图像的范围(尺寸), 而不受图像固有范围(尺寸)的限制。

值: <extent>
初始值: auto
适用于: body, div, image, p, region, span
继承: 否
百分比: 相对于适用的背景定位 矩形的宽度和高度
可动画化: 离散
语义依据: backgroundExtent 推导

如果此属性的值为 auto,则必须将样式属性的计算值 视为与关联背景图像的固有范围(尺寸) 相同。

如果此属性的值为 contain,则样式属性的计算值 通过执行 [计算容纳 缩放]过程来确定, 其中目标矩形 TR 初始化为图像的固有 宽度和高度, 参考矩形 RR 设置为背景定位矩形, 目标矩形 TR 的最终输出值即为计算值。

如果此属性的值为 cover,则样式属性的计算值 通过执行 [计算覆盖 缩放]过程来确定, 其中目标矩形 TR 初始化为图像的固有 宽度和高度, 参考矩形 RR 设置为背景定位矩形, 目标矩形 TR 的最终输出值即为计算值。

如果此属性的值由两个 <measure> 规范组成,则第一个规范为此属性计算值的宽度,第二个规范 为其高度, 在这种情况下,两个 <measure> 规范 都必须解析为(或能够解析为)非负长度。

如果此样式属性的计算值与图像的固有范围(尺寸)不同, 则在各个维度上独立缩放图像栅格, 以匹配计算出的范围值。

如果不支持与此属性关联的样式属性的某个计算值, 则呈现处理器必须使用最接近的 受支持值。

注:

在此上下文中,短语最接近的受支持值指使 计算出的背景范围与受支持的背景范围之间 欧氏距离最小的值。如果 存在多个与计算值距离相等的 最接近的受支持值,则使用距离 [0,0] 最远的值, 即范围最大的值。

此解析最接近的受支持值的规则使用最接近的较大 受支持距离,而不是最接近的较小受支持距离。

以下示例说明 tts:backgroundExtent 样式。

示例片段 – 背景范围
<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>

示例呈现 – 背景范围
TTML backgroundExtent 样式属性

10.2.5 tts:backgroundImage

tts:backgroundImage 属性用于指定一个样式属性, 该属性指定一个背景非内容图像, 将其渲染为 区域或流入区域的内容所生成的区域的背景图像。

tts:backgroundImage 属性不应引用内容图像, 即用于表示实际内容的图像,例如字幕的栅格图像呈现。而 tts:backgroundImage 的使用应仅限于设置元素的背景样式,内容则通过 其他方式表示。如果必须 使用栅格图像表示内容,则应通过 image 元素在块级或行内上下文中表达。

值: "none" | <image>
初始值: none
适用于: body, div, image, p, region, span
继承: 否
百分比: 不适用
可动画化: 离散
语义依据: backgroundImage 推导

用于此样式属性的 <image> 表达式 可以直接引用外部图像资源; 但是,作者应避免这样做,而应将其使用限制为仅引用 image 子元素,这些子元素属于 resources 元素。

注:

通过 image 元素间接引用图像, 可以 将图像指定为嵌入式数据资源, 并指定 有关图像的附加信息,例如其内容类型等。此外,通过 使用多个 source 子元素,并将其置于 image 元素中, 可以指定特定分辨率的图像和后备图像资源。

注:

由于值 none 被用作关键字,因此不能将此 值用作 image 表达式; 因此,如果希望使用这样的表达式,就必须 通过绝对 URI 或不同但等价的相对 URI 将其与关键字 none 区分开, 例如 ./none。

与背景图像关联的元素所生成的区域,其内容矩形的范围 不受背景图像解析后的 范围影响。

注:

TTML1 的某些配置文件,例如 [SMPTE ST 2052-1] 及其 依赖配置文件,规定背景图像会影响 关联元素所生成区域的内容矩形的范围。在 这些配置文件与 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>

示例呈现 – 背景图像
TTML backgroundImage 样式属性

10.2.6 tts:backgroundOrigin

tts:backgroundOrigin 属性用于指定一个样式属性, 该属性确定背景定位 矩形, 背景在该矩形内定位。

值: "border" | "content" | "padding"
初始值: padding
适用于: body, div, image, p, region, span
继承: 否
百分比: 不适用
可动画化: 离散
语义依据: backgroundOrigin 推导

以下示例说明 tts:backgroundOrigin 样式。

示例片段 – 背景原点
<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>

示例呈现 – 背景原点
TTML backgroundOrigin 样式属性

10.2.7 tts:backgroundPosition

tts:backgroundPosition 属性用于指定一个样式属性, 该属性定义是否以及如何在区域或流入区域的 内容所生成的区域中定位背景图像。

值: <position>
初始值: 0% 0%
适用于: body, div, image, p, region, span
继承: 否
百分比: 见正文
可动画化: 离散
语义依据: backgroundPosition 推导

水平位置偏移的百分比值分量 相对于以下宽度差: 背景定位矩形的宽度减去 背景图像的宽度。 垂直位置偏移的百分比值分量 相对于以下高度差: 背景定位矩形的高度减去 背景图像的高度。

以下示例说明 tts:backgroundPosition 样式。

示例片段 – 背景位置
<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>

示例呈现 – 背景位置
TTML backgroundPosition 样式属性

10.2.8 tts:backgroundRepeat

tts:backgroundRepeat 属性用于指定一个样式属性, 该属性定义是否以及如何将背景图像重复(平铺)到区域或 流入区域的内容所生成的区域中。

值: "repeat" | "repeatX" | "repeatY" | "noRepeat"
初始值: repeat
适用于: body, div, image, p, region, span
继承: 否
百分比: 不适用
可动画化: 离散
语义依据: backgroundRepeat 推导

以下示例说明 tts:backgroundRepeat 样式。

示例片段 – 背景重复
<region xml:id="r1">
  <style tts:extent="306px 114px"/>
  <style tts:backgroundColor="red"/>
  <style tts:backgroundImage="#blue102px57px"/>
  <style tts:backgroundRepeat="repeatX"/>
</region>

示例呈现 – 背景重复
TTML backgroundRepeat 样式属性

10.2.9 tts:border

tts:border 属性用于指定一个样式属性, 该属性定义区域或流入区域的内容所生成的区域的边框。

注:

当边框应用于区域时,它从区域的范围向内占据空间,也 就是说,应用于该区域的边框会使 区域的内容矩形缩小。

值: <border>
初始值: none
适用于: body, div, image, p, region, span
继承: 否
百分比: 不适用
可动画化: 离散;连续(仅颜色)
语义依据: border 推导

如果 tts:border 属性的值未指定边框厚度, 则必须将边框厚度解释为如同指定了 medium 厚度。

如果不支持与此属性关联的边框厚度的某个计算值, 则呈现处理器必须使用最接近的 受支持值。

注:

在此上下文中,短语最接近的受支持值指使 计算出的边框厚度与受支持的边框厚度之间的 一维欧氏距离逐边最小的 值。如果对于某条边,存在多个与其计算值 距离相等的最接近的受支持值,则使用距离 0 最近的值,即最小的 边框厚度。

如果 tts:border 属性的值未指定边框样式, 则必须将边框样式解释为如同指定了 none 样式。

如果不支持与此属性关联的边框样式的某个计算值, 则呈现处理器必须使用值 solid。

如果 tts:border 属性的值未指定边框颜色, 则必须将边框颜色解释为如同指定了一个颜色, 其值等于元素的 tts:color 样式属性的计算值。

如果 tts:border 属性的值未指定边框圆角半径, 则必须将边框圆角半径解释为如同指定了 0 半径。

如果不支持与此属性关联的边框圆角半径的某个计算值, 则呈现处理器必须使用最接近的 受支持值。

注:

在此上下文中,短语最接近的受支持值指使 计算出的边框圆角半径与受支持的边框圆角半径之间的差异 最小的值。

以下示例说明 tts: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">
  闪呀,闪呀,小蝙蝠!<br/>
  真是 <span tts:border="8px solid blue">让我好奇</span> 你在哪里!
</p>

示例呈现 – 边框
TTML border 样式属性

以下示例说明带圆角的 tts:border 样式。

示例片段 – 带圆角的边框
<style xml:id="roundedBorder" tts:border="2px solid lime 10px" tts:backgroundColor="black"/>
...
<div tts:color="white" tts:textAlign="center">
  <p style="roundedBorder">边框圆角应用于 <br/>p 元素。</p>
  <p>
    <span style="roundedBorder">span 上的边框圆角</span>
    <br/>
    <span style="roundedBorder">较短的 span</span>
  </p>
</div>

示例呈现 – 边框圆角
TTML border 样式属性

10.2.10 tts:bpd

tts:bpd 属性用于指定 块推进维度,或简称 bpd,该维度属于 流入区域的内容所生成的区域。

注:

术语块推进维度以相对于书写模式的 方式解释, 使得 bpd 始终对应于块 推进方向上的距离。因此,在水平书写模式下,bpd 表示 垂直距离, 而在垂直书写模式下,bpd 表示水平距离, 其中水平和垂直始终按绝对意义解释。

值: <measure>
初始值: auto
适用于: body, div, p, span
继承: 否
百分比: 见正文
可动画化: 离散
语义依据: bpd 推导

如果 <measure> 表示为 <length> 值,则它必须为非负值。

如果 tts:bpd 属性指定在 span 元素上, 且应用于该元素的 tts:display 属性的计算值 不是 inlineBlock, 则 tts:bpd 的语义仅在计算任何适用的背景颜色或图像的 块推进维度时适用; 但是,所生成区域的内容矩形的尺寸不会改变。

如果在此属性的 <length> 表达式中使用 百分比值, 则相对于所生成区域的包含区域(最近的祖先区域)的适用绝对 维度 解析该值。

注:

用于此属性的 <length> 表达式 关联于 某个相对于书写模式的特定维度,该维度随后被解析为绝对维度, 具体取决于适用的书写模式。如果该绝对维度为垂直(水平)维度, 则根据参考区域(最近的祖先区域)的同一垂直(水平)绝对维度 解析百分比值。

以下示例说明 tts:bpd 样式。

示例片段 – 块推进维度
<p tts:fontSize="24px" tts:lineHeight="48px" tts:bpd="96px">
  树林正在 <span tts:display="inlineBlock" tts:bpd="36px">渐渐变绿</span> ...
</p>

注:

在上述示例中,tts:bpd 属性指定在 p 元素上, 为该段落所生成块区域的内容矩形的高度 分配一个固定尺寸,而 tts:bpd 属性指定在 span 元素上时,则为 该 span 所生成行内块区域的内容矩形的高度分配一个 固定尺寸。

10.2.11 tts:color

tts:color 属性用于指定一个样式属性, 该属性定义与某一区域关联的标记的前景色,该区域由流入 区域的内容生成。

值: <color>
初始值: 见正文
适用于: span;另见注
继承: 是
百分比: 不适用
可动画化: 离散;连续
语义依据: color 推导

tts:color 属性的初始值 视为由实现决定。在缺少 最终用户偏好信息时,符合规范的呈现处理器 应使用一个与 根容器区域的背景颜色形成强烈对比的初始值。

以下示例说明 tts: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">
  春天,当树林 <span tts:color="green">渐渐变绿</span>,<br/>
  我会试着告诉你我的意思。
</p>

示例呈现 – 颜色
TTML color 样式属性

10.2.12 tts:direction

tts:direction 属性用于指定一个样式属性,该属性根据 使用上下文, 确定 (1) 双向段落级别,或 (2) 双向嵌入 或覆盖的方向性, 相关内容参见 [UAX9]。

值: "ltr" | "rtl"
初始值: ltr
适用于: p, span
继承: 是,但参见特殊 语义
百分比: 不适用
可动画化: 离散
语义依据: direction 推导

当应用于 p 元素时,此属性的计算值显式 确定 段落级别,其规定见 [UAX9] 第 4.3 节的高级协议 HL1。

当应用于 span 元素(或匿名 span)时,此属性的计算值结合 tts:unicodeBidi 样式属性的计算值,确定 双向嵌入或覆盖的方向性,其规定见 [UAX9] 第 4.3 节的高级协议 HL3。

如果不支持与此属性关联的样式属性的某个计算值, 则呈现处理器必须使用值 ltr。

以下示例说明 tts:direction 样式。

示例片段 – 方向
<p>
这本书的标题是
"<span tts:unicodeBidi="embed" tts:direction="rtl">国际化活动,W3C</span>"
</p>

示例呈现 – 方向
TTML direction 样式属性
10.2.12.1 方向的特殊 语义

执行样式解析处理时(见 10.4.4 样式解析 处理), tts:direction 的计算值在 region 元素 R 上的解析依据以下有序规则确定,其中 应用第一条适用的规则:

  1. 如果在 R 上指定了 tts:direction 属性, 则计算值 tts:direction 为指定值;

  2. 如果在 R 上指定了 tts:writingMode 属性, 则计算值 tts:direction 为 行内推进方向, 该方向由 tts:writingMode 在 R 上的计算值确定;

  3. 否则,tts:direction 的计算值为初始值。

注:

按上述方式确定的 tts:direction 计算值位于 region 元素上, 它实际上成为 tts:direction 的继承值, 由遵循 区域样式继承语义的元素继承。

对于任何其他元素 E,其中 E 不是 region 元素, tts:writingMode 属性的存在与否 不影响 tts:direction 计算值在 E 上的解析。

注:

上述语义对应于XSL 对 CSS 定义的修改,涉及 direction 属性,具体定义见 [XSL-FO 1.1] 第 7.29.1 节,因此被纳入 #direction 功能的范围。

10.2.13 tts:disparity

tts:disparity 属性用于指定要应用的双眼视差, 以模拟立体视觉(立体深度)。零视差对应于 显示平面;负值对应于显示平面 前方的深度;正值对应于显示平面后方的深度。 有关视差与感知深度之间 关系的详情,参见 [SMITH]。

值: <length>
初始值: 0px
适用于: region;参见 特殊用法,适用于 div 和 p
继承: 否
百分比: 相对于根容器 区域的宽度
可动画化: 离散;连续
语义依据: disparity 推导

在立体图像对的右(左)图像上渲染区域时,该区域的中心 沿水平轴偏移,偏移量等于以下计算值的 ½ (-½): tts:disparity,其中正偏移向右,负偏移向 左。

除非渲染到立体图像对上,否则在呈现处理时 忽略 tts:disparity 属性。

作者应确保在区域可见的整个期间,区域的感知深度始终位于场景中任何 对象的前方。如果场景中的某个对象被感知为位于该区域前方, 则立体效果会被破坏。

如果不支持与此属性关联的样式属性的某个计算值, 则呈现处理器必须使用最接近的 受支持值。

注:

在此上下文中,短语最接近的受支持值指使 计算出的视差与受支持的视差之间的 欧氏距离最小的值。如果存在多个 与计算值距离相等的 最接近的受支持值,则使用距离 0 最近的值。

注:

通常,立体内容的呈现依赖于使用 亚像素(抗锯齿)渲染技术;因此, 将经过视差调整的位置量化为整数值的实现 可能产生不希望出现的副作用。这在 应用平滑的视差动画时尤其令人不适,例如, 当作者试图使主体与其关联文本之间 保持恒定距离时。

以下示例片段及其呈现说明 tts:disparity 样式。 请注意,在典型的电视场景中,视差范围为屏幕宽度的 -1% 到 2%。 此示例使用 5% 的视差,夸大了视差的效果,以便 清晰展示。

示例片段 – 视差
<region xml:id="r1">
  <style tts:extent="80% 10%"/>
  <style tts:origin="10% 10%"/>
  <style tts:disparity="5%"/>
	...
</region>
...
<p region="r1">
  立体视觉
</p>

示例呈现 – 视差(左图像和右图像)
TTML disparity 样式属性
10.2.13.1 视差的特殊用法

当 tts:disparity 特例指定在 div 或 p 上时,11.1.2.1 内联动画的特殊 语义适用。

10.2.14 tts:display

tts:display 属性用于指定一个样式属性, 该属性定义元素是否有资格参与 区域中的布局和合成。

值: "auto" | "none" | "inlineBlock"
初始值: auto
适用于: body, div, image, p, region, span
继承: 否
百分比: 不适用
可动画化: 离散
语义依据: display 推导

如果此属性的值为 auto, 则受影响的元素有资格参与区域布局和 呈现;但是,如果值为 none,则 必须将受影响的元素及其后代视为没有资格参与区域 布局和呈现。

如果此属性的值为 inlineBlock,且此属性应用 于 span 元素,则 行内块显示语义适用,并且该元素 有资格参与区域布局和呈现。此外,以下情况会被视为错误:将 inlineBlock 值应用于任何不是 span 元素的元素。

以下示例说明 tts: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"/>
      美味的汤,
    </span>
    <span tts:display="none">
      <set begin="2s" dur="1s" tts:display="auto"/>
      如此浓郁而碧绿,
    </span>
    <span tts:display="none">
      <set begin="3s" dur="1s" tts:display="auto"/>
      在滚烫的汤盆里等着!
    </span>
    ]]]
  </p>
</div>

示例呈现 – 显示
TTML display 样式属性 - [0,1)
TTML display 样式属性 - [1,2)
TTML display 样式属性 - [2,3)
TTML display 样式属性 - [3,4)
TTML display 样式属性 - [4,5)

10.2.15 tts:displayAlign

tts:displayAlign 属性用于指定一个样式属性, 该属性定义块区域在块推进方向上的对齐方式。

值: "before" | "center" | "after" | "justify"
初始值: before
适用于: body, div, p, region
继承: 否
百分比: 不适用
可动画化: 离散
语义依据: displayAlign 推导

如果此属性的值为 justify,则 块推进维度中(未使用的)可用空间被均匀 分配到各块区域子项之间,这些子项属于 应用此属性的元素所生成的块区域。

如果不支持与此属性关联的样式属性的某个计算值, 则呈现处理器必须使用值 before。

以下示例说明 tts:displayAlign 样式。

示例片段 – 显示对齐
<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">我给鱼儿捎了个口信:</p>
  <p region="r2">我告诉它们<br/> "这就是我的愿望。"</p>
  <p region="r3">海里的小鱼儿,</p>
  <p region="r4">它们捎来一个<br/> 给我的答复。</p>
</div>

示例呈现 – 显示对齐
TTML displayAlign 样式属性

10.2.16 tts:extent

tts:extent 属性可用于以下用途:

  1. 指定宽度和高度, 用于根容器区域, 其作用是定义 文档坐标空间, 相关内容参见 H.3 坐标空间;

  2. 指定或覆盖 宽度和高度, 用于某个内容区域;

  3. 指定 宽度和高度, 用于图像,并覆盖其固有范围。

注:

如果对区域应用边框和(或)内边距,则区域的范围包含这些 边框和内边距, 即边框和内边距均向内占据空间,因此位于 区域范围的内部。

值: <extent>
初始值: auto
适用于: tt, region, image;参见 特殊用法,适用于 div 和 p
继承: 否
百分比: 相对于根 容器区域的宽度和高度
可动画化: 离散
语义依据: extent 推导

如果 tts:extent 属性指定在 tt 元素上, 则指定值仅限于以下之一: (1) auto 关键字, (2) contain 关键字,或 (3) 两个 <length> 规范, 其中这些规范使用像素单位表示为非百分比的确定长度。 此上下文中不得使用其他任何语法合法的值,并且, 如果使用了这些值,则必须将其视为错误,且必须 在呈现处理时 忽略它们,在这种情况下,初始值(auto) 适用。

如果 tts:extent 属性指定在 region 元素上, 则其计算值确定宽度和高度, 用于关联的内容区域。

如果 tts:extent 属性指定在 image 元素上,则其计算 值确定宽度和高度, 用于该图像。

如果 tts:extent 属性指定在 div 或 p 元素上,则 10.2.16.1 范围的特殊用法 所规定的语义适用。

如果此属性的值为 auto,则其关联属性的计算值 按以下方式确定:

  1. 如果该属性应用于 tt 元素,则 auto 被解释为如同指定了值 contain 一样;

  2. 如果该属性直接或间接应用于 region 元素,则 auto 被解释为如同 指定了值 "100% 100%";

  3. 如果该属性应用于 image 元素,则 auto 被解释为如同指定了等于图像固有范围的值,使用 两个基于像素的 <length> 分量表示,例如 "200px 100px"。

注:

此属性允许使用由单个关键字 "auto" 组成的值,以及 由两个关键字 "auto auto" 组成的另一个值。这两个不同的 值具有不同的含义,并不等价。 具体而言,单关键字值 "auto" 具有 紧接上文所述的语义;而双关键字值 "auto auto" 由两个 <measure> 表达式组成,每个表达式都使用 <measure> 关键字 auto,其定义见 10.3.24 <measure>。

如果此属性的值为 contain,则其关联属性的计算值 按以下方式确定:

  1. 如果该属性应用于 tt 元素,则 contain 按照 H 根容器区域语义中的规定解释;

  2. 如果该属性应用于 region 元素, 则计算值通过执行 [计算容纳 缩放]过程来确定, 其中目标矩形 TR 初始化为 固有块内容范围, 该范围对应于区域的内容, 参考矩形 RR 设置为根容器区域的范围, 目标矩形 TR 的最终输出值即为计算 值;

  3. 如果该属性应用于 image 元素, 则计算值通过执行 [计算容纳 缩放]过程来确定, 其中目标矩形 TR 初始化为 固有图像范围,对应于该图像, 参考矩形 RR 设置为 包含块区域或行区域中的可用内容空间, 分别取决于当前格式化上下文是块级格式化 上下文还是行内格式化上下文, 目标矩形 TR 的最终输出值即为计算 值。

如果此属性的值为 cover,则其关联属性的计算值 按以下方式确定:

  1. 如果该属性应用于 region 元素, 则计算值通过执行 [计算覆盖 缩放]过程来确定, 其中目标矩形 TR 初始化为 固有块内容范围, 该范围对应于区域的内容, 参考矩形 RR 设置为根容器区域的范围, 目标矩形 TR 的最终输出值即为计算 值;

  2. 如果该属性应用于 image 元素, 则计算值通过执行 [计算覆盖 缩放]过程来确定, 其中目标矩形 TR 初始化为 固有图像范围,对应于该图像, 参考矩形 RR 设置为 包含块区域或行区域中的可用内容空间, 分别取决于当前格式化上下文是块级格式化 上下文还是行内格式化上下文, 目标矩形 TR 的最终输出值即为计算 值。

如果此属性的值由两个 <measure> 规范组成,则必须将其解释为 宽度和高度,其中 第一个规范为 宽度,第二个规范为高度, 在这种情况下,两个 <measure> 规范都必须解析为(或能够解析为)非负长度。

如果不支持与此属性关联的样式属性的某个计算值, 则呈现处理器必须使用最接近的 受支持值。

注:

在此上下文中,短语最接近的受支持值指使 计算出的范围与受支持的范围之间的 欧氏距离最小的值。如果存在多个 与计算值距离相等的 最接近的受支持值,则使用距离 [0,0] 最远的值,即范围 最大的值。

此解析最接近的受支持值的规则使用最接近的较大 受支持距离,而不是最接近的较小受支持距离。 采用这种不同处理方式的理由是, 使用较大的范围可确保受影响的内容被包含在 区域内,而不会导致区域溢出, 使用较小的范围则更容易导致区域溢出。

以下示例说明 tts: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">
  那是龙虾的声音:<br/>
  我听见它宣告,<br/>
  "你把我烤得太焦黄,<br/>
  我得给头发撒上糖。"
</p>

示例呈现 – 范围
TTML extent 样式属性
10.2.16.1 范围的特殊用法

当 tts:extent 特例指定在 div 或 p 上时,11.1.2.1 内联动画的特殊 语义适用。

10.2.17 tts:fontFamily

tts:fontFamily 属性用于指定一个样式属性, 该属性定义字体族,从中为字形 区域选择字形,这些区域 由流入区域的内容生成。

值: <font-families>
初始值: default
适用于: p, span;另见注
继承: 是
百分比: 不适用
可动画化: 离散
语义依据: fontFamily 推导

注:

初始值 default 是一个通用字体族名称, 下文 10.3.19 <generic-family-name> 对其作了进一步描述。

注:

除了应用于 span,此 属性的计算值 在 p 元素上还用于解析 与 tts:lineHeight 属性关联的样式属性的值,具体规定见 10.2.27 tts:lineHeight。

如果不支持与此属性关联的样式属性的某个计算值,则 呈现处理器必须尝试将 计算出的字体族 映射到具有相似排版 特征的受支持字体族,或者,如果不存在这样的映射,则必须 使用值 default。

以下示例说明 tts:fontFamily 样式。

示例片段 – 字体族
<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>
    "时候到了,"海象说道,<br/>
    "该谈谈许多事情:
  </p>
  <p tts:textAlign="end" tts:fontFamily="monospaceSerif">
    谈鞋子,谈船只,谈封蜡,<br/>
    谈卷心菜和国王,
  </p>
  <p>
    还有海水为何滚烫,<br/>
    以及猪是否长着翅膀。"
  </p>
</div>

示例呈现 – 字体族
TTML fontFamily 样式属性

10.2.18 tts:fontKerning

tts:fontKerning 属性用于指定一个样式属性, 该属性确定在定位字形 区域时是否应用字体字偶距调整。

值: "none" | "normal"
初始值: normal
适用于: span;另见注
继承: 是
百分比: 不适用
可动画化: 离散
语义依据: fontKerning 推导

如果此属性的值为 normal,则当字偶距调整 数据可用时,应应用字偶距调整。 如果此属性的值为 none,则无论字偶距调整数据 是否可用,都不应应用字偶距调整。

如果不支持与此属性关联的样式属性的某个计算值, 则呈现处理器必须使用值 normal。

tts:fontKerning 样式由以下 示例说明。

示例片段 – 字体字偶距调整
<p>
  波浪<br/>
  <span tts:fontKerning="none">波浪</span>
</p>

示例呈现 – 字体字偶距调整
TTML fontKerning 样式属性

10.2.19 tts:fontSelectionStrategy

tts:fontSelectionStrategy 属性用于指定一个样式属性, 该属性确定应用于字形区域的策略,该策略用于 呈现处理期间从可能的字体列表中 选择字体。

值: "auto" | "character"
初始值: auto
适用于: p, span;另见注
继承: 是
百分比: 不适用
可动画化: 离散
语义依据: fontSelectionStrategy 推导

此属性的呈现语义采用 [XSL-FO 1.1] 第 7.9.3 节中的定义, 其中选择条件集合扩展为包含以下属性:

在满足字体选择条件的字体资源中进行选择时, 由 font 元素引用的字体资源优先 于应用程序或系统提供的 字体资源。

注:

除了应用于 span,此 属性的计算值 在 p 元素上还用于解析 与 tts:lineHeight 属性关联的样式属性的值,具体规定见 10.2.27 tts:lineHeight。

如果不支持与此属性关联的样式属性的某个计算值, 则呈现处理器必须使用值 auto。

tts:fontSelectionStrategy 样式由以下 示例说明。

示例片段 – 字体选择策略
<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;另见注
继承: 是
百分比: 见正文
可动画化: 离散
语义依据: fontShear 推导

对于此属性适用的每个字形区域,将二维 切变变换 应用于该字形区域,具体规定见 10.4.5.3 切变计算。

以下示例说明 tts:fontShear 样式。

示例片段 – 字体切变
<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>

示例呈现 – 字体切变
TTML fontShear 样式属性
示例片段 – 使用负值的字体切变
<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>

示例呈现 – 使用负值的字体切变
TTML fontShear 样式属性

10.2.21 tts:fontSize

tts:fontSize 属性用于指定一个样式属性, 该属性定义为字形 区域所选字形的字体大小, 这些区域由流入区域的内容生成。

值: <font-size>
初始值: 1c
适用于: p, span;另见注
继承: 是,但 10.2.21.1 字体大小的特殊语义所述情况除外
百分比: 如果不是 region 元素, 则相对于最近祖先样式 元素的计算字体大小;否则,相对于 计算单元格尺寸
可动画化: 离散
语义依据: fontSize 推导

如果指定单个 <length> 值,则此长度 同时确定字形 EM 方框的水平和垂直尺寸,二者相等; 如果指定两个 <length> 值,则第一个 确定水平 尺寸,第二个确定垂直尺寸。

如果分别表示水平和垂直尺寸,则 <length> 值的单位必须相同。

注:

字形的 EM 方框通常定义为包含该字形的字体的 EM 方框。也就是说, 字形没有与其字体的 EM 方框不同的 EM 方框。

相对 <length> 值 出现在此属性中时,即以百分比(%)、单元格 (c)或 EM(em)单位表示的值, 相对于一个参考二维尺寸值进行解析,该值包含两个分量:宽度分量和 高度分量。如果相对单位为百分比,则 参考值是最近祖先样式元素的 字体大小计算值,或计算单元格尺寸。 如果相对单位为单元格(c),则参考值是 计算单元格尺寸。 如果相对单位为 EM(em),则按如同使用 百分比单位的方式 确定参考值,其中 1em 等于 100%。

当指定单个相对 <length> 值时, 此 <length> 根据参考值的高度分量进行解析; 当指定两个相对 <length> 值时, 第一个 <length> 根据参考值的宽度分量进行解析, 第二个 <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 单位, 则按如同指定了等价百分比值的方式处理,其中 1em 等于 100%。

注:

例如,考虑一个 span 元素 S,它是段落(p) 元素 P 的子元素。 如果 tts:fontSize 在 P 上的计算值为 (18px,24px),且 tts:fontSize="1em" 指定在 S 上,则这等价于 指定 100%, 其解析为 (24px,24px)。但是,如果 tts:fontSize="1em 1em" 指定 在 S 上, 则这等价于指定 100% 100%,其解析为 (18px,24px)。

注:

除了应用于 span,此 属性的计算值 在 p 元素上还用于解析 与 tts:lineHeight 属性关联的样式属性的值,具体规定见 10.2.27 tts:lineHeight。

如果不支持与此属性关联的样式属性的某个计算值, 则呈现处理器必须使用最接近的 受支持值。

注:

在此上下文中,短语最接近的受支持值指使 计算出的字体大小与受支持的字体大小之间的 欧氏距离最小的值。如果存在多个 与计算值距离相等的 最接近的受支持值,则使用距离 0(单长度规范)或 [0,0](双长度规范)最远的值, 即使用最大的字体大小。

以下示例说明 tts:fontSize 样式。

示例片段 – 字体大小
<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">
  那就把杯子装满<br/>
  糖浆和墨水,<br/>
  或者其他任何<br/>
  喝起来 <span tts:fontSize="24px">可口</span> 的东西。
</p>

示例呈现 – 字体大小
TTML fontSize 样式属性
10.2.21.1 字体 大小的特殊语义

与此属性关联的样式属性的计算值由一个二元组组成, 其中的条目分别表示字体大小的宽度和高度分量的计算值。

当应用于 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 属性用于指定一个样式属性, 该属性定义应用于所选字形的字体样式,这些字形用于字形区域,其由 流入区域的内容生成,其中从字体 样式值到特定字体字面或样式参数化的映射 不由本规范确定。

值: "normal" | "italic" | "oblique"
初始值: normal
适用于: p, span;另见注
继承: 是
百分比: 不适用
可动画化: 离散
语义依据: fontStyle 推导

使用值 oblique 表示沿行内推进方向进行切变变换, 其角度未指定。

注:

除了应用于 span,此 属性的计算值 在 p 元素上还用于解析 与 tts:lineHeight 属性关联的样式属性的值,具体规定见 10.2.27 tts:lineHeight。

如果不支持与此属性关联的样式属性的某个计算值, 则呈现处理器必须使用值 normal。

以下示例说明 tts:fontStyle 样式。

示例片段 – 字体样式
<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">
  秋天,当树叶变成棕色,<br/>
  拿起笔墨,<span tts:fontStyle="italic">把它写下来。</span>
</p>

示例呈现 – 字体样式
TTML fontStyle 样式属性

10.2.23 tts:fontVariant

tts:fontVariant 属性用于启用排版字形 变体的选择,这些变体用于字形区域,其由 流入区域的内容生成。

值: <font-variant>
初始值: normal
适用于: p, span;另见注
继承: 是
百分比: 不适用
可动画化: 离散
语义依据: fontVariant 推导

注:

除了应用于 span,此 属性的计算值 在 p 元素上还用于解析 与 tts:lineHeight 属性关联的样式属性的值,具体规定见 10.2.27 tts:lineHeight。

如果不支持与此属性关联的样式属性的某个计算值, 则呈现处理器必须使用值 normal。

以下示例说明 tts:fontVariant 样式。

示例片段 – 字体变体
<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">
  跳到 <span tts:fontVariant="super">上面</span> 又跳到
  <span tts:fontVariant="sub">下面</span>,恐惧得痛苦不堪。
</p>

示例呈现 – 字体变体
TTML fontVariant 样式属性

10.2.24 tts:fontWeight

tts:fontWeight 属性用于指定一个样式属性, 该属性定义应用于所选字形的字重,这些字形用于字形区域, 其由流入区域的内容生成,其中从 字重值到特定字体字面或字重参数化的映射 不由本规范确定。

值: "normal" | "bold"
初始值: normal
适用于: p, span;另见注
继承: 是
百分比: 不适用
可动画化: 离散
语义依据: fontWeight 推导

注:

除了应用于 span,此 属性的计算值 在 p 元素上还用于解析 与 tts:lineHeight 属性关联的样式属性的值,具体规定见 10.2.27 tts:lineHeight。

如果不支持与此属性关联的样式属性的某个计算值, 则呈现处理器必须使用值 normal。

以下示例说明 tts:fontWeight 样式。

示例片段 – 字重
<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">
  他们告诉我,你去见过她,<br/>
  <span tts:fontWeight="bold">还向他提起过我:</span><br/>
  她说我的人品不错,<br/>
  <span tts:fontWeight="bold">却说我不会游泳。</span>
</p>

示例呈现 – 字重
TTML fontWeight 样式属性

10.2.25 tts:ipd

tts:ipd 属性用于指定 行内推进维度,或简称 ipd,该维度属于 流入区域的内容所生成的区域。

注:

术语行内推进维度以相对于书写模式的 方式解释, 使得 ipd 始终对应于行内 推进方向上的距离。因此,在水平书写模式下,ipd 表示 水平距离, 而在垂直书写模式下,ipd 表示垂直距离, 其中水平和垂直始终按绝对意义解释。

值: <measure>
初始值: auto
适用于: body, div, p, span
继承: 否
百分比: 见正文
可动画化: 离散
语义依据: ipd 推导

如果 <measure> 表示为 <length> 值,则它必须为非负值。

如果 tts:ipd 属性指定在 span 元素上, 且应用于该元素的 tts:display 属性的计算值 不是 inlineBlock, 则 tts:ipd 的语义仅在计算任何适用的背景颜色或图像的 行内推进维度时适用; 但是,所生成区域的内容矩形的尺寸不会改变。

如果在此属性的 <length> 表达式中使用 百分比值, 则相对于所生成区域的包含区域(最近的祖先区域)的适用绝对 维度 解析该值。

注:

用于此属性的 <length> 表达式 关联于 某个相对于书写模式的特定维度,该维度随后被解析为绝对维度, 具体取决于适用的书写模式。如果该绝对维度为水平(垂直)维度, 则根据参考区域(最近的祖先区域)的同一水平(垂直)绝对维度 解析百分比值。

以下示例说明 tts:ipd 样式。

示例片段 – 行内推进维度
<p tts:fontSize="24px" tts:lineHeight="48px" tts:ipd="300px">
  树林正在 <span tts:display="inlineBlock" tts:ipd="150px">渐渐变绿</span> ...
</p>

注:

在上述示例中,tts:ipd 属性指定在 p 元素上, 为该段落所生成块区域的内容矩形的宽度 分配一个固定尺寸,而 tts:ipd 属性指定在 span 元素上时,则为 该 span 所生成行内块区域的内容矩形的宽度分配一个 固定尺寸。

10.2.26 tts:letterSpacing

tts:letterSpacing 属性用于指定一个样式属性, 该属性增大或减小字形区域之间的标称距离。

字母间距在行区域的开头或结尾不起作用,且不得 应用于前进量为零的字形。此外,字母间距不得导致通常相连的 字形, 例如连写文字或连写字体中使用的字形,变得断开。

字母间距的应用独立于字偶距调整和两端对齐。根据 所使用的字体、 所呈现的文字体系以及呈现处理器的能力,除字母间距外,还可以应用 字偶距调整和 两端对齐中的任一项或两项。

值: "normal" | <length>
初始值: normal
适用于: span;另见注
继承: 是
百分比: 不适用
可动画化: 离散
语义依据: letterSpacing 推导

值 normal 对应于指定一个 <length> 值零 (0), 即既不扩大也不压缩相邻字形的间距。

如果 <length> 值表示为正标量, 则相邻字形之间的间距额外增大一个等于该 标量值的量。 如果表示为负标量, 则相邻字形之间的间距额外压缩一个等于该 标量值的量,这可能导致 字形区域重叠,其最大压缩量使 有效前进量为零 (0)。

如果不支持与此属性关联的字母间距的某个计算值, 则呈现处理器必须使用最接近的 受支持值。

注:

在此上下文中,短语最接近的受支持值指使 计算出的字母间距与受支持的字母间距之间的 一维欧氏距离最小的值。如果 存在多个与某条边的计算值距离相等的 最接近的受支持值,则使用距离 0 最近的值。

tts:letterSpacing 样式由以下 示例说明。

示例片段 – 字母间距
<p>
  波浪<br/>
  <span tts:letterSpacing="20px">波浪</span>
</p>

示例呈现 – 字母间距
TTML letterSpacing 样式属性

10.2.27 tts:lineHeight

tts:lineHeight 属性用于指定一个样式属性, 该属性定义行区域之间的基线间距,这些行区域由流入 区域的内容生成。

注:

作为特例,词元 lineHeight 或短语中的术语高度, 即行高中的高度,指 与关联行区域的块推进维度相对应的 轴,该轴在 水平书写模式下为垂直轴,而在垂直书写模式下为水平轴。

注:

有关行高的更多信息,参见 11.3.2.2 行堆叠 中的相关说明。

值: "normal" | <length>
初始值: normal
适用于: p
继承: 是,但参见特殊 语义
百分比: 相对于此元素的字体大小
可动画化: 离散
语义依据: lineHeight 推导

注:

除了显式应用于 p 元素之外,此 样式属性的值还由 span 元素 和匿名 span 继承,这些元素是 p 元素的后代,该值用于 计算它们所生成的半行距,对应于 行内区域,相关内容参见 [XSL-FO 1.1] 第 4.5 节,以及 [CSS2] 第 10.8.1 节。

如果此属性的值为 normal,则 此样式属性的使用值按以下方式 确定:

  1. 令 P 为 p 元素, 此样式属性应用于该元素。

  2. 令 FF 为 tts:fontFamily 样式属性在 P 上的计算值。

  3. 令 FS 为 tts:fontSize 样式属性的计算值,该属性属于 P。

  4. 令 F0 为依次映射各字体族时获得的第一个字体,这些字体族位于 FF 中,分别映射到一组可用字体, 其中这组可用字体按需受到约束,以满足以下 计算值,即 tts:fontSelectionStrategy, tts:fontStyle, tts:fontWeight,以及 tts:fontVariant, 这些样式属性在 P 上的计算值。

  5. 如果 F0 关联的字体度量指定了上升高度 A、下降深度 D 和行间隙 G, 则将 LH 设置为 scaled(A)、scaled(D) 和 scaled(G) 之和, 其中 scaled(X) 表示字体度量 X 按字体大小 FS 缩放后的值。

    注:

    此处引用的上升高度、下降深度和行间隙参数旨在 对应于 sTypoAscender、 -sTypoDescender,即负一 (-1) 倍的 sTypoDescender,以及 sTypoLineGap 字段,它们位于 OS/2 表中, 该表属于 OpenType [OFF] 字体(或其他字体 格式中的等价项)。此外,通常,表达式 scaled(A) 和 scaled(D) 旨在对应于 text-altitude 和 text-depth 区域特征,由 [XSL-FO 1.1] 在值 use-font-metrics 用于关联属性 text-altitude 和 text-depth 时分别采用。

  6. 否则,LH 视为由实现决定;但是,在 没有实现特定要求的情况下, 建议将 LH 设置为 FS 的 125%。

  7. 将此样式属性的使用值设置为 LH。

注:

如果内容作者希望避免对 normal 产生不同解释的可能性,例如由于 可用字体集合存在差异,则建议使用 <length> 值表达式来显式 指定行高值。

本规范旨在使上述算法兼容 [XSL-FO 1.1] 和 [CSS2]。

如果指定为 <length>,则该长度必须 为非负值。

如果不支持与此属性关联的样式属性的某个计算值, 则呈现处理器必须使用最接近的 受支持值。

注:

在此上下文中,短语最接近的受支持值指使 计算出的行高与受支持的行高之间的 欧氏距离最小的值。如果存在多个 与计算值距离相等的 最接近的受支持值,则使用距离 0 最远的值,即 最大的行高。

以下示例说明 tts:lineHeight 样式。

示例片段 – 行高
<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">
  他以为自己看见一头大象,<br/>
  正在练习吹短笛:<br/>
  他再看一眼,发现那是<br/>
  妻子寄来的一封信。<br/>
  "我终于明白了,"他说,<br/>
  "生活的苦涩。
"</p>

示例呈现 – 行高
TTML lineHeight 样式属性
10.2.27.1 行 高的特殊语义

当此属性的指定值为 normal 时,计算值就是 指定值;因此, 应用继承语义时,值 normal 即为继承值。 但是,当此计算值用于执行段落布局时,还会对其进行 进一步处理,以获得 使用值, 如上文所述。

10.2.28 tts:lineShear

tts:lineShear 属性用于指定一个样式属性, 该属性确定是否以及如何将切变变换应用于每个行区域,这些区域 由 p 元素生成。

值: <percentage>
初始值: 0%
适用于: p
继承: 是
百分比: 见正文
可动画化: 离散
语义依据: lineShear 推导

对于此属性适用的每个行区域,将二维 切变变换 应用于该行区域,具体规定见 10.4.5.3 切变计算。

以下示例说明 tts:lineShear 样式。

示例片段 – 行切变
<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>

示例呈现 – 行切变 - 带旁注的竖排文本行
TTML lineShear 样式属性

注:

在上述示例中,黄色线条是由特定呈现 处理器创建的装饰, 用于辅助调试布局问题。这些线条不属于本规范 所定义的规范性 TTML 呈现的一部分。 此处,这些装饰描绘了 (1) 外层块 区域的边界, 这些区域由 region 元素生成, (2) 行区域子项的边界,它们属于外层块区域, 由 p 元素生成,以及 (3) 行内区域子项的边界,它们属于行区域,由 隐含的旁注文本容器生成。

此示例描绘了如何将切变(倾斜)变换应用于每个受影响的行区域 整体;但是, 当要对某行应用行切变时,可分配给 该行的可用距离,即其在切变变换前的最大行内推进维度 长度,会减小 B*sin(θ),其中 B 是行区域的块推进 维度,θ 是切变角度,以使该行能够放入 段落外层块区域的 内容矩形中。

10.2.29 tts:luminanceGain

tts:luminanceGain 属性用于确定区域的绝对亮度, 适用于 其呈现所需动态范围大于 [SRGB] 色彩空间所能提供的动态范围, 且其呈现需要绝对亮度值的情况。

注:

绝对亮度通过将增益乘数应用于绝对 参考白 点亮度来确定,该亮度为 [SRGB] 色彩空间的 80 cd∙m-2(而 不是某个输出显示设备 的实际白色亮度)。

如果不能指定此增益,则在 [SRGB] 空间中指定的颜色无法 与高动态范围(HDR)内容可靠地合成,这类内容预期以 显著 更高的峰值亮度显示,例如使用感知量化器电光 传递函数(PQ EOTF)的内容, 该函数规定于 [ITU BT.2100-1]。具体而言,

  • [SRGB] 颜色如果保持未缩放状态,且 场景的平均亮度 超过 80 cd∙m-2,则可能显得过暗;并且

  • [SRGB] 颜色如果被统一缩放到 任意较大的 亮度,例如 10,000 cd∙m-2,则可能显得过亮。

值: <non-negative-number>
初始值: 1.0
适用于: region
继承: 否
百分比: 不适用
可动画化: 离散;连续
语义依据: luminanceGain 推导

与 tts:luminanceGain 属性关联的计算值应用于所有 位于关联 region 内、且需要从 [SRGB] 颜色值转换为绝对亮度值的像素。任何生成 绝对亮度 像素值的要求都源自文档 处理上下文。

注:

如果某个图像在处理时生成绝对亮度像素值,例如 符合 [PQ PNG] 的图像,被放入一个区域,而该区域还 包含文本或 图像,其处理会生成 [SRGB] 像素值,且要求输出绝对 亮度, 则仅转换 [SRGB] 像素值。

应用 tts:luminanceGain 时,线性光输出值 (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">
  区域一 "r1" 中文本的绝对亮度应为
  区域二 "r2" 中文本绝对亮度的 3.8 倍。 
</p>
<p region="r2">
  采用恒等亮度调整 (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 应用的伽马校正。

注:

将 [SRGB] 像素合成到 HDR 像素上的详细示例,使用 tts:luminanceGain, 见附录 Q.1 感知量化器。

注:

如 10.3.9 <color> 所规定,将已渲染 文档实例的区域 合成到目标媒介上时,通常使用像素分量,这些分量使用 目标媒介的逆 EOTF 编码,而不是使用像素分量,其以 线性光表示。因此,使用半透明区域可能产生 感知上不同的结果,具体取决于目标媒介所使用的逆 EOTF, 尤其是在已渲染 文档实例与目标媒介的像素之间存在较大亮度差异时。 因此,鼓励作者考虑涉及半透明 元素的视觉结果。

10.2.30 tts:opacity

tts:opacity 属性用于指定一个样式属性, 该属性定义标记的不透明度(或反过来,透明度), 这些标记关联于区域或流入区域的内容所生成的区域。

在视觉媒介上呈现时,区域的不透明度以统一且 线性的方式 应用于以该区域为目标的内容所产生的所有标记, 该操作在将任何内容元素特定的 不透明度应用于该内容所生成的区域之后执行。

值: <alpha>
初始值: 1.0
适用于: body, div, image, p, region, span
继承: 否
百分比: 不适用
可动画化: 离散;连续
语义依据: opacity 推导

以下示例说明 tts:opacity 样式。

示例片段 – 不透明度
<p>
  <span tts:opacity="1.00">而 </span>
  <span tts:opacity="0.75">后 </span>
  <span tts:opacity="0.50">那里 </span>
  <span tts:opacity="0.25">便 </span>
  <span tts:opacity="0.00">空无一人。</span>
</p>

示例呈现 – 不透明度
TTML opacity 样式属性

10.2.31 tts:origin

tts:origin 属性用于指定 x 和 y 坐标,它们表示区域原点 相对于根 容器区域原点的位置。

如果 tts:origin 和 tts:position 属性都 指定在某个元素上,且 tts:position 是 受支持的属性, 则必须在呈现处理时忽略 tts:origin 属性 。

值: <origin>
初始值: auto
适用于: region;参见 特殊用法,适用于 div 和 p
继承: 否
百分比: 相对于根 容器区域的宽度和高度
可动画化: 离散
语义依据: origin 推导

如果此属性的值由两个 <length> 规范组成, 则必须将其解释为 x 和 y 坐标,其中第一个 规范 为 x 坐标,第二个规范为 y 坐标。

如果此属性的值为 auto,则必须将样式属性的计算值 视为与根容器区域的原点相同。

如果不支持与此属性关联的样式属性的某个计算值, 则呈现处理器必须使用最接近的 受支持值。

注:

在此上下文中,短语最接近的受支持值指使 计算出的原点与受支持的原点之间的 欧氏距离最小的值。如果存在多个 与计算值距离相等的 最接近的受支持值,则使用距离 [0,0] 最近的值,即最接近坐标 空间原点的值。

以下示例说明 tts: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">
  "去赴宴!"她怒如恶龙般尖叫。<br/>
  "去吞下满是泡沫的酒!<br/>
   去对着桌布傻笑!"
</p>

示例呈现 – 原点
TTML origin 样式属性
10.2.31.1 原点的特殊用法

当 tts:origin 特例指定在 div 或 p 上时,11.1.2.1 内联动画的特殊 语义适用。

10.2.32 tts:overflow

tts:overflow 属性用于指定一个样式属性, 该属性定义当区域的后代区域溢出其范围时,是否裁剪 该区域。

值: "visible" | "hidden"
初始值: hidden
适用于: region
继承: 否
百分比: 不适用
可动画化: 离散
语义依据: overflow 推导

如果此属性的值为 visible,则不应 裁剪受影响区域外的内容。 如果值为 hidden,则应 裁剪受影响区域外的内容。

注:

与区域内容矩形关联的内容所产生的标记可以渲染在该 内容矩形 之外,从而与区域的内边距矩形和边框矩形相交, 而不受 tts:overflow 属性的影响。只有当这些标记 延伸到区域范围之外时, 才可能发生区域溢出,该范围与区域的边框矩形重合, 边框矩形包含 区域的内边距矩形,内边距矩形又包含区域的内容矩形。

注:

除非内容作者使用手动换行元素 br, 否则给定区域中的一个段落在该区域内生成的行区域不会超过一个, 条件是该区域的 tts:overflow 和 tts:wrapOption 样式属性的计算值分别为 visible 和 noWrap 。

如果不支持与此属性关联的样式属性的某个计算值, 则呈现处理器必须使用值 hidden。

以下示例说明 tts: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">
  "不过等一会儿,"牡蛎们喊道,<br/>
  "在我们开始聊天之前;
      </p>
      <p region="r2" style="s2">
  因为我们有些已经气喘吁吁,<br/>
  而且我们个个都很胖!"
      </p>
    </div>
  </body>
</tt>

示例呈现 – 溢出
TTML overflow 样式属性

注:

在上述示例中,tts:noWrap 设置为 noWrap,以防止自动换行(断行); 如果未指定此值,则溢出会发生在块 推进方向,而不是行内推进方向。

10.2.33 tts:padding

tts:padding 属性用于指定内边距(或内缩) 空间,位于区域或流入区域的内容所生成的区域的一侧或多侧。

注:

内边距向区域内部占据空间,也就是说,区域的内容矩形会 因为 应用于该区域的内边距而缩小。

值: <padding>
初始值: 0px
适用于: body, div, image, p, region, span
继承: 否
百分比: 见正文
可动画化: 离散
语义依据: padding 推导

如果此属性的值由一个 <length> 规范组成, 则该长度应用于受影响区域的所有边。如果该值 由两个 <length> 规范组成,则第一个 应用于 前边和后边,第二个应用于起始边和结束边。 如果提供三个 <length> 规范,则 第一个应用于 前边,第二个应用于起始边和结束边,第三个应用 于后边。 如果提供四个 <length> 规范,则它们 分别应用于前边、结束边、 后边和起始边。

注:

百分比值相对于其所应用区域的尺寸。例如, 如果前边和后边对应 于区域的顶边和底边,如拉丁文本中 tts:writingMode 等于 "lrtb" 时的情况, 则应用于这两条边任一条的百分比值都相对于 区域的高度。反之,如果前边和后边 对应于区域的右边和左边,如日文文本中 tts:writingMode 等于 "tbrl" 时的情况,则应用于这两条边任一条的百分比值都 相对于区域的宽度。

用于表示内边距的 <length> 值必须 为非负值。

如果内边距应用于 span 元素,且 该元素的内容 被分到多个行区域中,则必须在每个换行 边界应用指定的内边距。相比之下, 在单个行区域内,如果该元素生成多个行内区域,则 必须将指定的内边距应用于 按包含块级元素的行内推进顺序,在该行区域内生成的 第一个和(或)最后一个行内区域。

注:

span 元素上的内边距行为 对应于使用 CSS box-decoration-break 属性,在换行处取值 clone, 在非末端的行内区域边界处取值 slice, 即非第一个且非最后一个行内区域的边界,具体定义见 [CSS Fragmentation] 第 5.4 节。

如果此属性的 <length> 分量中使用百分比值, 则按以下方式解析:

  • 当应用于 region 元素时, 百分比相对于适用的 绝对维度,该维度取自区域解析后的 范围,除非该维度依赖于 区域内容的尺寸,在这种情况下,百分比解析为 适用初始值的对应分量;

  • 当应用于所有其他元素时,百分比相对于对应的 绝对维度,该维度取自最近的祖先区域, 除非该维度依赖于 该区域内容的尺寸,在这种情况下,百分比解析为 适用初始值的对应分量。

注:

用于此属性的每个 <length> 分量都关联于 某条相对于书写模式的特定边,该边随后被解析为绝对维度, 具体取决于适用的书写模式。如果该绝对维度为水平(垂直)维度, 则根据参考区域的同一水平(垂直)绝对维度 解析百分比值(参考区域为根容器区域或最近的祖先区域)。

如果不支持与此属性关联的样式属性的某个计算值, 则呈现处理器必须使用最接近的 受支持值。

注:

在此上下文中,短语最接近的受支持值指使 计算出的内边距与受支持的内边距之间的 一维欧氏距离逐边最小的值。如果 存在多个与某条边的计算值距离相等的 最接近的受支持值,则使用距离 0 最近的值,即最小的 内边距。

以下示例说明 tts:padding 样式。

示例片段 – region 上的内边距
<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">
  正是斯纳克出没的地方!我已经说了两遍:<br/>
  光是这话就该鼓舞船员。<br/>
  正是斯纳克出没的地方!我已经说了三遍:<br/>
  我告诉你三遍的话就是真的。
</p>

渲染应用了内边距的区域时,应用于该区域的背景颜色 会渲染到区域的内边距部分。

示例呈现 – region 上的内边距
TTML padding 样式属性

注:

上述示例描绘了内边距如何向区域内部占据空间。具体而言, 10px 的内边距应用于前边(顶部)和后边(底部),而 40px 的内边距应用于起始边(左侧)和结束边(右侧)。 将 这些内边距从区域范围中减去后,区域的内容矩形具有 366px 的宽度 和 84px 的高度。区域的黑色背景颜色出现在 区域的内边距矩形中, 而段落的红色背景颜色出现在区域的内容矩形中。

示例片段 – span 上的内边距
<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">
  船员已到齐:其中有个擦靴工--<br/>
  一个制作软帽和兜帽的工匠--
  </span>
</p>

渲染应用了内边距的 span 时,内边距分别应用于每个生成的行区域 。

示例呈现 – span 上的内边距
TTML padding 样式属性

10.2.34 tts:position

tts:position 属性用于提供另一种方式,指定区域 相对于定位矩形的位置。

如果 tts:position 和 tts:origin 属性都 指定在某个元素上,且 tts:position 是受支持的属性, 则必须在呈现处理时忽略 tts:origin 属性 。

值: <position>
初始值: top left
适用于: region;参见 特殊用法,适用于 div 和 p
继承: 否
百分比: 见正文
可动画化: 离散;连续
语义依据: position 推导

水平位置偏移的百分比值分量 相对于以下宽度差: 定位矩形的宽度减去关联区域的宽度。 垂直位置偏移的百分比值分量 相对于以下高度差: 定位矩形的高度减去关联区域的高度。

下图描绘位置值 "75% 50%",其中虚线矩形 表示定位矩形,而实线 矩形表示被定位的区域。在这种情况下,区域的定位方式 使其宽度 75% 处的垂直线与 定位矩形宽度 75% 处的垂直线重合,其高度 50% 处的水平线与 定位区域宽度 50% 处的垂直线重合。

基于百分比的定位
使用百分比的 TTML position 样式属性

如果指定在 region 元素上,则 定位矩形对应于根容器区域的内容矩形。

如果不支持与此属性关联的样式属性的某个计算值, 则呈现处理器必须使用最接近的 受支持值。

注:

在此上下文中,短语最接近的受支持值指使 计算出的位置与受支持的位置之间的 欧氏距离最小的值。如果存在多个 与计算值距离相等的 最接近的受支持值,则使用距离 [0,0] 最近的值,即最接近坐标 空间位置的值。

以下示例说明 tts:position 样式,其中将一个 区域定位为 在水平维度居中,并使其底边在垂直维度上位于定位矩形 底部上方偏移 10% 的位置, 其中此偏移量等于定位矩形的高度 与区域高度之差的 10%。

示例片段 – 位置
<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">
  "去赴宴!"她怒如恶龙般尖叫。<br/>
  "去吞下满是泡沫的酒!<br/>
   去对着桌布傻笑!"
</p>

示例呈现 – 位置
TTML position 样式属性

10.2.34.1 位置的特殊用法

当 tts:position 特例指定在 div 或 p 上时,11.1.2.1 内联动画的特殊 语义适用。

10.2.35 tts:ruby

tts:ruby 属性用于指定旁注 样式的应用。

值: "none" | "container" | "base" | "baseContainer" | "text" | "textContainer" | "delimiter"
初始值: none
适用于: span
继承: 否
百分比: 不适用
可动画化: 无
语义依据: ruby 推导

如果此属性的值为 none,则不应用旁注语义;否则, 以下列举的旁注语义适用,见 表 10-1 – 旁注语义映射。

如果不支持与此属性关联的样式属性的某个计算值, 则呈现处理器必须使用值 none。

表 10-1 – 旁注语义映射
类别 tts:ruby 注释 [Ruby] CSS display [CSS Ruby]
旁注容器 container ruby ruby
旁注基底内容 base rb ruby-base
旁注文本内容 text rt ruby-text
旁注基底容器 baseContainer rbc ruby-base-container
旁注文本容器 textContainer rtc ruby-text-container
旁注后备分隔符 delimiter rp none | inline

在呈现处理时,文档处理上下文确定 呈现模式:正常或后备。 对旁注文本注释执行正常呈现处理时,分隔符内容不得 生成任何行内区域。 执行旁注的后备呈现时,分隔符和非分隔符旁注(基底和 文本)内容都必须生成正常的行内区域。 如果呈现处理器不支持旁注呈现,则必须执行后备 旁注呈现。

使用 tts:ruby 时,以下嵌套约束适用于旁注容器,也就是说, 如果 tts:ruby 的计算值在某个 span 元素上为 container, 则:

  • 其所有祖先元素的 tts:ruby 计算值均为 none;

  • 其每个子元素的 tts:ruby 计算值均不为 none;

  • 其第一个子元素的 tts:ruby 计算值为 baseContainer 或 base;

  • 其每个文本节点子项都仅包含 <lwsp>, 呈现处理时必须忽略这些内容,无论 以下属性的计算值, 即 xml:space 属性的计算值, 是否为 preserve;

使用 tts:ruby 时,以下嵌套约束适用于旁注基底容器,也就是说, 如果 tts:ruby 的计算值在某个 span 元素上为 baseContainer, 则:

  • 其父元素的 tts:ruby 计算值为 container;

  • 其每个子元素的 tts:ruby 计算值均不为 none;

  • 其第一个子元素的 tts:ruby 计算值为 base;

  • 其前一个兄弟节点为 null(即没有前一个兄弟节点);

  • 其每个文本节点子项都仅包含 <lwsp>, 呈现处理时必须忽略这些内容,无论 以下属性的计算值, 即 xml:space 属性的计算值, 是否为 preserve;

使用 tts:ruby 时,以下嵌套约束适用于旁注文本容器,也就是说, 如果 tts:ruby 的计算值在某个 span 元素上为 textContainer, 则:

  • 其父元素的 tts:ruby 计算值为 container;

  • 其每个子元素的 tts:ruby 计算值均不为 none;

  • 其第一个子元素的 tts:ruby 计算值为 text 或 delimiter;

  • 其前一个兄弟节点的 tts:ruby 计算值为 baseContainer 或 textContainer;

  • 其兄弟节点中至多有一个的 tts:ruby 计算值为 textContainer;

  • 其每个文本节点子项都仅包含 <lwsp>, 呈现处理时必须忽略这些内容,无论 以下属性的计算值, 即 xml:space 属性的计算值, 是否为 preserve;

使用 tts:ruby 时,以下嵌套约束适用于旁注基底内容,也就是说, 如果 tts:ruby 的计算值在某个 span 元素上为 base,则:

  • 其父元素的 tts:ruby 计算值为 container 或 baseContainer;

  • 其前一个兄弟节点为 null(即没有前一个兄弟节点),或者 其前一个兄弟节点的 tts:ruby 计算值为 base;

  • 如果其父元素的 tts:ruby 计算值为 container, 则其任何兄弟节点的 tts:ruby 计算值均不为 base;

  • 其任何后代元素的 tts:ruby 计算值都不能不是 none;

  • 其后代元素中没有任何 br 元素;

  • 其每个文本节点后代都不包含 U+2028 (行分隔符) 或 U+2029 (段落分隔符);

使用 tts:ruby 时,以下嵌套约束适用于旁注文本内容,也就是说, 如果 tts:ruby 的计算值在某个 span 元素上为 text,则:

  • 其父元素的 tts:ruby 计算值为 container 或 textContainer;

  • 其前一个兄弟节点为 null(即没有前一个兄弟节点),或者 其前一个兄弟节点的 tts:ruby 计算值为 base、 text 或 delimiter;

  • 如果其父元素的 tts:ruby 计算值为 container, 则其任何兄弟节点的 tts:ruby 计算值均不为 text;

  • 其任何后代元素的 tts:ruby 计算值都不能不是 none;

  • 其后代元素中没有任何 br 元素;

  • 其每个文本节点后代都不包含 U+2028 (行分隔符) 或 U+2029 (段落分隔符);

使用 tts:ruby 时,以下嵌套约束适用于旁注后备分隔符,也就是说, 如果 tts:ruby 的计算值在某个 span 元素上为 delimiter, 则:

  • 其父元素的 tts:ruby 计算值为 container 或 textContainer;

  • 其前一个兄弟节点为 null(即没有前一个兄弟节点),或者 其前一个兄弟节点的 tts:ruby 计算值为 base 或 text;

  • 恰好有一个兄弟节点的 tts:ruby 计算值为 delimiter;

  • 如果 tts:ruby 的计算值为 delimiter,则 其任何后代元素的 tts:ruby 计算值都不能不是 none;

  • 其后代元素中没有任何 br 元素;

  • 其每个文本节点后代都不包含 U+2028 (行分隔符) 或 U+2029 (段落分隔符)。

验证型内容处理器必须将 违反上述任何约束的情况视为错误。 在呈现处理时,违反任何这些约束都应 导致对旁注文本注释进行后备(行内) 呈现,并且,对于违反某项约束的内容,如果该 内容是 br 元素,或 U+2028 (行分隔符) 或 U+2029 (段落分隔符) 字符, 则应将其映射为 U+0020 (空格) 字符;如果是其他内容,则应忽略 (不呈现)。

注:

上面列出的约束旨在解释为规定以下 嵌套模型:

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 元素的最大内容模型,其定义 见 [Ruby] 第 2.1 节, 例外在于,rtc 实际上被扩展为允许可选地使用 分隔符(rp):

ruby
  : rb rt
  | rb rp rt rp
  | rbc rtc rtc?

rbc
  : rb+

rtc
  : rt+
  | rp rt+ rp                            // 对 [Ruby] 的扩展

此外,此模型与 [Ruby] 第 2.6 节一致,其 约束为 不支持旁注容器的嵌套 (相关内容参见上述嵌套约束)。

注:

虽然不支持像 [HTML] 所允许的那么多标记简化方式, 但此处定义的旁注表示形式确实允许以下简写:

base text =
  baseContainer
    base
  textContainer
    text

base delimiter text delimiter =
  baseContainer
    base
  textContainer
    delimiter text delimiter

给定 base 的内容为 B, text 的内容为 T,则表达式 base text 可以 在 [HTML] 中以如下多种方式表示:

<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 的语法允许使用多个旁注基底 内容,位于一个旁注基底 容器内,并使用多个旁注文本 内容,位于 一个旁注文本容器内,且均处于同一个 旁注容器中。此版本的 TTML 未定义 旁注基底内容与 旁注文本内容之间的映射,当 旁注文本内容的数量不等于 旁注基底内容的数量时,二者位于 同一个旁注容器中。

注:

当行内区域通过执行呈现处理而生成, 处理对象是 旁注文本容器或旁注文本内容时,该行内区域以如下区域为父级(成为其后代),即 行区域,其中包含旁注基底内容,而该基底内容与此旁注文本内容关联。

使用 tts:ruby 指定简单旁注注释的方式由以下 示例说明。

示例片段 – 简单旁注
<span tts:ruby="container" tts:rubyAlign="spaceAround">
  <span tts:ruby="base">使用许可</span>
  <span tts:ruby="text">许可</span>
</span>

示例呈现 – 简单旁注
TTML ruby 样式属性

使用 tts: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>

示例呈现 – 双侧旁注
TTML ruby 样式属性

注:

旁注注释的字间定位模式,例如用于 注音符号的模式, 由于缺乏市场需求,此版本的 TTML 不予支持。

当注释使用拉丁字符时,也可以使用 tts:ruby 属性, 例如 [CLREQ] 所述的拼音, 以下示例对此作出说明。

示例片段 – 带拼音注释的旁注
<p>
<span tts:ruby="container" tts:rubyAlign="center">
  <span tts:ruby="base">周杰伦</span><span tts:ruby="text">Jay Chou</span>
</span>

示例呈现 – 使用拼音注释的旁注
带拼音的 TTML ruby 样式属性
10.2.35.1 旁注注释的特殊 语义

在没有实现特定要求的情况下,旁注文本内容与旁注基底内容之间的对齐约束若可能 导致行区域溢出,则应通过移动旁注文本内容,使其远离行区域的起始边或结束边 来解决。

注:

参见 [JLREQ] 第 3.3.8 节,长度超过基底字符的旁注的 调整, 以及 [CSS Ruby] 第 5 节,边缘效果,以了解更多 信息。

在没有实现特定要求的情况下,旁注文本内容应仅在以下条件下允许伸出旁注基底内容:其 基底文本属于以下任一字符类别,这些类别定义于 [JLREQ] 附录 A,字符类别:

  • hiragana

  • ideographic

  • punctuationMarks

注:

参见 [JLREQ] 第 3.3.8 节,长度超过基底字符的旁注的 调整,以了解 更多信息。

在执行呈现处理时, 孤立旁注 内容, 即旁注基底内容或旁注文本内容,分别在未指定旁注基底容器或旁注文本容器的情况下指定, 会按需以隐含存在匿名旁注基底容器和(或)匿名旁注文本容器的方式处理。 一个隐含旁注基底 容器和(或) 隐含旁注文本容器 是必需的,以便生成并应用 隐含或集合样式语义到一个行内块区域,该区域包含行内 区域,这些行内区域由 孤立旁注 内容生成。

显式指定的 span 元素, 如果其 tts:ruby 的计算值为 baseContainer,则 称为 显式旁注基底 容器; 同样,显式指定的 span 元素,如果其 tts:ruby 的计算值为 textContainer,则 称为 显式旁注文本 容器。

注:

应用于字形区域的样式属性 在对旁注容器 span 进行呈现处理时没有语义影响,因为没有有意义的文本节点作为 以下元素的子节点出现: 匿名 span,它是这类 span 元素的子元素。例如,如果一个 tts:fontStyle 属性 指定在 旁注容器 span 上,则其作用域内没有 有意义的文本节点可供它 应用;但是,为 tts:fontStyle 指定在旁注容器 span 上的值仍然适用于样式 继承,由其他(非匿名)span 元素 子项继承,这些子项属于该旁注容器 span。

10.2.36 tts:rubyAlign

tts:rubyAlign 属性用于指定旁注文本在 旁注文本 容器注释所生成的行内区域中的位置。

值: "start" | "center" | "end" | "spaceAround" | "spaceBetween" | "withBase"
初始值: center
适用于: span,仅当 tts:ruby 的计算值为 container 时
继承: 是
百分比: 不适用
可动画化: 离散
语义依据: rubyAlign 推导

当此属性指定在一个 span 元素上,且该元素的 tts:ruby 计算值为 container 时,关联样式属性的旁注对齐语义 整体应用于该容器所包含的 旁注容器及旁注 内容生成的行内区域。

注:

将旁注对齐应用于整个旁注 容器,意味着应用于 该容器及其组成部分的旁注对齐方式是统一的(不变的)。

令 IR 和 IB 分别为以下内容生成的行内区域: (1) 旁注文本容器或 旁注文本注释,以及 (2) 关联的旁注 基底容器或旁注基底。另外,令 NR 和 NB 分别为这些行内区域的字形区域后代的 数量。

如果此属性的值为 start,则第一个字形区域后代的起始边 (该后代属于 IR) 与该行内区域的起始边对齐。 如果值为 center,则多余的空白 均匀分配到第一个和最后一个旁注注释字形区域的前面和后面。 如果此属性的值为 end,则第一个字形区域后代的结束边 (该后代属于 IR) 与该行内区域的结束边对齐。 如果值为 spaceBetween,则多余的空白 均匀分配到各个旁注注释字形区域之间。 如果值为 spaceAround,则多余的空白 均匀分配到每个旁注注释字形区域后代的前面和后面。

如果此属性的值为 withBase,那么,如果 NR 与 NB 相等, 则第 ith 个字形区域后代 (属于 IR)与第 ith 个 字形区域后代(属于 IB)居中对齐(水平或垂直); 否则(旁注和基底的字形区域数量不 相等),应用 center 的语义。

注:

在上述语义的上下文中解释字形区域 后代时,仅考虑占位的 字形区域后代; 即非占位的字形区域 后代(例如组合标记) 不影响旁注对齐。

如果不支持与此属性关联的样式属性的计算值, 则呈现处理器必须使用值 center。

注:

本规范假定定时文本应用中的旁注注释较窄, 因为呈现空间和可用时间 通常受到限制。因此,此版本的 TTML 不允许作者控制 旁注注释比其基底文本 更宽时的间距分配方式。这可能会对位于行起始边或结束边的较宽旁注 注释造成问题。为 避免这些问题,建议作者为 tts:rubyAlign 使用适当的值,并且(或者)将包含较宽 旁注注释的事件拆分为多行,甚至多个事件。

以下示例说明了 tts:rubyAlign 样式。

示例片段 – 旁注对齐
<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>

示例呈现 – 旁注对齐
TTML rubyAlign 样式属性

10.2.37 tts:rubyPosition

tts:rubyPosition 属性用于指定旁注文本在 块推进维度上 相对于其关联旁注基底的位置。

值: <annotation-position>
初始值: outside
适用于: span,仅当 tts:ruby 的计算值为 textContainer 或 text 时
继承: 是
百分比: 不适用
可动画化: 离散
语义依据: rubyPosition 推导

与此属性关联的样式属性决定 旁注文本 容器和旁注文本注释所生成的行内区域相对于其 关联的基底文本容器和基底文本的位置,其中应用 <annotation-position> 的方向语义。

当此属性指定在一个 span 元素上,且该元素的 tts:ruby 计算值为 textContainer 时,关联样式属性的旁注位置语义 整体应用于 显式旁注文本容器及 其所包含的旁注文本内容生成的行内区域。

当此属性指定在一个 span 元素上,且该元素的 tts:ruby 计算值为 text 时,关联样式属性的旁注位置语义 整体应用于其 隐含旁注文本容器及其自身的 旁注文本内容生成的行内区域。

不得在满足以下条件的 span 元素上指定此属性:该元素的 tts:ruby 计算值为 text,且该 span 元素的父元素是一个 span 元素,其 tts:ruby 计算值为 textContainer。 如果(在前述旁注文本内容上)指定了此属性, 则视为错误, 并且在呈现处理时必须忽略它。

旁注文本容器 或旁注文本注释的绝对位置, 根据放置受影响内容的区域的 tts:writingMode 样式属性的 计算值确定; 具体而言,应用表 10-2 – 按书写模式划分的旁注绝对位置 语义映射中列举的映射,其进一步定义 见 [CSS Ruby],§4.1。

如果两个旁注文本容器应用于同一个旁注基底容器,则在以下情况下视为错误: 与此属性关联的样式属性的使用值 会导致 两个旁注文本容器被放置在 旁注基底容器相对的同一侧, 在这种情况下,本规范 不定义此样式属性的呈现语义。

如果不支持与此属性关联的样式属性的计算值, 则呈现处理器必须使用值 before。

表 10-2 – 按书写模式划分的旁注绝对位置语义映射
tts:rubyPosition lrtb rltb tbrl tblr
before over over right left
after under under left right

注:

采用从左到右排列的竖排蒙古文时,可能希望 将旁注位置的初始值 设为 after,而不是 outside,后者在所有非末行上都会解析为 before。在 这种情况下,作者可以通过在文档的样式设置元素中包含 元素 <initial tts:rubyPosition="after"/>,重新定义此属性的默认初始值;该样式设置元素为 styling 元素。

以下示例说明了 tts:rubyPosition 样式,并 展示了 旁注位置的解析如何依赖于书写模式。请注意,该示例使用了 单字旁注,其定义见 [JLREQ]。

示例片段 – 旁注位置
<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>

示例呈现 – 旁注位置
TTML rubyPosition 样式属性

注:

在上述示例中,为便于格式排版,在 span 元素内部及其周围引入了空白; 为生成所示的示例呈现,必须移除这些多余的 空白,以免 它们出现在渲染输出中。

10.2.38 tts:rubyReserve

tts:rubyReserve 属性用于指定应用于受影响的行 区域的额外空间, 以便在块推进维度上预留足够的空间,容纳 旁注文本容器生成的行内区域,这些行内区域被放置 在 行区域的边界之内。

注:

作者可以使用 tts:rubyReserve 属性,确保 块区域中各行区域的连续基线保持固定的 位置,而不受是否存在旁注文本注释的影响。

值: <ruby-reserve>
初始值: none
适用于: p
继承: 是
百分比: 相对于此元素的字体大小
可动画化: 离散
语义依据: rubyReserve 推导

如果此属性的值为 none,则不预留旁注空间; 否则,此属性的值指定一个 位置分量,后跟一个可选的长度分量。

如果位置分量为 before,则受影响的行区域的前 行距会增加,增加量由长度分量的 使用值确定,该长度分量如上所述。

如果位置分量为 after,则受影响的行区域的后 行距会增加,增加量由长度分量的 使用值确定,该长度分量如上所述。

如果位置分量为 both,则 before 和 after 两个位置的语义均应用 于每个受影响的行区域。

如果位置分量为 outside,那么,如果 当前块区域恰好包含一个行区域,则应用 both 位置 的语义;否则,before 位置的语义应用于当前块区域的第一个行 区域, 而 after 位置的语义应用于 当前块区域的所有其他行区域。

长度分量用于间接确定 受影响的行区域的前行距和后行距 的增加量。长度分量的计算值被视为表示以下样式属性的计算值: 与假设存在的旁注文本内容上的 tts:fontSize 属性关联的样式属性, 其中假定这些旁注文本内容 实际存在于一个 p 元素中。

如果未指定长度分量,则必须将其视为 等于与以下属性关联的样式属性的值: tts:fontSize,该值将由 假设存在的 旁注文本容器或旁注文本内容继承,假定这些内容实际 存在 于一个 p 元素中;其中, 10.2.21.1 字体大小的特殊 语义适用于此继承值的计算。

如果指定了 <length> 分量, 则该值必须为非负值。

如果在一个 p 元素上指定了 tts:rubyReserve,且该元素包含 旁注文本内容,则按照上述方式将预留的行距 应用于行区域,然后根据需要对这些行距进行 进一步调整,以容纳实际存在的旁注文本内容。

示例呈现 – 旁注空间预留
tts:rubyReserve 不存在旁注 存在旁注
none TTML rubyReserve 样式属性:'auto' TTML rubyReserve 样式属性:'auto'
before TTML rubyReserve 样式属性:'after' TTML rubyReserve 样式属性:'after'
after TTML rubyReserve 样式属性:'after' TTML rubyReserve 样式属性:'after'
both TTML rubyReserve 样式属性:'after' TTML rubyReserve 样式属性:'after'
outside TTML rubyReserve 样式属性:'after' TTML rubyReserve 样式属性:'after'

10.2.39 tts:shear

tts:shear 属性用于指定一个样式属性,该属性 决定是否以及如何对最外层的块区域应用切变变换, 该区域由受影响的元素生成。

值: <percentage>
初始值: 0%
适用于: p
继承: 是
百分比: 见正文
可动画化: 离散
语义依据: shear 推导

对于此属性适用的每个块区域,应用二维 切变变换; 对该块区域的变换方式由10.4.5.3 切变计算规定。

以下示例说明了 tts: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>

示例呈现 – 切变 - 含纵中横的竖排行
TTML shear 样式属性

注:

在上述示例中,黄色线条是某个特定呈现 处理器创建的装饰, 用于辅助调试布局问题。这些线条不属于本规范 定义的规范性 TTML 呈现的一部分。 此处,这些装饰描绘了 (1) 外层块 区域的边界, 这些区域由 region 元素生成;以及 (2) 外层块区域的子级行区域的边界, 这些外层块区域由 p 元素生成。

此示例描绘了如何将切变(倾斜)变换应用于受影响的外层块区域, 这些区域由 p 元素生成;但是, 当要对外层块区域应用切变时, 可分配给该块区域的可用距离, 即其在切变变换之前的最大行内推进维度长度, 会减少 B*sin(θ), 其中 B 是外层块区域的块推进维度,θ 是 切变角度,以使该块区域能够容纳在该段落的直接 祖先块区域的内容矩形内。

10.2.40 tts:showBackground

tts:showBackground 属性用于指定 对何时应当呈现区域背景的 约束。

注:

区域的背景包括由 (1) 背景颜色和(或)(2) 背景图像产生的标记, 前提是它们中的任意一项适用于该区域。

值: "always" | "whenActive"
初始值: always
适用于: region
继承: 否
百分比: 不适用
可动画化: 离散
语义依据: showBackground 推导

如果区域不处于时间活动状态,则不渲染其背景; 但是,如果它 处于时间活动状态,则

  1. 如果此属性的值为 whenActive,则仅在 有内容被选入该区域时 才渲染区域背景,且这些内容也必须处于时间活动状态;

  2. 否则,如果此属性的值为 always,则 无论是否有内容 被选入该区域,都渲染区域背景。

如果不支持与此属性关联的样式属性的计算值, 则呈现处理器必须使用值 always。

以下示例说明了 tts:showBackground 样式。

示例片段 – 显示背景
<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
继承: 见正文
百分比: 不适用
可动画化: 离散
语义依据: textAlign 推导

如果不支持与此属性关联的样式属性的计算值, 则呈现处理器必须使用值 start。

以下示例说明了 tts:textAlign 样式。

示例片段 – 文本对齐
<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">
  当心炸脖龙,我的孩子!<br/>
  当心它咬人的巨颚、抓人的利爪!
</p>
<p region="r2">
  当心啾啾鸟,还要躲开<br/>
  那狂怒的班德斯奈奇兽!
</p>

示例呈现 – 文本对齐
TTML textAlign 样式属性

注:

由 p 元素生成的最后一个块区域的最后一个行区域的文本对齐方式, 遵循 text-align-last 属性取值为 relative 时的语义,参见 [XSL-FO 1.1],§7.16.10。

10.2.42 tts:textCombine

当采用垂直书写模式时,tts:textCombine 属性用于 指定一个样式属性, 该属性适用于流入某个区域的内容所生成的字形区域, 并且 决定是否以及如何将多个字形区域 水平组合,使其 能够容纳在周围竖排文本中单行的块推进维度 范围内。 如果采用水平书写模式,则在呈现处理时 忽略此样式属性。

组合处理可以使用一种或多种技术,以实现将内容在视觉上 组合到周围竖排文本的一个 EM 方框内的目标。 例如,可以选择半角变体形式、选择连字、应用较小的 字体大小等。支持此样式属性的 实现至少必须能够在半角变体形式 可用时选择它们。如果这些技术都 无法达到包含行区域在块推进维度上的 目标尺寸,则可以在当前生效的行堆叠策略 允许的情况下,增大包含行区域在此维度上的尺寸。

值: <text-combine>
初始值: none
适用于: span;另见注
继承: 是
百分比: 不适用
可动画化: 离散
语义依据: textCombine 推导

如果此属性的指定值为 none,则不应用组合 处理。 如果此属性的指定值为 all,则应组合所有受影响的 字符。

在所有受影响的字符均按水平书写 模式处理之后,才应用组合。具体而言,如果使用了双向处理、连字、字形替换或 Unicode 组合字符的组合,则这些处理应先于 tts:textCombine 属性指定的组合过程应用。

组合不得跨越元素边界、双向边界或非字形区域边界。

如果不支持与此属性关联的样式属性的计算值, 则呈现处理器必须使用值 none。

注:

此版本的 TTML 未定义 tts:textCombine 属性 在旁注容器上下文中的任何语义。因此, 建议内容作者 不要期望符合规范的 呈现处理器具有任何特定行为, 当 tts:textCombine 属性用于旁注容器的上下文中时尤其如此。

以下示例说明了 tts:textCombine 样式。

示例片段 – 文本组合
<p region="tbrlLeft">あい
  <span tts:textCombine="none">AB34</span>三四
</p>
<p region="tbrlRight">あい
  <span tts:textCombine="all">AB34</span>三四
</p>

示例呈现 – 文本组合
TTML textCombine 样式属性

注:

在上述示例中,最右侧区域展示了 all 值的使用, 其中 呈现处理器对受影响字符的半角变体字形 应用了缩放,从而使组合后的文本能够容纳在 与周围竖排文本大小相同的 EM 方框内。

10.2.43 tts:textDecoration

tts:textDecoration 属性用于指定一个样式属性,该属性 定义要应用于字形区域的文本装饰效果, 这些区域由流入某个区域的内容生成。

值: <text-decoration>
初始值: none
适用于: span;另见注
继承: 是,但请参见特殊 语义
百分比: 不适用
可动画化: 离散
语义依据: textDecoration 推导

如果不支持与此属性关联的样式属性的计算值, 则呈现处理器必须使用值 none。

注:

上文用于定义此样式属性值的语法基于 [CSS2] 中定义的值分量语法, 见 §1.4.2.1。实质上, 由 || 分隔的一个或多个值可以按任意顺序出现在样式属性 值中,例如 "noUnderline overline lineThrough"。

注:

指定值 "none" 等价于指定 "noUnderline noLineThrough noOverline"。

以下示例说明了 tts:textDecoration 样式。

示例片段 – 文本装饰
<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">
  海水湿润<span tts:textDecoration="noUnderline"> 得 </span>无以
  <span tts:textDecoration="noUnderline">
    复加,<br/>
    沙子干燥得不能再干。<br/>
    <span tts:textDecoration="lineThrough">一片也没有</span>
    你 <span tts:textDecoration="lineThrough">看不见</span>
    看不到一片云<br/>
    因为天空中本就没有云。
  </span>
</p>

示例呈现 – 文本装饰
TTML textDecoration 样式属性
10.2.43.1 文本装饰的特殊 语义

与此属性关联的样式属性的计算值由一个三元组组成, 其中各项分别表示是否要对受影响的文本应用下划线、删除线或上划线 装饰。 此外,在应用继承语义时,这些项中的每一项都被视为 独立于其他项进行继承。

注:

例如,如果应用于某个 div(分区)元素的 tts:textDecoration 计算值 是元组 (noUnderline, lineThrough, overline),而一个 p(段落)元素作为该 div 的子元素,指定了 tts:textDecoration="noLineThrough",则 应用于该 p 元素的汇总计算值为 (noUnderline, noLineThrough, overline),该值 随后由 p 元素的子元素继承。

10.2.44 tts:textEmphasis

tts:textEmphasis 属性用于指定一个样式属性,该属性 定义要应用于字形区域的文本着重效果, 这些区域由流入某个区域的内容生成。

值: <text-emphasis>
初始值: none
适用于: span;另见注
继承: 是
百分比: 不适用
可动画化: 离散;连续(仅颜色)
语义依据: textEmphasis 推导

如果未指定着重样式, 则必须将着重样式解释为指定了 auto 样式。 如果未指定着重颜色, 则必须将着重颜色解释为指定了 current 颜色。 如果未指定着重位置, 则必须将着重位置解释为指定了 outside 位置。

注:

采用从左到右排列的竖排蒙古文时,可能希望 将着重位置的初始值 设为 after,而不是 outside,后者在所有非末行上都会 解析为 before。在 这种情况下,作者可以通过在文档中包含 元素 <initial tts:textEmphasis="none transparent after"/> 来重新定义此属性的默认初始值,该元素应放在文档的 styling 元素内。

以下示例说明了 tts:textEmphasis 样式。

示例片段 – 文本着重
<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>

示例呈现 – 文本着重
TTML textEmphasis 样式属性

10.2.45 tts:textOrientation

tts:textOrientation 属性用于指定一个样式属性,该属性 定义要应用于字形区域的文本朝向,这些区域 由流入采用垂直书写模式的区域中的内容生成。

值: "mixed" | "sideways" | "upright"
初始值: mixed
适用于: span;另见注
继承: 是
百分比: 不适用
可动画化: 离散
语义依据: textOrientation 推导

此样式属性的呈现语义仅在采用垂直 书写模式时适用;因此,如果采用水平书写模式,此样式 属性不产生任何效果。

在下文中,与内容字符关联的字形区域 根据其在垂直书写模式下 是否旋转来描述,而是否旋转则依据每个内容字符的 Vertical_Orientation 确定,该值由 [UTR50] 规定。

如果此属性的值为 mixed,则旋转的字形区域设置为侧向, 不旋转的字形区域设置为直立,其中 侧向表示顺时针旋转 90°, 而直立表示不旋转。

注:

根据 [UTR50],字形区域的视觉旋转可以通过 替换为旋转的字形区域来实现,也可以通过执行仿射旋转 变换来实现,变换作用于 字形区域的轮廓(或栅格图像), 而采用哪种方式取决于呈现处理期间使用的 具体字体。

如果此属性的值为 sideways,则所有字形区域 均顺时针旋转 90°。

如果此属性的值为 upright,则所有字符均被视为 具有 U 垂直朝向,在这种情况下, 所有字形区域都不旋转。此时, (可能发生的)旋转字形区域替换 和仿射旋转变换的应用 均被禁用,渲染出的字形区域 是未旋转的形式。 此外,在双向处理方面,此值会使所有 受影响的字符被视为强从左到右字符,即视为已应用 值为 ltr 的 tts:direction,以及值为 override 的 tts:unicodeBidi。

如果不支持与此属性关联的样式属性的计算值, 则呈现处理器必须使用值 mixed。

以下示例说明了 tts:textOrientation 样式。

示例片段 – 文本朝向
<region xml:id="vertical" tts:writingMode="tblr"/>
...
<p region="vertical">
  <span tts:textOrientation="mixed">A</span>
  <span tts:textOrientation="upright">B</span>
</p>

示例呈现 – 文本朝向
TTML textOrientation 样式属性

10.2.46 tts:textOutline

tts:textOutline 属性用于指定一个样式属性,该属性 定义要应用于所选字形的文本描边效果,这些字形对应于字形区域,而这些区域 由流入某个区域的内容生成。

值: <text-outline>
初始值: none
适用于: span;另见注
继承: 是
百分比: 相对于此元素的字体大小
可动画化: 离散;连续(仅颜色)
语义依据: textOutline 推导

此属性的值由一个可选的 <color> 项 后跟一个或两个 <length> 项组成。如果 颜色项 存在,则它表示描边颜色;如果没有颜色项, 则应用 tts:color 的计算值。第一个 长度项表示描边厚度,第二个长度 项(如果存在)表示模糊半径。

当为描边厚度或模糊半径指定相对的 <length> 值时, 应根据所引用的字体大小或计算单元格尺寸的高度分量 来解析该值,其中计算单元格尺寸的定义见相应条款。

用于表示厚度和模糊半径的 <length> 值必须为非负值。

如果未指定模糊半径,即仅存在一个 <length> 项, 则应用计算值 0px。

注:

当以单元格为单位表示的 <length> 用于 tts:textOutline 值时, 应用单元格的高度。 例如,如果文本描边厚度指定为 0.1c,单元格分辨率 为 20 × 10,且根容器 区域的范围为 640 × 480,则 描边厚度的标称值为 480 / 10 * 0.1 像素,即 4.8px, 这里不考虑栅格化效果。

如果不支持与此属性关联的样式属性的计算值, 则呈现处理器必须使用值 none。

以下示例说明了 tts:textOutline 样式。

示例片段 – 文本描边
<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>
  小鳄鱼是怎样<br/>
  装点它闪亮的尾巴,<br/>
  把尼罗河的水倾洒<br/>
  在每片金色的鳞甲上!<br/>
  看它笑得多么欢畅,<br/>
  爪子伸展得多么漂亮,<br/>
  欢迎小鱼儿游进来,<br/>
  游进它温柔含笑的嘴巴!
</p>

示例呈现 – 文本描边
textOutline 样式属性

10.2.47 tts:textShadow

tts:textShadow 属性用于指定一个样式属性,该属性 定义要应用于所选字形的一个或多个文本阴影装饰,这些字形对应于字形区域,而这些区域 由流入某个区域的内容生成。

如果应用多个文本阴影,则按指定顺序绘制它们,绘制时间紧邻 所作用的 字形区域的绘制之前。

值: <text-shadow>
初始值: none
适用于: span;另见注
继承: 是
百分比: 相对于此元素的字体大小
可动画化: 离散;连续(仅颜色)
语义依据: textShadow 推导

如果不支持与此属性关联的样式属性的计算值, 则呈现处理器必须使用值 none。

示例片段 – 文本阴影
<style xml:id="s1"
  tts:backgroundColor="black"
  tts:color="white"
  tts:lineHeight="125%"
  tts:textAlign="center"/>
...
<p style="s1">
<span tts:padding="1%">
我在那些昏暗的地方配着青菜把它端上桌 
<span tts:textShadow="10% -20% 5% lime">在那阴影重重的景象中,</span><br/>
我还用它来打火照明:</span>
</p>

示例呈现 – 文本阴影
TTML textShadow 样式属性

10.2.48 tts:unicodeBidi

tts:unicodeBidi 属性用于指定一个样式属性,该属性 根据 Unicode 双向算法定义显式的方向嵌入、 覆盖或隔离。

值: "normal" | "embed" | "bidiOverride" | "isolate"
初始值: normal
适用于: p, span
继承: 否
百分比: 不适用
可动画化: 离散
语义依据: unicodeBidi 推导

如果不支持与此属性关联的样式属性的计算值, 则呈现处理器必须使用值 normal。

以下示例说明了 tts:unicodeBidi 样式。

示例片段 – Unicode 双向性
<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">
  小鸟们正在吹奏<br/>
  海岸边的风笛,<br/>
  <span tts:unicodeBidi="bidiOverride" tts:direction="rtl">游客们在那里打着呼噜。</span>
</p>

示例呈现 – Unicode 双向性
TTML unicodeBidi 样式属性

10.2.49 tts:visibility

tts:visibility 属性用于指定一个样式属性,该属性 定义生成的区域在视觉呈现 媒介上渲染时是否可见。

值: "visible" | "hidden"
初始值: visible
适用于: body, div, image, p, region, span
继承: 是
百分比: 不适用
可动画化: 离散
语义依据: visibility 推导

tts:visibility 样式不影响内容的布局或 合成,而仅决定合成后的内容是否可见。

如果与此属性关联的样式属性的计算值为 visible, 则此元素 生成的区域在视觉媒介上呈现时会被渲染为可见。如果计算值为 hidden,则它们不会被渲染为可见, 即它们被隐藏;尽管如此,如果某个隐藏元素的后代元素上 此样式属性的计算值 为 visible,则该后代元素仍会被渲染为可见。

如果不支持与此属性关联的样式属性的计算值, 则呈现处理器必须使用值 visible。

以下示例说明了 tts: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"/>
    越来越奇怪
  </span>
  <span tts:visibility="hidden">
    <set begin="2s" tts:visibility="visible"/>
    而且
  </span>
  <span tts:visibility="hidden">
    <set begin="3s" tts:visibility="visible"/>
    越来越奇怪!
  </span>
</p>

示例呈现 – 可见性
TTML visibility 样式属性 - [0,1)
TTML visibility 样式属性 - [1,2)
TTML visibility 样式属性 - [2,3)
TTML visibility 样式属性 - [3,4)

10.2.50 tts:wrapOption

tts:wrapOption 属性用于指定一个样式属性,该属性 定义在受影响元素的上下文中是否应用 自动换行(断行)。

值: "wrap" | "noWrap"
初始值: wrap
适用于: span
继承: 是
百分比: 不适用
可动画化: 离散
语义依据: wrapOption 推导

如果不支持与此属性关联的样式属性的计算值, 则呈现处理器必须使用值 wrap。

以下示例说明了 tts:wrapOption 样式。

示例片段 – 换行选项
<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>
  我会把所知的一切都告诉你:<br/>
  可讲的事情并不多。<br/>
  我见到一位年迈又年迈的老人,<br/>
  正坐在一扇门上。
</p>

示例呈现 – 换行选项
TTML wrapOption 样式属性

10.2.51 tts:writingMode

tts:writingMode 属性用于指定一个样式属性,该属性 定义在区域范围内堆叠块区域和行内区域时 使用的块推进方向和行内推进方向。

值: "lrtb" | "rltb" | "tbrl" | "tblr" | "lr" | "rl" | "tb"
初始值: lrtb
适用于: region
继承: 否
百分比: 不适用
可动画化: 离散
语义依据: writingMode 推导

如果不支持与此属性关联的样式属性的计算值, 则呈现处理器必须使用值 lrtb。

注:

行内推进方向为从左到右或从右到左的书写模式 被称 为水平书写模式,而行内推进 方向为 从上到下的书写模式被称为垂直书写模式。

以下示例说明了 tts:writingMode 样式。

示例片段 – 书写模式
<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">你好 <span xml:lang="ja">各位,<br/>大家好</span></p>    
...
</tt>

示例呈现 – 书写模式
TTML writingMode 样式属性

注:

在此示例中,文本内容的自然语言通过 多个 xml:lang 属性来标识。虽然 从技术上讲,演示 tts:writingMode 属性并不要求这样做, 但对于包含多种自然语言内容的标记, 建议使用显式的语言标识。

10.2.52 tts:zIndex

tts:zIndex 属性用于指定一个样式属性,该属性 定义区域发生重叠时从前到后的排列顺序。

值: "auto" | <integer>
初始值: auto
适用于: region
继承: 否
百分比: 不适用
可动画化: 离散
语义依据: zIndex 推导

如果两个区域关联到相同的 Z-index 值,那么,如果这些区域 在空间上重叠,词法顺序靠后的元素所生成的区域必须 渲染在词法顺序靠前的元素所生成的区域之上,其中词法 顺序定义为对文档 实例进行后序遍历的顺序。

值 auto 的语义由 [XSL-FO 1.1],§7.30.18 定义,其中 tt 元素 被视为建立根堆叠上下文。

如果不支持与此属性关联的样式属性的计算值, 则呈现处理器必须使用最接近的 受支持值。

注:

在此上下文中,最接近的受支持值是指使 计算得到的 z-index 与受支持的 z-index 之间的 欧几里得距离最小的值。如果存在多个最接近的 受支持值,且它们与 计算值的距离相等,则使用距离 0 最近的值,即最接近当前堆叠上下文的基准堆叠 层级的值。

以下示例说明了 tts:zIndex 样式。

示例片段 – Z 索引
<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">
  我走过他的花园,用一只眼留意到,<br/>
  猫头鹰和豹子正在分吃一块馅饼。
</p>
<p region="r2">
  豹子拿走了饼皮、肉汁和肉,<br/>
  猫头鹰则分到了盛馅饼的盘子。
</p>
<p region="r3">
  馅饼吃完以后,猫头鹰得到了一份恩赐,<br/>
  获准把勺子收进口袋:
</p>
<p region="r4">
  豹子则接过了刀叉<br/>
  并发出一声低吼,<br/>
  然后以……结束了宴席
</p>

示例呈现 – Z 索引
TTML zIndex 样式属性

10.2.53 tta:gain

tta:gain 属性用于指定一个音频样式属性,该属性 确定要应用于相应音频内容的增益乘数,应用时间为 指定此属性的元素的活动持续时间。

值: <number>
初始值: 1
适用于: audio, body, div, p, span
继承: 否
百分比: 不适用
可动画化: 离散;连续

如果此属性的指定值不在区间 [-1,1] 内, 则将与此属性关联的样式属性的计算值钳制到此 有界区间内。

如果与此属性关联的样式属性的计算值为负值,则将增益 设置为 计算值的绝对值,并应用相位反转。

如果增益为 0,则活动的音频内容完全静音。如果增益为 1,则 活动 音频内容的振幅不变。否则,增益大于 0 且小于 1,在这种情况下, 对合成后的活动音频内容 应用相对衰减,该衰减在 区间 [0,1] 上呈线性。

以下示例说明了 tta:gain 样式。

示例片段 – 增益
<div>
  <audio src="#track1" tta:gain="0.5"/>
  <p tta:gain="0.3">
    <audio src="#track2" tta:gain="0.8"/>
  </p>
</div>

注:

在此示例中,两个音频源 track1 和 track2 处于活动状态。 div 元素提供一条活动音轨,将其作为输出传给其子元素 p, 而此子元素 p 合成第二条活动音轨,以形成传给其 子元素的输出。 此外,每个源音频以及以下元素的输出均指定了不同的增益: p, 因而最终输出为 0.3[0.5(track1) + 0.8(track2)]。

注:

此属性所表示的样式属性的语义基于 [WEBAUDIO],§2.7 中的定义,其中指定此样式属性的 元素 在音频图中生成一个 GainNode,其 gain 属性具有相同的计算值,而其输入对于 非音频生成元素的内容元素而言(即不是音频生成元素), 是此元素的父元素的音频输出与所有子级音频生成元素的合成 (线性求和)音频 输出之和;否则,即对于音频生成 元素,输入 是该元素生成的音频。

10.2.54 tta:pan

tta:pan 属性用于指定一个音频样式属性,该属性 确定要应用于相应音频内容的立体声声像向量, 应用时间为 指定此属性的元素的活动持续时间。

值: <number>
初始值: 0
适用于: audio, body, div, p, span
继承: 否
百分比: 不适用
可动画化: 离散;连续

如果此属性的指定值不在区间 [-1,1] 内, 则将与此属性关联的样式属性的计算值钳制到此 有界区间内。

如果与此属性关联的样式属性的计算值为负值,则声像 方向位于中心左侧。 如果声像值为 0,则活动音频内容的立体声方向性 不变;否则,声像值为正值, 在这种情况下,声像方向位于中心右侧,其中值 -1 表示完全偏左,而值 1 表示完全偏右。

以下示例说明了 tta:pan 样式。

示例片段 – 声像
<div>
  <audio src="#track1" tta:pan="0.5"/>
  <p tta:pan="0.3">
    <audio src="#track2" tta:pan="0.8"/>
  </p>
</div>

注:

在此示例中,两个音频源 track1 和 track2 处于活动状态。 div 元素提供一条活动音轨,将其作为输出传给其子元素 p, 而此子元素 p 合成第二条活动音轨,以形成传给其 子元素的输出。 此外,每个源音频以及以下元素的输出均指定了不同的声像: p, 因而最终输出声像为 0.3[0.5(track1) + 0.8(track2)]。

注:

此属性所表示的样式属性的语义基于 [WEBAUDIO],§2.21 中的定义,其中指定此样式属性的 元素 在音频图中生成一个 StereoPannerNode,其 pan 属性具有相同的计算值,而其输入对于 非音频生成元素的内容元素而言(即不是音频生成元素), 是此元素的父元素的音频输出与所有子级音频生成元素的合成 (线性求和)音频 输出之和;否则,即对于音频生成 元素,输入 是该元素生成的音频。

10.2.55 tta:pitch

tta:pitch 属性用于指定一个音频样式属性,该属性 在受影响的内容启用语音合成时决定语音音高

值: <pitch>
初始值: 0%
适用于: span
继承: 是
百分比: 相对于输入音频的音高
可动画化: 无

以下示例说明了 tta:pitch 样式。

示例片段 – 音高
<p>将相对音高调整应用于<span tta:pitch="+10hz">这个</span>词。</p>

注:

此属性所表示的样式属性的语义派生自 [SSML 1.0] §3.2.4 中的定义,其效果相当于将一个 prosody 元素应用于要朗读的字符内容,且该元素的 pitch 属性等于此计算值, 从而影响朗读的 字符内容。

10.2.56 tta:speak

tta:speak 属性用于指定一种音频样式属性,该属性 决定是否为受影响的内容启用语音合成,以及在启用时 应用何种语速。

取值: "none" | "normal" | "fast" | "slow"
初始值: none
适用于: span
是否继承: 是
百分比: 不适用
可动画化: 无

如果此属性的值为 none,则对 受影响的内容禁用语音合成。否则, 如果此属性的值为 normal、fast 或 slow, 则分别以 正常、快速或慢速语速启用语音合成。

以下示例演示了 tta:speak 样式。

示例片段 – 朗读
<p>朗读 <span tta:speak="normal">这个</span> 词。</p>

注:

此属性所表示的样式属性的语义源自 [SSML 1.0] §3.2.4 中的定义,其中等效的 prosody 元素具有等于计算值的 rate 属性,并应用于 朗读的 字符内容。

10.2.56.1 朗读的特殊语义

如果 tta:speak 的计算值在某个 span 元素或 匿名 span S 上不为 none,则

  1. 如果 S 具有子 audio 元素 A 且 A 未引用任何源音频 资源,无论是通过 引用数据嵌入还是 源数据嵌入, 则隐含对语音数据 资源的引用,采用 引用数据嵌入;

  2. 如果 S 的所有子元素均不是 audio 元素,且 S 的所有祖先均不是音频 生成元素,其引用的 音频资源源为语音数据资源, 则隐含一个子 audio 元素,该元素引用 语音数据资源,采用引用数据嵌入 方式。

    注:

    另一方面,如果 S 的某个祖先是音频生成元素, 其引用的音频资源源 为 语音数据资源,则 从 S 合成的语音音频样本旨在 与该语音数据资源合并(线性求和),所在的 音频呈现上下文属于 该祖先元素。

以下示例展示了上述两种情况中的第一种。

示例片段 – 具有隐含音频源的朗读
<span tta:speak="normal">
  <audio/>
  朗读文本
</span>

以下示例演示了上述情况中的第二种。

示例片段 – 具有隐含音频的朗读
<span tta:speak="normal">
  朗读文本
</span>

以下片段展示了将上述 特殊语义分别应用于前两个示例后得到的等效结果, 其中,为便于说明,根据需要引入了额外的空白以辅助 格式编排。

示例片段 – 等效的朗读
<span tta:speak="normal">
  <audio src="http://www.w3.org/ns/ttml/resource/#speech"/>
  朗读文本
</span>

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> 表达式用于表示文本 注释标记(例如注音或着重标记)的颜色。

语法表示 – <annotation-color>
<annotation-color>
  : "current"
  | <color>
current

等效于受影响文本的 tts:color 的计算值。

<color>

指定的颜色。

如果实现无法识别或以其他方式区分注释颜色值,则 必须将其解释为如同指定了 current 样式;因此, 实现如果 支持文本注释标记,就必须至少支持 current 值。

10.3.3 <annotation-position>

<annotation-position> 表达式用于表示文本 注释标记(例如注音或着重标记)的位置。

语法表示 – <annotation-position>
<annotation-position>
  : "before"
  | "after"
  | "outside"
before

朝向受影响的字形区域的前边缘。如果 应用水平书写模式,则朝向 字形区域的顶部。如果应用垂直书写模式, 则朝向右侧或左侧,具体取决于 字形区域 所应用的 tts:writingMode 分别解析为 tbrl 还是 tblr。

after

朝向受影响的字形区域的后边缘。如果 应用水平书写模式,则朝向 字形区域的底部。如果应用垂直书写模式, 则朝向左侧或右侧,具体取决于 字形区域所应用的 tts:writingMode 分别解析为 tbrl 还是 tblr。

outside

对于最后一个块区域的 (1) 唯一行区域或 (2) 第一行 区域,等效于 before,该块区域由 包含带注释文本的 p 元素 生成;否则,等效于 after。

如果实现无法识别或以其他方式区分某个注释位置值, 则 必须将其解释为如同指定了 before 位置;因此, 实现如果 支持文本注释标记,就必须至少支持 before 值。

10.3.4 <border>

<border> 表达式用于表示一个或多个边框样式分量表达式。

语法表示 – <border>

必须至少存在一个边框样式分量,例如, 一个 <border-style> 分量,其值为 none。请注意,分量的顺序无关紧要。

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> 表达式,则第一个 长度 对应于行内推进维度(对于内容)或 水平方向(对于区域)的四分之一椭圆半径,而第二个长度(如果存在)对应于 块推进维度(对于内容)或垂直方向 (对于区域)的四分之一椭圆半径;如果仅存在一个长度,则将其解释为 指定了两个值相同的长度。

10.3.7 <border-style>

<border-style> 表达式用于表示一个 或多个边框的样式。

语法表示 – <border-style>
<border-style>
  : "none"
  | "dotted"
  | "dashed"
  | "solid"
  | "double"

dotted、dashed 和 double 的解释 被视为 依赖于实现。

如果实现无法识别或以其他方式区分这些边框样式 值之一,则 必须将其解释为如同指定了 solid 样式;因此, 实现如果 支持边框,就必须至少支持 solid 值。

10.3.8 <border-thickness>

<border-thickness> 表达式用于表示一个 或多个边框的厚度。

语法表示 – <border-thickness>
<border-thickness>
  : "thin"
  | "medium"
  | "thick"
  | <length>

thin、medium 和 thick 的解释 被视为 依赖于实现;但是,解析得到的长度必须遵守以下 约束:thickness(thin) < thickness(medium); thickness(medium) < thickness(thick)。

如果边框厚度表示为 <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>                    // 有效范围:[0,255]

表示 RGB 分量值时,这些值被视为 未预乘 alpha。

为了在呈现处理中应用 非完全不透明或非完全透明的 alpha 或不透明度值, 合成函数的语义基于 合成函数的输入和输出均使用 [SRGB] 色彩空间来定义。

注:

在上述合成语义中使用 [SRGB] 并不意味着阻止实际处理器出于 内部或外部目的使用其他色彩空间。例如, 呈现处理器最终可以 将此处使用的 SRGB 值 转换到 YUV 色彩空间,以便在电视设备上呈现。

如果呈现处理器不支持某个 特定的、 有效的颜色或 alpha 值,则必须将其解释为等于 最接近的受支持值。

注:

在此上下文中,短语最接近的受支持值是指使 欧几里得距离最小的值,该距离介于 RGB 色彩空间中计算的颜色和 alpha 与受支持的颜色和 alpha 之间。 如果有多个最接近的受支持值与 计算值等距,则使用距不透明黑色 rgba(0,0,0,255) 最近的值,即最接近不透明黑色的值。

10.3.10 <digit>

<digit> 用于表示整数以及其他类型的数字或词元。

语法表示 – <digit>
<digit>
  : "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"

10.3.11 <emphasis-color>

<emphasis-color> 表达式用于表示文本 着重标记的颜色。

语法表示 – <emphasis-color>
<emphasis-color>
  : <annotation-color>

10.3.12 <emphasis-position>

<emphasis-position> 表达式用于表示文本 着重标记的位置。

语法表示 – <emphasis-position>
<emphasis-position>
  : <annotation-position>

10.3.13 <emphasis-style>

<emphasis-style> 表达式用于表示文本 着重标记的样式。

语法表示 – <emphasis-style>
<emphasis-style>
  : "none"
  | "auto" 
  | ( "filled" | "open" ) || ( "circle" | "dot" | "sesame" )
  | <quoted-string>

文本着重样式值的语义定义如下:

none

无文本着重标记。

auto

如果应用垂直书写模式,则等效于 filled sesame; 否则, 等效于 filled circle。

filled

着重标记使用着重颜色填充。

open

着重标记不填充,即使用着重颜色描画其轮廓,但 不填充内部。

circle

着重标记为圆形。如果为实心,则等效于 U+25CF '●';如果为空心,则 等效于 U+25CB '○'

dot

着重标记为圆点。如果为实心,则等效于 U+2022 '•';如果为空心,则 等效于 U+25E6 '◦'

sesame

着重标记为芝麻点。如果为实心,则等效于 U+FE45 '﹅';如果为空心,则 等效于 U+FE46 '﹆'

<quoted-string>

着重标记为字符串的第一个字素簇,忽略字符串的其余部分。

如果仅指定 filled 或 open,则分别等效于 filled circle 和 open circle。

如果仅指定 circle、dot 或 sesame,则 分别等效于 filled circle、filled dot 和 filled sesame。

如果实现无法识别或以其他方式区分某个着重样式值,则 必须将其解释为如同指定了 auto 样式;因此, 实现如果 支持文本着重标记,就必须至少支持 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-string 或 quoted-string 非终结符的语义值,具体取决于适用哪一个;

  • unquoted-string 非终结符的语义值是一个二元组 <quoted, content>, 其中 quoted 为布尔值 false,且 content 为依次追加每个 identifier 非终结符的值所得的结果,追加按词法顺序进行,每个标识符的值之前 都有一个 SPACE (U+0020) 字符,除非它是第一个 标识符;

  • quoted-string 非终结符的语义值是一个二元组 <quoted, content>, 其中 quoted 为布尔值 true,且 content 为带引号字符串去除引号后的内容,即 界定引号之间的字符序列。

  • escape 非终结符的语义值是被转义的 char 的值;

  • 如果 <family-name> 采用 unquoted-string 形式,且 包含一个 identifier,该标识符 以两个 - HYPHEN-MINUS (U+002D) 字符开头,则必须将其视为 无效;

  • 如果 <family-name> 采用 unquoted-string 形式,且 仅包含一个 identifier,该标识符 与某个 <generic-family-name> 匹配(通过区分大小写的比较),则必须将其解释 为该 <generic-family-name>;

  • 如果 <family-name> 采用 quoted-string 形式,且其内容 (去除引号后的值) 与某个 <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 字符引用。当需要使用具有语法意义的字符 且 不按其通常的语法解释时,可以使用上面指定的反斜杠 escape 非终结符对其进行转义。

使用反斜杠 escape 非终结符时,上述语法 并 不限制可以转义的字符,例如, \\[\n\r\f0-9a-f] 都 是允许的。如果这些转义之一出现在 <family-name> 表达式中, 则 在使用标准 XSL-FO 或 CSS 解析器处理时,需要将其转换为 {unicode} 转义。 特别是,CSS 会忽略后跟换行符的反斜杠,但上述语法 并不 忽略它。要在 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,则除非有更高层协议适用, 否则不选择下标、上标、全角、半角或注音 字形变体。

如果应用关键字 super,则选择上标字形变体(如果 可用)。 例如,使用 OpenType 字体渲染时,启用 OpenType sups 特性。 如果应用关键字 sub, 则选择下标字形变体(如果可用)。 例如,使用 OpenType 字体渲染时,启用 OpenType subs 特性, 以使用此类变体。

如果应用关键字 full,则选择全角字形变体(如果 可用)。 例如,使用 OpenType 字体渲染时,启用 OpenType fwid 特性。 如果应用关键字 half, 则选择半角字形变体(如果可用)。 例如,使用 OpenType 字体渲染时,启用 OpenType hwid 特性, 以使用此类变体。

如果应用关键字 ruby,则选择注音字形变体(如果可用)。 例如,使用 OpenType 字体渲染时,OpenType ruby 特性会被 启用。

注:

有关 OpenType 字体的定义,请参阅 [OFF]。

如果多个变体适用,则选择满足最多适用 变体要求的字形。例如, 如果同时指定 super 和 half 变体,则选择 同时被指定为上标和 半角变体的字形(如果可用)。如果只能满足所请求变体的子集, 且存在多个 可能的子集会导致所选变体字形有所不同,则 应用哪个子集被视为依赖于实现, 即,由文档 处理上下文决定。

10.3.19 <generic-family-name>

<generic-family-name> 表达式使用通用 词元指定字体族,该词元表示一类字体族。

无论是在内容创作还是内容解释中,将通用字体族名称解析为具体字体实例 均被视为依赖于实现。

语法表示 – <generic-family-name>
<generic-family-name>
  : "default"
  | "monospace"
  | "sansSerif"
  | "serif"
  | "monospaceSansSerif"
  | "monospaceSerif"
  | "proportionalSansSerif"
  | "proportionalSerif"

通用(字体)族名称与实际字体之间的映射 不由本规范确定;但是, 在执行呈现时,应尽可能保留等宽与比例宽度、 衬线与无衬线之间的区别。

如果指定的通用(字体)族名称为 monospace, 则可以将其解释为等效于 monospaceSansSerif 或 monospaceSerif。通用字体族名称 sansSerif 和 serif 应分别解释为等效于 proportionalSansSerif 和 proportionalSerif。

如果指定通用字体族名称 default(或由 初始值隐含),则其排印特征被视为依赖于实现; 但是,建议将此默认字体族映射为 等宽无衬线字体。

10.3.20 <hex-digit>

<hex-digit> 用于表示采用十六进制运算的 整数以及其他类型的数字或词元。

解析时,不得区分大小写。

语法表示 – <hex-digit>
<hex-digit>
  : <digit>
  | "a" | "b" | "c" | "d" | "e" | "f"
  | "A" | "B" | "C" | "D" | "E" | "F"

10.3.21 <integer>

<integer> 表达式用于表示任意有符号整数值。

语法表示 – <integer>
<integer>
  : sign? <non-negative-integer>

sign
  : "+" | "-"

注:

词法表示 "-0"、"0" 和 "+0" 的值, 无论是否存在额外的前导或尾随数字 "0",均被视为 等于整数值零 (0)。

10.3.22 <length>

<length> 表达式用于表示点的坐标分量,该点位于 笛卡尔空间中,或表示笛卡尔空间中两点之间的距离。

语法表示 – <length>
<length>
  : scalar
  | <percentage>

scalar
  : <number> units

units
  : "px"
  | "em"
  | "c"                                     // "cell" 的缩写
  | "rw"
  | "rh"

省略标量长度值的单位分量是 错误的。

单位 px(像素)对应于逻辑 像素,它属于 文档坐标空间, 其定义见H.3 坐标 空间;但是, px(像素)单位不应在 <length> 表达式中使用, 除非 tts:extent 属性包含 两个使用 px(像素)单位的 <length> 指定值, 并在 tt 元素上指定, 如果没有该属性,则不推荐 使用 px(像素)单位

当相对于字号表示为单个长度 或两个相等长度的字体指定时,单位 em 被视为 与 [XSL-FO 1.1] §5.9.13 定义的相同; 但是,当相对于字号表示为 两个不相等长度的字体指定时,一个 em 在用于指定行内推进方向上的长度时,等于经过非等比 缩放的字体的行内推进维度, 而在用于指定块推进方向上的长度时,等于缩放后 字体的块推进维度。

除非另有指定,em 单位相对于 与 tts:fontSize 属性关联的属性的计算值解析,该属性 应用于其上下文中正在解析 em 单位的元素。

单位 c(单元格)的语义 由参数 7.2.1 ttp:cellResolution 定义。

相对于根容器 的 单位 rw 和 rh 分别定义为 根 容器区域的宽度和高度的百分之一 (1%)。 例如,长度 25rw 被解释为宽度的 25%,该宽度属于 根容器区域。

10.3.23 <lwsp>

<lwsp> 用于表示常见的线性空白 (LWSP) 语法结构。

语法表示 – <lwsp>
<lwsp>
  : <whitespace>+

10.3.24 <measure>

<measure> 值将距离表示为 绝对维度或 相对维度,其使用上下文决定 适用哪个维度。

如果应用两个绝对维度之一,即高度或宽度, 则关联的相对维度,即 bpd 或 ipd,依据 适用的 书写模式和文本 朝向确定,从而 由关联的相对维度按照下文所述控制指定值的解释。

否则,应用两个相对维度之一,即 bpd 或 ipd,在这种情况下,该相对 维度控制 下文定义的指定值的解释。

语法表示 – <measure>
<measure>
  : "auto"
  | "fitContent"
  | "maxContent"
  | "minContent"
  | <length>

这些值的语义定义如下:

auto

对于 ipd, 应用于图像时,为其在行内推进方向上的固有尺寸; 否则, 为指定值为 100% 时将得到的数值。

对于 bpd, 应用于图像时,为其在块推进方向上的固有尺寸; 否则, 为指定值为 100% 时将得到的数值。

fitContent

一个数值,等于以下两者中的最大值:(1) minContent 的值和 (2) maxContent 与 auto 的值中的最小值。

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>+
  | <digit>+ "."

10.3.28 <number>

<number> 表达式用于表示任意可选带符号的整数或实数 值。

语法表示 – <number>
<number>
  : sign? <non-negative-number>

sign
  : "+" | "-"

注:

以下词法表示的值: "-0", "-0.", "-.0", "-0.0", "0", "0.", ".0", "0.0", "+0", "+0.", "+.0", 和 "+0.0", 无论是否存在额外的前导或尾随数字 "0", 均被视为等于数值零 (0)。

10.3.29 <origin>

<origin> 表达式指定矩形区域的尺寸。

语法表示 – <origin>
<origin>
  : "auto"
  | <length> <lwsp> <length>

10.3.30 <padding>

<padding> 表达式指定应用于区域内边距矩形的内缩量。

语法表示 – <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 分量, 则它指定赫兹 (hz) 或半音 (st),即标准自然音阶上的半音程。 如果未指定 units 分量,则隐含使用 赫兹。

10.3.33 <position>

<position> 表达式用于间接确定区域或图像 相对于参考区域的原点。

语法表示 – <position>
<position>
  : offset-position-h                             // 单分量值
  | edge-keyword-v                                // 单分量值
  | offset-position-h <lwsp> offset-position-v    // 双分量值
  | position-keyword-v <lwsp> position-keyword-h  // 双分量值
  | position-keyword-h <lwsp> edge-offset-v       // 三分量值
  | position-keyword-v <lwsp> edge-offset-h       // 三分量值
  | edge-offset-h <lwsp> position-keyword-v       // 三分量值
  | edge-offset-v <lwsp> position-keyword-h       // 三分量值
  | edge-offset-h <lwsp> edge-offset-v            // 四分量值
  | edge-offset-v <lwsp> edge-offset-h            // 四分量值

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> 值组成时, 为避免可能存在的解释歧义,第一个解释为水平 长度,第二个 解释为垂直长度,如上表最后一行所示。

三分量等效形式
值 等效形式
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> 分量 表示为百分比,则该百分比相对于 某个参考尺寸解释,其中参考尺寸由使用上下文定义。

<length> 分量作为 <position> 表达式的一部分,可以为正或为负。正长度被解释为 从所引用边缘向内的偏移,而负长度被解释为从 所引用边缘向外的偏移。例如,从 left 边缘向内偏移的位置位于该边缘右侧(如果非零),而从 left 边缘向外偏移的位置位于该边缘左侧(如果非零)。 相比之下,从 right 边缘向内偏移的位置位于该边缘左侧(如果 非零),而从 right 边缘向外偏移的位置 位于该边缘右侧(如果非零)。类似的关系也适用于 top 和 bottom 边缘。

执行四分量等效转换时, 表达式 (100% - <length-h>) 应解释为 100% 与 <length-h> 表达式的等效百分比之间的差。类似地,表达式 (100% - <length-v>) 应解释为 100% 与 <length-v> 表达式的等效百分比之间的差。 在这两种情况下,得到的差都可能是负百分比。

10.3.34 <ruby-reserve>

<ruby-reserve> 表达式用于预留空间,以放置注音文本内容。

语法表示 – <ruby-reserve>
<ruby-reserve>
  : "none"
  | ("both" | <annotation-position>) (<lwsp> <length>)?

10.3.35 <shadow>

<shadow> 值表示要应用于生成区域的阴影装饰。如果 生成的区域是字形区域,则应用于 字形的轮廓 (而非字形区域的包围盒)。如果生成的区域不是 字形区域, 则应用于该区域的边框矩形。

语法表示 – <shadow>

阴影值表达式由 两至三个 <length> 项和 一个可选的 <color> 项组成, 各项之间以线性空白 (LWSP) 分隔。

第一个 <length> 项表示偏移量, 方向为关联区域的水平轴维度, 其中正值表示朝向右边缘,负值表示朝向左边缘, 第二个 <length> 项表示偏移量, 方向为关联区域的垂直轴维度, 其中正值表示朝向下边缘,负值表示朝向上边缘。 第三个 <length> 项(如果存在)表示模糊 半径,并且必须为非负值。

如果未指定模糊半径,即仅存在两个 <length> 项, 则应用计算值 0px。

如果不存在 <color> 项, 则应用 tts:color 属性的计算值。

注:

当以单元格为单位表示的 <length> 用于 tts:textShadow 值时, 应用单元格在块推进维度上的尺寸。 例如,如果文本阴影厚度指定为 0.1c,单元格分辨率 为 20 乘 10,且根容器 区域的尺寸为 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> 表达式用于确定文本着重效果的行为。

语法表示 – <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 内联样式

样式属性可以以内联方式表示,即直接 在受影响的元素上指定样式属性。 以这种方式表示时, 样式信息的关联称为内联样式。

通过内联样式关联的样式属性具有高于所有其他 样式关联形式的优先级。

示例 – 内联样式
<p tts:color="white">白色 1 <span tts:color="yellow">黄色</span> 白色 2</p>

注:

在上例中,两个文本节点 "白色 1 " 和 " 白色 2" 被解释为匿名 span,它们没有 关联颜色样式属性;相反,它们继承颜色样式, 来源为其父 p 元素,如下文10.4.2.1 内容样式 继承所述。

10.4.1.2 引用式样式

样式属性可以在元素之外表示,并由 受影响的元素使用 style 属性引用。以这种方式表示时, 样式信息的关联称为引用式样式。

如果 style 属性指定了多个引用,则这些引用 按指定顺序求值,当某个样式属性沿多条引用路径指定时, 该顺序适用于其值的解析。

引用式样式的使用仅限于 引用 styling 元素的 style 后代元素。以下情况被视为错误: 引用的 style 元素是 layout 元素的后代,在这种情况下, 本规范不定义其呈现语义。

注:

引用式样式的使用促进了样式指定的复用,但 牺牲了引用的局部性。

注:

内容元素可以与样式 属性关联,通过混合使用 内联样式和引用式样式,在这种情况下,内联样式具有优先权, 如上文 10.4.1.1 内联样式所述。

示例 – 引用式样式
<style xml:id="s1" tts:color="white"/>
<style xml:id="s2" tts:color="yellow"/>
...
<p style="s1">白色 1 <span style="s2">黄色</span> 白色 2</p>

注:

在上例中,两个文本节点 "白色 1 " 和 " 白色 2" 被解释为匿名 span,它们没有 关联颜色样式属性;相反,它们继承颜色样式, 来源为其父 p 元素,如下文10.4.2.1 内容样式 继承所述。

10.4.1.3 链式引用 样式

样式属性可以在元素之外表示,并且自身可以引用 其他在元素之外表示的样式属性,从而创建一条始于 受影响元素的引用链。以这种方式表示时,样式信息的关联 称为链式引用样式。

链式样式引用序列中的循环必须被视为错误。

引用式样式的使用仅限于 引用 styling 元素的 style 后代元素。以下情况被视为错误: 引用的 style 元素是 layout 元素的后代,在这种情况下, 本规范不定义其呈现语义。

注:

链式引用样式的使用促进了将样式指定分组为 通用集合和特定集合,从而进一步有助于样式指定的复用。

注:

内容元素可以与样式 属性关联,通过混合使用 内联样式、引用式样式和链式引用样式,在这种情况下,内联 样式 具有优先权,如上文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">白色等宽文本</p>
<p style="s2">黄色等宽文本</p>

注:

在上例中,第二段的文本为黄色,因为 tts:color="yellow" 实际上覆盖了(合并时覆盖)tts:color="white",后者由样式 s2 通过引用样式 s1 获得。

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 中间同步文档构建定义。

注:

使用中间同步文档形式而非 原始形式,是为了便于进行区域继承 处理。

10.4.2.1 内容样式继承

样式属性从祖先内容 元素继承, 继承发生于中间同步文档中, 条件是样式属性未与内容 元素(或 匿名 span)关联,且该样式属性被指定 为 可继承。

如果确定某个样式属性需要继承,则继承值必须 为同名样式属性在计算 样式集合中的值,该集合属于 此元素最近的、定义了该属性的祖先元素, 且该祖先位于适用的中间同步文档中。

示例 – 内容样式继承
<p tts:fontFamily="monospaceSansSerif">
  <span tts:color="yellow">黄色等宽文本</span>
</p>

注:

在上例中,包围字符项的 span 元素所包含的文本为 黄色等宽文本,它未指定 tts:fontFamily 样式 属性,而该属性可继承;因此, tts:fontFamily 样式的值 从祖先元素的计算样式 集合中继承,该祖先为 p 元素, 并被添加到 指定 样式 集合中,该集合属于 span 元素。

10.4.2.2 区域样式继承

样式属性从 region 元素继承, 条件如下:

  1. 如果可继承的样式属性 P 未关联到 内容元素 或匿名 span E,并且

  2. 如果该样式属性 P 位于 计算样式 集合中,该集合属于区域 R,并且

  3. 如果该元素 E 流入(呈现于)区域 R。

示例 – 区域样式继承
<region xml:id="r1">
  <style tts:color="yellow"/>
  <style tts:fontFamily="monospaceSerif"/>
</region>
...
<p region="r1">黄色等宽文本</p>

注:

在上例中,匿名 span 包围字符 项 黄色等宽文本,它实际上继承了 tts:color 和 tts:fontFamily 样式,这些样式指定于 region 元素上,而 p 元素流入(呈现于)该元素。

10.4.3 样式解析值的类别

在样式解析、布局和呈现处理期间, 样式属性值的三种类别 区分 如下:

10.4.3.1 指定值

样式属性的值,如果与 元素关联或由 元素或匿名 span继承, 则称为指定值。 给定元素的所有指定样式属性构成的集合 称为该元素的指定样式集合, 属于该元素。

10.4.3.2 计算值

当使用相对值表达式指定样式属性时, 例如命名颜色、相对单位(如单元格)或百分比, 需要将其进一步解析为绝对单位,例如 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 区域布局与呈现。

10.4.4.1 概念 定义

为了解释下文指定的样式解析处理 模型,适用以下概念定义:

[样式属性]

样式属性 P 被视为由一个 元组 [name, value] 组成,其中 属性的名称是一个元组 [namespace value, unqualified name],而属性的值是一个 元组 [category, type, value expression],其中 P 表示 与 显式指定或采用默认值的样式属性关联的内部化(实例化)状态。

示例 – 概念性样式属性
[
  ["http://www.w3.org/ns/ttml#styling", "color"],
  ["specified", color, "red"]
]

[样式(属性)集合]

样式(属性)集合由一组无序的样式 属性组成,集合中任意两个样式属性都没有 相同的名称,其中“相同的名称”是指 名称元组的命名空间值和名称元组的非限定名称均相等。

在指定样式(属性)集合中,每个样式 属性的类别均为 "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%" ]
  ]
}

在计算样式(属性)集合中,每个样式 属性的类别为 "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 的方式如下:如果某个样式属性 Pold 已存在于 SS 中, 且 Pnew 的名称与 Pold 的名称相同 ,则将 SS 中的 Pold 替换为 Pnew ;否则,将 Pnew 添加到 SS。

[样式(属性)集合合并]

样式(属性)集合 SSnew 合并到 现有样式(属性)集合 SSold 的方式 如下:对于每个样式属性 Pnew,若其位于 SSnew 中 ,则将 Pnew 合并到 SSold 。

10.4.4.2 指定样式集合 处理

指定样式集合 SSS 属于元素或 匿名 span E, 即 SSS(E),按以下有序 规则确定:

  1. [初始化] 将 E 的指定样式集合 SSS 初始化为 空集;

  2. [引用式和链式引用 样式] 对于每个 style 元素 SREF, 若其由指定于 E 上的 style 属性引用,则按 style 属性中指定的顺序,在 SREF 是 styling 元素的后代时, 将指定样式集合,其所属元素为 SREF ,即 SSS(SREF),合并到 E 的指定样式集合 SSS(E) 中;

  3. [嵌套样式] 如果 E 未被按条件 排除,则 对于每个嵌套的按条件包含的 style 子元素 SNEST,其父元素为 E,按指定的子元素顺序,将 SNEST 的指定样式集合 , SSS(SNEST),合并到指定样式集合,其所属元素为 E,即 SSS(E);

  4. [内联样式] 如果 E 未被按条件 排除,则 对于每个样式属性 P,若其内部化 (实例化) 自一个指定的样式属性,该属性属于 E, 则将 P 合并到指定样式 集合,其所属元素为 E,即 SSS(E);

  5. [动画样式] 如果 E 的元素类型不是内联 动画元素, 则对于每个按条件包含的 内联动画子元素 A,其父元素为 元素 E, 将指定样式集合中的可动画化样式,该集合属于 A, 即 SSS(A),合并到 E 的指定样式集合 SSS(E) 中;

  6. [隐式继承和初始值回退] 如果 E 的元素类型不在 Animation.class 元素 组中, 且不是样式元素类型 style, 则对于每个样式属性 P, 若其内部化(实例化)自一个 样式属性,则执行以下 有序子步骤:

    1. 如果 P 已存在于指定 样式集合中,该集合属于 E,即 SSS(E),则继续处理 下一个样式属性;

    2. 如果 P 可继承且 E 不是 region 元素, 则执行以下操作:

      • 将 P′ 设置为以下查找的结果: 在计算样式集合中查找 P 的值,该集合属于 E 的最近祖先元素, 即 NEAREST-ANCESTOR(E),并满足 CSS(NEAREST-ANCESTOR(E)) 包含 P 的定义;

    3. 如果 (1) P 可继承且 E 是 region 元素, 或 (2) P 不可继承且 P 适用于 E,则执行以下操作:

      • 将 P′ 设置为 属性 P 的初始值,其中属性的初始值 按以下方式确定:

        1. 如果某个 initial 元素定义了 P 的初始值,则使用 该值;

        2. 否则,使用属性定义所指定的初始值, 该定义属于 P;

    4. 如果 P′ 的值不是未定义,则将 P′ 合并到 E 的指定样式集合 SSS(E) 中。

10.4.4.3 计算样式集合处理

计算样式集合 CSS 属于元素或 匿名 span E, 即 CSS(E),按以下有序 规则确定:

  1. [解析指定样式] 确定(获取)指定样式集合 SSS,其所属元素为 E,即 SSS(E),依据为 10.4.4.2 指定样式集合 处理;

  2. [初始化] 将 CSS(E) 初始化为以下集合的(深)副本: SSS(E);

  3. [过滤] 如果 E 是 animate、set 或 style 元素,则返回 CSS(E) 作为得到的计算样式集合,不进行 进一步解析;否则,继续执行下一条规则;

  4. [相对值解析] 对于每个 样式属性 P,若其位于 CSS(E) 中,且 P 的值类型为相对类型,则执行以下有序 子步骤:

    1. 如果可能,将 P 的相对值替换为 等效的非相对(计算)值;

    2. 将 P 的类别设置为 "computed"。

注:

由于上述过滤规则, animate、set 或 style 元素的计算样式集合仅包含 指定值,在这种情况下, 相对值表达式仍保持相对形式;因此, 相对值表达式的解析(这些表达式可能通过 引用式样式关联赋值)总是在 布局元素或内容元素的上下文中进行,该元素具有 呈现 上下文,而不是在非呈现的声明上下文中进行, 后者属于 animate、set 或可引用的 style 元素。

注:

由于上述相对值解析规则可能无法解析某个相对值, 例如, 直到布局或呈现时才能进行解析,因此可能需要进一步解析 计算值,以获得 使用值。

10.4.4.4 样式解析过程

顶层样式解析过程定义如下:使用 前序遍历,遍历每个元素和匿名 span, 即 E,它们位于中间同步文档 DOCinter 中 ,执行以下有序 子步骤:

  1. [过滤] 如果 E 不属于以下任一种,则继续处理前序 遍历中的下一个元素,即, 不对 E 执行下文的后续步骤:

    或一个带样式元素,该元素定义于受支持的扩展模块中;

  2. [解析计算样式] 确定(获取)计算样式集合 CSS,其所属元素为 E,即 CSS(E),依据为 10.4.4.3 计算样式集合 处理。

10.4.5 样式过程

本节定义本规范其他位置引用的各种样式相关 过程。

10.4.5.1 包含计算
[计算包含缩放](inout 目标矩形 TR, in 参考矩形 RR)
  1. 如果目标矩形 TR 的单位 或参考矩形 RR 的单位未表示为 逻辑像素(即, px 单位),则按需将单位转换为 逻辑像素。

  2. 如果目标矩形 TR 的宽度 Wt 为零, 则将 Wt 设置为一; 类似地,如果目标矩形 TR 的高度 Ht  为零,则将 Ht 设置为一。

  3. 令 SARr 为参考 矩形 RR 的存储宽高比。

  4. 令 SARt 为目标 矩形 TR 的存储宽高比。

  5. 按以下方式确定缩放因子 SF:

    1. 如果 SARr 小于或等于 SARt ,则 SF 为 Wr / Wt ,其中 Wr 和 Wt 分别为参考矩形和目标矩形的宽度。

    2. 否则,SARr 大于 SARt ,则 SF 为 Hr / Ht ,其中 Hr 和 Ht 为参考矩形和目标矩形的高度, 两者分别对应。

  6. 如果 SF 不等于 1.0,则 将 Wt 设置为 SF * Wt 并将 Ht 设置为 SF * Ht , 即,就地缩放目标矩形 TR,所用缩放因子为 SF。

注:

为实现上述算法,存储宽高比和缩放 因子 应采用至少提供 7 位十进制有效数字的形式表示。

10.4.5.2 覆盖计算
[计算覆盖缩放](inout 目标矩形 TR, in 参考矩形 RR)
  1. 如果目标矩形 TR 的单位 或参考矩形 RR 的单位未表示为 逻辑像素(即, px 单位),则按需将单位转换为 逻辑像素。

  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 均大于 一,令 SF 为 SFW 和 SFH 中较小的值; 否则,令 SF 为 SFW 和 SFH 中较大的值。

  6. 如果 SF 不等于 1.0,则 将 Wt 设置为 SF * Wt 并将 Ht 设置为 SF * Ht , 即,就地缩放目标矩形 TR,所用缩放因子为 SF。

注:

为实现上述算法,缩放因子 应采用至少提供 7 位十进制有效数字的形式表示。

10.4.5.3 错切计算

错切值通过线性函数映射为错切角,使错切角 等于错切(百分比)值乘以 90 度。 如果错切值为 0%,则不应用错切变换;如果该值 为 100%,则应用二维错切变换, 角度为 90 度,沿与行内推进方向关联的轴进行;如果 该值为 -100%,则应用错切变换, 角度为 -90 度。如果指定百分比的绝对值大于 100%,则必须将其解释为如同指定了带有 相应符号的 100%。

注:

如果得到的错切角的绝对值为 90 度,则 错切角的使用值可以减去 某个很小的 epsilon, 使使用值的正切 有定义。

如果行内推进方向对应于 X 轴,则二维错切 变换由以下矩阵描述:

| 1 a 0 |
| 0 1 0 |
| 0 0 1 |

其中 a 等于错切角的正切。

如果行内推进方向对应于 Y 轴,则二维错切 变换由以下矩阵描述:

| 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 元素组中元素的子元素出现。 在前一种情况下,该区域称为外置区域,而在后一种 情况下,称为内联区域。

此外,根据 10.4.2.2 区域样式继承, region 元素可以用于指定可继承的样式属性, 由流入其中的内容继承。

region 元素接受零个或多个 属于 Metadata.class 元素 组的元素作为子元素, 后跟零个或多个 属于 Animation.class 元素组的元素, 再后跟 零个或多个 style 元素。

由 Metadata.class 元素组中的子元素指定的任何元数据,在语义上将 region 元素及其后代作为 整体应用。 由 Animation.class 元素组中的子元素指定的任何动画元素,在语义上应用于 region 元素。 任何 style 子元素都必须被视为局部样式 定义,仅应用于包含它的 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")
  {任意样式属性}
  内容: Metadata.class*, Animation.class*, style*
</region>

外置 region 元素可以指定 一个或多个时序属性: begin、end、dur。内联 region 元素不得 指定时序属性,如果指定了此类属性,则在进行 呈现处理时必须忽略。

如果在外置 region 元素上指定了 begin 和(或)end 属性,则它们指定 时间区间的起点和(或)终点,在此区间内,该区域可被激活, 且该区域的动画子元素相对于此区间计时。 如果指定了这些起点和终点,则它们相对于最近的 与时间区间关联的祖先元素的时间 区间,无论该区间是显式的还是隐含的。 外置 region 元素最近的、与时间区间 关联的祖先元素是 layout 元素。 如果在外置 region 元素上指定了 dur 属性,则 该属性 指定区域的简单持续时间。

内联 region 元素的活动时间区间是 其父内容元素的活动时间区间。

为了确定呈现处理的语义, 时间上不活动的区域在视觉媒介上 呈现时不得产生任何可见标记。

注:

外置 region 元素可以 与时间区间关联,其目的有 两个:(1) 在时间上限定区域及其内容的呈现, 以及 (2) 提供时间上下文,以便在其中实现区域 样式的动画。

例如,作者可能希望指定一个外置 region 元素,该元素 本身为空,但 可能具有可见的背景色,从某个时刻开始呈现, 并持续整个区域持续时间。区域的简单持续时间还用于 限定以该区域为目标的内容的 呈现效果。作者还可能希望在根容器区域内移动某个区域, 或通过动画效果改变区域的背景色。在 这两种情况下,都有必要为区域设定一个活动 时间区间。

与外置区域不同,内联区域明确绑定到 其父内容元素的时间上下文, 因此不需要(也不允许)指定独立的时序。

如果未在 region 元素上指定 timeContainer 属性,则必须将其解释为具有 并行时间包含语义。

如果 tts:origin 和 tts:position 属性同时存在 于 region 元素上,则 tts:origin 必须在 呈现处理时被忽略。 如果 tts:origin 和 tts:position 属性均不存在,则 应用初始值的语义,该初始值属于 tts:position 属性, 用于呈现处理。

如果 ttm:role 属性 指定于 region 元素上,则必须遵循 语法表示 – ttm:role定义的值语法,且此属性标识的角色 表示该区域的语义角色, 独立于以该区域为目标 (与其关联)的任何内容的语义角色。

11.1.2.1 内联动画的特殊 语义

当指定于 div 或 p 元素 E 上时, 以下样式属性例外地应用于 region R, 该区域与 E 关联,具体规定如下:

在这些情况下,每个样式属性的应用被视为 等效于一个匿名内联动画,其采用 set 动画元素的形式, 即 A,其中 动画应用于 R,其活动时间区间等效于 E 的活动时间区间,且如果多个动画元素 (Ai , ..., Aj) 已应用于 R, 则 A 在这些现有动画中的最后一个之后应用,即, 紧接在 Aj 之后。

注:

如果同一样式属性的多个匿名内联 动画 应用于某个区域 R,则相应的 set 动画元素, Aj , ..., Ak , 按照元素的前序遍历顺序添加到 R,这些元素为 Ej , ..., Ek, 它们产生了这些动画。

另请注意,对给定元素的特定样式属性应用多个动画的 语义 由步骤 (5) [动画样式]控制,该步骤见10.4.4.2 指定样式集合 处理。

以下模型示例使用 tts:extent 样式属性展示这些特殊语义, 但该模型普遍适用于上面列出的所有样式属性:

示例 – 区域的匿名内联动画 - 输入片段
<region xml:id="r1" tts:extent="80% 10%" .../>
...
<p region="r1" begin="10s" end="12s" tts:extent="70% 20%">改变尺寸</p>

在上述输入片段示例中,tts:extent 属性指定于 段落 (p) 元素上, 不失一般性地,该元素被分配到时间区间 [10s,12s)。 随后,此属性 用于合成一个以 set 元素形式表示的匿名动画, 如以下输出片段所示,其中该属性被复制 到 set 元素中,同时复制等效的时序属性。原始的 tts:extent 随后 从段落 (p) 中移除。

示例 – 区域的匿名内联动画 - 等效输出片段
<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">改变尺寸</p>

生成的输出片段表明,区域的原始尺寸得以保留,但 其中的 子动画在指定的时间区间内覆盖此尺寸,从而产生 按预期(暂时)改变 区域尺寸的效果。

11.2 布局属性词汇

本节定义 11.2.1 region 属性,该属性用于 内容元素。

11.2.1 region

region 属性用于引用 region 元素,该元素定义一个空间或区域,内容 元素将流入其中。

如果指定了 region 属性,则其值必须 遵循 [XML Schema Part 2] 定义的 IDREF 数据类型, 见 §3.3.9;此外,此 IDREF 必须引用一个 region 元素, 该元素具有 layout 祖先元素。

region 属性可以由以下 元素类型的实例指定:

注:

如果被 region 属性引用的 region 元素 被按条件 排除, 则该区域不与指定此 region 属性的元素关联。

注:

请参阅下文11.3.1 区域布局与呈现, 了解关于内容 在区域内流动的更多信息。

11.3 布局语义

11.3.1 区域布局与呈现

本节通过标准处理模型定义区域布局和 呈现的语义, 具体如下:

允许 采用任何实现,前提是外部可观察到的 结果与此模型产生的结果一致。

11.3.1.1 默认区域

如果文档实例未指定 外置区域, 则隐含一个具有以下特征的默认区域:

此外,如果未指定 外置区域,则 region 属性 不得指定于任何内容元素上,这些元素位于文档实例中。

如果对于给定文档 实例隐含了默认区域,则 body 元素 隐式地以默认区域为目标(与其关联)。

隐含默认区域时,文档实例 应 被处理为如同 region 元素及其 父 layout 元素已指定于 head 元素中,且匹配的 region 属性 已 指定于 body 元素上, 如以下示例所示:

示例 – 隐含默认区域
<tt xml:lang="" xmlns="http://www.w3.org/ns/ttml">
  <head>
    <layout>
      <region xml:id="anonymous"/>
    </layout>
  </head>
  <body region="anonymous"/>
</tt>

注:

在上例中,隐含了默认 region 元素和 region 属性。此外,还隐含了一个 layout 容器元素, 用于 隐含的 region 元素。

11.3.1.2 内联区域

内联区域是一种语法机制,用于指定 区域,使区域 指定 与引用该区域的内容之间的语法距离最小。在语义上,每个 内联区域等效于指定一个唯一的 外置区域,该区域仅由一个 内容元素隐式引用,且 内联区域是在该元素的上下文中指定(或隐含)的。

内联区域的声明方式是 指定一个 region 元素, 作为内容元素的子元素, 后者属于 Block.class 元素组,这 称为内联区域 指定。

内联区域按照以下过程处理: [处理内联 区域], 该过程生成与内联区域对应的 外置区域。此过程还将与内联区域关联的内容 元素 绑定到生成的对应外置区域。

注:

内容元素只能关联一个 单独的 区域(在给定的中间同步 文档中), 关联方式可以是指定属性,也可以是通过子 region 元素。因此, 如果内容元素指定了 region 属性,则任何 内联区域指定都会被 忽略。

[处理内联区域]

对于每个内容元素 B, 若其属于 Block.class 元素组, 则执行以下有序步骤:

  1. 如果 B 的 [attributes] 信息项属性 包含一个 region 属性,则 退出此过程

  2. 如果 B 的 [children] 信息项属性 不包含 region 元素 R,则退出此过程;

  3. 创建一个空的 region 元素 R' , 按以下方式初始化:

    • 将 [children] 信息项属性,其所属元素为 R' ,设置为 R 的 [children] 信息项属性的深副本;

    • 将 [attributes] 信息项属性,其所属元素为 R' ,设置为以下属性的深副本: [attributes] 信息项属性,其所属元素为 R;

    • 如果 [attributes] 信息项属性,其所属元素为 R' ,不包含 xml:id 属性,则添加一个隐含的 xml:id 属性,使用生成的值 ID,该值在 TTML 文档实例的范围内唯一; 否则,令 ID 为 xml:id 属性的值,该属性属于 R' ;

    • 如果存在以下属性,则将它们从 [attributes] 信息项属性中移除,该信息项属性属于 R' : begin、 dur 和 end;

    • 将 begin 和 end 属性添加到 [attributes] 信息项属性中,该信息项属性属于 R' , 具体如下:

      1. 如果并非在 smpte 时间基准和非连续标记 模式下运行,则将这些 begin 和 end 属性的值设置为分别等效于活动 开始和结束时间的值,这些时间属于 B,位于 文档 时间坐标空间中;

      2. 否则(smpte 非连续模式),将这些 begin 和 end 属性的值设置为与带标签的 同步事件(标记)对应的值,这些事件适用于 相应的开始和结束时间,其所属元素为 B,位于文档 时间坐标空间中;

  4. 如果 TTML 文档实例 没有 head 元素, 则插入一个空的 head 元素, 作为以下元素的第一个子元素: tt 元素;

  5. 如果 head 元素没有 layout 子元素, 则插入一个空的 layout 元素, 紧接在 styling 元素之后(如果 存在),并紧接在 animation 元素之前(如果存在);如果两者均不存在,则作为 head 元素的最后一个子元素;

  6. 将 R'  追加到 [children] 信息项 属性中,该属性属于 layout 子元素, 其父元素为 head 元素;

  7. 添加一个 region 属性, 其值为 ID,添加到 [attributes] 信息 项属性中,该属性属于 B;

  8. 将 R 从 [children] 信息项属性中移除, 该属性属于 B。

内联区域 指定的使用 及由此生成的外置区域如以下示例所示。

示例 – 内联区域指定
<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>一些内容</p>
    <div/>
  <body/>
</tt>

示例 – 生成的外置区域
<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>一些内容</p>
    <div/>
  <body/>
</tt>

注:

请注意,在上述一对示例中,生成的 外置区域上的时序属性 使用 end 属性,而非原始的 dur 属性,后者属于 div 父元素,其子元素为内联 region 元素。上述过程要求从 dur 转换为 end, 以便在根时间 范围内指定生成的外置区域的活动时间 区间。

注:

此示例中生成的区域 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. 调用过程[处理内联 区域];

  2. 对于每个时间上活动的 区域 R,复制 子树, 该子树属于 DOCsource, 以 body 元素为根;

  3. 按后序遍历对此子树求值,如果以下任一 条件为真,则剪除元素:

    1. 它们不是呈现相关 元素 ;或

    2. 它们在时间上不活动;或

    3. 它们为空,且既不是 Animation 元素,也不是 br 元素;或

    4. 它们未与区域 R 关联, 关联依据为[关联 区域]过程。

  4. 如果剪除后的子树非空,则将其父节点重新设置为 R 元素;

  5. 最后,完成上述步骤后,从中间文档中剪除原始的 body 元素,然后剪除所有 region、 begin、end 和 dur 属性,这些属性 已不再 具有语义上的相关性。

注:

在本节中,术语剪除用于 元素时,表示将该元素从其父元素的子节点中移除, 这进一步意味着被剪除元素的后代将不再 是 该元素的父元素的后代。当剪除用于 属性时,表示将该属性从与其 关联(拥有它)的元素节点中移除。

注:

允许符合要求的呈现处理器将提前进行的样式解析 作为上述过程的后处理步骤, 更多信息请参阅[流转换]过程的步骤 (2)。

[关联区域]

内容元素与区域关联, 依据 以下有序规则,其中使用第一个满足的规则, 跳过其余规则:

  1. 如果元素指定了 region 属性, 且该区域未被按条件 排除, 则该元素与此 属性引用的区域关联;

  2. 如果该元素的某个祖先指定了 region 属性, 且该区域未被按条件 排除, 则该元素与指定此属性的最近 祖先所引用的区域关联;

  3. 如果元素包含一个后代元素, 该后代指定了 region 属性, 且该区域未被按条件 排除, 则该元素与此 属性引用的区域关联;

  4. 如果隐含了默认区域(由于不存在任何 region 元素), 则该元素与默认区域关联;

  5. 该元素不与任何区域关联。

执行上述处理后,将得到一个序列,其中包含 N 个中间同步 文档实例, DOCinter0 … DOCinterN−1。

注:

如果实现能够检测到两个 相邻同步文档实例之间显著的相似性, DOCinterN DOCinterN−1 , 则处理器实现可以应用处理, 使呈现这两个实例之间的 过渡尽可能平滑,例如, [CTA-608-E] §C.3 和 [CC-DECODER-REQ] 所述的处理。

11.3.1.4 同步流处理

执行时间(同步)切片并随后 重新映射按区域选定的内容层级结构后,得到的中间 同步文档会经过流转换步骤,该步骤产生 一棵有根流对象树,表示为 XSL FO 文档实例,其定义见 [XSL-FO 1.1], 并由没有 XSL FO 对应项的 TTML 特定样式属性 在语义上进行扩展。

注:

本节中使用 XSL FO 仅为概念性用途, 唯一目的是定义 TTML 的规范性呈现语义。此算法的实际实现不必创建或处理 XSL-FO 表示。特别是,可以 使用其他呈现模型(例如层叠样式表 (CSS))来实现这些语义。

注:

由于 TTML 样式属性或样式属性值可能存在 于给定文档实例中,且没有 [XSL-FO 1.1] 对应项, 实现者应注意,本规范引用的是 [XSL-FO 1.1] 的布局模型, 而不是要求使用符合 [XSL-FO 1.1] 的格式化处理器, 因为此类处理器不一定足以满足本规范定义的完整呈现 语义, 并且会包含大量不需要的特性, 这些特性对于 实现 TTML 的呈现语义并非必需。

为了执行呈现处理,对于每个中间同步 文档,其生成方式见 11.3.1.3 中间同步文档 构建,即 DOCinteri ,(1) 调用以下 [流 转换]过程, 以获得 XSL FO 文档实例 Fi ,然后 (2) 如果处理 要求在 视觉媒介上呈现,则对 Fi 应用所有相关的格式化和渲染 语义,这些语义应符合 [XSL-FO 1.1] 和本规范的规定。

[流转换]
  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 元素上,被映射为 page-width 和 page-height 属性,指定于 fo:simple-page-master 元素上;

  4. 将 layout 元素映射为 fo:page-sequence 元素及其 子 fo:flow 元素,它们引用页面母版和页面 区域, 这些由上面生成的简单页面母版定义;

    注:

    在通过格式化 F 生成的 XSL FO 区域树中,使用的 是 [XSL-FO 1.1] 格式化处理器, 其中 page-viewport-area, 由 fo:page-sequence 元素通过 引用唯一生成的 fo:simple-page-master 元素产生,将对应于根容器区域, 其定义 见上文2 定义。

  5. 将每个非空 region 元素映射为 fo:block-container 元素,其 absolute-position 属性值为 absolute,其 top、left、 bottom 和 right 属性表示一个矩形,等效于区域的原点和 尺寸(包括内边距),且其 line-stacking-strategy 属性值为 line-height;

    注:

    区域的尺寸对应于分配矩形,该矩形属于 fo:block-container 生成的块区域。

    注:

    将 region 元素映射为 fo:block-container 时,可能 需要使用负偏移量作为以下一个或多个属性的值: top、left、bottom 和 right, 这些 XSL-FO 属性在区域延伸到其包含块之外时 需要这样处理。

  6. 对于每个 (1) body、div 和 p 元素, 或 (2) image 元素, 若其位于块级上下文中,即,作为元素的 image 子元素, 该父元素属于 Block.class 元素组, 则如果该元素未关联 tts:display 样式 属性,其值为 none:

    1. 如果该元素不是 image 元素,则将该 元素映射为独立的 fo:block 元素, 并使用计算样式集合填充 fo:block 的样式属性, 该计算 样式集合与每个原始 TTML 内容元素关联;

    2. 否则(该元素是 image 元素),将该 元素映射为独立的 fo:block 元素, 其中包含单个 fo:external-graphic 子元素, 并填充 fo:block 和 fo:external-graphic 的样式属性,使用计算 样式集合,该集合与每个原始 TTML 内容元素关联, 同时填充 src 属性,该属性属于 fo:external-graphic 元素,使用适当的 引用,指向相关的图像 资源;

  7. 对于生成的 fo:block 格式化对象, 该对象由上一步产生,对应于 body 元素,调用以下有序子步骤:

    1. 如果 display-align 样式属性属于此 fo:block, 且值为 center 或 after, 则合成并插入一个空元素,作为此 fo:block 的第一个子元素,该空 fo:block 具有以下属性: space-after.optimum、space-after.maximum 和 space-after.conditionality,其中 前 两个属性的值为包含它的 fo:block-container 元素的高度或宽度,取决于哪一个被 指定 为块推进维度,而最后一个属性的值 为 retain;

    2. 如果 display-align 样式属性属于此 fo:block, 且值为 center 或 before, 则合成并插入一个空元素,作为此 fo:block 的最后一个子元素,该空 fo:block 具有以下属性: space-after.optimum、space-after.maximum 和 space-after.conditionality,其中 前 两个属性的值为包含它的 fo:block-container 元素的高度或宽度,取决于哪一个被 指定 为块推进维度,而最后一个属性的值 为 retain;

    注:

    在块推进 维度中插入额外的可折叠空间, 对象为对应于 body 元素的 fo:block, 其目的是确保此 fo:block 的前后边缘重合于 fo:block-container 的前后边缘, 后者对应 于包含它的 region,同时考虑 满足 块推进维度对齐的需求。例如, 这可确保 与 body 元素关联的背景色,如果 不是 transparent, 将完全填充包含它的区域。

  8. 对于每个 (1) span 元素和匿名 span, 或 (2) 位于行内级上下文中的 image 元素, 即,作为 p 或 span 元素的 image 子元素, 如果该元素或匿名 span 未关联 tts:display 样式属性,其值为 none:

    1. 如果该对象是匿名 span,则将字符项序列, 其所属对象为匿名 span,映射为 独立的 fo:inline 元素, 并填充 fo:inline 的样式属性,使用 计算 样式集合,该集合与匿名 span 关联;

    2. 如果该对象是 span 元素,则将该元素映射 为独立的 fo:inline 元素,并填充样式 属性,其所属对象为 fo:inline,使用计算 样式集合,该集合与 span 关联;

    3. 否则(该对象是 image 元素),将该 元素映射为独立的 fo:inline 元素, 其中包含单个 fo:external-graphic 子元素, 并填充 fo:inline 和 fo:external-graphic 的样式属性,使用计算 样式集合,该集合与 image 元素关联, 同时填充 src 属性,该属性属于 fo:external-graphic 元素,使用适当的 引用,指向相关的图像 资源;

  9. 对于每个 br 元素,如果它未 关联 tts:display 样式属性,其值为 none,则将该元素映射为 独立的 fo:character 元素,具有以下 属性:

    • character="&#x000A;"

    • suppress-at-line-break="retain"

  10. 对于每个样式属性,若其位于某个 计算 样式集合中,且 在 [XSL-FO 1.1] 中没有对应项,则将该属性 直接映射 到由输入 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">文本 1</p>
      <p xml:id="p2" region="r2">文本 2</p>
    </div>
    <div xml:id="d2" begin="1s" dur="2s">
      <p xml:id="p3" region="r2">文本 3</p>
      <p xml:id="p4" region="r1">文本 4</p>
    </div>
  </body>
</tt>

在上述文档中,内容层级结构由两个分区组成,每个 分区包含两个段落。此内容以两个不重叠区域之一为目标(与其关联), 除了位置 和前景色外,这两个区域的样式完全相同,前景色由 被重新设置父节点并移入区域的 span(在此情况下为匿名 span)继承并应用。

以下第一个中间文档显示时间 区间 [0,1) 内的同步状态,在此期间只有分区 d1 在时间上活动, 且段落 p1 和 p2(及其祖先) 分别与区域 r1 和 r2 关联。

注:

下文展示的中间文档不是有效的文档实例, 而是可能的内部处理状态的表示,用于 教学目的。

示例 – 中间文档 – [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">文本 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">文本 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 的空间(前侧)填充项 -->
          <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">文本 1</fo:inline>
            </fo:block>
          </fo:block>
          <!-- body 的空间(后侧)填充项 -->
          <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 的空间(前侧)填充项 -->
          <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">文本 2</fo:inline>
            </fo:block>
          </fo:block>
          <!-- body 的空间(后侧)填充项 -->
          <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) 内的同步状态,在此期间分区 d1 和 d2 均在时间上活动,且段落 p1 和 p4(及其祖先)与区域 r1 关联, 而段落 p2 和 p3(及其祖先) 与区域 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">文本 1</p>
          </div>
          <div xml:id="d2-1">
            <p xml:id="p4">文本 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">文本 2</p>
          </div>
          <div xml:id="d2-2">
            <p xml:id="p3">文本 3</p>
          </div>
        </body>
      </region>
    </layout>
  </head>
</tt>

以下第三个中间文档显示时间 区间 [2,3) 内的同步状态,在此期间只有分区 d2 在时间上活动, 且段落 p4 和 p3(及其祖先) 分别与区域 r1 和 r2 关联。

示例 – 中间文档 – [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">文本 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">文本 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 特性,则 断行 算法 [UAX14] 定义的建议适用于 对该文档实例的内容执行行布局时。

11.3.2.2 行堆叠

本小节为非规范性内容。

块推进 维度的计算,其对象为 行区域,通常称为行高, 可能特别复杂,尤其是在应用多个字体族、字号、字体 样式、 字体资源以及高级文本格式化特性时, 例如注音、文本着重以及 文本组合(纵中横)。

此过程产生的每个行区域都会被堆叠, 可以 垂直堆叠在前一个行区域下方(在 水平行的上下文中),或 水平堆叠在前一行的一侧(在垂直行的上下文中)。 如[流转换]过程的步骤 (5) 所规定, TTML 使用 line-height 行堆叠策略,其正式定义 见 [XSL-FO 1.1] §4.5, 下文使用其中的术语和概念。

使用此策略时,行区域的尺寸 对应于 为该特定行区域计算的 per-inline-height-rectangle 的尺寸, 该行区域的这些尺寸又由 以下两者求值得到:(1) expanded-nominal-requested-line-rectangle 的尺寸,它们对于 段落中的每个 行区域都相同,以及 (2) expanded-rectangle 的尺寸, 对象为每个行内区域子区域,其父区域为行区域,这些尺寸可能因 段落中每个行区域的每个行内 区域而异。

上文所述的短语行高不应与 样式属性的计算值混淆,该属性关联于 tts:lineHeight 属性。后者的值 用作计算参数,用于计算 应用于行区域和各个 行内区域的半行距, 它们分别作为以下计算的参数:(1) expanded-nominal-requested-line-rectangle 的尺寸, 对象为行区域,以及 (2) expanded-rectangle 的尺寸, 对象为行内区域子区域,其父区域为行 区域。 请特别注意,应用于行 区域的半行距与 应用于行内区域子区域的半行距, 该子区域属于 上述行区域,通常是不同的值,更多详细信息 见 [XSL-FO 1.1] §6.5.2(应用于行区域时)。对于给定的 行内区域,采用类似的处理方式,尽管这一点 未由 [XSL-FO 1.1] 明确指出,但可以从[CSS2] §10.8.1 的表述中推断出来。

总而言之,line-height 行堆叠策略所定义的行为, 其定义见 [XSL-FO 1.1] §4.5, 并由 TTML 采用,旨在与 [CSS2] 的行堆叠策略兼容,这意味着:

  • 当 tts:lineHeight 的计算值 在段落上为 normal 时,则 (1) 段落的每个 行区域恰好紧邻且不相交于 该段落的前一个 行区域,且 (2) 行 高, 对于段落的行区域,会根据 每个 行区域中带样式的内容而变化;

  • 当 tts:lineHeight 的计算值 在段落上为 指定的 <length> 时,则 段落的行区域彼此恰好紧邻, 但其内容矩形可能 (1) 在块 推进维度上占用的空间小于容纳其内容所需的空间, 在这种情况下,该内容可能与该段落的前一个行区域相交,或 (2) 在块 推进维度上占用的空间大于容纳其内容所需的空间。

注:

当以下任何高级文本格式化特性应用于某行的 内容时,可能对行高 进行额外调整:

  • 注音文本注释

  • 文本组合(纵中横)

  • 文本着重

  • (逐字形)字体错切

11.3.3 渲染模型

本节规定格式化后的 TTML 文档实例在渲染方面的某些细节。

11.3.3.1 绘制顺序

呈现 处理器采用的渲染顺序必须符合 [XSL-FO 1.1] §4.9 规定的渲染模型;此外, 还适用以下约束:

  • 由注音文本 span 生成的、作为行区域后代的行内区域, 其渲染 晚于该行区域的其他行内区域后代;

  • 块区域或行内区域的固有标记,若该区域由 image 元素生成,则由 关联图像的光栅组成。

注:

由 image 元素产生的标记, 若该元素被 tts:backgroundImage 属性引用,则不包含在块区域或行内区域的固有 标记中,即,它们属于区域的背景 标记。

12 时序

本节规定核心 词汇目录中的时序内容,其中 时序应理解为一个可分离的信息层,它应用于 内容,并表示作者对于 该内容在时间上如何呈现的意图。

12.1 时序元素词汇

未定义用于核心 词汇目录的时序相关元素词汇。

12.2 时序属性词汇

本节定义以下基本时序属性,用于定时元素:

此外,本节定义 12.2.4 timeContainer 属性,用于定时 元素, 这些元素同时充当时间容器。

12.2.1 begin

begin 属性用于指定起 点,所属时间区间与定时元素关联。 如果 指定了 begin 属性,则其值必须遵循 <time-expression> 的规定,其定义见12.3.1 <time-expression>。

时间区间的起点包含在 区间中;即,该区间左闭。

begin 属性的语义采用 [SMIL 3.0] §5.4.3 中的定义, 同时考虑本规范定义的任何覆盖语义。

注:

如 [SMIL 3.0] §5.4.3 所定义, 如果未在定时元素上显式指定 begin 属性, 则该属性的默认值由最近的时间容器 祖先决定;但是,在 TTML 中,该祖先要么是 并行时间容器,要么是顺序时间容器,两者都应用默认 值 0s。

12.2.2 dur

dur 属性用于指定 与定时元素关联的时间区间的持续时间。如果 指定了该属性, 则 dur 属性的值必须遵循 <time-expression> 的规定,其定义见12.3.1 <time-expression>。

注:

当 <time-expression> 的 clock-time 形式 用于 dur 属性时,它应被解释为 两个隐含时钟时间表达式之间的差。

当文档实例指定使用 smpte 时间基准和 discontinuous 标记 模式时,不得在任何 元素上指定(格式良好的)dur 属性。

dur 属性的语义采用 [SMIL 3.0] §5.4.3 中的定义, 同时考虑本规范定义的任何覆盖语义。 此处有意与 [SMIL 3.0] §5.4.3 不同,允许 dur 属性的值为零 (0s)。

注:

在本规范支持的 [SMIL 3.0] 语义子集 上下文中,同时指定 end 和 dur 属性的元素,其活动持续时间等于以下两者中的较小值: dur 属性的值,以及 end 属性的值与元素开始时间之间的差。

12.2.3 end

end 属性用于指定终点, 所属时间区间与定时元素关联。如果 指定了 end 属性,则其值必须遵循 <time-expression> 的规定,其定义见12.3.1 <time-expression>。

时间区间的终点不包含在 区间中;即,该区间右开。

非空活动 时间区间的呈现效果包含这样一帧:它紧接在某一帧之前, 后者(或时钟滴答)等于或紧随终点指定的 时间,但呈现效果不会延伸到后者这一帧(或时钟滴答)中。

注:

例如,如果活动区间为 [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, 则子元素的时间区间被视为 并行应用,即,在时间上同时发生。此外, 每个子元素的时间区间指定被视为相对于 容器元素实例的时间区间。为了确定 [SMIL 3.0] 的 endsync 语义,其对象为 par 时间容器,应用默认值 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 时间表达式语义定义的语义。

注:

请参阅 7.2.5 ttp:frameRate、 7.2.9 ttp:subFrameRate、 7.2.10 ttp:tickRate 和 7.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"                 // 小时
  | "m"                 // 分钟
  | "s"                 // 秒
  | "ms"                // 毫秒
  | "f"                 // 帧
  | "t"                 // 时钟滴答

<time-expression> 不得包含 <whitespace> 字符, 除非由前述语法定义中出现的 <lwsp> 非终结符 明确允许。

如果 <time-expression> 采用 clock-time 形式表示,则在表示小于 10 的小时、 分钟、秒和帧时使用前导零。分钟被限制为 [0…59],而秒(包括任何小数部分)被限制为闭 区间 [0,60],其中值 60 仅适用于闰秒。 除非 ttp:timeBase 为 clock, 且 ttp:clockMode 为 local 或 utc, 否则不推荐使用 60 秒这一特殊值来表示 闰秒。 执行呈现处理时,如果此特殊值出现在其他时间 基准或时钟模式中, 则必须将其解释为如同指定了值 59。

如果 <time-expression> 采用 clock-time 形式表示,并指定了 frames 项, 则该项的值必须限制在区间 [0…F-1] 内,其中 F 是帧率, 由 ttp:frameRate 参数确定,其定义 见 7.2.5 ttp:frameRate。 以下情况被视为错误:指定了 frames 项或 f(帧)单位,而适用的时间基准为 clock。

如果 <time-expression> 采用 clock-time 形式表示,并 指定了 sub-frames 项,则该项的值必须限制在 区间 [0…S-1] 内,其中 S 是 子帧率,由 ttp:subFrameRate 参数确定,其定义见 7.2.9 ttp:subFrameRate。 以下情况被视为错误: 指定了 sub-frames 项, 而适用的时间基准为 clock。

以下情况被视为错误: <time-expression> 的 wallclock-time 形式 用于文档实例中,而控制它的时间 基准不是 clock。

如果控制时间基准的计算值为 smpte,则 (1) 不推荐使用 <time-expression> 的 offset-time 形式,且 (2) 不推荐在 clock-time 形式的 <time-expression> 中使用 秒的小数 fraction 分量, 这种用法已被 弃用。

注:

上面规定的 <time-expression> 语法明确排除 时区信息的表示。如果作者 希望将 <time-expression> 与特定时区关联,则可以 将时间表达式转换为 UTC,并指定 使用 utc 时钟模式,相关内容见7.2.2 ttp:clockMode。

12.4 时序语义

时间包含、持续时间和区间的语义,定义于 [SMIL 3.0],适用于解释同名的定时元素和时序 词汇,它们由本规范定义,并受以下 约束:

  • 匿名 span 的隐式持续时间定义 如下:如果 匿名 span 的父时间容器是并行 时间容器,则 隐式持续时间等效于 indefinite 持续时间值,其定义见 [SMIL 3.0];如果匿名 span 的 父时间容器是顺序时间容器,则隐式持续时间 等效于零。

  • animate、audio、br、 image 或 set 元素的隐式持续时间定义为: 与将该元素视为匿名 span 时相同。

  • 具有非混合内容的 span 元素,即仅包含 #PCDATA 文本节点, 其隐式持续时间定义为与将该 span 元素视为匿名 span 时相同。

  • body、div、p 或具有混合内容的 span 元素的隐式持续时间根据以下内容确定:(1) 该元素是并行还是顺序时间容器,(2) 默认的 endsync 语义,定义见上文12.2.4 timeContainer, 以及 (3) [SMIL 3.0] 应用于这些时间 容器的语义。

  • region 元素的隐式持续时间定义为 等效于 indefinite 持续时间值,其定义见 [SMIL 3.0]。

  • 如果控制时间基准为 clock,则时间 表达式被视为等效于基于墙上时钟的 时序,定义见 [SMIL 3.0],且适用 I.1 时钟时间基准的特定语义。

  • 如果控制时间基准为 media,则时间 表达式被视为等效于基于偏移的时序, 定义见 [SMIL 3.0],且适用 I.2 媒体时间基准的特定语义。

  • 如果控制时间基准为 smpte,则时间 表达式被视为等效于基于偏移的 时序或基于事件的时序,定义见 [SMIL 3.0],且 适用 I.3 SMPTE 时间基准的特定语义。

12.4.1 匿名 span 时序

本小节为非规范性内容。

以下示例演示匿名 span 的时序语义,它们是顺序和 并行时间容器的子元素。 词语你好和喂都包含在匿名 span 中,这些匿名 span 是顺序 时间容器(p 元素)的子元素。因此,你好和喂 都不会显示, 因为这些匿名 span 的隐式持续时间为 0。相 比之下,包含词语的匿名 span,该词语为 美好的, 以及包含词语一天的最内层 span,都是某个 具有并行时间容器 语义的元素(最外层 span 元素)的子元素。 因此,美好的和一天都会显示,因为隐式持续时间, 对于它们各自的父匿名 span 和 span 元素,均为无限期,导致 其 span、p、div 和 body 祖先的隐式持续时间也 为无限期。

示例片段 – 顺序和并行时间容器中匿名 span 的 时序
...
<body>
  <div>
    <p timeContainer="seq">
      你好
      <span>美好的 <span>一天</span></span>
      喂
    </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")
  {任意可动画化的样式属性}
  内容: Metadata.class*
</animate>

样式属性直接作为 animate 元素的目标, 其中动画值的列表(序列) 遵循 <animation-value-list> 语法,且每个 组成部分 <animation-value> 遵循 所指定属性的 语法。

以不可动画化样式为目标 被视为错误,且必须在 呈现处理时忽略。

注:

与 [SVG 1.1] §19.2.12 不同,此处定义的单个 animate 元素可以用于 对一组目标样式 属性执行连续动画,而不局限于以 单个样式属性为目标。 在 [SVG 1.1] 中,这需要使用多个 animate 元素,而不是单个 animate 元素。

此外,通过直接指定动画样式属性和关键值, 无需使用 from、 to、by 或 values 动画值属性,它们定义 于 [SVG 1.1] §19.2.9。

animate 元素及其上述属性的语义 定义为 [SVG 1.1] §19.2 所规定的语义,并按 以下内容加以约束或进一步说明:

  1. animate 元素所针对的属性以及要应用 于这些属性的值, 通过直接使用样式属性指定; 因此,attributeName、from、to、 by 和 values 属性,定义于 [SVG 1.1],不受此版本 TTML 的支持。

    注:

    使用直接命名的样式属性,其效果等效于指定 多个 [SVG 1.1] animate 元素, 其中每个元素都指定 attributeName 和 values 属性。

    注:

    例如,指定 tts:color="red;green;blue" 被视为等效于指定 attributeName="tts:color" 和 values="red;green;blue",如 [SVG 1.1] 中所用。

  2. 如果未指定 calcMode 属性,则应用 calcMode 值 linear。

    注:

    此隐含值对应于默认值,其规定见 [SVG 1.1] §19.2.9。

  3. 如果目标可动画化样式能够进行离散动画, 但不能进行连续动画,则以下情况被视为错误: calcMode 属性的应用值不是 discrete,在这种情况下, 目标可动画化样式必须在 呈现处理时忽略。

  4. 如果未指定 fill 属性,则应用 fill 值 remove。

    注:

    此隐含值对应于默认值,其规定见 [SVG 1.1] §19.2.9。

  5. 如果指定了 keyTimes 属性,且 calcMode 的计算值为 "paced", 则此用法必须被视为 错误,且该动画必须在 呈现处理时忽略。

  6. 如果指定了 keyTimes 属性,且 calcMode 的计算值不是 "paced", 则时间分量的数量, 指定于 keyTimes 属性中,必须与 每个动画属性指定的动画值数量匹配。

    注:

    无论单个还是多个属性作为 同一个 animate 元素的目标,都适用此约束,这进一步意味着, 以多个属性为目标时,每个动画属性的值都必须 在其 <animation-value-list> 中指定相同数量的值。

    注:

    例如,下文的第一个 animate 元素有效: 动画属性具有 3 个值, 而第二个和第三个无效:对于第二种情况,动画 属性具有 2 个值,但指定了 3 个关键时间; 对于第三种情况,第一个动画属性具有 2 个值,第二个 动画属性具有 4 个值,但指定了 3 个关键时间:

    <!-- 关键时间匹配的有效单属性动画 -->
    <animate xml:id="a1" keyTimes="0;0.2;1" tts:color="red;green;blue"/>
    
    <!-- 关键时间不匹配的无效单属性动画 -->
    <animate xml:id="a2" keyTimes="0;0.2;1" tts:color="red;green"/>
    
    <!-- 关键时间不匹配的无效多属性动画 -->
    <animate xml:id="a3" keyTimes="0;0.2;1"
      tts:color="red;green" tts:backgroundColor="cyan;magenta;yellow;black"/>
    
  7. 如果未指定 keyTimes 属性,且 calcMode 的计算值不是 "paced", 则应用一个 keyTimes 值,它对应于将 指定的动画值以均匀(线性)间隔分布在 动画的简单持续时间内。

    注:

    例如,如果动画样式指定为 tts:color="red;green;blue",则隐含值, 对于 keyTimes, 为 "0;0.5;1"。

  8. 如果指定了 keySplines 属性,且 calcMode 的计算值不是 "spline", 则此用法必须被视为 错误,且该动画必须在 呈现处理时忽略。

  9. 如果指定了 keySplines 属性,且 calcMode 的计算值为 "spline", 则控制分量的数量, 指定于 keySplines 属性中,必须比 时间分量的数量少一,后者位于 keyTimes 属性的计算值中。

  10. 如果未指定 keySplines 属性,且 calcMode 的计算值为 "spline", 则此用法必须被视为 错误,且该动画必须在 呈现处理时忽略。

  11. 如果未指定 repeatCount 属性,则应用 repeatCount 值 1。

  12. additive 属性,定义于 [SVG 1.1] §19.2.10, 不受此 版本 TTML 的支持;因此,在其缺省时,应用此 属性的 "replace" 值的语义。

  13. accumulate 属性,定义于 [SVG 1.1] §19.2.10,不受此 版本 TTML 的支持;因此,在其缺省时,应用此 属性的 "none" 值的语义。

使用 animate 元素对内容 样式进行动画处理的示例如下:

示例片段 – 内容样式动画
...
<p dur="5s">
<animate tts:color="yellow;red;green;blue;yellow"/>
颜色连续变化的文本!
</p>
...

注:

在上例中,内容“颜色 连续变化的文本!”的前景色在 5 秒内连续地从黄色变为红色,再变为绿色, 然后变为 红色,最后回到黄色,此后动画效果被移除, 并恢复原始颜色(因为 fill 默认为 "remove")。

使用 animate 元素对区域 样式进行动画处理的示例如下:

示例片段 – 区域样式动画
<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>

注:

在上例中,区域 r1 最初设置为 0% 不透明度, 即完全透明,然后在一秒 区间内淡入至 100% 不透明度,即完全不透明。不透明度在随后五秒内保持 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 元素所针对的样式属性 直接通过使用 TT 样式命名空间中的属性,或不属于任何 TT 命名空间的命名空间中的属性来指定,其中 单个目标动画(关键)值 遵循 <animation-value> 语法。

以不可动画化样式为目标 被视为错误,且必须在 呈现处理时忽略。

注:

与 [SVG 1.1] §19.2.13 不同,此处定义的单个 set 元素 可以用于 对一组目标样式 属性执行离散动画,而不局限于以 单个样式属性为目标。 在 [SVG 1.1] 中,这需要使用多个 set 元素,而不是单个 set 元素。

除了下文列出的约束或差异外,set 元素及其 上述属性的语义定义为 [SVG 1.1] §19.2.13 所规定的语义:

  1. set 元素所针对的属性以及要 应用于这些属性的离散值, 通过直接使用样式属性指定(而 不是使用 SVG 的 attributeName 和 to 属性)。

    注:

    例如,指定 tts:color="red" 被视为等效于指定 attributeName="tts:color" 和 to="red",如 [SVG 1.1] 中所用。

  2. 如果未指定 fill 属性,则应用 fill 值 remove。

使用 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"/>
颜色闪烁的文本!
</p>
...

注:

在上例中,内容“颜色 闪烁的文本!”的前景色在 5 秒内从黄色变为红色,再变为绿色,再变为 红色,最后回到黄色。

使用 set 元素对区域 样式进行动画处理的示例如下:

示例片段 – 区域样式动画
<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 行的单元格网格。随后,一个区域 r1, 尺寸为 24 列、2 行,被定位在 根容器区域中,其位置随 时间变化,以便 产生移动区域的效果,这种效果可能有助于 避免字幕遮挡底层视频中的人物。

注:

set 元素的语义 基于 [SVG 1.1] §19.2.13 中的定义,而该定义又基于 [SMIL 3.0] §12。

13.2 动画属性词汇

本节定义 13.2.1 animate 属性, 用于内容元素 和某些布局元素。

13.2.1 animate

animate 属性用于 引用一个或多个元素,它们属于 Animation.class 元素组, 每个元素定义一个特定的外置 动画。

animate 属性可以由以下 元素类型的实例指定:

如果指定了 animate 属性,则其值必须 遵循 [XML Schema Part 2] 定义的 IDREFS 数据类型, 见 §3.3.10;此外,每个 IDREF 都必须引用一个属于 Animation.class 元素组的元素,该元素具有 animation 祖先元素。

给定 IDREF 在 animate 属性的值中 不得出现超过一次。

对于每个外置动画元素 A, 若其由 animate 属性引用,该属性属于元素 E,则执行以下步骤(按指定 IDREF 的顺序):

  1. 创建深副本 A',复制自 A;

  2. 将 xml:id 属性从 A' 中移除;

  3. 将 A' 插入 [children] 信息项属性中,该属性属于 E,使 A' 成为子元素子序列中的最后一个元素,该子序列对应于 Animation.class* 通配符, 位于 E 的内容模型中。

注:

外置动画的语义实质上构成指定内联 动画的简便方式,在 多个引用元素使用同一个动画时很有用。

注:

另请参阅允许使用 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> 表达式用于指定贝塞尔控制点列表,以控制 动画的 变化节奏,其中每对值以 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
  : <non-negative-integer>

<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
  : <non-negative-integer>

<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
  : <non-negative-integer>

<repeat-count> 表达式的语义采用 [SVG 1.1] §19.2.8 中的定义。

14 元数据

本节规定核心词汇目录中的元数据 内容,其中 元数据应理解为一个可分离的信息层,它应用于 参数、内容、 样式、布局、时序,甚至元数据本身,其中 元数据所表示的信息采用以下两种形式之一:(1) 由本 规范定义、供文档实例标准化使用的元数据,以及 (2) 在本规范 范围之外定义的任意元数据,其用法和 语义完全取决于应用程序对 TTML 内容的使用。

本规范未定义元数据的任何呈现语义;因此,符合要求的 呈现处理器可以忽略所有元数据内容。

注:

虽然本规范未赋予元数据任何呈现语义,但本规范的超集 配置文件 可以这样做,在这种情况下,此类配置文件定义的任何依赖元数据的呈现语义 均被视为 超出本规范的范围。

14.1 元数据元素词汇

14.1.1 metadata 元素用作 对元数据信息进行分组的通用容器元素。

此外,以下元素均定义于 TT 元数据命名空间中, 为预期会在文档实例中普遍使用的元数据 提供标准表示:

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 元数据命名空间中的任意属性}
  内容: (Data.class|{TT 元数据命名空间中的任意元素})*
</metadata>

注:

必须在特定元数据项所处的 上下文中评估其含义。核心词汇目录允许 任意数量的 metadata 子元素出现在任意 内容元素类型中。请参阅具体的元素 词汇定义,了解适用于此类 用法的约束。

以下示例说明文档元数据的用法。

示例片段 – 文档元数据
...
<head>
  <metadata xmlns:ttm="http://www.w3.org/ns/ttml#metadata">
    <ttm:title>文档元数据示例</ttm:title>
    <ttm:desc>本文档使用文档元数据。</ttm:desc>
  </metadata>
</head>
...

以下示例说明元素元数据的用法。

示例片段 – 元素元数据
...
<div>
  <metadata xmlns:ttm="http://www.w3.org/ns/ttml#metadata">
    <ttm:title>第 6 章 – 夏洛克·福尔摩斯进行演示</ttm:title>
    <ttm:desc>福尔摩斯向华生展示凶手如何从窗户进入。</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>外部元素元数据示例</dc:title>
  <dc:description>使用外部命名空间中的元素表达元数据。</dc:description>
  <dc:format xsi:type="dcterms:IMT">application/ttml+xml</dc:format>
</metadata>
...

注:

在上例中,使用都柏林核心 元数据词汇定义的多个元素表达文档级元数据。

注:

在 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>

agent 属性位于 ttm:actor 元素上,该属性必须 引用一个有意义的 ttm:agent 元素,该元素表示 扮演某个人物角色的主体。

通过 agent 属性从 ttm:actor 元素引用其 父 ttm:agent 元素的用法已弃用,而且, 本规范未定义此类循环引用链的 语义。

注:

如果实现沿着此类 主体引用的循环链进行处理,则建议检测这种 情况,并终止对主体引用的进一步解引用, 以避免无限循环。

注:

对于演员扮演自己的情况, 例如史蒂夫·库根在《旅途》中扮演史蒂夫·库根, 预期做法是使用两个 ttm:agent 元素。第一个 元素(对应于史蒂夫·库根本人)使用一个 type 属性,其值为 person,而 第二个元素(对应于史蒂夫·库根这个角色)使用 (i) 一个 type 属性,其值为 character,以及 (ii) 一个 ttm:actor 子元素,该子元素引用第一个 ttm:agent 元素。

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 元素的子元素,或指定为 metadata 元素的子元素,而该元素又是 head 元素的子元素。

注:

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">康纳利</ttm:name>
      <ttm:name type="given">托马斯·肖恩</ttm:name>
      <ttm:name type="alias">肖恩</ttm:name>
      <ttm:name type="full">托马斯·肖恩·康纳利爵士</ttm:name>
    </ttm:agent>
    <ttm:agent xml:id="bond" type="character">
      <ttm:name type="family">邦德</ttm:name>
      <ttm:name type="given">詹姆斯</ttm:name>
      <ttm:name type="alias">007</ttm:name>
      <ttm:actor agent="connery"/>
    </ttm:agent>
  </head>
  <body>
    <div>
      ...  
      <p ttm:agent="bond">我四处奔走,算是持照的问题解决专家。</p>
      ...  
    </div>
  </body>
</tt>

注:

在上例中,定义了两个主体:真实的(个人)主体肖恩· 康纳利,以及虚构的(角色)主体詹姆斯·邦德, 后者通过一个 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 元素和 内容元素:

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.0] 产生式 [4a]

同一个 role 标记,R,在 ttm:role 属性的值中不应出现超过一次。

注:

此约束旨在避免使用冗余的角色标记。

注:

ttm:role 的所有不以 x- 前缀开头的值均保留供未来标准化使用。

注:

如果使用带有自定义 x- 前缀的 ttm:role 形式, 则建议同时使用组织专有的中缀, 以防止冲突。例如,x-example-org-custom-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

如果项名称表达式采用限定名(xsd:QName)的形式, 则该限定名的前缀必须已在命名空间声明中声明, 声明方式应符合 [XML Namespaces 1.0] 的规定。

<item-name> 的所有不采用限定名(xsd:QName)形式的值, 要么由本规范定义,要么保留供 W3C 未来标准化使用。

注:

预期本规范定义的所有项名称均为非限定名(不带 前缀),而由 外部规范定义的项名称均为限定名(带有前缀)。

注:

请参阅 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] 不同,此具名 元数据项的文本内容并非用于在引用它的元素的 主要内容(相对于替代内容) 无法呈现时,代替该元素呈现;但是,此替代文本内容可以由 辅助技术使用。

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 紧凑语法 (RNC) 模式

基于 Relax NG 紧凑语法 (RNC) [RELAX NG] 的 TTML 内容模式可从 ZIP 归档获取。在定义本规范所规定的 定时文本标记语言内容的 有效性时,此模式应视为非规范性的。 特别是,TTML 内容的形式有效性 由3.1 文档符合性定义。

C.2 XML 模式定义 (XSD) 模式

基于 W3C XML 模式定义 (XSD) [XML Schema Part 1] 的 TTML 内容模式可从 ZIP 归档获取。在定义本规范所规定的 定时文本标记语言内容的 有效性时,此模式应视为非规范性的。 特别是,TTML 内容的形式有效性 由3.1 文档符合性定义。

D 媒体类型注册

本附录已从本规范中移除。

E 特性

本附录是规范性的。

本附录规定:(1) 一组特性指定符。每个指定符 指示本规范定义的一个或多个语法和(或)语义 特性。此外,(2) 对每个指定的特性,规定该特性是必需的还是可选的, 适用于符合以下要求的TTML 内容处理器: 3.2.2 转换处理器的一致性或 3.2.3 呈现处理器的一致性。

注:

称TTML处理器针对特性指定符实现转换语义或 实现呈现语义,其中该特性指定符为F, 是指它满足本附录的要求,这些要求适用于 特性指定符F的定义中分别涉及转换处理或 呈现处理的部分。

注:

如果以下特性指定符的定义未将其范围限定为特定元素类型或上下文, 则支持该(指定的)特性, 意味着在所有允许的使用上下文中支持该特性。

例如,支持#length-root-container-relative 特性,意味着支持在任意<length> 表达式中使用该特性, 除非另有规定禁止这种使用。

注:

如果处理器实现不支持某个特性的语义, 但该特性的 语法表达式是该实现已知的,则建议该 实现能够解析该表达式,同时忽略该表达式中不受支持的组成部分的语义。

例如,如果支持#textEmphasis-minimal, 但不支持#textEmphasis-color, 则对于tts:textEmphasis的值, 其中包含<emphasis-color> 组成部分的值, 应当进行解析,同时忽略该不受支持的组成部分的语义 (但不忽略该属性值中其他 受支持的组成部分的语义)。

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.0] Production [4a]

本规范未定义的所有feature-designation值, 均保留用于将来的标准化。

以下各节定义所有特性指定符。这些指定符 表示为相对URI(片段标识符), 以TT特性命名空间的基URI为基准。

如果本节中特性指定符的定义引用了同一 特性指定符在 [TTML1]中的定义,并且后者(被引用的定义)使用了“所有已定义的 值”这一表述,则这些 值由[TTML1]中定义的所有值构成。而如果 “所有已定义的值”这一表述 直接出现在下文中,则这些值由本规范中定义的所有值构成。

注:

本节中带有-version-2后缀的特性指定符, 是新定义的指定符, 定义于TTML规范的本(第2)版,即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-minimal 特性,是指它能够识别并转换在以下条件下使用的animate元素的语义: 值discrete和linear用于 calcMode属性。

TTML 呈现处理器支持 #animate-minimal 特性,是指它实现了呈现语义支持, 适用于上面列出的相同词汇。

注:

支持在calcMode属性中使用 discrete和linear值, 意味着还支持keyTimes属性。

注:

支持#animate-minimal特性,并不意味着支持以下任何 特性: #animate-fill、 #animate-paced、 #animate-repeat或 #animate-spline。

E.1.3 #animate-fill

TTML 转换处理器支持 #animate-fill 特性,是指它能够识别并转换fill 属性的语义,该属性是 animate元素的属性。

TTML 呈现处理器支持 #animate-fill 特性,是指它对上面列出的相同词汇实现了呈现语义支持。

E.1.4 #animate-paced

TTML 转换处理器支持 #animate-paced 特性,是指它能够识别并转换在以下条件下使用的animate元素的语义: 值paced用于calcMode属性。

TTML 呈现处理器支持 #animate-paced 特性,是指它实现了呈现语义支持, 适用于上面列出的相同词汇。

E.1.5 #animate-repeat

TTML 转换处理器支持 #animate-repeat 特性,是指它能够识别并转换以下属性的语义: repeatCount属性,该属性是 animate元素的属性。

TTML 呈现处理器支持 #animate-repeat 特性,是指它对上面列出的相同词汇实现了呈现语义支持。

E.1.6 #animate-spline

TTML 转换处理器支持 #animate-spline 特性,是指它能够识别并转换在以下条件下使用的animate元素的语义: 值spline用于calcMode属性。

TTML 呈现处理器支持 #animate-spline 特性,是指它实现了呈现语义支持, 适用于上面列出的相同词汇。

注:

支持在calcMode属性中使用spline值, 意味着还支持 以下属性:keySplines属性。

E.1.7 #animation

TTML内容处理器支持#animation 特性,是指它支持#animation特性,符合[TTML1]中§D.1.1的定义。

注:

支持#animation特性,在功能上 等同于支持#set特性。

内容配置文件要求或允许使用#animation 特性,同时禁止使用的对象是 #set特性,是一种错误。

E.1.8 #animation-out-of-line

TTML 转换处理器支持 #animation-out-of-line 特性,是指它能够识别并转换以下词汇,其定义见13 动画:

并且支持以下属性,该属性定义于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 转换处理器支持 #audio 特性,是指它能够识别并转换以下词汇, 这些词汇定义于9 嵌入内容:

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 转换处理器支持 #backgroundClip特性,是指它能够识别并转换所有已定义的值, 这些值所属的属性是tts:backgroundClip 属性。

TTML 呈现处理器支持 #backgroundClip特性,是指它实现了呈现语义支持, 适用于所有已定义的值,这些值所属的属性是tts:backgroundClip 属性。

E.1.16 #backgroundColor

TTML内容处理器支持#backgroundColor 特性,是指它支持#backgroundColor特性,符合[TTML1]中§D.1.2的定义。

注:

支持#backgroundColor特性,在功能上 等同于支持以下特性:

内容配置文件 要求或允许使用#backgroundColor特性,同时禁止使用以下任一 特性,是一种错误:#backgroundColor-block、 #backgroundColor-inline或 #backgroundColor-region。

E.1.17 #backgroundColor-block

TTML内容处理器支持#backgroundColor-block 特性,是指它支持#backgroundColor-block特性,符合[TTML1]中§D.1.3的定义。

E.1.18 #backgroundColor-inline

TTML内容处理器支持#backgroundColor-inline 特性,是指它支持#backgroundColor-inline特性,符合[TTML1]中§D.1.4的定义。

E.1.19 #backgroundColor-region

TTML内容处理器支持#backgroundColor-region 特性,是指它支持#backgroundColor-region特性,符合[TTML1]中§D.1.5的定义。

E.1.20 #backgroundExtent

TTML 转换处理器支持 #backgroundExtent特性,是指它能够识别并转换所有已定义的值, 这些值所属的属性是tts:backgroundExtent 属性。

TTML 呈现处理器支持 #backgroundExtent特性,是指它实现了呈现语义支持, 适用于所有已定义的值,这些值所属的属性是tts:backgroundExtent 属性。

E.1.21 #backgroundImage

TTML 转换处理器支持 #backgroundImage特性,是指它能够识别并转换所有已定义的值, 这些值所属的属性是tts:backgroundImage 属性。

TTML 呈现处理器支持 #backgroundImage特性,是指它实现了呈现语义支持, 适用于所有已定义的值,这些值所属的属性是tts:backgroundImage 属性。

E.1.22 #backgroundOrigin

TTML 转换处理器支持 #backgroundOrigin特性,是指它能够识别并转换所有已定义的值, 这些值所属的属性是tts:backgroundOrigin 属性。

TTML 呈现处理器支持 #backgroundOrigin特性,是指它实现了呈现语义支持, 适用于所有已定义的值,这些值所属的属性是tts:backgroundOrigin 属性。

E.1.23 #backgroundPosition

TTML 转换处理器支持 #backgroundPosition特性,是指它能够识别并转换所有已定义的值, 这些值所属的属性是tts:backgroundPosition 属性。

TTML 呈现处理器支持 #backgroundPosition特性,是指它实现了呈现语义支持, 适用于所有已定义的值,这些值所属的属性是tts:backgroundPosition 属性。

E.1.24 #backgroundRepeat

TTML 转换处理器支持 #backgroundRepeat特性,是指它能够识别并转换所有已定义的值, 这些值所属的属性是tts:backgroundRepeat 属性。

TTML 呈现处理器支持 #backgroundRepeat特性,是指它实现了呈现语义支持, 适用于所有已定义的值,这些值所属的属性是tts:backgroundRepeat 属性。

E.1.25 #base

TTML 转换处理器支持 #base 特性,是指它能够识别并转换xml:base 属性,该属性应用于6.1 配置文件元素词汇中定义的以下词汇:

TTML 呈现处理器支持 #base 特性,是指它实现了呈现语义支持, 适用于上面列出的相同词汇。

E.1.26 #base-general

TTML 转换处理器支持 #base-general 特性,是指它能够识别并转换xml:base 属性,该属性应用于6.1 配置文件元素词汇中定义且允许该属性的所有词汇,但以下词汇除外:

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内容处理器支持#bidi 特性,是指它支持#bidi特性,符合[TTML1]中§D.1.6的定义。

注:

支持#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 转换处理器支持 #border-block特性,是指它能够识别并转换所有已定义的值, 这些值所属的属性是tts:border 属性,该属性应用于内容元素, 这些元素在呈现处理期间 生成块区域。

TTML 呈现处理器支持 #border-block特性,是指它实现了呈现语义 支持,适用于tts:border 属性,该属性所应用的内容元素生成 一个 块区域。

E.1.32 #border-inline

TTML 转换处理器支持 #border-inline特性,是指它能够识别并转换所有已定义的值, 这些值所属的属性是tts:border 属性,该属性应用于内容元素, 这些元素在呈现处理期间 生成行内区域。

TTML 呈现处理器支持 #border-inline特性,是指它实现了呈现语义 支持,适用于tts:border 属性,该属性所应用的内容元素生成 一个 行内区域。

E.1.33 #border-radii

TTML处理器支持#border-radii特性, 是指它支持以下特性:

内容配置文件要求或允许使用#border-radii 特性,同时禁止使用以下任一 特性,是一种错误: #border-radii-1或 #border-radii-2。

E.1.34 #border-radii-1

TTML 转换处理器支持 #border-radii-1特性,是指它能够识别并转换以下值: 由1个组成部分构成的 <border-radii>值表达式的值, 这些值在tts:border 属性中指定。

TTML 呈现处理器支持 #backgroundClip特性,是指它对以下值实现了呈现语义支持: 由1个组成部分构成的 <border-radii>值表达式的值, 这些值在tts:border 属性中指定。

E.1.35 #border-radii-2

TTML 转换处理器支持 #border-radii-2特性,是指它能够识别并转换以下值: 由2个组成部分构成的 <border-radii>值表达式的值, 这些值在tts:border 属性中指定。

TTML 呈现处理器支持 #backgroundClip特性,是指它对以下值实现了呈现语义支持: 由2个组成部分构成的 <border-radii>值表达式的值, 这些值在tts:border 属性中指定。

E.1.36 #border-region

TTML 转换处理器支持 #border-region特性,是指它能够识别并转换所有已定义的值, 这些值所属的属性是tts:border 属性,该属性应用于region元素。

TTML 呈现处理器支持 #border-region特性,是指它实现了呈现语义 支持,适用于tts:border 属性应用于region元素的情况。

E.1.37 #bpd

TTML 转换处理器支持 #bpd特性,是指它能够识别并 转换tts:bpd属性。

TTML 呈现处理器支持 #bpd特性,是指它实现了呈现语义支持, 适用于tts:bpd属性。

E.1.38 #cellResolution

TTML内容处理器支持#cellResolution 特性,是指它支持#cellResolution特性,符合[TTML1]中§D.1.7的定义。

E.1.39 #chunk

TTML 转换处理器支持 #chunk 特性,是指它能够识别并转换以下词汇, 这些词汇定义于9 嵌入内容:

TTML 呈现处理器支持 #chunk 特性,是指它实现了呈现语义支持, 适用于上面列出的相同词汇。

E.1.40 #clockMode

TTML内容处理器支持#clockMode 特性,是指它支持#clockMode特性,符合[TTML1]中§D.1.8的定义。

E.1.41 #clockMode-gps

TTML内容处理器支持#clockMode-gps 特性,是指它支持#clockMode-gps特性,符合[TTML1]中§D.1.9的定义。

E.1.42 #clockMode-local

TTML内容处理器支持#clockMode-local 特性,是指它支持#clockMode-local特性,符合[TTML1]中§D.1.10的定义。

E.1.43 #clockMode-utc

TTML内容处理器支持#clockMode-utc 特性,是指它支持#clockMode-utc特性,符合[TTML1]中§D.1.11的定义。

E.1.44 #color

TTML内容处理器支持#color 特性,是指它支持#color特性,符合[TTML1]中§D.1.12的定义。

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-fn-media特性,是指它支持 <media-function> 子表达式在<condition>值 表达式中的使用。

E.1.47 #condition-fn-parameter

TTML 内容处理器支持 #condition-fn-parameter特性,是指它支持 <parameter-function> 子表达式在<condition>值 表达式中的使用。

E.1.48 #condition-fn-supports

TTML 内容处理器支持 #condition-fn-supports特性,是指它支持 <supports-function> 子表达式在<condition>值 表达式中的使用。

E.1.49 #condition-primary

TTML 内容处理器支持 #condition-primary特性,是指它支持 <condition>值表达式,且该表达式 不包含以下内容: <condition-function>子表达式。

E.1.50 #content

TTML内容处理器支持#content 特性,是指它支持#content特性,符合[TTML1]中§D.1.13的定义。

E.1.51 #content-sizing

TTML 处理器支持 #content-sizing 特性,是指它 支持以下特性:

内容配置文件要求或允许使用 #content-sizing 特性,同时禁止使用以下任一 特性,是一种错误: #bpd 或 #ipd。

E.1.52 #contentProfiles

TTML 转换处理器 支持 #contentProfiles 特性,是指它 (1) 支持 非组合配置文件,并且 (2) 能够识别并转换:

  1. 以下配置文件属性词汇,其定义见 6.2 配置文件属性词汇:

  2. first 值,该值属于 ttp:inferProcessorProfileSource 属性,

  3. designator 属性,该属性位于 ttp:profile 元素上,

  4. content 值,属于 type 属性,该属性位于 ttp:profile 元素上,以及

  5. prohibited 值,属于 value 属性,该属性位于 ttp:feature 和 ttp:extension 元素上。

TTML 呈现处理器 支持 #contentProfiles 特性,是指它实现了呈现语义支持,适用于 上面列出的相同词汇。

注:

支持 #contentProfiles 特性,并不意味着支持 组合配置文件 或 嵌套配置文件。

E.1.53 #contentProfiles-combined

TTML 转换处理器 支持 #contentProfiles-combined 特性,是指它 (1) 支持 #contentProfiles 特性, (2) 支持 组合配置文件,并且 (3) 能够识别并 转换:

  1. 以下配置文件属性词汇,其定义见 6.2 配置文件属性词汇:

  2. combined 值,该值属于 ttp:inferProcessorProfileSource 属性,以及

  3. combine 属性,该属性位于 ttp:profile 元素上。

TTML 呈现处理器 支持 #contentProfiles-combined 特性,是指它实现了呈现语义支持,适用于 上面列出的相同词汇。

#contentProfiles-combine 特性是 #contentProfiles 特性的语法和语义扩展。

内容配置文件要求或允许使用 #contentProfiles-combine 特性, 同时禁止使用 #contentProfiles 特性,是一种错误。

注:

支持 #contentProfiles-combined 特性,并不意味着支持 嵌套配置文件。

E.1.54 #core

TTML 内容处理器支持 #core 特性,是指它支持 #core 特性,符合 [TTML1] 中 §D.1.14 的定义。

E.1.55 #data

TTML 转换处理器 支持 #data 特性,是指它能够识别并转换以下 词汇,其定义见 9 嵌入内容:

TTML 呈现处理器 支持 #data 特性,是指它实现了呈现语义支持,适用于 上面列出的相同词汇。

E.1.56 #direction

TTML 内容处理器支持 #direction 特性,是指它支持 #direction 特性,符合 [TTML1] 中 §D.1.15 的定义。

E.1.57 #disparity

TTML 转换处理器 支持 #disparity 特性,是指它能够识别并 转换 tts:disparity 属性。

TTML 呈现处理器 支持 #disparity 特性,是指它实现了呈现语义支持,适用于 tts:disparity 属性。

注:

支持 #disparity 特性,并不意味着支持 #region-implied-animation 特性。

E.1.58 #display

TTML 内容处理器支持 #display 特性,是指它支持 #display 特性,符合 [TTML1] 中 §D.1.16 的定义。

注:

支持 #display 特性,在功能上等同于支持 以下特性:

内容配置文件要求或允许使用 #display 特性,同时禁止使用以下任一 特性,是一种错误: #display-block、 #display-inline 或 #display-region。

E.1.59 #display-block

TTML 内容处理器支持 #display-block 特性,是指它支持 #display-block 特性,符合 [TTML1] 中 §D.1.17 的定义。

E.1.60 #display-inline

TTML 内容处理器支持 #display-inline 特性,是指它支持 #display-inline 特性,符合 [TTML1] 中 §D.1.18 的定义。

E.1.61 #display-inlineBlock

TTML 转换处理器 支持 #display-inlineBlock 特性,是指它能够识别并转换 inlineBlock 值,该值属于 tts:display 属性, 该属性应用于在呈现处理期间会生成 行内区域的 内容元素。

TTML 呈现处理器 支持 #display-inlineBlock 特性,是指它支持以下值的呈现语义: inlineBlock 值,该值属于 tts:display 属性, 该属性应用于在呈现处理期间会生成 行内区域的 内容元素。

E.1.62 #display-region

TTML 内容处理器支持 #display-region 特性,是指它支持 #display-region 特性,符合 [TTML1] 中 §D.1.19 的定义。

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 内容处理器支持 #displayAlign 特性,是指它支持 #displayAlign 特性,符合 [TTML1] 中 §D.1.20 的定义。

注:

支持 #displayAlign 特性,在功能上等同于支持 以下特性:

内容配置文件要求或允许使用 #displayAlign 特性,同时禁止使用以下任一 特性,是一种错误:#displayAlign-region 或 #displayAlign-relative。

E.1.65 #displayAlign-block

TTML 转换处理器 支持 #displayAlign-block 特性,是指它实现了转换语义 支持,适用于 tts:displayAlign 属性,该属性应用于 内容元素,这些元素会在 呈现处理期间生成块区域。

TTML 呈现处理器 支持 #displayAlign-block 特性,是指它实现了呈现语义 支持,适用于 tts:displayAlign 属性,该属性应用于 内容元素,这些元素生成 块区域。

E.1.66 #displayAlign-justify

TTML 转换处理器 支持 #displayAlign-justify 特性,是指它能够识别并 转换 justify 值,该值属于 tts:displayAlign 属性。

TTML 呈现处理器 支持 #displayAlign-justify 特性,是指它实现了呈现语义支持,适用于 justify 值, 该值属于 tts:displayAlign 属性。

E.1.67 #displayAlign-region

TTML 转换处理器 支持 #displayAlign-region 特性,是指它实现了转换语义 支持,适用于 tts:displayAlign 属性应用于 region 元素的情况。

TTML 呈现处理器 支持 #displayAlign-region 特性,是指它实现了呈现语义 支持,适用于 tts:displayAlign 属性应用于 region 元素的情况。

E.1.68 #displayAlign-relative

TTML 转换处理器 支持 #displayAlign-relative 特性,是指它能够识别并 转换 before、center 和 after 值,这些值属于 tts:displayAlign 属性。

TTML 呈现处理器 支持 #displayAlign-relative 特性,是指它实现了呈现语义 支持,适用于 before、center 和 after 值,这些值属于 tts:displayAlign 属性。

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 转换处理器 支持 #displayAspectRatio 特性,是指它能够识别并 转换 ttp:displayAspectRatio 属性。

TTML 呈现处理器 支持 #displayAspectRatio 特性,是指它实现了呈现语义支持, 适用于 ttp:displayAspectRatio 属性。

E.1.71 #dropMode

TTML 内容处理器支持 #dropMode 特性,是指它支持 #dropMode 特性,符合 [TTML1] 中 §D.1.21 的定义。

注:

支持 #dropMode 特性,在功能上等同于支持 以下特性:

内容配置文件要求或允许使用 #dropMode 特性,同时禁止使用以下任一 特性,是一种错误:#dropMode-dropNTSC、 #dropMode-dropPAL 或 #dropMode-nonDrop。

E.1.72 #dropMode-dropNTSC

TTML 内容处理器支持 #dropMode-dropNTSC 特性,是指它支持 #dropMode-dropNTSC 特性,符合 [TTML1] 中 §D.1.22 的定义。

E.1.73 #dropMode-dropPAL

TTML 内容处理器支持 #dropMode-dropPAL 特性,是指它支持 #dropMode-dropPAL 特性,符合 [TTML1] 中 §D.1.23 的定义。

E.1.74 #dropMode-nonDrop

TTML 内容处理器支持 #dropMode-nonDrop 特性,是指它支持 #dropMode-nonDrop 特性,符合 [TTML1] 中 §D.1.24 的定义。

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 内容处理器支持 #extent 特性,是指它支持 #extent 特性,符合 [TTML1] 中 §D.1.25 的定义。

注:

支持 #extent 特性,在功能上等同于支持 以下特性:

内容配置文件要求或允许使用 #extent 特性, 同时禁止使用以下任一 特性,是一种错误:#extent-region 或 #extent-root。

注:

支持 #extent 特性,并不意味着支持 #region-implied-animation 特性。

E.1.81 #extent-auto

TTML 内容处理器支持 #extent-auto 特性,是指它支持以下值的 语法和语义:auto 值,该值属于 tts:extent 属性,其定义见 [TTML1],§8.2.7。

E.1.82 #extent-auto-version-2

TTML 转换处理器 支持 #extent-auto-version-2 特性,是指它能够识别并 转换 auto 值的语法和语义,该值属于 tts:extent 属性,其定义见本规范。

TTML 呈现处理器 支持 #extent-auto-version-2 特性,是指它实现了呈现语义支持,适用于 auto 值的语义扩展,该值属于 tts:extent 属性,扩展如上所述。

#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, 或者,更具体地说, 针对该特性所支持的元素提供支持,也就是说,针对 以下任一元素类型: tt、 region 和 image,分别对应上述特性。

E.1.83 #extent-contain

TTML 转换处理器 支持 #extent-contain 特性,是指它能够识别并 转换 contain 值,该值属于 tts:extent 属性。

TTML 呈现处理器 支持 #extent-contain 特性,是指它实现了呈现语义支持,适用于 contain 值,该值属于 tts:extent 属性。

E.1.84 #extent-cover

TTML 转换处理器 支持 #extent-cover 特性,是指它能够识别并 转换 cover 值,该值属于 tts:extent 属性。

TTML 呈现处理器 支持 #extent-cover 特性,是指它实现了呈现语义支持,适用于 cover 值,该值属于 tts:extent 属性。

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 转换处理器 支持 #extent-image 特性,是指它支持以下属性值: tts:extent 属性中由 #extent-auto-version-2 和 #extent-length-version-2 特性支持的值, 且该属性应用于 image 元素。

TTML 呈现处理器 支持 #extent-image 特性,是指它对上面列出的相同词汇实现了呈现语义支持。

内容配置文件要求或允许使用 #extent-image 特性,同时禁止使用以下任一 特性,是一种错误:#extent、 特性:#extent-auto-version-2 或 #extent-length-version-2。

E.1.87 #extent-length

TTML 内容处理器支持 #extent-length 特性,是指它支持 <length> 组成部分的值, 这些值属于 tts:extent 属性,其定义见 [TTML1],§8.2.7。

E.1.88 #extent-length-version-2

TTML 内容处理器支持 #extent-length-version-2 特性,是指它 在以下情况下支持 #length-version-2 特性:该特性应用 于 <length> 组成部分的值, 这些值属于 tts:extent 属性。

#extent-length-version-2 特性是 #extent-length 特性的语法和语义扩展。

内容配置文件要求或允许使用 #extent-length-version-2 特性, 同时禁止使用 #extent-length 特性,是一种错误。

E.1.89 #extent-measure

TTML 转换处理器 支持 #extent-measure 特性,是指它能够识别并 转换 <measure> 样式 值表达式的以下值,且该表达式用于 tts:extent 属性:

  • auto

  • fitContent

  • maxContent

  • minContent

TTML 呈现处理器 支持 #extent-measure 特性,是指它实现了呈现语义支持,适用于 上面列出的相同词汇。

E.1.90 #extent-region

TTML 内容处理器支持 #extent-region 特性,是指它支持 #extent-region 特性,符合 [TTML1] 中 §D.1.26 的定义。

注:

支持 #extent-region 特性,意味着支持 #extent-auto 和 #extent-length 特性, 适用于这些特性应用于 region 元素的情况。

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 内容处理器支持 #extent-root 特性,是指它支持 #extent-root 特性,符合 [TTML1] 中 §D.1.27 的定义。

注:

支持 #extent-root 特性,意味着支持 #extent-auto 和 #extent-length 特性, 适用于这些特性应用于 tt 元素的情况。

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-contain。

注:

支持 #extent-root-version-2 特性的本意是意味着支持 以下 #extent-contain 特性,但仅限于该特性应用于根 tt 元素的情况, 而不包括其他元素类型。

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 转换处理器 支持 #font 特性,是指它能够识别并转换以下 词汇,其定义见 9 嵌入内容:

TTML 呈现处理器 支持 #font 特性,是指它实现了呈现语义支持,适用于 上面列出的相同词汇。

E.1.96 #fontFamily

TTML 内容处理器支持 #fontFamily 特性,是指它支持 #fontFamily 特性,符合 [TTML1] 中 §D.1.28 的定义。

注:

支持 #fontFamily 特性,在功能上等同于支持 以下特性:

内容配置文件要求或允许使用 #fontFamily 特性,同时禁止使用以下任一 特性,是一种错误:#fontFamily-generic 或 #fontFamily-non-generic。

E.1.97 #fontFamily-generic

TTML 内容处理器支持 #fontFamily-generic 特性,是指它支持 #fontFamily-generic 特性,符合 [TTML1] 中 §D.1.29 的定义。

E.1.98 #fontFamily-non-generic

TTML 内容处理器支持 #fontFamily-non-generic 特性,是指它支持 #fontFamily-non-generic 特性,符合 [TTML1] 中 §D.1.30 的定义。

E.1.99 #fontKerning

TTML 转换处理器 支持 #fontKerning 特性,是指它能够识别并 转换 tts:fontKerning 属性。

TTML 呈现处理器 支持 #fontKerning 特性,是指它实现了呈现语义支持,适用于 tts:fontKerning 属性。

E.1.100 #fontSelectionStrategy

TTML 转换处理器 支持 #fontSelectionStrategy 特性,是指它能够识别并 转换 auto 值,该值属于 tts:fontSelectionStrategy 属性。

TTML 呈现处理器 支持 #fontSelectionStrategy 特性,是指它实现了呈现语义支持,适用于 auto 值,该值属于 tts:fontSelectionStrategy 属性。

E.1.101 #fontSelectionStrategy-character

TTML 转换处理器 支持 #fontSelectionStrategy-character 特性,是指它能够识别并 转换 character 值,该值属于 tts:fontSelectionStrategy 属性。

TTML 呈现处理器 支持 #fontSelectionStrategy-character 特性,是指它实现了呈现语义 支持,适用于 character 值,该值属于 tts:fontSelectionStrategy 属性。

E.1.102 #fontShear

TTML 转换处理器 支持 #fontShear 特性,是指它能够识别并 转换 tts:fontShear 属性。

TTML 呈现处理器 支持 #fontShear 特性,是指它实现了呈现语义支持,适用于 tts:fontShear 属性。

E.1.103 #fontSize

TTML 内容处理器支持 #fontSize 特性,是指它支持 #fontSize 特性,符合 [TTML1] 中 §D.1.31 的定义。

注:

支持 #fontSize 特性,在功能上等同于支持 以下特性:

内容配置文件要求或允许使用 #fontSize 特性,同时禁止使用以下任一 特性,是一种错误:#fontSize-anamorphic 或 #fontSize-isomorphic。

E.1.104 #fontSize-anamorphic

TTML 内容处理器支持 #fontSize-anamorphic 特性,是指它支持 #fontSize-anamorphic 特性,符合 [TTML1] 中 §D.1.32 的定义。

E.1.105 #fontSize-isomorphic

TTML 内容处理器支持 #fontSize-isomorphic 特性,是指它支持 #fontSize-isomorphic 特性,符合 [TTML1] 中 §D.1.33 的定义。

E.1.106 #fontStyle

TTML 内容处理器支持 #fontStyle 特性,是指它支持 #fontStyle 特性,符合 [TTML1] 中 §D.1.34 的定义。

注:

支持 #fontStyle 特性,在功能上等同于支持 (1) 以下 #fontStyle-italic 和 #fontStyle-oblique 特性 以及 (2) normal 值,该值属于 tts:fontStyle 属性。

内容配置文件要求或允许使用 #fontStyle 特性,同时禁止使用以下任一 特性,是一种错误:#fontStyle-italic 或 #fontStyle-oblique。

E.1.107 #fontStyle-italic

TTML 内容处理器支持 #fontStyle-italic 特性,是指它支持 #fontStyle-italic 特性,符合 [TTML1] 中 §D.1.35 的定义。

E.1.108 #fontStyle-oblique

TTML 内容处理器支持 #fontStyle-oblique 特性,是指它支持 #fontStyle-oblique 特性,符合 [TTML1] 中 §D.1.36 的定义。

E.1.109 #fontVariant

TTML 转换处理器 支持 #fontVariant 特性,是指它能够识别并 转换 tts:fontVariant 属性。

TTML 呈现处理器 支持 #fontVariant 特性,是指它实现了呈现语义支持,适用于 tts:fontVariant 属性。

E.1.110 #fontWeight

TTML 内容处理器支持 #fontWeight 特性,是指它支持 #fontWeight 特性,符合 [TTML1] 中 §D.1.37 的定义。

注:

支持 #fontWeight 特性,在功能上等同于支持 (1) 以下 #fontWeight-bold 特性 以及 (2) normal 值,该值属于 tts:fontWeight 属性。

内容配置文件要求或允许使用 #fontWeight 特性,同时禁止使用 #fontWeight-bold 特性,是一种错误。

E.1.111 #fontWeight-bold

TTML 内容处理器支持 #fontWeight-bold 特性,是指它支持 #fontWeight-bold 特性,符合 [TTML1] 中 §D.1.38 的定义。

E.1.112 #frameRate

TTML 内容处理器支持 #frameRate 特性,是指它支持 #frameRate 特性,符合 [TTML1] 中 §D.1.39 的定义。

E.1.113 #frameRateMultiplier

TTML 内容处理器支持 #frameRateMultiplier 特性,是指它支持 #frameRateMultiplier 特性,符合 [TTML1] 中 §D.1.40 的定义。

E.1.114 #gain

TTML 转换处理器 支持 #gain 特性,是指它能够识别并 转换 tta:gain 属性。

TTML 呈现处理器 支持 #gain 特性,是指它实现了呈现语义支持,适用于 tta:gain 属性。

E.1.115 #image

TTML 转换处理器 支持 #image 特性,是指它能够识别并转换以下 词汇,其定义见 9 嵌入内容:

TTML 呈现处理器 支持 #image 特性,是指它实现了呈现语义支持,适用于 上面列出的相同词汇。

E.1.116 #image-png

TTML 转换处理器 支持 #image-png 特性,是指它能够识别并转换图像 资源, 其内容类型为 image/png,定义见 [PNG]。

TTML 呈现处理器 支持 #image-png 特性,是指它实现了呈现语义支持,适用于图像 资源, 其内容类型为 image/png,定义见 [PNG]。

E.1.117 #initial

TTML 转换处理器 支持 #initial 特性,是指它能够识别并转换以下 词汇,其定义见 10 样式:

TTML 呈现处理器 支持 #initial 特性,是指它实现了呈现语义支持,适用于 上面列出的相同词汇。

E.1.118 #ipd

TTML 转换处理器 支持 #ipd 特性,是指它能够识别并 转换 tts:ipd 属性。

TTML 呈现处理器 支持 #ipd 特性,是指它实现了呈现语义支持,适用于 tts:ipd 属性。

E.1.119 #layout

TTML 内容处理器支持 #layout 特性,是指它支持 #layout 特性,符合 [TTML1] 中 §D.1.41 的定义。

E.1.120 #length

TTML 内容处理器支持 #length 特性,是指它支持 #length 特性,符合 [TTML1] 中 §D.1.42 的定义。

E.1.121 #length-cell

TTML 内容处理器支持 #length-cell 特性,是指它支持 #length-cell 特性,符合 [TTML1] 中 §D.1.43 的定义。

E.1.122 #length-em

TTML 内容处理器支持 #length-em 特性,是指它支持 #length-em 特性,符合 [TTML1] 中 §D.1.44 的定义。

E.1.123 #length-integer

TTML 内容处理器支持 #length-integer 特性,是指它支持 #length-integer 特性,符合 [TTML1] 中 §D.1.45 的定义。

E.1.124 #length-negative

TTML 内容处理器支持 #length-negative 特性,是指它支持 #length-negative 特性,符合 [TTML1] 中 §D.1.46 的定义。

E.1.125 #length-percentage

TTML 内容处理器支持 #length-percentage 特性,是指它支持 #length-percentage 特性,符合 [TTML1] 中 §D.1.47 的定义。

E.1.126 #length-pixel

TTML 内容处理器支持 #length-pixel 特性,是指它支持 #length-pixel 特性,符合 [TTML1] 中 §D.1.48 的定义。

E.1.127 #length-positive

TTML 内容处理器支持 #length-positive 特性,是指它支持 #length-positive 特性,符合 [TTML1] 中 §D.1.49 的定义。

E.1.128 #length-real

TTML 内容处理器支持 #length-real 特性,是指它支持 #length-real 特性,符合 [TTML1] 中 §D.1.50 的定义。

E.1.129 #length-real-version-2

TTML 转换处理器 支持 #length-real-version-2 特性,是指它能够识别并 转换实数值的语法和语义,这些值属于 <length> 样式值 表达式,并包括 non-negative-real 非终结符表达式的所有值, 该非终结符表达式定义于 <non-negative-number>。

TTML 呈现处理器 支持 #length-real-version-2 特性,是指它实现了呈现语义支持,适用于 <length> 样式值 表达式的值,如上所述。

#length-real-version-2 特性是 #length-real 特性的语法扩展。

内容配置文件要求或允许使用 #length-real-version-2 特性,同时禁止使用 #length-real 特性,是一种错误。

E.1.130 #length-root-container-relative

TTML 转换处理器 支持 #length-root-container-relative 特性,是指它能够识别并 转换相对于根容器的值,这些值属于 <length> 样式值 表达式。

TTML 呈现处理器 支持 #length-root-container-relative 特性,是指它实现了呈现语义 支持,适用于相对于根 容器的值,这些值属于 <length> 样式 值 表达式。

E.1.131 #length-version-2

TTML 处理器支持 #length-version-2 特性,是指它支持以下 特性:

#length-version-2 特性是 #length 特性的语法和语义扩展。

内容配置文件要求或允许使用 #length-version-2 特性, 同时禁止使用以下任一特性,是一种错误: #length、 #length-real-version-2 或 #length-root-container-relative。

E.1.132 #letterSpacing

TTML 转换处理器 支持 #letterSpacing 特性,是指它能够识别并 转换 tts:letterSpacing 属性。

TTML 呈现处理器 支持 #letterSpacing 特性,是指它实现了呈现语义支持,适用于 tts:letterSpacing 属性。

E.1.133 #lineBreak-uax14

TTML 内容处理器支持 #lineBreak-uax14 特性,是指它支持 #lineBreak-uax14 特性,符合 [TTML1] 中 §D.1.51 的定义。

E.1.134 #lineHeight

TTML 内容处理器支持 #lineHeight 特性,是指它支持 #lineHeight 特性,符合 [TTML1] 中 §D.1.52 的定义。

E.1.135 #lineShear

TTML 转换处理器 支持 #lineShear 特性,是指它能够识别并 转换 tts:lineShear 属性。

TTML 呈现处理器 支持 #lineShear 特性,是指它实现了呈现语义支持,适用于 tts:lineShear 属性。

E.1.136 #luminanceGain

TTML 转换处理器 支持 #luminanceGain 特性,是指它能够识别并 转换 tts:luminanceGain 属性。

TTML 呈现处理器 支持 #luminanceGain 特性,是指它实现了呈现语义支持,适用于 tts:luminanceGain。

E.1.137 #markerMode

TTML 内容处理器支持 #markerMode 特性,是指它支持 #markerMode 特性,符合 [TTML1] 中 §D.1.53 的定义。

注:

支持 #markerMode 特性,在功能上等同于支持 以下特性:

内容配置文件要求或允许使用 #markerMode 特性,同时禁止使用以下任一 特性,是一种错误:#markerMode-continuous 或 #markerMode-discontinuous。

E.1.138 #markerMode-continuous

TTML 内容处理器支持 #markerMode-continuous 特性,是指它支持 #markerMode-continuous 特性,符合 [TTML1] 中 §D.1.54 的定义。

E.1.139 #markerMode-discontinuous

TTML 内容处理器支持 #markerMode-discontinuous 特性,是指它支持 #markerMode-discontinuous 特性,符合 [TTML1] 中 §D.1.55 的定义。

E.1.140 #metadata

TTML 内容处理器支持 #metadata 特性,是指它支持 #metadata 特性,符合 [TTML1] 中 §D.1.56 的定义。

E.1.141 #metadata-item

TTML 转换处理器 支持 #metadata-item 特性,是指它能够识别并转换以下 词汇,其定义见 14 元数据:

TTML 呈现处理器 支持 #metadata-item 特性,是指它实现了呈现语义支持,适用于 上面列出的相同词汇。

注:

本规范未定义用于 呈现元数据信息的标准化形式。元数据信息的呈现方式或 呈现能力被认为取决于 实现。

E.1.142 #metadata-version-2

TTML 处理器支持 #metadata-version-2 特性,是指它 支持以下特性:

#metadata-version-2 特性是 #metadata 特性的语法和语义扩展。

内容配置文件要求或允许使用 #metadata-version-2 特性,同时禁止使用以下任一 特性,是一种错误: #metadata 或 #metadata-item。

E.1.143 #nested-div

TTML 内容处理器支持 #nested-div 特性,是指它支持 #nested-div 特性,符合 [TTML1] 中 §D.1.57 的定义。

E.1.144 #nested-span

TTML 内容处理器支持 #nested-span 特性,是指它支持 #nested-span 特性,符合 [TTML1] 中 §D.1.58 的定义。

E.1.145 #opacity

TTML 内容处理器支持 #opacity 特性,是指它支持 #opacity 特性,符合 [TTML1] 中 §D.1.59 的定义。

注:

支持 #opacity 特性,在功能上等同于支持 #opacity-region 特性。

内容配置文件要求或允许使用 #opacity 特性,同时禁止使用 #opacity-region 特性,是一种错误。

E.1.146 #opacity-block

TTML 转换处理器 支持 #opacity-block 特性,是指它能够识别并 转换所有已定义的值,这些值属于 tts:opacity 属性,该属性应用于 内容元素,这些元素会在 呈现处理期间生成一个 块区域。

TTML 呈现处理器 支持 #opacity-block 特性,是指它 (1) 实现了呈现语义 支持,适用于 tts:opacity 属性,该属性应用于 内容元素,这些元素生成 一个 块区域,并且 (2) 能够显示或生成输出显示 信号,该信号能区分至少八 (8) 个不透明度值。

E.1.147 #opacity-image

TTML 转换处理器 支持 #opacity-image 特性,是指它支持所有已定义的值, 这些值属于 tts:opacity 属性,且该属性应用于 image 元素。

TTML 呈现处理器 支持 #opacity-image 特性,是指它对上面列出的相同词汇实现了呈现语义支持。

注:

支持 #opacity-image 特性,并不意味着支持 #image 特性;但是,如果不支持 后者,则支持 前者也没有意义。

E.1.148 #opacity-inline

TTML 转换处理器 支持 #opacity-inline 特性,是指它能够识别并 转换所有已定义的值,这些值属于 tts:opacity 属性,该属性应用于 内容元素,这些元素会在 呈现处理期间生成一个 行内区域。

TTML 呈现处理器 支持 #opacity-inline 特性,是指它 (1) 实现了呈现语义 支持,适用于 tts:opacity 属性,该属性应用于 内容元素,这些元素生成 一个 行内区域,并且 (2) 能够显示或生成输出显示 信号,该信号能区分至少八 (8) 个不透明度值。

E.1.149 #opacity-region

TTML 转换处理器 支持 #opacity-region 特性,是指它能够识别并 转换所有已定义的值,这些值属于 tts:opacity 属性,且该属性应用于 region 元素。

TTML 呈现处理器 支持 #opacity-region 特性,是指它 (1) 实现了呈现语义 支持,适用于 tts:opacity 属性应用于 region 元素的情况, 并且 (2) 能够显示或生成输出显示 信号,该信号能区分至少八 (8) 个不透明度值。

注:

支持 #opacity-region 特性,在功能上等同于 支持 #opacity 特性。

内容配置文件要求或允许使用 #opacity-region 特性,同时禁止使用 #opacity 特性,是一种错误。

E.1.150 #opacity-version-2

TTML 处理器支持 #opacity-version-2 特性,是指它 支持以下特性:

#opacity-version-2 特性是 #opacity 特性的语法和语义扩展。

内容配置文件要求或允许使用 #opacity-version-2 特性, 同时禁止使用以下任一特性,是一种错误: #opacity、 #opacity-block、 #opacity-image、 #opacity-inline 或 #opacity-region。

E.1.151 #origin

TTML 内容处理器支持 #origin 特性,是指它支持 #origin 特性,符合 [TTML1] 中 §D.1.60 的定义。

注:

支持 #origin 特性,并不意味着支持 #region-implied-animation 特性。

E.1.152 #overflow

TTML 内容处理器支持 #overflow 特性,是指它支持 #overflow 特性,符合 [TTML1] 中 §D.1.61 的定义。

注:

支持 #overflow 特性,在功能上等同于支持 (1) 以下 #overflow-visible 特性 以及 (2) hidden 值,该值属于 tts:overflow 属性。

内容配置文件要求或允许使用 #overflow 特性,同时禁止使用 #overflow-visible 特性,是一种错误。

E.1.153 #overflow-visible

TTML 内容处理器支持 #overflow-visible 特性,是指它支持 #overflow-visible 特性,符合 [TTML1] 中 §D.1.62 的定义。

E.1.154 #padding

TTML 内容处理器支持 #padding 特性,是指它支持 #padding 特性,符合 [TTML1] 中 §D.1.63 的定义。

注:

支持 #padding 特性,在功能上等同于支持 以下特性:

内容配置文件要求或允许使用 #padding 特性,同时禁止使用以下任一特性,是一种错误: #padding-1、 #padding-2、 #padding-3、 #padding-4、 #padding-region。

E.1.155 #padding-1

TTML 内容处理器支持 #padding-1 特性,是指它支持 #padding-1 特性,符合 [TTML1] 中 §D.1.64 的定义。

E.1.156 #padding-2

TTML 内容处理器支持 #padding-2 特性,是指它支持 #padding-2 特性,符合 [TTML1] 中 §D.1.65 的定义。

E.1.157 #padding-3

TTML 内容处理器支持 #padding-3 特性,是指它支持 #padding-3 特性,符合 [TTML1] 中 §D.1.66 的定义。

E.1.158 #padding-4

TTML 内容处理器支持 #padding-4 特性,是指它支持 #padding-4 特性,符合 [TTML1] 中 §D.1.67 的定义。

E.1.159 #padding-block

TTML 转换处理器 支持 #padding-block 特性,是指它能够识别并 转换所有已定义的值,这些值属于 tts:padding 属性,该属性应用于 内容元素,这些元素会在 呈现处理期间生成一个 块区域。

TTML 呈现处理器 支持 #padding-block 特性,是指它实现了呈现语义 支持,适用于 tts:padding 属性,该属性应用于 内容元素,这些元素生成 一个 块区域。

E.1.160 #padding-inline

TTML 转换处理器 支持 #padding-inline 特性,是指它能够识别并 转换所有已定义的值,这些值属于 tts:padding 属性,该属性应用于 内容元素,这些元素会在 呈现处理期间生成一个 行内区域。

TTML 呈现处理器 支持 #padding-inline 特性,是指它实现了呈现语义 支持,适用于 tts:padding 属性,该属性应用于 内容元素,这些元素生成 一个 行内区域。

E.1.161 #padding-region

TTML 内容处理器支持 #padding-region 特性,是指它支持 #padding 特性。

#padding-region 特性是一个空 扩展, 所扩展的是 #padding 特性, 其中,空扩展是指 某个特性在形式上被标记为另一个特性的扩展,但扩展 语义为空集,这等同于说 这两个特性在功能上等价。

内容配置文件要求或允许使用 #padding-region 特性, 同时禁止使用以下任一特性,是一种错误: #padding、 #padding-1、 #padding-2、 #padding-3 或 #padding-4。

E.1.162 #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.163 #pan

TTML 转换处理器 支持 #pan 特性,是指它能够识别并 转换 tta:pan 属性。

TTML 呈现处理器 支持 #pan 特性,是指它实现了呈现语义支持,适用于 tta:pan 属性。

E.1.164 #permitFeatureNarrowing

TTML 转换处理器 支持 #permitFeatureNarrowing 特性,是指它能够识别并 转换 (1) ttp:permitFeatureNarrowing 属性以及 (2) extends 属性,后者位于 ttp:feature 和 ttp:extension 元素上。

TTML 呈现处理器 支持 #permitFeatureNarrowing 特性,是指它实现了呈现语义支持,适用于 上面列出的相同词汇。

注:

如果 TTML 处理器不支持 #permitFeatureNarrowing 特性,且该特性 被指定为可选,则会忽略 extends 属性的语义,也就是说,支持被 扩展的特性并不足以 认为扩展特性受到支持。

E.1.165 #permitFeatureWidening

TTML 转换处理器 支持 #permitFeatureWidening 特性,是指它能够识别并 转换 (1) ttp:permitFeatureWidening 属性以及 (2) restricts 属性,后者位于 ttp:feature 和 ttp:extension 元素上。

TTML 呈现处理器 支持 #permitFeatureWidening 特性,是指它实现了呈现语义支持,适用于 上面列出的相同词汇。

注:

如果 TTML 处理器不支持 #permitFeatureWidening 特性,且该特性 被指定为可选,则会忽略 restricts 属性的语义,也就是说,支持被 限制的原特性并不足以 认为限制后的特性受到支持。

E.1.166 #pitch

TTML 转换处理器 支持 #pitch 特性,是指它能够识别并 转换 tta:pitch 属性。

TTML 呈现处理器 支持 #pitch 特性,是指它实现了呈现语义支持,适用于 tta:pitch 属性。

E.1.167 #pixelAspectRatio

TTML 内容处理器支持 #pixelAspectRatio 特性,是指它支持 #pixelAspectRatio 特性,符合 [TTML1] 中 §D.1.68 的定义。

E.1.168 #position

TTML 转换处理器 支持 #position 特性,是指它能够识别并 转换 tts:position 属性。

TTML 呈现处理器 支持 #position 特性,是指它实现了呈现语义支持,适用于 tts:position 属性。

注:

支持 #position 特性,并不意味着支持 #region-implied-animation 特性。

E.1.169 #presentation

TTML 内容处理器支持 #presentation 特性,是指它支持 #presentation 特性,符合 [TTML1] 中 §D.1.69 的定义。

E.1.170 #presentation-audio

TTML 内容处理器支持 #presentation-audio 特性,是指它 (1) 满足通用处理器准则,其定义见 3.2.1 通用处理器的一致性, (2) 实现了音频呈现(渲染)语义支持,并且 (3) 实现了以下特性的音频呈现语义:

此外,支持 #presentation-audio 特性的 TTML 处理器 应当满足 [UAAG] 规定的用户代理无障碍指南。

E.1.171 #presentation-version-2

TTML 处理器支持 #presentation-version-2 特性,是指它 (1) 满足通用处理器准则,其定义见 3.2.1 通用处理器的一致性,并且 (2) 支持以下特性:

#presentation-version-2 特性是 #presentation 特性的语法和语义扩展。

内容配置文件要求或允许使用 #presentation-version-2 特性,同时禁止使用 以下任一特性,是一种错误: #presentation 或 #profile-version-2。

E.1.172 #processorProfiles

TTML 转换处理器 支持 #processorProfiles 特性,是指它 (1) 支持 非组合配置文件,并且 (2) 能够识别并转换:

  1. 以下配置文件属性词汇,其定义见 6.2 配置文件属性词汇:

  2. designator 属性,该属性位于 ttp:profile 元素上,以及

  3. processor 值,属于 type 属性,该属性位于 ttp:profile 元素上。

TTML 呈现处理器 支持 #processorProfiles 特性,是指它实现了呈现语义支持,适用于 上面列出的相同词汇。

注:

支持 #processorProfiles 特性,并不意味着支持 组合配置文件 或 嵌套配置文件。

E.1.173 #processorProfiles-combined

TTML 转换处理器 支持 #processorProfiles-combined 特性,是指它 (1) 支持 #processorProfiles 特性, (2) 支持 组合配置文件,并且 (3) 能够识别并 转换:

  1. 以下配置文件属性词汇,其定义见 6.2 配置文件属性词汇:

  2. combine 属性,该属性位于 ttp:profile 元素上。

TTML 呈现处理器 支持 #processorProfiles-combined 特性,是指它实现了呈现语义支持,适用于 上面列出的相同词汇。

#processorProfiles-combine 特性是 #processorProfiles 特性的语法和语义扩展。

处理器配置文件要求或允许使用 #processorProfiles-combine 特性, 同时禁止使用 #processorProfiles 特性,是一种错误。

注:

支持 #processorProfiles-combined 特性,并不意味着支持 嵌套配置文件。

E.1.174 #profile

TTML 内容处理器支持 #profile 特性,是指它支持 #profile 特性,符合 [TTML1] 中 §D.1.70 的定义。

E.1.175 #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.176 #profile-nesting

TTML 内容处理器支持 #profile-nesting 特性,是指它支持嵌套配置文件。

E.1.177 #profile-version-2

TTML 内容处理器支持 #profile-version-2 特性,是指它 支持以下特性:

#profile-version-2 特性是 #profile 特性的语法和语义扩展。

内容配置文件要求或允许使用 #profile-version-2 特性, 同时禁止使用以下任一特性,是一种错误: #contentProfiles、 #processorProfiles 或 #profile。

注:

支持 #profile-version-2 特性,并不意味着支持 以下特性:

E.1.178 #region-implied-animation

TTML 转换处理器 支持 #region-implied-animation 特性,是指它能够识别并转换 位于以下元素上的样式属性: div 或 p 元素,且这些属性应用于隐式区域, 依据为 11.1.2.1 内联动画的特殊 语义。

TTML 呈现处理器 支持 #region-implied-animation 特性,是指它实现了呈现语义支持, 适用于以下元素上的样式属性: div 或 p 元素,且这些属性应用于隐式区域, 依据为 11.1.2.1 内联动画的特殊 语义。

注:

支持 #region-implied-animation 特性,并不意味着支持 以下特性:

但是,如果支持这些特性中的任何一个,则支持 #region-implied-animation 特性 确实意味着支持 11.1.2.1 内联动画的特殊 语义,且这种支持针对该特性。

E.1.179 #region-inline

TTML 转换处理器 支持 #region-inline 特性,是指它能够识别并 转换内联区域元素,这些元素是内容 元素的子元素,其进一步定义见 region。

TTML 呈现处理器 支持 #region-inline 特性,是指它实现了呈现语义支持, 适用于内联区域元素,这些元素是内容元素的子元素,其 进一步定义见 region。

E.1.180 #region-timing

TTML 转换处理器 支持 #region-timing 特性,是指它能够识别并转换以下词汇,且这些词汇应用于 一个 region 元素:

TTML 呈现处理器 支持 #region-timing 特性,是指它对上面列出的相同词汇实现了呈现语义支持, 适用于这些词汇应用于 region 元素的情况。

#region-timing 特性是 #timing 特性的语义限制。

注:

由于此特性表示 #timing 特性的一个语义子集,并且 后者是所有转换处理器和呈现处理器的必需特性, 因此此特性 指定符的实际用途仅限于内容配置文件定义,该定义可以 选择禁止文档实例 使用此特性。

E.1.181 #resources

TTML 转换处理器 支持 #resources 特性,是指它能够识别并转换以下 词汇,其定义见 9 嵌入内容:

TTML 呈现处理器 支持 #resources 特性,是指它实现了呈现语义支持,适用于 上面列出的相同词汇。

E.1.182 #ruby

TTML 转换处理器 支持 #ruby 特性,是指它能够识别并 转换所有已定义的值,这些值属于 tts:ruby 属性。

TTML 呈现处理器 支持 #ruby 特性,是指它实现了呈现语义支持, 适用于 tts:ruby 属性的所有已定义的值。

E.1.183 #ruby-full

TTML 处理器支持 #ruby-full 特性,是指它 支持以下特性:

内容配置文件要求或允许使用 #ruby-full 特性, 同时禁止使用以下任一特性,是一种错误: #ruby、 #rubyAlign、 #rubyPosition 或 #rubyReserve。

E.1.184 #rubyAlign

TTML 处理器支持 #rubyAlign 特性,是指它支持以下 特性:

内容配置文件要求或允许使用 #rubyAlign 特性,同时禁止使用以下任一 特性,是一种错误: #rubyAlign-minimal 或 #rubyAlign-withBase。

E.1.185 #rubyAlign-minimal

TTML 转换处理器 支持 #rubyAlign-minimal 特性,是指它能够识别并转换 以下值,这些值属于 tts:rubyAlign 属性。

  • start

  • center

  • end

  • spaceAround

  • spaceBetween

TTML 呈现处理器 支持 #rubyAlign-minimal 特性,是指它实现了呈现语义支持,适用于 上面列出的相同值 词汇。

E.1.186 #rubyAlign-withBase

TTML 转换处理器 支持 #rubyAlign-withBase 特性,是指它能够识别并转换 withBase 值,该值属于 tts:rubyAlign 属性。

TTML 呈现处理器 支持 #rubyAlign-withBase 特性,是指它实现了呈现语义支持,适用于 上面列出的 相同值。

E.1.187 #rubyPosition

TTML 转换处理器 支持 #rubyPosition 特性,是指它能够识别并 转换 tts:rubyPosition 属性。

TTML 呈现处理器 支持 #rubyPosition 特性,是指它实现了呈现语义支持,适用于 tts:rubyPosition 属性。

E.1.188 #rubyReserve

TTML 转换处理器 支持 #rubyReserve 特性,是指它能够识别并 转换 tts:rubyReserve 属性。

TTML 呈现处理器 支持 #rubyReserve 特性,是指它实现了呈现语义支持,适用于 tts:rubyReserve 属性。

E.1.189 #set

TTML 内容处理器支持 #set 特性,是指它支持 #animation 特性, 因此, #set 特性是一个空扩展, 所扩展的是 #animation 特性。

内容配置文件要求或允许使用 #set 特性, 同时禁止使用 #animation 特性,是一种错误。

E.1.190 #set-fill

TTML 转换处理器 支持 #set-fill 特性,是指它能够识别并 转换 fill 属性,该属性属于 set 元素。

TTML 呈现处理器 支持 #set-fill 特性,是指它实现了呈现语义支持, 适用于 fill 属性,该属性属于 set 元素。

E.1.191 #set-multiple-styles

TTML 转换处理器 支持 #set-multiple-styles 特性,是指它能够识别并 转换多个样式属性,且这些属性指定 于 set 元素上。

TTML 呈现处理器 支持 #set-multiple-styles 特性,是指它实现了呈现语义支持, 适用于多个样式属性,且这些属性指定于 set 元素上。

E.1.192 #set-repeat

TTML 转换处理器 支持 #set-repeat 特性,是指它能够识别并 转换 repeatCount 属性,该属性属于 set 元素。

TTML 呈现处理器 支持 #set-repeat 特性,是指它实现了呈现语义支持, 适用于 repeatCount 属性,该属性属于 set 元素。

E.1.193 #shear

TTML 转换处理器 支持 #shear 特性,是指它能够识别并 转换 tts:shear 属性。

TTML 呈现处理器 支持 #shear 特性,是指它实现了呈现语义支持,适用于 tts:shear 属性。

E.1.194 #showBackground

TTML 内容处理器支持 #showBackground 特性,是指它支持 #showBackground 特性,符合 [TTML1] 中 §D.1.71 的定义。

E.1.195 #source

TTML 转换处理器 支持 #source 特性,是指它能够识别并转换以下 词汇,其定义见 9 嵌入内容:

TTML 呈现处理器 支持 #source 特性,是指它实现了呈现语义支持,适用于 上面列出的相同词汇。

E.1.196 #speak

TTML 转换处理器 支持 #speak 特性,是指它能够识别并 转换 tta:speak 属性。

TTML 呈现处理器 支持 #speak 特性,是指它实现了呈现语义支持,适用于 tta:speak 属性。

E.1.197 #speech

TTML 处理器支持 #speech 特性,是指它支持 语音合成处理器。

E.1.198 #structure

TTML 内容处理器支持 #structure 特性,是指它支持 #structure 特性,符合 [TTML1] 中 §D.1.72 的定义。

E.1.199 #styling

TTML 内容处理器支持 #styling 特性,是指它支持 #styling 特性,符合 [TTML1] 中 §D.1.73 的定义。

E.1.200 #styling-chained

TTML 内容处理器支持 #styling-chained 特性,是指它支持 #styling-chained 特性,符合 [TTML1] 中 §D.1.74 的定义。

E.1.201 #styling-inheritance-content

TTML 内容处理器支持 #styling-inheritance-content 特性,是指它支持 #inheritance-content 特性,符合 [TTML1] 中 §D.1.75 的定义。

E.1.202 #styling-inheritance-region

TTML 内容处理器支持 #styling-inheritance-region 特性,是指它支持 #styling-inheritance-region 特性,符合 [TTML1] 中 §D.1.76 的定义。

E.1.203 #styling-inline

TTML 内容处理器支持 #styling-inline 特性,是指它支持 #styling-inline 特性,符合 [TTML1] 中 §D.1.77 的定义。

E.1.204 #styling-nested

TTML 内容处理器支持 #styling-nested 特性,是指它支持 #styling-nested 特性,符合 [TTML1] 中 §D.1.78 的定义。

E.1.205 #styling-referential

TTML 内容处理器支持 #styling-referential 特性,是指它支持 #styling-referential 特性,符合 [TTML1] 中 §D.1.79 的定义。

E.1.206 #subFrameRate

TTML 内容处理器支持 #subFrameRate 特性,是指它支持 #subFrameRate 特性,符合 [TTML1] 中 §D.1.80 的定义。

E.1.207 #textAlign

TTML 内容处理器支持 #textAlign 特性,是指它支持 #textAlign 特性,符合 [TTML1] 中 §D.1.81 的定义。

注:

支持 #textAlign 特性,在功能上等同于支持 以下特性:

内容配置文件要求或允许使用 #textAlign 特性,同时禁止使用以下任一特性,是一种错误: #textAlign-absolute 或 #textAlign-relative。

E.1.208 #textAlign-absolute

TTML 内容处理器支持 #textAlign-absolute 特性,是指它支持 #textAlign-absolute 特性,符合 [TTML1] 中 §D.1.82 的定义。

E.1.209 #textAlign-justify

TTML 转换处理器 支持 #textAlign-justify 特性,是指它能够识别并 转换 justify 值,该值属于 tts:textAlign 属性。

TTML 呈现处理器 支持 #textAlign-justify 特性,是指它实现了呈现语义支持,适用于 justify 值, 该值属于 tts:textAlign 属性。

E.1.210 #textAlign-relative

TTML 内容处理器支持 #textAlign-relative 特性,是指它支持 #textAlign-relative 特性,符合 [TTML1] 中 §D.1.83 的定义。

E.1.211 #textAlign-version-2

TTML 处理器支持 #textAlign-version-2 特性,是指它 支持以下特性:

#textAlign-version-2 特性是 #textAlign 特性的语法和语义扩展。

内容配置文件要求或允许使用 #textAlign-version-2 特性, 同时禁止使用以下任一特性,是一种错误: #textAlign、 #textAlign-absolute、 #textAlign-justify 或 #textAlign-relative。

E.1.212 #textCombine

TTML 转换处理器 支持 #textCombine 特性,是指它能够识别并 转换 tts:textCombine 属性。

TTML 呈现处理器 支持 #textCombine 特性,是指它实现了呈现语义支持,适用于 tts:textCombine 属性。

E.1.213 #textDecoration

TTML 内容处理器支持 #textDecoration 特性,是指它支持 #textDecoration 特性,符合 [TTML1] 中 §D.1.84 的定义。

注:

支持 #textDecoration 特性,在功能上等同于 支持以下特性:

内容配置文件要求或允许使用 #textDecoration 特性, 同时禁止使用以下任一特性,是一种错误: #textDecoration-over、 #textDecoration-through 或 #textDecoration-under。

E.1.214 #textDecoration-over

TTML 内容处理器支持 #textDecoration-over 特性,是指它支持 #textDecoration-over 特性,符合 [TTML1] 中 §D.1.85 的定义。

E.1.215 #textDecoration-through

TTML 内容处理器支持 #textDecoration-through 特性,是指它支持 #textDecoration-through 特性,符合 [TTML1] 中 §D.1.86 的定义。

E.1.216 #textDecoration-under

TTML 内容处理器支持 #textDecoration-under 特性,是指它支持 #textDecoration-under 特性,符合 [TTML1] 中 §D.1.87 的定义。

E.1.217 #textEmphasis

TTML 处理器支持 #textEmphasis 特性,是指它 支持以下特性:

#textEmphasis 特性是 #textEmphasis-minimal 特性的语法和语义扩展。

内容配置文件要求或允许使用 #textEmphasis 特性, 同时禁止使用以下任一特性,是一种错误: #textEmphasis-color、 #textEmphasis-minimal 或 #textEmphasis-quoted-string。

E.1.218 #textEmphasis-color

TTML 转换处理器 支持 #textEmphasis-color 特性,是指它能够识别并 转换以下属性的值:tts:textEmphasis 属性,且这些值包含一个 <emphasis-color> 组成部分。

TTML 呈现处理器 支持 #textEmphasis-color 特性,是指它对上面列出的相同词汇实现了呈现语义支持。

E.1.219 #textEmphasis-minimal

TTML 转换处理器 支持 #textEmphasis-minimal 特性,是指它能够识别并 转换以下属性的值:tts:textEmphasis 属性,且这些值 (1) 不包含 <emphasis-color> 组成部分,并且 (2) 不包含这样的 <emphasis-style> 组成部分,其 采用 <quoted-string> 值的形式。

TTML 呈现处理器 支持 #textEmphasis-minimal 特性,是指它对上面列出的相同词汇实现了呈现语义支持。

E.1.220 #textEmphasis-quoted-string

TTML 转换处理器 支持 #textEmphasis-quoted-string 特性,是指它能够识别并 转换以下属性的值:tts:textEmphasis 属性,且这些值包含这样的 <emphasis-style> 组成部分,其 采用 <quoted-string> 值的形式。

TTML 呈现处理器 支持 #textEmphasis-quoted-string 特性,是指它对上面列出的相同词汇实现了呈现语义支持。

E.1.221 #textOrientation

TTML 转换处理器 支持 #textOrientation 特性,是指它能够识别并 转换 tts:textOrientation 属性。

TTML 呈现处理器 支持 #textOrientation 特性,是指它实现了呈现语义支持, 适用于 tts:textOrientation 属性。

E.1.222 #textOutline

TTML 内容处理器支持 #textOutline 特性,是指它支持 #textOutline 特性,符合 [TTML1] 中 §D.1.88 的定义。

注:

支持 #textOutline 特性,在功能上等同于支持 以下特性:

内容配置文件要求或允许使用 #textOutline 特性, 同时禁止使用以下任一特性,是一种错误: #textOutline-blurred 或 #textOutline-unblurred。

E.1.223 #textOutline-blurred

TTML 内容处理器支持 #textOutline-blurred 特性,是指它支持 #textOutline-blurred 特性,符合 [TTML1] 中 §D.1.89 的定义。

E.1.224 #textOutline-unblurred

TTML 内容处理器支持 #textOutline-unblurred 特性,是指它支持 #textOutline-unblurred 特性,符合 [TTML1] 中 §D.1.90 的定义。

E.1.225 #textShadow

TTML 转换处理器 支持 #textShadow 特性,是指它能够识别并 转换 tts:textShadow 属性。

TTML 呈现处理器 支持 #textShadow 特性,是指它实现了呈现语义支持,适用于 tts:textShadow 属性。

E.1.226 #tickRate

TTML 内容处理器支持 #tickRate 特性,是指它支持 #tickRate 特性,符合 [TTML1] 中 §D.1.91 的定义。

E.1.227 #timeBase-clock

TTML 内容处理器支持 #timeBase-clock 特性,是指它支持 #timeBase-clock 特性,符合 [TTML1] 中 §D.1.92 的定义。

E.1.228 #timeBase-media

TTML 内容处理器支持 #timeBase-media 特性,是指它支持 #timeBase-media 特性,符合 [TTML1] 中 §D.1.93 的定义。

E.1.229 #timeBase-smpte

TTML 内容处理器支持 #timeBase-smpte 特性,是指它支持 #timeBase-smpte 特性,符合 [TTML1] 中 §D.1.94 的定义。

E.1.230 #timeContainer

TTML 内容处理器支持 #timeContainer 特性,是指它支持 #timeContainer 特性,符合 [TTML1] 中 §D.1.95 的定义。

E.1.231 #time-clock

TTML 内容处理器支持 #time-clock 特性,是指它支持 #time-clock 特性,符合 [TTML1] 中 §D.1.96 的定义。

E.1.232 #time-clock-with-frames

TTML 内容处理器支持 #time-clock-with-frames 特性,是指它支持 #time-clock-with-frames 特性,符合 [TTML1] 中 §D.1.97 的定义。

E.1.233 #time-offset

TTML 内容处理器支持 #time-offset 特性,是指它支持 #time-offset 特性,符合 [TTML1] 中 §D.1.98 的定义。

E.1.234 #time-offset-with-frames

TTML 内容处理器支持 #time-offset-with-frames 特性,是指它支持 #time-offset-with-frames 特性,符合 [TTML1] 中 §D.1.99 的定义。

E.1.235 #time-offset-with-ticks

TTML 内容处理器支持 #time-offset-with-ticks 特性,是指它支持 #time-offset-with-ticks 特性,符合 [TTML1] 中 §D.1.100 的定义。

E.1.236 #time-wall-clock

TTML 转换处理器 支持 #time-wall-clock 特性,是指它能够识别并 转换以下表达式的所有值:<time-expression>,且这些值 满足以下时间表达式语法子集:

<time-expression>
  : wallclock-time

TTML 呈现处理器 支持 #time-wall-clock 特性,是指它实现了呈现 语义支持,适用于上面指定的相同语法。

E.1.237 #timing

TTML 内容处理器支持 #timing 特性,是指它支持 #timing 特性,符合 [TTML1] 中 §D.1.101 的定义。

E.1.238 #transformation

TTML 内容处理器支持 #transformation 特性,是指它支持 #transformation 特性,符合 [TTML1] 中 §D.1.102 的定义。

E.1.239 #transformation-version-2

TTML 处理器支持 #transformation-version-2 特性,是指它 (1) 满足通用处理器准则,其定义见 3.2.1 通用处理器的一致性,并且 (2) 支持以下特性:

#transformation-version-2 特性是 #transformation 特性的语法和语义扩展。

内容配置文件要求或允许使用 #transformation-version-2 特性, 同时禁止使用以下任一特性,是一种错误: #transformation 或 #profile-version-2。

E.1.240 #unicodeBidi

TTML 内容处理器支持 #unicodeBidi 特性,是指它支持 #unicodeBidi 特性,符合 [TTML1] 中 §D.1.103 的定义。

注:

支持 #unicodeBidi 特性,并不意味着支持 #unicodeBidi-isolate 特性。

E.1.241 #unicodeBidi-isolate

TTML 转换处理器 支持 #unicodeBidi-isolate 特性,是指它能够识别并 转换 isolate 值,该值属于 tts:unicodeBidi 属性。

TTML 呈现处理器 支持 #unicodeBidi-isolate 特性,是指它实现了呈现语义支持, 适用于 isolate 值,该值属于 tts:unicodeBidi 属性。

E.1.242 #unicodeBidi-version-2

TTML 内容处理器支持 #unicodeBidi-version-2 特性,是指它 支持以下特性:

#unicodeBidi-version-2 特性是 #unicodeBidi 特性的语法和语义扩展。

E.1.243 #validation

TTML 转换处理器 支持 #validation 特性,是指它:

  1. 是一个验证型内容处理器;

  2. 能够识别并转换以下属性词汇,其定义见 6.2 配置文件属性词汇:

TTML 呈现处理器 支持 #validation 特性,是指它是一个验证型内容 处理器,并且 对上面列出的相同词汇实现了呈现语义支持。

E.1.244 #visibility

TTML 内容处理器支持 #visibility 特性,是指它支持 #visibility 特性,符合 [TTML1] 中 §D.1.104 的定义。

注:

支持 #visibility 特性,在功能上等同于支持 以下特性:

内容配置文件要求或允许使用 #visibility 特性, 同时禁止使用以下任一特性,是一种错误: #visibility-block、 #visibility-inline 或 #visibility-region。

E.1.245 #visibility-block

TTML 内容处理器支持 #visibility-block 特性,是指它支持 #visibility-block 特性,符合 [TTML1] 中 §D.1.105 的定义。

E.1.246 #visibility-image

TTML 转换处理器 支持 #visibility-image 特性,是指它支持所有已定义的值, 这些值属于 tts:visibility 属性,且该属性 应用于 image 元素。

TTML 呈现处理器 支持 #visibility-image 特性,是指它对上面列出的相同词汇实现了呈现语义支持。

注:

支持 #visibility-image 特性,并不意味着支持 #image 特性;但是,如果不支持 后者,则支持 前者也没有意义。

E.1.247 #visibility-inline

TTML 内容处理器支持 #visibility-inline 特性,是指它支持 #visibility-inline 特性,符合 [TTML1] 中 §D.1.106 的定义。

E.1.248 #visibility-region

TTML 内容处理器支持 #visibility-region 特性,是指它支持 #visibility-region 特性,符合 [TTML1] 中 §D.1.107 的定义。

E.1.249 #visibility-version-2

TTML 内容处理器支持 #visibility-version-2 特性,是指它 支持以下特性:

#visibility-version-2 特性是 #visibility 特性的语法和语义扩展。

内容配置文件要求或允许使用 #visibility-version-2 特性, 同时禁止使用以下任一特性,是一种错误: #visibility 或 #visibility-image。

E.1.250 #wrapOption

TTML 内容处理器支持 #wrapOption 特性,是指它支持 #wrapOption 特性,符合 [TTML1] 中 §D.1.108 的定义。

E.1.251 #writingMode

TTML 内容处理器支持 #writingMode 特性,是指它支持 #writingMode 特性,符合 [TTML1] 中 §D.1.109 的定义。

注:

支持 #writingMode 特性,在功能上等同于支持 以下特性:

内容配置文件要求或允许使用 #writingMode 特性, 同时禁止使用以下任一特性,是一种错误: #writingMode-horizontal 或 #writingMode-vertical。

E.1.252 #writingMode-horizontal

TTML 内容处理器支持 #writingMode-horizontal 特性,是指它支持 #writingMode-horizontal 特性,符合 [TTML1] 中 §D.1.111 的定义。

注:

支持 #writingMode-horizontal 特性, 在功能上等同于支持以下特性:

内容配置文件要求或允许使用 #writingMode-horizontal 特性, 同时禁止使用以下任一特性,是一种错误: #writingMode-horizontal-lr 或 #writingMode-horizontal-rl。

E.1.253 #writingMode-horizontal-lr

TTML 内容处理器支持 #writingMode-horizontal-lr 特性,是指它支持 #writingMode-horizontal-lr 特性,符合 [TTML1] 中 §D.1.112 的定义。

E.1.254 #writingMode-horizontal-rl

TTML 内容处理器支持 #writingMode-horizontal-rl 特性,是指它支持 #writingMode-horizontal-rl 特性,符合 [TTML1] 中 §D.1.113 的定义。

E.1.255 #writingMode-vertical

TTML 内容处理器支持 #writingMode-vertical 特性,是指它支持 #writingMode-vertical 特性,符合 [TTML1] 中 §D.1.110 的定义。

E.1.256 #xlink

TTML 转换处理器 支持 #xlink 特性,是指它能够识别并转换以下属性 词汇,其定义见 8.2 内容属性 词汇,且这些词汇用于受支持并允许这些词汇的元素类型:

TTML 呈现处理器 支持 #xlink 特性,是指它实现了呈现语义支持,适用于 上面列出的相同词汇。

E.1.257 #zIndex

TTML 内容处理器支持 #zIndex 特性,是指它支持 #zIndex 特性,符合 [TTML1] 中 §D.1.114 的定义。

E.2 特性支持

下表,表 E-1 – 特性支持, 列举了所有已定义的特性指定符(表示时不含 TT 特性命名空间),并针对每个指定的特性,规定 (1) 首次定义该特性指定符的 TTML 版本,以及 (2) 指定的特性是否必须实现,即为必需 (M),或可以实现, 即 为可选 (O),适用于 TTML 内容处理器,该处理器符合 以下要求: 3.2.2 转换处理器的 一致性或 3.2.3 呈现 处理器的一致性。

注:

在某些情况下,本规范的本(或后续)版本定义了一个新的特性指定符, 该指定符此前尚未定义,但是 它所指定的底层功能特性已由较早的版本定义。 例如,#padding-region 指定符在此引入;但是,它引用的功能此前已包含 在指定符 #padding 下, 该指定符现在依据 #padding-region 来定义。这里, #padding(在 TTML1 中引入) 与 #padding-region(在 TTML2 中引入)的底层含义仍然相同。

表 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-real-version-2 2 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-image 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-audio 2 O O
#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 – 必需特性 - 转换,列举了所有 TTML 内容处理器的必需特性,该处理器符合 以下要求: 3.2.2 转换处理器的 一致性,并提供附加 说明,以概述特性的使用上下文或性质。 该配置文件定义文档用于定义 相应的 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 – 必需特性 - 呈现,列举了所有 TTML 内容处理器的必需特性,该处理器符合 以下要求: 3.2.3 呈现处理器的一致性, 并提供附加 说明,以概述特性的使用上下文或性质。 该配置文件定义文档用于定义 相应的 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               // 表示为绝对 URI

designation
  : "#" token-char+

token-char
  : { XML NameChar }                        // [XML 1.0] 产生式 [4a]

如果扩展标识的扩展命名空间是 TT 扩展命名空间,则其后 designation 词元的所有值均保留供未来 标准化使用。

如果扩展标识的扩展命名空间不是 TT 扩展命名空间,即为其他扩展命名空间, 则该扩展命名空间必须表示为绝对 URI, 该 URI 能够作为基准 URI,与 采用片段标识符形式的 designation 词元结合使用。

G 标准配置集

本附录是规范性的。

本附录规定或通过引用纳入以下标准 TTML 配置集:

每个 TTML 配置集都通过配置集 定义文档来定义, 该文档表示为 XML 文档,其根元素遵循 6.1.1 ttp:profile。

G.1 TTML2 完整配置集

TTML2 完整配置集旨在用于 表达对转换处理和呈现处理的最大符合程度。

注意:

此配置集是 DFXP 完整配置集的超集。

<?xml version="1.0" encoding="utf-8"?>
<!-- 此文件定义 ttml 的 "ttml2-full" 配置集 -->
<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/">
    <!-- 必需 (强制) 特性支持 -->
    <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" extends="#length-real">#length-real-version-2</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-image</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">#presentation-audio</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>
    <!-- 可选 (自愿) 特性支持 -->
  </features>
  <extensions xml:base="http://www.w3.org/ns/ttml/extension/">
    <!-- 必需 (强制) 扩展支持 -->
    <!-- 可选 (自愿) 扩展支持 -->
  </extensions>
</profile>

G.2 TTML2 呈现配置集

TTML2 呈现配置集旨在用于 表达对呈现处理的最低符合程度。

注意:

此配置集是 DFXP 呈现 配置集的超集。

<?xml version="1.0" encoding="utf-8"?>
<!-- 此文件定义 ttml 的 "ttml2-presentation" 配置集 -->
<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/">
    <!-- 必需 (强制) 特性支持 -->
    <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>
    <!-- 可选 (自愿) 特性支持 -->
    <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" extends="#length-real">#length-real-version-2</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-image</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-audio</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/">
    <!-- 必需 (强制) 扩展支持 -->
    <!-- 可选 (自愿) 扩展支持 -->
  </extensions>
</profile>

G.3 TTML2 转换配置集

TTML2 转换配置集旨在用于 表达对转换处理的最低符合程度。

注意:

此配置集是 DFXP 转换 配置集的超集。

<?xml version="1.0" encoding="utf-8"?>
<!-- 此文件定义 ttml 的 "ttml2-transformation" 配置集 -->
<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/">
    <!-- 必需 (强制) 特性支持 -->
    <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>
    <!-- 可选 (自愿) 特性支持 -->
    <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" extends="#length-real">#length-real-version-2</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-image</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">#presentation-audio</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/">
    <!-- 必需 (强制) 扩展支持 -->
    <!-- 可选 (自愿) 扩展支持 -->
  </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)

根容器的显示宽高比对应于 根容器的宽高比, 以拟在假想显示设备上呈现的显示像素 为衡量依据。 此显示宽高比通过 ttp:displayAspectRatio 属性显式指定, 该属性位于 tt 元素上,或者根据下文所述的 其他信息推断得出。

注意:

在完成所定义的 TTML 呈现处理后, 根容器像素的实际物理呈现 可能在宽高比、采样分辨率和色彩空间方面 经历多种变换。此类 TTML 后续 处理完全不在本规范的范围内。

存储宽高比 (SAR)

根容器的存储宽高比对应于 根容器的宽高比, 以逻辑像素 在文档坐标空间中的数量为衡量依据, 其中,双射(单射且满射)映射将每个逻辑像素与 唯一的显示像素关联起来。 此存储宽高比通过 tts:extent 属性显式指定,该属性位于 tt 元素上,或者根据下文所述的 其他信息推断得出。

当 tts:extent 属性指定在 tt 元素上时,则

  1. 如果 tts:extent 属性的值 由 两个以像素为单位的 <length> 表达式组成,则 存储宽高比被视为 已指定,其数值等于该范围的 宽度除以其高度;

  2. 否则(计算值为 contain), 存储宽高比被视为未指定,并根据下文所述的其他 信息推断得出。

注意:

逻辑像素本身没有固有的 宽高比;但是,当它被映射到 显示像素时,就会采用 下文规定的根容器像素宽高比所定义的固定值。

像素宽高比 (PAR)

根容器的像素宽高比定义了其每个显示像素 的宽高比,由此,每个逻辑像素 在 文档坐标空间中都采用 与其关联的 显示像素的固定宽高比,使得 DAR = SAR × PAR。 此像素宽高比通过 ttp:pixelAspectRato 属性显式指定,该属性位于 tt 元素上,或者根据下文所述的 其他信息推断得出。

以下各小节规定了如何根据文档中已指定的 宽高比来解析这些宽高比。

H.1.1 未指定宽高比

如果三种宽高比均未指定,则按照以下 有序步骤确定这三种宽高比:

  1. 如果存在关联媒体对象,且其 DAR 已定义, 则 DAR 的解析值为该关联媒体对象的显示宽高比; 否则,DAR 的值由 文档处理上下文(任意)确定;

  2. 随后根据下文的 H.1.2 指定一种宽高 比解析 SAR 和 PAR 的值。

H.1.2 指定一种宽高比

如果只指定了三种宽高比中的一种,则按如下方式确定另外两种 宽高比的解析值:

  1. 如果已指定 DAR,或已通过上文的 H.1.1 未指定宽高 比解析出该值, 则其解析值为其指定值或已解析值,而 SAR 和 PAR 的值按如下方式确定:

    1. SAR 的解析值为 DAR 的解析值;

    2. PAR 的解析值为 1(一)。

  2. 如果已指定 SAR,则其解析值为其指定值,而 DAR 和 PAR 的值 按如下方式确定:

    1. 如果存在关联媒体对象,且 其 DAR 已定义, 则 DAR 的解析值为该 关联媒体对象的显示宽高比,而 PAR 的值随后根据下文的 H.1.3 指定两种宽高 比解析得出;

    2. 否则,DAR 的解析值 由文档 处理上下文确定,而 PAR 的值 随后根据下文的 H.1.3 指定两种宽高 比解析得出;

  3. 如果已指定 PAR, 则其解析值为其指定值,而 DAR 和 SAR 的值按如下方式确定:

    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) 中所述, 逻辑像素没有固有的宽高比, 也就是说, 逻辑像素没有定义的形状,这进而 意味着它没有定义的大小。 只有当逻辑像素被映射到 显示像素时,它才具有固定的形状和 大小。 尽管如此,将逻辑像素视为正方形且具有 可测量的绝对大小通常很方便;但是,提醒读者不要过早得出这一 (可能不正确的)结论。

如果 tts:extent 属性的值 已在 tt 元素上指定,并且 由 两个以像素为单位的 <length> 表达式组成,则这两个 表达式表示 根容器区域的宽度和高度, 并且, 由此确定其综合 分辨率; 否则,根容器区域的综合分辨率 由 文档 处理上下文(任意)确定,但必须遵循 SAR 的解析值, 该值由上文的 H.1 宽高比确定。

注意:

在文档处理上下文 为根容器区域分配任意 分辨率的情况下,它可以 采用任何便于满足其内部处理约束 以及处理相应文档 实例的方式。 例如,它可以分配与 关联媒体对象的存储宽高比所对应的相同分辨率,或者评估 文档中长度表达式的精度, 以分配能够保持相同精度的逻辑分辨率。

H.3 坐标空间

根容器区域的坐标空间,也称为文档坐标空间, 是一个无界的二维平面,其上定义了一个逻辑像素闭集,该集合构成矩形 R,使得 所述像素位于 R 的边界内部,并且此坐标空间的原点 (位置)与 R 的左上角 重合,垂直轴上的正向像素向下延伸, 水平轴上的正向像素 向右延伸。 此外,R 的宽度和高度 被设置为 根容器区域的已解析分辨率。 最后,适用于 R 的宽高比根据上文所述的 DAR、SAR 和 PAR 的解析值建立。

除非适用更高层协议, 否则在处理 给定文档实例时,文档坐标空间仅确定 一次。

I 时间表达式语义

本附录是规范性的。

本附录规定了用于解释文档实例中时间表达式的语义。

注意:

下文使用的短语本地实时时间旨在对文档处理上下文中的虚拟实时时钟 建模,其中 本地表示紧邻此处理上下文的实现。 定义 与此虚拟时钟关系的目的是为便于讲解而建立一种在本地有效的时间 物理实现。

注意:

下文使用的短语播放速率旨在对文档处理上下文中的一个(可能可变的)参数 建模,其中 时间的播放(或解释)速率可以人为放慢或加快,例如, 当减慢或加快 关联媒体对象的播放速率时。不失一般性,以下讨论假定播放 速率固定。如果播放速率可变,则可能需要适当调整所得的计算结果。

文档处理上下文定义了适用的 纪元以及与纪元相关的任何偏移量, 以用于建立合成文档 同步基准。

I.1 时钟时基

使用 clock 时基运行时,以下语义适用于解释 时间表达式, 即 <time-expression> 所定义的表达式,以及它们 与媒体时间和本地实时时间的关系。

时钟时基 C 与本地实时时间 R 的关系, 在纪元 E(由 文档处理上下文定义)中表示 如下:

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 以秒为单位,其值等于 自参考时钟基准最近一次已过的午夜以来 添加(或减去)的闰秒(及其小数部分) 的总和;

并且 epochOffset 和 discontinuityOffset 仅在 根时间范围开始之前确定一次,使得 从确定值到 根时间范围开始之间的这段时间内, 不会出现本地午夜或参考时钟基准的不连续变化。

由 <time-expression> 表示的时间值表达式与 时钟时间 C 的关系如下:

TTML 语义 – 时间表达式与时钟时间的关系


如果 <time-expression> 的形式 不使用滴答 (t) 计量单位,则:

C = 3600 * hours + 60 * minutes + seconds

其中 hours、minutes 和 seconds 分量若存在,则从时间表达式中提取, 若不存在,则为零;此外,fraction 分量若存在,则将其加到 seconds 分量上,形成一个实数值秒数 分量。

否则,如果 <time-expression> 的形式使用 滴答 (t) 计量单位,则:

C = ticks / tickRate

注意:

时间表达式中的 frames 和 sub-frames 项以及帧 (f) 计量单位 在使用 clock 时基时不适用。

时钟时基 C 独立于媒体时间 M:

TTML 语义 – 时钟时间与媒体时间的关系


M ¬∝ C

注意:

也就是说,使用 clock 时基时, 定时与媒体时间脱钩(不一定成正比)。例如,如果媒体播放速率为零 (0),媒体 播放会暂停;但是,定时坐标 将继续按照时钟时间的自然进程推进,并与 参考时钟基准成正比。此外,如果媒体播放速率 在播放期间发生变化,呈现定时不会受到影响。

I.2 媒体时基

使用 media 时基运行时,以下语义适用于解释 时间表达式, 即 <time-expression> 所定义的表达式,以及它们 与媒体时间、文档时间和本地实时时间的关系。

I.2.1 与本地实时时间的关系

媒体时基 M 与本地实时时间 R 的关系, 在纪元 E(由 文档处理上下文定义)中表示如下:

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 值,预期 根据新的 playRate 值重新计算相应的 R 值。

I.2.2 与媒体时间的关系

由 <time-expression> 表示的时间值表达式与 媒体时间 M 的关系,根据 ttp:frameRate、ttp:subFrameRate 和 ttp:frameRateMultiplier 参数确定如下:

TTML 语义 – 时间表达式与媒体时间的关系


如果时间表达式使用 clock-time 形式,或者 不使用滴答 (t) 计量单位的 offset-time 形式,则:

M = referenceBegin + 3600 * hours + 60 * minutes + seconds + ((frames + (subFrames / subFrameRate)) / effectiveFrameRate)

其中 referenceBegin 根据 最近的祖先时间容器采用 并行 (par) 还是顺序 (seq) 语义来确定:如果为 并行,或者为顺序且不存在先前的兄弟 定时元素,则 referenceBegin 为对应于最近的祖先时间容器 起点的媒体时间,或者, 如果此时间容器为根时间范围,则为零 (0);否则, 如果为顺序且存在先前的兄弟 定时元素,则 referenceBegin 为对应于 紧邻的前一个兄弟 定时元素的活动结束点的媒体时间;

hours、minutes、seconds、 frames、subFrames 分量 若存在,则从时间表达式中提取,若不存在,则为零; 此外,如果时间表达式采用 clock-time 表达式的形式,则 fraction 分量若存在,将其加到 seconds 分量上,以形成 实数值的秒数 分量;或者,如果时间表达式 采用 offset-time 表达式的形式,则 fraction 分量若存在, 将其加到 time-count 分量上,以形成实数值的时间 计数分量,其依据为 指定的偏移计量单位;

subFrameRate 为 ttp:subFrameRate 参数的计算值;

并且 effectiveFrameRate(以每秒帧数为单位)为 frameRate * frameRateMultiplier,其中 frameRate 为 ttp:frameRate 参数的计算值,而 frameRateMultiplier 为 ttp:frameRateMultiplier 参数的计算值。

否则,如果时间表达式采用使用 滴答 (t) 计量单位的 offset-time 形式,则:

M = referenceBegin + ticks / tickRate

其中 referenceBegin 如上文所述;

ticks 分量从 时间表达式中提取;

并且 tickRate 为 ttp: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">第一段</p>
      <p xml:id="p2" begin="2s" end="3s">第二段</p>
   </div>
</body>
</tt>

示例片段 – 媒体定时 2
<tt ttp:timeBase="media" ...>
...
<body>
   <div xml:id="d1">
      <p xml:id="p1" begin="1s" end="2s">第一段</p>
      <p xml:id="p2" begin="3s" end="4s">第二段</p>
   </div>
</body>
</tt>

显示在没有其他外部信息时,文档时间到媒体 时间映射关系的定时图。
媒体时间

在此示例中,使用 [SMIL 3.0] 的术语,body 元素的隐式时长与其计算时长相同,这也就是 根时间 范围。但是,如果 文档处理 上下文指定了适用的媒体时间范围,该范围会限制 已解析的开始和结束时间,从而限制 根时间 范围。

在以下示例中,处理上下文定义 文档处于活动状态的媒体时间范围为 1.5s 到 3.5s,这也定义了根时间范围,因为在这两个时刻 均存在定时内容。

显示当媒体时间范围受到处理 上下文约束时,文档时间到媒体 时间映射关系的定时图。
媒体时间

灰色背景表示 文档处理 上下文将文档定义为非活动状态的时间段。 文档时间坐标空间 不受此变换影响。

如果文档处理上下文将媒体 时间范围定义为 0-3s,则 根时间范围 将为 p1 所定义的 1s 到 2s,而 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

hours、minutes、seconds、 frames、subFrames 分量 若存在,则从时间表达式中提取,若不存在,则为零; 此外,如果时间表达式采用 clock-time 表达式的形式,则 fraction 分量若存在,将其加到 seconds 分量上,以形成 实数值的秒数 分量;或者,如果时间表达式采用 offset-time 表达式的形式,则 fraction 分量若存在, 将其加到 time-count 分量上, 以形成实数值的时间计数分量,其依据为指定的偏移 计量单位;

droppedFrames 按如下方式计算:

1. 令 dropMode 为 ttp:dropMode 参数的计算值;

2. 如果 dropMode 为 dropNTSC,则令 droppedFrames = (hours * 54 + minutes - floor(minutes/10)) * 2;

3. 否则,如果 dropMode 为 dropPAL,则令 droppedFrames = (hours * 27 + floor(minutes/2) - floor(minutes/20)) * 4;

4. 否则,令 droppedFrames = 0;

frameRate 为 ttp:frameRate 参数的计算值;

subFrameRate 为 ttp:subFrameRate 参数的计算值;

并且 effectiveFrameRate(以每秒帧数为单位)为 frameRate * frameRateMultiplier,其中 frameRate 为 ttp:frameRate 参数的计算值,而 frameRateMultiplier 为 ttp: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 序列实例的集合中。

所有与 ISD 相关的词汇均定义于 TTML ISD 命名空间中,此处将该命名空间定义为 http://www.w3.org/ns/ttml#isd, 其推荐前缀为 isd。

注意:

除了使用 TTML ISD 命名空间中的元素之外,ISD 文档实例通常还 包含来自一个或多个 其他 TTML 命名空间的词汇,这些命名空间定义于 5.1 命名空间。

TTML 中间同步文档,简称 ISD 或 ISD 实例, 表示源 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 元素接受零个或多个 metadata 元素作为其子元素, 后跟零个或一个 ttp:profile 元素, 再后跟零个或多个 isd:isd 元素。

isd:isd 子元素必须按照其开始时间 所对应的 媒体时间排序;此外,任何两个 isd:isd 子元素的时间区间都不得(在时间上)重叠。

XML 表示 – 元素信息项:isd:sequence
<isd:sequence
  extent = xsd:string
  size = <non-negative-integer>
  version = <non-negative-integer>
  xml:base = <uri>
  xml:id = ID
  xml:lang = xsd:string
  {ISD 参数属性集中的任意属性}>
  内容: metadata*, ttp:profile?, isd:isd*
</isd:sequence>

如果指定了 extent 属性,则它必须遵循 <extent> 值 语法中由两个以像素为单位的 <length> 表达式组成的子集,在这种情况下,指定值 表示根容器区域的空间范围, 其定义见 H.2 分辨率, 此空间范围全局适用于 每个组成该序列的 中间同步文档, 这些文档由 isd:isd 子元素表示。

如果指定了 size 属性,则它必须是非负整数, 对应于 isd:isd 子元素的数量。 如果未指定,则必须将大小视为不确定,除非并直到 相应的 isd:sequence 元素结束,在这种 情况下,大小 可以通过检查确定。

注意:

在实时字幕 场景中,通常会省略 size 属性。

如果指定了 version 属性,则它必须是正整数(大于 零),对应于编写该 ISD 序列文档时使用的此 中间同步文档语法 规范的 版本。如果指定,则其数值必须大于或等于二 (2)。如果未指定,则必须将版本 视为等于二 (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 后代元素指定值为 prohibited 的 value 属性;

  • 没有任何 ttp:extension 后代元素指定值为 prohibited 的 value 属性。

此外,此类 ttp:profile 子元素必须指定一个配置集,该配置集等效于源 TTML 文档的合并 处理器配置集,其中已 获取所有外部引用的配置集文档。

注意:

允许在 isd:sequence 中指定单个 ttp:profile, 旨在提供一种简化的 机制,以声明 处理该文档时必须满足的处理器配置集要求(在没有 最终用户覆盖的情况下)。

J.1.2 isd:isd

isd:isd 元素用作以下两者之一: (1) 独立中间同步文档的文档根元素;或者 (2) 作为 isd:sequence 元素的子元素,该元素属于 相应的 中间同步文档 序列文档, 其中 isd:isd 元素派生自并替换根 tt 元素, 后者保留于每个中间同步文档形式 DOCinter 中,这些形式 由 构造中间文档 过程创建。

isd:isd 元素接受零个或多个 metadata 元素作为其子元素, 后跟零个或一个 ttp:profile 元素, 再后跟零个或多个 isd:css 元素, 最后跟零个或多个 isd:region 元素。

XML 表示 – 元素信息项:isd:isd
<isd:isd
  begin = <time-expression>
  end = <time-expression> | "indefinite"
  extent = xsd:string
  version = <non-negative-integer>
  xml:base = <uri>
  xml:id = ID
  xml:lang = xsd:string
  {ISD 参数属性集中的任意属性}>
  内容: metadata*, ttp:profile?, isd:css*, isd:region*
</isd:isd>

必须指定 begin 属性,其值必须采用 offset-time 形式的 <time-expression>,并且进一步 限制为使用以下计量单位: s(秒)、 f(帧)、 t(滴答),也可以省略计量单位,在这种情况下隐含为 s 秒。 这个 开始时间表示为相对于 文档时间坐标空间开始时间的偏移量, 该空间属于派生此 isd:isd 元素的源 TTML 文档。

同样必须指定 end 属性,且适用相同的约束。 如果 end 属性的值采用 <time-expression> 的形式, 则此结束时间表示为相对于文档时间坐标空间开始时间的偏移量, 该空间属于派生此 isd:isd 元素的源 TTML 文档; 否则(值为 indefinite),时间范围在 对此属性编码时尚不明确, 或者不存在时间结束点。

注意:

用 [SMIL 3.0] 的术语表述,这些 begin 和 end 属性的值 对应于活动时长相对于 文档起点的已解析开始和结束时间。

如果指定了 extent 属性,则它必须遵循 <extent> 值 语法中由两个以像素为单位的 <length> 表达式组成的子集,在这种情况下,指定值 表示根容器区域的空间范围, 其定义见 H.2 分辨率,此空间范围 适用于中间同步 文档, 该文档由此 isd:isd 元素表示。此外, 如果此 isd:isd 元素包含于 中间同步文档 序列文档中,则 如果容器 isd:sequence 元素 指定了 extent 属性,那么此 isd:isd 元素 不应指定 extent 属性;如果指定,则其值必须等于 相应的 extent 属性值,该属性指定于容器 isd:sequence 元素上。

必须指定 xml:lang 属性, 其所在的 isd:isd 元素若是独立的中间 同步文档文档;否则,可以指定此属性,并且如果 相应的 isd:isd 元素的默认语言不同于 其 父 isd:sequence 元素的默认语言,则应指定此属性。 如果其值为空,则表示没有适用于 中间 同步文档中内容的默认语言。否则, 指定值表示适用的默认语言。

version 属性遵循同名属性的语法和语义, 该同名属性位于 isd:sequence 元素类型上。 version 属性不得指定在 isd:isd 元素上,如果该元素 并非 文档根元素,即它是 isd:sequence 元素的子元素。

可以存在 ttp:profile 子元素, 如果相应的 isd:isd 元素是独立的中间 同步文档文档,在这种情况下,适用的约束和语义与 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 元素接受零个或多个 metadata 元素作为其子元素。

XML 表示 – 元素信息项:isd:css
<isd:css
  xml:base = <uri>
  xml:id = ID
  xml:lang = xsd:string
  {任意样式属性}
  内容: metadata*
</isd:css>

对于任意一对 isd:css 子元素,它们属于同一个 isd:isd 元素, 分别为 S1 和 S2,S1 的指定样式集必须 与 S2 的指定样式集不同。为了比较两个 指定样式集,必须先将样式按规范顺序排列,然后 逐 项比较其值是否相等,其中规范顺序遵循限定 属性名的 顺序,每个限定名由以下元组组成: <namespace URL, local name>, 并且这些元组按区分大小写的字符串字典序逐分量 比较。

J.1.4 isd:region

isd:region 元素用于表示布局和呈现区域 以及选入该区域的内容,这些内容采用 body 元素及其后代内容元素的形式。

isd:region 元素接受零个或多个 metadata 元素作为其子元素, 后跟零个或多个 animate 元素, 再后跟恰好一个 body 元素。

XML 表示 – 元素信息项:isd:region
<isd:region
  style = IDREF
  ttm:role = xsd:string
  xml:base = <uri>
  xml:id = ID
  xml:lang = xsd:string
  内容: metadata*, animate*, body
</isd:region>

如果 isd:region 元素所表示区域的计算样式集 不等于 适用于 region 的初始样式值集合,则 必须指定 style 属性,该属性引用一个 isd:css 元素,此元素指定该 区域的计算样式集。

以下约束适用于 body 元素 及其后代元素:

  • 未指定 animate 属性;

  • 未指定 begin 属性;

  • 未指定 dur 属性;

  • 未指定 end 属性;

  • 未指定 region 属性;

  • 未指定 timeContainer 属性;

  • 未指定 TT 样式命名空间中的任何属性;

  • 不存在 set 元素;

  • 每个有意义文本节点都必须是 span 元素的子节点,且该元素不包含任何其他 子节点。

此外,对于 body 元素 B 以及 它的每个后代内容元素 C,如果 B 或每个 C 的计算样式集 不等于其父元素的计算样式集,则该元素(B 或 C)必须指定 style 属性,该属性引用一个 isd:css 元素, 此元素指定该 元素的计算样式集。

J.2 ISD 参数属性集

已定义的参数 属性中的以下子集 可以按照上文所述用于 isd:sequence 或 isd:isd 元素:

J.3 ISD 交换

采用中间同步文档 语法的具体文档实例必须 使用 UTF-8 字符编码,编码为格式良好的 [XML 1.0] 文档。 此外,此类文档必须指定 isd:sequence 元素或 isd:isd 元素作为文档根元素。

当交换由具体 ISD 序列或 ISD 实例构成的资源,并使用媒体 类型来标识该资源的 内容类型时,应使用媒体类型 application/ttml+xml,关于该类型, 另请参见 [TTML1] 附录 C。 如果使用此媒体类型,则不得指定可选的 profile 参数,或者, 如果已指定,则处理器必须忽略它。

K 参考文献

本附录是规范性的。

数据编码
S. Josefsson, Base16、Base32 和 Base64 数据 编码, RFC 4648,2006 年 10 月,IETF。(参见 http://www.rfc-editor.org/rfc/rfc4648.txt。)
GPS
全球 定位系统,美国空军。 (参见 https://www.gps.gov/technical/。)
JLREQ
Richard Ishida 等, 日文排版 需求 W3C 工作组说明,2012 年 4 月 3 日。 (参见 http://www.w3.org/TR/2012/NOTE-jlreq-20120403/。)
媒体查询
Florian Rivoal, 媒体查询, W3C 推荐标准,2012 年 6 月 19 日。(参见 http://www.w3.org/TR/2012/REC-css3-mediaqueries-20120619/。)
MIME
Ned Freed 和 Nathaniel Borenstein, 多用途互联网 邮件扩展 (MIME) 第一部分:互联网消息正文的格式, RFC 2045,1996 年 11 月,IETF。(参见 http://www.rfc-editor.org/rfc/rfc2045.txt。)
MIME 媒体类型
Ned Freed 和 Nathaniel Borenstein, 多用途互联网 邮件扩展 (MIME) 第二部分:媒体类型, RFC 2046,1996 年 11 月,IETF。(参见 http://www.rfc-editor.org/rfc/rfc2046.txt。)
PNG
David Duce,编, 便携式网络图形 (PNG) 规范(第二版), W3C 推荐标准,2003 年 11 月 10 日。(参见 https://www.w3.org/TR/2003/REC-PNG-20031110/。)
RELAX NG
ISO/IEC 19757-2:2003, 信息技术 – 文档 模式定义语言 (DSDL) – 第 2 部分:基于正则文法的验证 – RELAX NG, 国际标准化组织 (ISO)。
注音
Masayasu Ishikawa 等, 注音标注 W3C 推荐标准,2001 年 5 月 31 日。 (参见 http://www.w3.org/TR/2001/REC-ruby-20010531/。)
SMIL 3.0
Dick Bultermann 等, 同步 多媒体集成语言 (SMIL 3.0), W3C 推荐标准,2008 年 12 月 1 日。(参见 http://www.w3.org/TR/2008/REC-SMIL3-20081201/。)
SMPTE ST 12-1
SMPTE ST 12-1:2014, 时间和控制码, SMPTE 标准。
SRGB
IEC 61966-2-1:1999/AMD1:2003, 多媒体 系统与设备 – 颜色测量与管理 – 第 2-1 部分:颜色管理 – 默认 RGB 色彩空间 – sRGB,国际电工 委员会 (IEC)。
SVG 1.1
Erik Dahlström 等,编, 可缩放 矢量图形 (SVG) 1.1 第二版,W3C 推荐标准,2011 年 8 月 16 日。(参见 http://www.w3.org/TR/2011/REC-SVG11-20110816/。)
TTML1
Glenn Adams 和 Pierre-Anthony Lemieux,编, 定时文本标记语言 1 (TTML1) (第三版), W3C 推荐标准,2018 年 11 月 08 日。(参见 https://www.w3.org/TR/2018/REC-ttml1-20181108/。)
TTML 配置集注册表
Glenn Adams 和 Mike Dolan,编, TTML 媒体类型定义与配置集 注册表, W3C 工作组说明。(参见 https://www.w3.org/TR/ttml-profile-registry/。)
UAAG
Ian Jacobs、Jon Gunderson 和 Eric Hansen,编, 用户 代理无障碍指南 1.0,W3C 推荐标准,2002 年 12 月 17 日。(参见 http://www.w3.org/TR/2002/REC-UAAG10-20021217/。)
UAX9
M. Davis、A. Lanin 和 A. Glass,Unicode 双向 算法,Unicode 联盟,2017 年 5 月 14 日。(参见 http://www.unicode.org/reports/tr9/tr9-37.html。)
UAX14
Asmus Freytag,断行 属性,Unicode 联盟,2005 年 8 月 29 日。(参见 http://www.unicode.org/reports/tr14/tr14-17.html。)
URI
T. Berner-Lee、R. Fielding 和 L. Masinter, 统一资源标识符 (URI): 通用语法, RFC 3986,2005 年 1 月,IETF。(参见 http://www.rfc-editor.org/rfc/rfc3986.txt。)
UTC
建议书 TF.460-6, 标准频率和时间信号 发射,国际 电信联盟无线电通信部门 (ITU-R)。
UTR50
K. Ishii,Unicode 竖排文本 布局,Unicode 联盟,2016 年 11 月 23 日。(参见 http://www.unicode.org/reports/tr50/tr50-17.html。)
WCAG
Ben Caldwell 等,编, Web 内容无障碍指南 (WCAG) 2.0,W3C 推荐标准,2008 年 12 月 11 日。(参见 http://www.w3.org/TR/2008/REC-WCAG20-20081211/。)
XLink 1.1
Steve DeRose 等 XML 链接语言 (XLink) 1.1 版, W3C 推荐标准,2010 年 5 月 06 日。(参见 http://www.w3.org/TR/2010/REC-xlink11-20100506/。)
XML 1.0
Tim Bray 等 可扩展标记语言 (XML) 1.0(第五版),W3C 推荐标准,2008 年 11 月 26 日。(参见 http://www.w3.org/TR/2008/REC-xml-20081126/。)
XML 基准
Jonathan Marsh 和 Richard Tobin,编, XML 基准(第二 版), W3C 推荐标准,2009 年 1 月 28 日。(参见 http://www.w3.org/TR/2009/REC-xmlbase-20090128/。)
XML ID
Jonathan Marsh、Daniel Veillard、Norman Walsh,编, xml:id 1.0 版, W3C 推荐标准,2005 年 9 月 09 日。(参见 http://www.w3.org/TR/2005/REC-xml-id-20050909/。)
XML 信息集
John Cowan 和 Richard Tobin,编, XML 信息集(第二 版), W3C 推荐标准,2004 年 2 月 04 日。(参见 http://www.w3.org/TR/2004/REC-xml-infoset-20040204/。)
XML 命名空间 1.0
Tim Bray 等 XML 中的命名空间 1.0(第三版),W3C 推荐标准,2009 年 12 月 8 日。(参见 http://www.w3.org/TR/2009/REC-xml-names-20091208/。)
XML 模式第 1 部分
Henry S. Thompson、David Beech、 Murray Maloney、Noah Mendelsohn,编, XML 模式第 1 部分: 结构, W3C 推荐标准,2004 年 10 月 28 日。(参见 https://www.w3.org/TR/2004/REC-xmlschema-1-20041028/。)
XML 模式第 2 部分
Paul Biron 和 Ashok Malhotra, XML 模式第 2 部分: 数据类型, W3C 推荐标准,2004 年 10 月 28 日。(参见 https://www.w3.org/TR/2004/REC-xmlschema-2-20041028/。)
XSL-FO 1.1
Anders Berglund, 可扩展样式表语言 (XSL) 1.1 版, W3C 推荐标准,2006 年 12 月 05 日。(参见 http://www.w3.org/TR/2006/REC-xsl11-20061205/。)

L 其他参考文献(非规范性)

CC-DECODER-REQ
模拟电视接收机的隐藏式 字幕解码器 要求, 美国联邦法规汇编,第 47 篇,第 1 卷,第 79 部分,§79.101。(参见 http://www.gpo.gov/fdsys/pkg/CFR-2012-title47-vol4/pdf/CFR-2012-title47-vol4-sec79-101.pdf。)
CLREQ
Bobby Tung 等, 中文排版 需求, W3C 工作草案,2017 年 12 月 29 日。 (参见 https://www.w3.org/TR/2017/WD-clreq-20171229/。)
CSS2
Bert Bos 等, 层叠 样式表,第 2 级第 1 次修订,W3C 推荐标准,2011 年 6 月 07 日。 (参见 http://www.w3.org/TR/2011/REC-CSS2-20110607/。)
CSS 背景与边框
Bert Bos、Elika Etamad 和 Brad Kemper, CSS 背景与 边框模块第 3 级, W3C 候选推荐标准,2017 年 10 月 17 日。(参见 https://www.w3.org/TR/2017/CR-css-backgrounds-3-20171017/。)
CSS 颜色
Tantek Çelik、Chris Lilley 和 L. David Baron, CSS 颜色 模块第 3 级,W3C 推荐标准,2018 年 6 月 19 日。(参见 https://www.w3.org/TR/2018/REC-css-color-3-20180619/。)
CSS 弹性布局
Tab Atkins、Elika Etemad 和 Rossen Atanassov, CSS 弹性盒布局模块 第 1 级, W3C 候选推荐标准,2018 年 11 月 19 日。(参见 https://www.w3.org/TR/2018/CR-css-flexbox-1-20181119/。)
CSS 字体
John Daggett、Myles Maxfield 和 Chris Lilley, CSS 字体模块第 3 级, W3C 推荐标准,2018 年 9 月 20 日。(参见 https://www.w3.org/TR/2018/REC-css-fonts-3-20180920/。)
CSS 分片
Rossen Atanassov 和 Elika Etemad, CSS 分片模块第 3 级, W3C 候选推荐标准,2018 年 12 月 04 日。(参见 https://www.w3.org/TR/2018/CR-css-break-3-20181204/。)
CSS 注音
Elika Etemad 和 Koji Ishii, CSS 注音布局模块第 1 级, W3C 工作草案,2014 年 8 月 05 日。(参见 https://www.w3.org/TR/2014/WD-css-ruby-1-20140805/。)
CSS 文本
Elika Etamad、Koji Ishii 和 Florian Rivoal CSS 文本模块第 3 级, W3C 工作草案,2019 年 11 月 13 日。(参见 https://www.w3.org/TR/2019/WD-css-text-3-20191113/。)
CSS 文本装饰
Elika Etamad 和 Koji Ishii, CSS 文本装饰模块 第 3 级, W3C 候选推荐标准,2019 年 8 月 13 日。(参见 https://www.w3.org/TR/2019/CR-css-text-decor-3-20190813/。)
CSS 变换
Simon Fraser、Dean Jackson、Theresa O'Connor 和 Dirk Schulze, CSS 变换模块第 1 级, W3C 候选推荐标准,2019 年 2 月 14 日。(参见 https://www.w3.org/TR/2019/CR-css-transforms-1-20190214/。)
CSS 书写模式
Elika Etamad 和 Koji Ishii, CSS 书写模式第 3 级, W3C 推荐标准,2019 年 12 月 10 日。(参见 https://www.w3.org/TR/2019/REC-css-writing-modes-3-20191210/。)
CTA-608-E
EIA/CTA-608-E, 第 21 行数据 服务,EIA/CTA 标准, 消费技术协会 (CTA)。
CTA-708-E
CTA-708-D, 数字电视 (DTV) 隐藏式字幕,CTA 标准, 消费技术协会 (CTA)。
Data 方案
L. Masinter, "data" URL 方案, RFC 2397,1998 年 8 月,IETF。(参见 http://www.rfc-editor.org/rfc/rfc2397.txt。)
DCMES 1.1
都柏林核心元数据倡议组织, 都柏林核心元数据元素集,1.1 版: 参考说明。(参见 http://dublincore.org/documents/dces/。)
EBU-TT-D
EBU Tech 3380, EBU-TT-D 字幕分发格式, 1.0 版, 欧洲广播联盟 (EBU),2015 年 3 月。 (参见 https://tech.ebu.ch/publications/tech3380。)
EBU-TT-Live
EBU Tech 3370, EBU-TT 第 3 部分:实时字幕 应用,1.0 版,欧洲广播联盟 (EBU),2017 年 5 月。 (参见 https://tech.ebu.ch/publications/tech3370。)
DVBSS
ETSI EN 300 743, 数字 视频广播 (DVB);字幕系统,1.5.1 版,ETSI,2014 年 1 月。 (参见 https://www.etsi.org/deliver/etsi_en/300700_300799/300743/01.05.01_60/en_300743v010501p.pdf。)
HTML
Anne van Kesteren、Domenic Denicola、Ian Hickson、Philip Jägenstedt 和 Simon Pieters,编, HTML 标准, WHATWG。提交快照(使用此版本或更高版本)。2020 年 1 月 22 日。(参见 https://html.spec.whatwg.org/commit-snapshots/2793ee4a461c6c39896395f1a45c269ea820c47e/。)
ISOBMFF TT
ISO/IEC 14496-30, 信息技术 – 视听对象编码 – 第 30 部分:ISO 基础媒体文件格式中的定时文本和其他视觉叠加内容, 国际标准化组织 (ISO)。
ITU BT.2100-1
建议书 ITU-R BT.2100-1, 用于制作和国际节目交换的高动态范围 电视图像参数值
MPEG DASH
ISO/IEC 23009-1, 信息技术 – 基于 HTTP 的动态自适应流 (DASH), 国际标准化组织 (ISO)。
MPEG7-5
ISO/IEC 15938-5, 信息技术 – 多媒体内容描述 接口 – 第 5 部分:多媒体描述方案, 国际标准化组织 (ISO)。
NSOriginal
Tim Bray 等 命名空间 在 XML 中,W3C 推荐标准,1999 年 1 月 14 日。(参见 http://www.w3.org/TR/1999/REC-xml-names-19990114/。)
NSState
Norman Walsh,编, XML 命名空间中 名称的处置,TAG 技术结论,2006 年 1 月 9 日。(参见 http://www.w3.org/2001/tag/doc/namespaceState-2006-01-09。)
OFF
ISO/IEC 14496-22, 信息技术 – 视听对象编码 – 第 22 部分:开放字体格式, 国际标准化组织 (ISO)。

注意:

有关本规范公开提供的免费版本,请参见 http://standards.iso.org/ittf/PubliclyAvailableStandards/c066391_ISO_IEC_14496-22_2015.zip。 有关相关 OpenType 规范的 Microsoft 版本,请参见 https://docs.microsoft.com/en-us/typography/opentype/spec/。 OpenType 是 Microsoft Corporation 的注册商标。

PQ PNG
Pierre-Anthony Lemieux, 在 PNG 格式中使用 ITU BT.2100 PQ EOTF, W3C 工作组说明,2017 年 9 月 11 日。(参见 https://www.w3.org/TR/png-hdr-pq/。)
QAF SG
Karl Dubost 等, 质量保证 框架:规范指南,W3C 推荐标准,2005 年 8 月 17 日。(参见 http://www.w3.org/TR/qaframe-spec/。)
SMITH
Smith, Michael D.; Malia, Jason, 控制立体 3D 图像中的微缩效应,发表于《动态图像期刊》,SMPTE ,第 124 卷,第 3 期, 第 50-58 页,2015 年 4 月 doi: 10.5594/m001513。
SMPTE RP 2052-11:2013
SMPTE RP 2052-11:2013, 从 CTA-708 字幕数据 转换为 SMPTE-TT, SMPTE 推荐实践。
SMPTE ST 170
SMPTE ST 170:2004, 电视 – 复合模拟视频 信号 – 演播室应用的 NTSC,SMPTE 标准。
SMPTE ST 2052-1
SMPTE ST 2052-1:2013, 定时文本格式 (SMPTE-TT), SMPTE 标准。
SSML 1.0
Daniel Burnett 等, 语音合成标记 语言 (SSML) 1.0 版, W3C 推荐标准,2004 年 9 月 7 日。(参见 http://www.w3.org/TR/2004/REC-speech-synthesis-20040907/。)
TTAF1-REQ
Glenn Adams,编, 定时文本 (TT) 创作格式 1.0 使用 场景与需求, W3C 工作组说明,2006 年 4 月 27 日。(参见 http://www.w3.org/TR/2006/NOTE-ttaf1-req-20060427/。)
WEBAUDIO
Paul Adenot、Raymond Toy,编, Web Web 音频 API,W3C 候选推荐标准,2018 年 9 月 18 日。(参见 https://www.w3.org/TR/2018/CR-webaudio-20180918/。)
XHTML 1.0
Steven Pemberton 等, XHTML™ 1.0, 可扩展超文本标记语言(第二版), W3C 推荐标准,2002 年 8 月 01 日。(参见 http://www.w3.org/TR/2002/REC-xhtml1-20020801/。)
XML 指南
Scott Hollenbeck 等, 在 IETF 协议中使用可扩展 标记语言 (XML) 的指南, RFC 3470,2003 年 1 月,IETF。(参见 http://www.rfc-editor.org/rfc/rfc3470.txt。)
XML 媒体类型
Makato Murata、Simon St. Laurent、 Kan Khon,编,XML 媒体 类型, RFC 3023,2001 年 1 月,IETF。(参见 http://www.rfc-editor.org/rfc/rfc3023.txt。)
XYZ
ISO 11664-1:2007, ISO/CIE 联合标准:色度学第 1 部分。 CIE 标准色度观察者, 国际标准化组织 (ISO)。 (参见 https://www.iso.org/standard/52495.html。)
XPROC
Norman Walsh、Alex Milowski、Henry S. Thompson,编, XProc:一种 XML 管道语言, W3C 推荐标准,2010 年 5 月 11 日。 (参见 https://www.w3.org/TR/xproc/。)
XSLT3
XSL 转换 (XSLT) 3.0 版, Michael Kay,编。, W3C 推荐标准,2017 年 6 月 8 日。 (参见 https://www.w3.org/TR/xslt-30/。)
FINGER
Nick Doty,编,在 Web 规范中缓解 浏览器指纹识别, W3C 兴趣组说明,2019 年 3 月 28 日。(参见 https://www.w3.org/TR/2019/NOTE-fingerprinting-guidance-20190328/。)

M 需求(非规范性)

定时文本标记语言 (TTML),也称为定时文本创作 格式 (TTAF) 的分发格式交换 配置集 (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:agent、ttm: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:gain、 tta:pan、 tta:pitch 和 tta:speak。
R306 样式参数 – 视觉 P 支持 绝对位置、 背景颜色、 双向处理、 块推进方向尺寸、 边框(前、后、起始、结束)、 颜色、 不显示、 行内块显示、 显示对齐、 字体族、 字体大小、 字体样式、 字体粗细、 高度、 行内推进方向尺寸、 行高、 换行选项、 不透明度、 原点、 溢出、 内边距(前、后、起始、结束)、 相对位置、 文本对齐、 文本装饰、 文本阴影、 可见性、 空白折叠、 空白处理、 宽度、 书写模式、 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 参见 animate、animation 和 set
R501 滚动动画 N
R502 高亮动画 S <set tts:backgroundColor="..."/>
R503 淡入淡出过渡动画 S <animate tts:opacity="..."/>
R504 动画样式参数 – 听觉 P <animate tta:pan="..."/> ,也适用于 tta:gain 、tta:pitch 和 tta:speak
R505 动画样式参数 – 视觉 P 支持对以下内容进行动画处理: 背景颜色、 边框颜色、 颜色、 显示、 不透明度、 原点、 可见性
N506 动画内容 S
R600 元数据项关联 S 参见 metadata、Metadata.class
R601 元数据项组成部分 P 支持名称、值
R602 元数据项值表示 P 参见 metadata
R603 元数据项可扩展性 S 参见 metadata 和 ttm:item
R604 元数据项验证 S 参见 metadata
R690 优先使用都柏林核心 N 使用 ttm:copyright、ttm:desc、ttm:title 和 通用的 ttm:item

注意:

  1. R217 包含一项有关原始文本存在性的子需求;但是,本 规范不对作者的使用方式 施加限制,因此该子需求已被排除在范围之外。

N 词汇派生(非规范性)

本附录提供有关 TTML 词汇派生的信息,分别描述元素和 属性的派生。

N.1 元素派生

表 N-1 – 元素的第一列 指定一个 TTML 元素词汇项;第二列指定该 词汇项所基于的语法和(或)语义模型; 第三列指定定义 该模型的参考文献(如果指出了模型); 第四列指定有关派生的详细信息;最后 一列引用描述派生性质的 附加注释。

在描述派生详细信息的第四列中,使用一种 记法来表示属性的添加或移除。 例如,在 tt:div 元素的派生中, 详细信息列包含 "-@class",表示 为 xhtml:div 模型元素指定的 class 属性未被指定用于 对应的 TTML 元素;相反,详细信息列包含 "+@begin",表示添加了一个 begin 属性, 而该属性未被指定用于 xhtml:div 模型 元素。

表 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] -@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:*; 内容模型 缩减为零个或多个分区 (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 方案], [数据编码] 概念性派生 4
tt:data 无 [Data 方案], [数据编码] 概念性派生 4
tt:div xhtml:div [XHTML 1.0] -@class, -@dir, -@lang, -@on*, -@title; +@begin, +@dur, +@end, +@region, +@timeContainer, +@ttm:*, +@tts:*, +@xml:space; 内容模型 缩减为零个或多个段落 (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] -@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] -@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 或换行 (br) 子节点,并 扩展为包含可选的 metadata 和 animation 子元素 1,2,3
tt:style 样式声明 [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] 概念性派生 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:lang 和 xml:space 属性, 以支持其继承语义在 外部命名空间元素的上下文中运作。

  4. 派生仅是概念性(观念性)的。

  5. 已删除

  6. attributeName 和 to 属性(属于 svg:set)被替换为 直接表达目标属性名称和值的方式,即使用 tts:* 属性。

  7. CSS 样式声明语法通过使用 TT 样式命名空间中定义的属性映射到 XML。

  8. xml:id 属性被定义为可用于所有元素类型。

  9. style 属性在 10.2.1 style 列出的元素类型上受到支持。

  10. 派生自 @requiredExtensions 和 @requiredFeatures 在 svg:svg 元素上的用法, 但进行了扩展,以支持单独指定可选性。

  11. 派生自 @baseProfile 和 @version 在 svg:svg 元素上的用法。

  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 无 用于标明内容的主体
ttm:role 无 用于标明内容的角色
ttp:cellResolution 无 表示基于单元格的坐标所使用的均匀网格分辨率
ttp:clockMode 无 确定如何解释时间表达式
ttp:frameRate 无 表示整数帧率
ttp:frameRateMultiplier 无 用于表示非整数的有理数帧率
ttp:markerMode 无 表示标记连续性语义
ttp:pixelAspectRatio 无 表示根容器的像素宽高比
ttp:profile 无 表示 TTML 配置集,由文档 实例使用
ttp:dropMode 无 表示帧计数(丢帧)模式
ttp:subFrameRate 无 表示子帧率
ttp:tickRate 无 用于解释基于滴答的时间表达式
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 属性表达)是 media、smpte 还是 clock,分别表示以下之一: (1) 相对于与媒体时间线关联的隐式同步基准的 偏移量,(2) 表示 隐式媒体标记出现的事件时间,或 (3) 挂钟 时间。

  2. 在语法上按如下方式缩减和扩展 [SMIL 3.0] 的 Clock-value 语法: (1) 要求非负的 Full-clock-value 或 Timecount-value; (2) 如果为 Full-clock-value, 则 hours 必须为两位或更多位数字; (3) 如果为 Timecount-value,则 metric 必须 指定; (4) 使用 m 作为 min 计量单位的别名来表示 分钟; (5) 添加 f 和 t 计量单位,分别表示帧和 滴答; (6) 为 Full-clock-value 中可选的 Fraction 添加另一种表达方式,即指定帧数或带有子帧数的 帧数。

  3. 时间表达式的解释进一步受到以下 属性所表达参数的约束: ttp:clockMode、 ttp:dropMode、 ttp:frameRate、 ttp:frameRateMultiplier、 ttp:markerMode、 ttp:subFrameRate、 ttp:tickRate,以及 ttp: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] DOM 结构,其元素被赋予所述的 样式属性。

注意:

在 TTML 中,样式属性名称和值被规范化为使用 lowerCamelCase 命名约定。

N.2.1.1 tts:backgroundClip
参考文献 [CSS 背景与边框], §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 背景与边框], §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 背景与边框], §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 背景与边框],§4 和 §5
模型 border
值 -inherit
注释 无
N.2.1.9 tts:bpd
参考文献 height 属性,由 [XSL-FO 1.1] §7.15.6 和 [CSS2] §10.5 定义
模型 插入模型
值 值直接映射
注释 无
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 书写模式], §2.1
模型 direction direction
值 -inherit。特殊继承 语义适用。 特殊继承 语义适用。
注释 无` 无`
N.2.1.12 tts:disparity

无派生,即由本规范引入。

注意:

tts:disparity 的计算值等于 [DVBSS] 中定义的视差位移值的一半。

N.2.1.13 tts:display
参考文献 [CSS2], §9.2.4
模型 display
值 仅 auto、none
注释 无
N.2.1.14 tts:displayAlign
XSL 派生 CSS 派生
参考文献 [XSL-FO 1.1], §7.14.4 [CSS 弹性布局], §8.2
模型 display-align justify-content(参见下文注释)
值 -inherit, +justify
  • before 映射到 flex-start

  • center 映射到 center

  • after 映射到 flex-end

  • justify 映射到 space-between

注释 无 CSS 提供多种布局;其中一种布局提供与 相应的 tts:displayAlign 属性等效的语义,此处描述如下:
  • 使用弹性布局,将主轴设置为垂直方向从上到下: 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 字体], §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 变换], §9.1
模型 skewX() 和 skewY() 二维变换函数
值
  • skewX() 在行内推进方向为 X 轴时适用;

  • skewY() 在行内推进方向为 Y 轴时适用;

  • 百分比值必须映射为以度为单位的角度。

注释 [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 字体], §6.11
模型 font-variant-east-asian 和 font-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
参考文献 width 属性,由 [XSL-FO 1.1] §7.15.14 和 [CSS2] §10.2 定义
模型 插入模型
值 插入值
注释 插入注释
N.2.1.25 tts:letterSpacing
参考文献 [CSS 文本], §8.2
模型 letter-spacing
值 值直接映射
注释 无
N.2.1.26 tts:lineHeight

行堆叠语义旨在与 CSS 行盒堆叠策略一致。

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
注释 本规范旨在使 行的分配矩形与 per-inline-height-rectangle 保持一致,后者定义于 [XSL-FO 1.1] §4.5,即使用 CSS 风格的 行盒堆叠策略。 无
N.2.1.27 tts:luminanceGain

无派生,即由本规范引入。

N.2.1.28 tts:lineShear
参考文献 [CSS 变换], §9.1
模型 skewX() 和 skewY() 二维变换函数
值
  • skewX() 在行内推进方向为 X 轴时适用;

  • skewY() 在行内推进方向为 Y 轴时适用;

  • 百分比值必须映射为以度为单位的角度。

注释 [SVG 1.1] 中提供了类似的变换函数
N.2.1.29 tts:opacity
参考文献 [CSS 颜色], §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 -calc, -inherit, -unset
注释 使用相对于书写模式的内边距属性 而不是绝对内边距属性来表达。 TTML 和 XSL 边缘描述符映射到抽象的流 相对边缘描述符,其定义见 [CSS 书写 模式] §6.2:
  • before 映射到 block-start

  • end 映射到 inline-end

  • after 映射到 block-end

  • start 映射到 inline-start

这些抽象边缘描述符随后映射到物理边缘, 其定义见 [CSS 书写模式] §6.4。
N.2.1.33 tts:position
参考文献 [CSS 背景与边框], §3.6
模型 background-position
值 值直接映射
注释 无
N.2.1.34 tts:ruby
参考文献 [注音] 和 [CSS 注音]。
模型 ruby-*
值 参见注释和规范正文。
注释 另请参见 [JLREQ] §3.3,以获取更多信息。也可以 映射到 [HTML] 注音标记。
N.2.1.35 tts:rubyAlign
参考文献 [CSS 注音], §4.3
模型 ruby-align
值 +end, +withBase. 本规范扩展了此样式属性的语义。
注释 参考文献中展示的示例及其渲染结果适用。
N.2.1.36 tts:rubyPosition
参考文献 [CSS 注音], §4.1
模型 插入模型
值 插入值
注释 参考文献中展示的示例及其渲染结果适用,但须考虑 本规范定义的 映射。
N.2.1.37 tts:rubyReserve

无派生,即由本规范引入。

N.2.1.38 tts:shear
参考文献 [CSS 变换], §9.1
模型 skewX() 和 skewY() 二维变换函数
值
  • skewX() 在行内推进方向为 X 轴时适用;

  • skewY() 在行内推进方向为 Y 轴时适用;

  • 百分比值必须映射为以度为单位的角度。

注释 [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 添加了依赖于书写模式的值 start 和 end, 它们可视为抽象的流相对方向,并映射到 物理方向, 其依据为 [CSS 书写模式] §6.4。参见 tts:padding 的 CSS 派生以获取更多 详细信息。
N.2.1.41 tts:textCombine
参考文献 [CSS 书写模式], §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 语义。 此外, 值 none 的语义与 CSS 中同名值的语义不同,因为 在 TTML 中,它被定义为 等效于 noUnderline、noLineThrough 和 noOverline,这些值 均未在 CSS 中定义,而且它们的语义均会导致 TTML 中继承的装饰被 移除,而 CSS 并不(直接)支持此能力。
N.2.1.43 tts:textEmphasis
参考文献 [CSS 文本装饰], §3
模型
值 除 auto 外,值直接映射。 auto 的语义依赖于书写模式。
注释 无
N.2.1.44 tts:textOrientation
参考文献 [UTR50] 和 [CSS 书写模式], §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 文本装饰], §4
模型 text-shadow
值 值直接映射
注释 无
N.2.1.47 tts:unicodeBidi
参考文献 [XSL-FO 1.1],§7.29.6 和 [CSS 书写 模式],§2.2
模型 unicode-bidi
值 -inherit,+isolate
注释 添加 isolate,其来源为 [CSS 书写模式]
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 框架符合性(非规范性)

本附录规定本规范对以下文档所定义的 要求和指南的符合性:QA 框架规范指南,[QAF SG]。

O.2 指南

表 O-2 – QA 框架指南检查表
指南 是 否 不适用 注释
良好 实践 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. 测试断言和测试套件将在进入 提议推荐标准(PR)阶段之前提供。

  4. 请参阅 3.2 处理器符合性中的准则 #3, 以及 TTML 抽象文档实例的定义。

  5. 此版本的 TTML 未废止任何特性。

P 安全与隐私注意事项(非规范性)

P.1 使用 XML 作为具体编码

当 [XML 1.0] 用作 定时文本文档实例的具体编码时, 以下文档规定的安全注意事项适用:[XML 媒体类型] 和 [XML 指南]。

注意:

XML 实体不包含在简化 XML 信息集中,该信息集属于 一个定时文本文档实例; 尽管如此, 仍鼓励实现提供针对递归实体展开的防护, 或在 TTML 处理器中完全阻止实体展开。

P.2 文档处理

定时文本文档实例旨在 由内容处理器以某种方式进行处理。 虽然本规范定义了此类处理器对 定时文本文档实例进行符合性处理的含义, 但该处理器的实际实现不属于本规范的范围。

P.3 资源获取

本规范定义的机制允许定时 文本文档实例 引用外部资源,包括音频、字体、图像以及无类型(通用)数据 资源。 获取此类资源,以及获取 定时文本文档实例的具体表示, 均完全由内容处理器控制。因此, 为允许或限制对此类资源的访问而设计的任何控制措施也不属于 本规范的范围。

获取外部资源时,内容处理器应确定是否需要执行 创建潜在 CORS 请求,其定义见 [HTML] §2.6,获取资源。

如果内容 处理器阻止获取此类资源, 则整个文档或文档的某些部分可能无法按预期进行处理, 因而,文档的部分或全部 内容可能无法用于呈现处理。

在媒体播放期间下载外部资源的内容处理器 会向资源的源服务器透露用户的 媒体使用进度。在许多情况下,媒体的源服务器可以通过其他机制 获得此类媒体进度信息,例如 通过脚本或监视流媒体请求。

下载外部资源时不强制执行跨源策略的内容处理器 会在未获得提供媒体的网站同意, 也未获得用户同意的情况下,将此类媒体进度信息以及潜在的 其他用户跟踪信息暴露给其他源。本 规范未定义任何 API,也未说明预期实现应如何获取 所引用的资源。

P.4 缓存资源或处理状态

此处定义的定时文本文档实例的处理 过程 未以任何方式规定或依赖于内容 处理器 缓存或存储任何资源或处理状态。

P.5 无脚本语言

本规范不包含或涉及对任何脚本语言或 可执行代码的处理。

P.6 无外部样式表

本规范不包含或涉及对任何外部样式表 或样式声明的处理;而是 将所有样式信息直接集成到 TTML 文档语法中,并根据 该语法的 简化 XML 信息集表示进行处理。

P.7 访问处理状态

此处定义了一种允许对内容进行条件处理的机制,其中条件 表达式 可以考虑某些处理状态,包括用户的语言偏好、关联 媒体的语言、 是否启用了强制字幕,以及媒体查询表达式是否 得到满足。 但是,并不向 TTML 内容提供对此状态的直接访问;而是由内容处理器 访问此状态,并对条件是否得到满足作出二元(是或否) 判定。

P.8 超链接机制

此处定义了一种基于 [XLink 1.1] 的机制,允许作者将 内容与 外部文档关联。是否由 内容处理器为此机制提供语义支持, 是在本规范范围之外作出的决定。 此外,如果支持链接激活,其语义同样不属于本 规范的范围。

P.9 偏好的隐私

选择并促使下载或解释 某个 定时文本文档实例的内容处理器可能向 源服务器表明用户 需要字幕或翻译字幕,因此可能透露用户在获取字幕或翻译字幕时的 语言偏好。 此语言偏好构成 关于用户的信息。但是,提供定时文本文档实例 以及选择是否检索并处理它,是提供该实例的应用程序的特征 (例如基于 [HTML] 的 Web 应用程序),而非文档实例本身的特征。

P.10 字体检测

根据本地是否存在已安装的字体,有条件地解引用(下载)字体资源, 即根据 本地安装的字体资源是否存在,内容处理器 会引入 [FINGER] 所定义的潜在指纹识别漏洞。 此类漏洞的存在及缓解取决于 内容处理器的实现和整体系统 架构。

注意:

例如,一种缓解策略可以是在选择是否解引用(下载)字体资源时,忽略用户安装的字体资源, 而不让它们影响是否解引用(下载)字体 资源的选择。

在 通用浏览器环境中实现的内容处理器, 按照 [FINGER] 对该术语的用法,应考虑在存在用户安装的字体时, 不根据这些字体的存在而有条件地解引用外部 字体资源,如果这种解引用可能透露用户系统的信息或 对用户进行指纹识别。

Q 高动态范围合成(非规范性)

本附录说明如何将 [SRGB] 像素合成到高动态范围 (HDR)像素上。

Q.1 感知量化器

以下说明如何使用 tts:luminanceGain 将 [SRGB] 像素合成到 HDR 像素上, 这些 HDR 像素符合 [ITU BT.2100-1] 规定的系统色度参数,并使用 感知量化器(PQ)EOTF 和全范围量化。

注意:

以下示例并非旨在提供通用的色彩管理,也不适用于 所有情形,例如,它假定目标合成 表面为 10 位,并使用全范围量化。

  1. 设 (r, g, b) 为全范围 8 位 [SRGB] 像素,其 不透明度介于 0 与 1 之间。

  2. 设 (R, G, B) 和 (Rc, Gc, Bc) 为 全范围 10 位像素,符合 [ITU BT.2100-1] 规定的系统色度参数,使用 PQ EOTF 和全范围量化,其不透明度 A 和 Ac 介于 0 与 1 之间。

  3. 对 8 位全范围量化进行逆运算:

    (r, g, b) / 255 → (r, g, b)

  4. 使用 [SRGB] 参考显示器 EOTF 进行线性化:

    (r2.2, g2.2, b2.2) → (r, g, b)

  5. 使用 tts:luminanceGain 属性和 [SRGB] 照明体计算 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)]m2 且 m1 = 0.1593017578125,m2 = 78.84375, c1 = 0.8359375,c2 = 18.8515625,以及 c3 = 18.6875。

  9. 应用不透明度:

    (1-a) ∙ (r, g, b) → (r, g, b)

  10. 应用 10 位全范围量化:

    (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 混合对数伽马 HDR

以下说明如何将 [SRGB] 像素合成到混合对数伽马 (HLG)HDR 像素上。

  1. 设 (r, g, b) 为全范围 8 位 [SRGB] 像素,其 不透明度 A 介于 0 与 255 之间。

  2. 设 (R,G,B) 和 (Rc,Gc,Bc) 为 窄范围 10 位像素,符合 [ITU BT.2100-1] 规定的系统色度参数,使用 HLG EOTF 和窄范围量化。下标 c 表示合成后的视频信号。

  3. 设 (X,Y,Z) 为符合 CIE 1931 XYZ 色彩空间 [XYZ] 所规定的系统色度参数的像素。

  4. 对 8 位全范围量化进行逆运算:

    (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.17883277,且 b = 1−4a,且 c = 0.5−a•ln(4a)

  9. 应用 10 位窄范围量化:

    (Q(r),Q(g),Q(b)) → (r,g,b)

    其中 Q(x) = floor((940 − 64) • x + 64.5)

  10. 将前景图形 (r,g,b) 合成到背景视频 (R,G,B) 上,使用不透明度 A,得到 (Rc,Gc,Bc):

    ((A•r+(1−A)R),(A•g+(1−A)G),(A•b+(1−A)B)) → (Rc,Gc,Bc)

  11. 将输出钳制到 10 位信号范围:

    (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 中的“图形白”,后者 被定义为窄范围信号的 75%, 该信号定义见 [ITU BT.2100-1]。

注意:

伽马指数 2.0 被有意设置为不同于 [SRGB] 中规定的伽马值 2.2。 该规范中的值 2.2 专用于其中规定的观看环境, 并包含 针对这些条件的视觉心理渲染调整。 HLG 信号不需要此调整, 因为它不包含显示渲染。

R TTML 内容的流式传输(非规范性)

可以编写满足以下特征的 TTML 内容,这些特征在 流式传输场景中可能有用:

R.1 根与分支分片

对 TTML 内容进行流式传输的一种可能方式是, 将文档实例的信息集划分为 不重叠的片段,其中一个特定片段,称为 根片段,表示 文档实例的前置内容(头部)以及其顶层结构 元素,而 其他片段表示其时间区间预计会 并行活动的内容。

在要求能够任意(随机)进入 流的应用程序中,即要求能够从 任意数据访问单元开始读取数据,根片段会被重复 传输(插入)到流中,以便解码器能够 重新同步,并从信息集中获取足够的 结构信息, 从而解释后续内容片段。

这种文档实例分片方式的示例 见图 2 – 片段流式传输。

图 2 – 片段流式传输
片段流式传输

注意:

本规范未定义传输缓冲区模型或解码器 能力模型。

R.2 时间分片

对 TTML 内容进行流式传输的另一种方式是, 将文档实例的信息集划分为 具有时间边界的片段,每个片段本身都是一个文档实例,包含呈现它所需的全部 前置内容(头部)和内容,其中每个 片段的时间区间受到文档 交换上下文或 文档处理上下文或两者的约束,从而解决与其他片段的时间 重叠。

例如,某些文档处理上下文通过规定在时间线上的任意时刻最多 只能有一个文档实例处于活动状态,来解决时间重叠问题,并且还会 规定优先级规则,以便在存在多个候选实例时,确定具体是 哪个文档实例。

为了确保所有内容都能正确显示,对于属于某个 ISD 的内容,如果该 ISD 的区间与多个 分片区间重叠,则可能需要在生成该 ISD 所需的每个片段中复制 这些内容。实现可以识别除区间外完全相同的相邻 ISD, 并用一个覆盖合并后区间的 ISD 替换它们。

这种方法的目的是,让呈现处理器能够生成与非流式传输版本的文档 实例所生成的 ISD 序列等效的 序列,同时通过改变分段持续时间,利用 避免重复一定数量前置内容的能力,且该数量可控。重建原始源内容 并不保证得到完全相同的文档实例。

注意:

例如,[ISOBMFF TT] 和 [EBU-TT-Live] 使用了此技术。

这种文档实例分片方式的示例 见图 3 – 时间分片。

图 3 – 时间分片
时间分片

注意:

在上例中,单个文档实例包含在以下区间可见的内容: T1 至 T6,并被划分为两个文档实例(分段), 第一个包含所需的全部内容以及引用的样式和区域,适用时段为 T1 至 T3,第二个包含全部内容以及引用的样式和区域, 这些内容、样式和区域 在 T4 至 T6 期间是必需的。

R.3 ISD 流式传输

可以将文档实例转换为 一系列定时文本 中间文档实例,并将它们作为独立实体进行流式传输。

此技术最大限度地降低了客户端的处理要求,但要求在每个适用的 ISD 中 复制所有相关的前置内容。重建原始源内容 并不保证得到完全相同的文档实例。

S 常见字幕样式示例(非规范性)

本节提供以下常见字幕样式的示例,使用 TTML 内容 实现所需的行为:

S.1 弹出式字幕示例

逐字显示字幕的示例。在此示例中,两个区域交替接收逐字显示的 内容,其中内容使用 显式的顺序时间包含规则进行定时。各段落在时间上互不重叠, 并显示在其目标区域的 同一行中。

示例 – 弹出式字幕
<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 上滚式字幕示例

上滚式字幕的示例。通过使用重叠的时间区间实现上滚效果, 使区域在给定时刻显示零个、一个或两个 段落。由于不发生换行,每个段落占用区域中的单独一行。 根据呈现处理器是否支持 相邻中间同步 文档实例之间的平滑滚动,这些过渡,即移出 旧段落(行)并移入新段落(行),将是平滑的或离散的。

示例 – 上滚式字幕
<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 元素的并行时间 容器的结束时刻一致,因此单词一经绘制,就会一直保留在区域中(位于其渲染行上),直到 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 属性允许文档作者 根据 创作时已知的输入参数修改预期的呈现效果。例如,在封闭系统中, text-size 参数可能具有预定义的枚举值,可用于修改 应用于内容的样式。或者,可以使用媒体函数 根据媒体查询修改适用区域的位置和范围,参见 [媒体查询]。

T.2 使用预处理器进行定制

可以应用预处理技术,在呈现之前修改文档实例, 例如,使用 [XSLT3],也可以将其置于 [XPROC] 管线中,以修改样式属性的初始值,或被继承的根 元素样式属性。此类预处理不属于本 规范的范围,不过此类预处理器会被视为 转换处理器的一个实例。

T.3 通过打破呈现 符合性进行定制

尽管本规范试图尽可能地定义 呈现处理器的符合性 要求, 但这并不妨碍任何实现在认为适当的情况下, 有意偏离这些符合性要求。例如,呈现处理器可能会 识别所呈现的文本与视频播放控件等其他视觉指示器之间的 位置冲突,并通过临时移动受影响的 TTML 区域来解决这些冲突。或者, 呈现处理器可能会为用户提供减小所呈现字体大小的选项, 同时不引入意外的换行。

根据定义,任何此类不符合性行为均不属于本规范的范围。

U 相较于 TTML1 的词汇变更(非规范性)

本节概述定时文本标记语言 (TTML)版本 1(TTML1) 与版本 2(TTML2)之间的词汇变更。本概述并非详尽无遗。

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 致谢(非规范性)

编辑们感谢定时文本工作组的现任和前任 成员、其他 W3C 工作组的成员,以及其他论坛中的行业专家, 他们直接或间接地为本文档的制定 过程或内容作出了贡献,名单如下:

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, 以及 Mohamed Zergaoui。

编辑们特别感谢以下现任和前任成员 作出的贡献:Mike Dolan(SMPTE 时间码、流式传输;SMPTE 联络),David Kirby(入门示例文档;SMPTE 时间码、描述性元数据;EBU/AAF 联络),Geoff Freed(样式 及样式属性的示例图像),Sean Hayes(高级配置集 概念,包括应用定时、HTML/CSS 映射提案),Erik Hodge(定时), Thierry Michel(元数据),以及 Dave Singer(动画、滚动)。

工作组将本规范献给我们的同事 David Kirby。