1. 简介
本节为非规范性内容
Ruby 是对呈现在基准文本旁边的小型注释的称呼。 它尤其适用于日文及其他东亚语言内容 (Ruby 在日语中也称为 furigana)。 它最常用于提供读音(发音指南)。
Ruby 文本通常使用较小的字体, 呈现在基准文本旁边。 Ruby 这一名称源自一种命名字号, 英国排字工人曾使用这种字号 (约为普通 10 磅字体的一半大小)。
Ruby 通常用于东亚文字, 为生僻或鲜为人知的字符提供语音转写, 即读者通常不熟悉的字符 (例如供正在学习阅读的儿童或外国人使用), 或具有多个读音 且无法通过上下文确定读音的字符 (例如某些日文姓名)。 例如,它广泛用于教材和儿童读物, 但在许多类型的文学作品和标牌中也很常见。 它有时也用于传达表意字符的含义信息。
为了描述基准文本与其注释之间的语义关联, 以及实现各种视觉布局 和正确的非视觉呈现与处理, 有必要使用本文档定义的专用标记。
注: CSS Ruby 注释布局模块 第 1 级定义了 CSS 中的 Ruby 布局模型, 从而实现上述 Ruby 呈现 以及经常需要的各种变体。
1.1. 背景以及与 HTML 标准的关系
多年来,用于标记 Ruby 的一组 HTML 元素在多份规范中不断演进, 从 2001 年的 Ruby 注释规范开始, 一直发展到当前的 HTML 标准, 各个版本在灵活性、复杂度或冗长程度方面有所不同。
尽管在简单情况下简洁而有效, 但HTML 标准 (在撰写本文档时) 所描述的 Ruby 模型表达能力不足,无法妥善处理所有用例。 此外,其某些方面也未实现互操作; 即便实现这些方面,也无法完全满足其余用例。 另外,这些方面还与 CSS 布局模型相冲突。
编写本规范的目的是促进并指导修订和扩展后的 Ruby 模型实现, 从而更全面地满足 Web 平台上的 Ruby 需求。 这项工作是在 W3C 与 WHATWG 达成协议的情况下开展的。
附录 B: 与 HTML 标准的比较总结了主要差异, 并简要概述了这些差异为何是有益的。
请注意,HTML 标准 中已实现互操作的子集的语义 在本扩展规范中保持不变, 因此此处描述的 Ruby 模型 向后兼容 现有用户代理所支持的 任何 Ruby 内容。
希望此处描述的变更最终 能被 WHATWG 采用, 并集成到 HTML 标准中, 从而减少两份文档之间的差异。
2. 用于 Ruby 的 HTML 元素
2.1.
ruby 元素
- 类别:
- 流式内容。
- 短语内容。
- 可感知内容。
- 短语内容。
- 可以使用此元素的上下文:
- 需要短语内容之处。
- 内容模型:
- 见正文。
- 内容属性:
- 全局属性
- 无障碍考虑:
- 针对作者。
- 针对实现者。
- DOM 接口:
- 使用
HTMLElement。
ruby
元素表示一个或多个短语内容范围,
并与相关联的 Ruby 注释配对。
Ruby 注释是呈现在基准文本旁边的短注释文本。
尽管主要用于东亚排版以提供发音指南,
但它们也可用于提供其他相关信息。
Ruby 最常以行间注释的形式呈现,
但也会采用其他呈现方式。
有关 Ruby 及其渲染的更完整介绍,
请参阅 W3C 的什么是 Ruby?一文
以及 CSS Ruby 注释布局模块第
1 级。
< ruby >< rb > 霧</ rb >< rt > きり</ rt ></ ruby > とも< ruby >< rb > 霞</ rb >< rt > かすみ</ rt ></ ruby > とも
典型的渲染效果大致如下图所示:
注: 有关语法变体及简化形式的讨论,请参阅以下 示例。
ruby
元素的内容模型由
一个或多个以下Ruby
片段序列组成:
-
一个或多个短语内容节点
或
rb元素 (或两者的组合), 用于表示被注释的基准级内容 (即 Ruby 基准范围)。 -
一个或多个
rt或rtc元素 (或两者的组合), 用于表示与前述基准内容 相关联的任何注释, 其中每个rtc元素或rt元素序列 表示一个独立的注释层级 (即 Ruby 注释范围)。 每个注释 范围, 以及每个范围中的注释 单元, 都可以选择性地在之前、之后或其间穿插 独立的rp元素。 (可选的rp元素可用于 添加括号等呈现性内容, 在以内联形式渲染注释时可能很有用, 包括在不支持 Ruby 布局时作为回退。)
注: 为方便创作,
内部 Ruby 元素
rb、
rt、
rtc 和
rp
具有可选的结束标签。
< ruby lang = zh-TW >
< rb > 美</ rb >< rtc >< rt > ㄇㄟˇ</ rt ></ rtc >< rtc lang = zh-Latn >< rt > měi</ rt ></ rtc >
</ ruby >
HTML Ruby 的某些功能允许使用更简单的标记:
- 可以省略结束标签。
-
由
ruby元素直接包含的文本 隐式表示一个 Ruby 基准单元 (如同该文本包含在rb元素中一样)。 -
作为
ruby元素子节点的连续rt元素 会被隐式分组为一个Ruby 注释范围 (如同它们包含在rtc元素中一样)。 -
由
rtc元素直接包含的文本 隐式表示一个Ruby 注释单元。
实际上, 上述示例在语义上 (但在生成的 DOM 上并非如此) 等同于以下内容:
< ruby lang = zh-TW > 美< rt > ㄇㄟˇ< rtc lang = zh-Latn > měi</ ruby >
注: CSS Ruby 注释布局模块
第 1 级使作者能够
控制 HTML
ruby
元素及其内容的渲染,
从而基于同一标记支持多种布局。
当文本纵向书写时, 注音呈现在右侧, 沿基准文本排列:
在横向书写中, 注音通常也排在右侧, 此时夹在各个基准字符之间:
不过,注音有时也会排版在 横向基准文本的上方:
这些差异属于样式差异, 而非语义差异, 因此使用相同的标记:
< ruby lang = zh-TW >< rb > 電< rb > 腦< rt > ㄉㄧㄢˋ< rt > ㄋㄠˇ</ ruby >
2.1.1. Ruby 分段与配对
在 Ruby 元素中,
内容被划分为一系列 Ruby 片段。
忽略元素间空白和
rp 元素后,
每个 Ruby 片段
由以下内容组成:
-
一个Ruby 基准范围:
零个或多个 Ruby 基准单元,
每个单元要么是包含单个子
rb元素的 DOM 范围, 要么是不包含子rb元素的子内容的最大 DOM 范围。 -
零个或多个Ruby
注释范围,
每个范围都是对应于以下内容的 DOM 范围:
单个
rtc元素, 或连续rt元素的最大序列。 Ruby 注释范围还会进一步划分 为一系列 Ruby 注释单元: 如果该范围由一系列rt元素组成, 则每个此类元素都是一个独立的Ruby 注释单元; 如果该范围由一个rtc元素组成, 则其每个子rt元素, 以及每个非rt子内容的最大 DOM 范围, 都是一个Ruby 注释单元。
ruby
元素中进行注释:
多个相邻的 Ruby 片段也可以合并到同一个
ruby
父元素中:
注释
配对过程将Ruby 注释单元
与Ruby 基准单元相关联。
在每个Ruby 片段中,
每个Ruby 基准单元
都会与来自每个Ruby
注释范围的一个Ruby
注释单元配对。
如果一个Ruby
注释范围由一个不包含
rt 元素的
rtc 元素组成,
则由其内容表示的单个Ruby
注释单元会跨越
(即与之配对)
Ruby 片段中的
每个Ruby 基准单元。
否则,
Ruby
注释范围中的每个Ruby
注释单元
会按顺序
与片段的Ruby 基准范围中对应的Ruby
基准单元配对。
如果Ruby 基准单元数量不足,
则任何剩余的Ruby
注释单元
会被假定为与插入在
Ruby 基准范围末尾的空假设基准相关联。
如果一个Ruby
注释范围中的Ruby 注释单元数量不足,
则剩余的Ruby 基准
单元
会被假定为没有来自该注释层级的注释。
不过,
尤其对于日语复合词,
逐字内联读音显得很不自然。
更自然的渲染方式
是将整个单词的注释
统一放置在其基准文本之后。
例如,
以内联方式排版时,
京都市(“京都市”)
应渲染为
“京都市(きょうとし)”,
而不是“京(きょう)都(と)市(し)”。
这可以使用连续的
rb
元素,后跟连续的
rt
元素来标记:
< ruby >< rb > 京< rb > 都< rb > 市< rt > きょう< rt > と< rt > し</ ruby >
如果标记中的每个基准字符都紧接着其注释 (每个基准与注释对形成自己的片段), 则内联会产生不理想且不自然的 “京(きょう)都(と)市(し)”。
请注意,上述标记不会自动提供括号。
在有意以内联方式排版时,
可以使用 CSS 生成内容插入括号;
但当不支持 Ruby 的用户代理
自动从行间布局回退到内联布局时,
这些括号会缺失。
可以插入
rp
元素,
以便在不支持 Ruby 时提供适当的标点:
< ruby >< rb > 京< rb > 都< rb > 市< rp > (< rt > きょう< rt > と< rt > し< rp > )</ ruby >
2.1.2. 多字符 Ruby 的标记模式
本节为非规范性内容
在最简单的示例中, 每个Ruby 基准单元 仅包含一个字符, 这是逐字注音经常使用的模式。 不过,Ruby 基准单元 并不限于 只包含一个字符。 在某些情况下, 可能无法将注释分别映射到各个基准字符, 此时注释可能需要共同应用于一组字符。
因此,标示“今日”读音的 Ruby 应按以下方式标记:
< ruby > 今日< rt > きょう</ ruby >
此处,一个复合表意词 使用源自英语的同义词 (以片假名书写) 作为注释:
< ruby > 境界面< rt > インターフェース</ ruby >
此处,一个复合表意词 直接使用其英语对应词 作为注释:
< ruby lang = "ja" > 編集者< rt lang = "en" > editor</ ruby >
在复合词中, 尽管注音可能分别对应单个字符, 但有时仍会将它们排版为共同占用基准文本上方的空间, 其渲染方式类似于多字符基准上的注释。 不过,它们的渲染存在细微差别, 因此既需要编码复合词内部的配对关系, 也需要标识其作为一个单词。 此外,以这种方式共享空间, 还是将每一对分别渲染在自己的视觉“列”中,属于样式偏好: 标记需要提供足够的信息,以支持两种渲染方式 (以及正确的内联)。
此类复合词可以 将注音逐个放置在每个字符上方进行渲染。 采用这种样式时, 如果注释在视觉上比其所注释的字符更长, 周围文本会被推开, 以清楚表明每个字符与其注释之间的对应关系。
不过, 在各种排版传统中, 通常会让此类词语的注释共同共享空间, 以避免基准文本原本会出现的分隔, 从而保留其为一个完整单词的含义。 这种样式称为“熟语 Ruby” (“jukugo”意为“复合词”)。
不过,即使以“熟语 Ruby”形式呈现, 注释也并不总是合并。 如果单词中间发生换行, 注释仍应与正确的基准字符保持关联。
注释是否合并以及合并程度可以有所不同, 并且可能取决于字号。 下图展示了多种可能性中的两种: 一种是在“熟语 Ruby”中,将比其基准更宽的注释 与相邻注释合并, 但不一定合并全部注释; 另一种是在任一注释比其基准更宽时, “熟语 Ruby”就合并所有注释。 本规范不强制规定任何特定布局; 这属于 CSS 等样式技术的范畴。
无论样式技术提供哪些渲染变体, 同一套标记都需要包含足够的信息,以支持任何样式, 因为是否渲染为“熟语 Ruby”及其变体属于样式选择。 标记既需要编码词语内部的配对信息, 也需要编码将这些配对作为一个单词进行分组的信息:
< ruby >< rb > 浄< rb > 瑠< rb > 璃< rt > じょう< rt > る< rt > り</ ruby >
如果所有基准字符都属于单个
rb
元素,
并且所有注释文本都属于单个
rt
元素,
则无法正确实现“熟语 Ruby”,
因为各自的配对关系会丢失。
注: 有关日文和中文 Ruby 用法与渲染的更多详细信息, 请参阅 日文排版需求 日本語組版処理の要件(日本語版) (尤其是 Ruby 与着重号 和附录 F)、 日文 Ruby 简单放置规则, 以及 中文排版需求中关于行内注释的章节。
2.2.
rb
元素
- 类别:
- 无。
- 可以使用此元素的上下文:
- 作为
ruby元素的子节点。 - 内容模型:
- 短语内容。
- 内容属性:
- 全局属性
- DOM 接口:
- 使用
HTMLElement。
rb(“Ruby
基准”)元素
在其为
ruby
元素的子节点时
表示一个Ruby 基准单元:
基准级文本中的一个单一组成部分,
由与其配对的一个或多个 Ruby 注释进行注释。
不作为
ruby
元素子节点的
rb 元素,
表示与其子节点相同的内容。
rb
元素时,基准是隐式的:
< ruby > 基准< rt > 注释</ ruby >
也可以显式指定该元素:
< ruby >< rb > 基准< rt > 注释</ ruby >
这两种标记模式具有相同的语义。
显式的
rb
元素可能有助于设置样式,
并且在标记连续基准与连续注释的配对时是必需的
(例如,
表示复合词时;
请参阅上文的京都市内联
和熟语 Ruby示例)。
2.3.
rt
元素
- 类别:
- 无。
- 可以使用此元素的上下文:
-
作为
ruby或rtc元素的子节点。 - 内容模型:
- 短语内容。
- 内容属性:
- 全局属性
- 无障碍考虑:
- 针对作者。
- 针对实现者。
- DOM 接口:
- 使用
HTMLElement。
rt(“Ruby
文本”)元素
是
ruby
元素的子节点,
或者是
rtc
元素的子节点,而该元素本身又是
ruby
元素的子节点时,
表示一个Ruby 注释单元:
对与其配对的Ruby 基准单元所作的单一注释。
不作为
ruby
元素子节点,
也不作为
rtc
元素子节点,且该 rtc 元素本身并非 ruby 元素子节点的
rt
元素,
表示与其子节点相同的内容。
2.4.
rtc
元素
- 类别:
- 无。
- 可以使用此元素的上下文:
-
作为
ruby元素的子节点。 - 内容模型:
-
短语内容或一系列
rt元素; 可以选择性地在之前、之后或其间穿插独立的rp元素。 - 内容属性:
- 全局属性
- DOM 接口:
- 使用
HTMLElement。
rtc
(“Ruby 文本容器”)元素
在其为
ruby
元素的子节点时
表示一个注释层级
(即一个Ruby 注释
范围),
用于前面的Ruby 基准单元序列
(即其 Ruby 基准范围)。
注: 在简单情况下,
可以省略
rtc
元素,
因为连续的
rt 元素
会隐式形成一个Ruby
注释范围。
不过,为了将多个注释层级
与单个Ruby 基准
范围相关联,
仍然需要使用这些元素,
例如同时提供语音和语义信息、
使用不同文字提供语音信息,
或使用不同语言提供语义信息。
以下标记实现了这一效果:
< ruby >< rb > 上< rb > 手< rt > じよう< rt > ず< rtc >< rt > jou< rt > zu</ ruby >
注: 作为
rtc
元素直接子节点的文本
会隐式表示一个Ruby
注释单元,
如同该文本包含在
rt 元素中一样,
但该注释会跨越片段中的所有基准。
其标记如下:
< ruby >< rb > 旧< rb > 金< rb > 山< rt > jiù< rt > jīn< rt > shān< rtc > San Francisco</ ruby >
此处,一个包含三个基准字符的单一基准序列
在第一个(隐式)容器中
使用三个拼音 Ruby 文本片段进行注释,
并引入一个
rtc
元素,
以提供第二个单一 Ruby 注释,
即该城市的英文名称。
不作为
ruby
元素子节点的
rtc
元素,
表示与其子节点相同的内容。
2.5.
rp
元素
- 类别:
- 无。
- 可以使用此元素的上下文:
-
作为
ruby或rtc元素的子节点, 并且紧邻一个rtc元素或一个Ruby 注释单元的前面或后面。 - 内容模型:
- 文本。
- 内容属性:
- 全局属性
- 无障碍考虑:
- 针对作者。
- 针对实现者。
- DOM 接口:
- 使用
HTMLElement。
rp(“Ruby
括号”)元素不表示任何内容。
它用于在Ruby
注释单元周围提供呈现性内容
(例如括号),
以便在不使用 Ruby 专用布局
而以内联方式呈现 Ruby 内容时显示。
这种情况可能发生在使用不支持 Ruby 布局的用户代理时,
也可能出于样式原因。
在典型的 Ruby 布局中,
它不会显示。
rp,
使旧式用户代理中的读音显示在括号中:
...< ruby > 漢< rb > 字< rp > (< rt > かん< rt > じ< rp > )</ ruby > ...
在支持 Ruby 布局的用户代理中, 渲染会省略括号; 而在不支持 Ruby 布局的用户代理中,渲染结果如下:
...漢字(かんじ)...
rp
元素:
< ruby >
< rb > ♥< rp > : < rt > Heart< rp > , < rtc lang = fr > Cœur</ rtc >< rp > .</ rp >
< rb > ☘< rp > : < rt > Shamrock< rp > , < rtc lang = fr > Trèfle</ rtc >< rp > .</ rp >
< rb > ✶< rp > : < rt > Star< rp > , < rtc lang = fr > Étoile</ rtc >< rp > .</ rp >
</ ruby >
在不支持 Ruby 的用户代理中,此示例将渲染如下:
♥: Heart, Cœur. ☘: Shamrock, Trèfle. ✶: Star, Étoile.
3. 可选标签
如果
rb
元素紧接着
rb、
rt、
rtc 或
rp 元素,
或者父元素中已无更多内容,
则可以省略
rb
元素的结束标签。
如果
rt
元素紧接着
rb、
rt、
rtc 或
rp 元素,
或者父元素中已无更多内容,
则可以省略
rt
元素的结束标签。
如果
rtc
元素紧接着
rb 或
rtc
元素,
或者父元素中已无更多内容,
则可以省略
rtc
元素的结束标签。
如果
rp
元素紧接着
rb、
rt、
rtc 或
rp 元素,
或者父元素中已无更多内容,
则可以省略
rp
元素的结束标签。
4. 渲染
rp { display : none; }
规则,
该规则属于 HTML §
15.3.1
隐藏元素小节。
注: HTML § 15.3.4 短语内容还包含关于 Ruby 的其他要求; 本规范并未覆盖或使其失效, 这些要求仍然适用。
以下规则被添加到 HTML 用户代理样式表中:
ruby { display : ruby; }
rb { display : ruby-base; white-space : nowrap; }
rbc { display : ruby-base-container; } /* 用于兼容受 XHTML 启发的标记 */
rp { display : none; }
rt { display : ruby-text; }
rtc { display : ruby-text-container; }
ruby, rb, rbc, rt, rtc { unicode-bidi : isolate; }
rtc, rt {
font-variant-east-asian : ruby;
text-emphasis : none;
white-space : nowrap;
line-height : 1 ;
}
rtc, :not( rtc) > rt {
font-size : 50 % ;
}
rtc:lang( zh-TW), :not( rtc) > rt:lang( zh-TW) {
font-size : 30 % ;
}
5. 符合性功能
6. 交互
6.1. 文本搜索
本节为非规范性内容
[HTML] 定义了页内查找操作及其常规机制,
但并未定义
如何从查询中确定匹配项的确切方式。
各种 HTML 用户代理还支持 window.find() API,
但在撰写本文档时,它尚无规范性定义,
如何确定特定搜索字符串
是否与文档匹配的具体方式
也仍未定义。
因此,本规范不尝试定义 文本搜索与 Ruby 交互时的规范性行为。 不过,可以指出一些一般性的用户预期, 建议用户代理在实现此类功能时 考虑这些预期。
- 用户通常不希望 Ruby 注释的存在 干扰搜索。 无论某个词语是否带有 Ruby 注释, 也无论插入这些注释时使用何种标记模式, 用户都希望能够找到基准文本。 由于用户通常并不了解所使用的具体标记模式, 即便注释穿插在基准文本节点之间, 并且查询文本没有连续出现在文档中, 这一预期也同样成立。
- 同样,当 Ruby 注释在标记中 位于其所注释词语之后、另一个词语之前时, 用户通常不会意识到 两个词语之间存在任何内容, 并且通常希望由这两个词语组成的查询字符串 能够找到匹配项。
- 除基准文本外, 用户还可能搜索 Ruby 注释中包含的文本。 在这里,标记模式对于用户同样是未知且无关的, 用户通常希望能找到他们认为是一个词语或短语的内容, 无论该文本在标记中是否连续出现, 也无论标记中是否穿插了 Ruby 基准和注释。
-
由于
rp元素通常不可见, 用户也通常希望搜索 不受这些元素存在的影响。
< ruby >< rb > 東< rb > 京< rt > とう< rt > きょう</ ruby > に行く。
< ruby >< rb > 東< rt > とう< rb > 京< rt > きょう</ ruby > に行く。
< ruby >< rb > 東< rb > 京< rp > (< rt > とう< rt > きょう< rp > )</ ruby > に行く。
这种预期不仅存在于单独搜索该词语时, 也存在于结合周围文本进行搜索时, 例如搜索“東京に行く” 或“とうきょうに行く”, 用户通常也希望这些查询能够匹配。
注: 有关文本搜索复杂性的其他考虑, 另请参阅 [string-search]。
6.2. 复制与粘贴
本节为非规范性内容
Web 平台并未精确定义 复制与粘贴剪贴板操作的细节。 尤其是,尽管剪贴板通常同时支持结构化文本和纯文本, 但如何在两者之间进行转换, 以及复制时如何将文档内容提取到剪贴板中, 通常都没有定义。
因此,本规范不尝试定义 剪贴板与 Ruby 交互时的规范性行为。 不过,可以指出一些一般性的用户预期, 建议用户代理在实现此类功能时 考虑这些预期。
-
通过复制与粘贴
将带注释的 Ruby 文本转换为纯文本时,
用户代理可以仅保留基准文本,
同时包含基准文本和注释文本,
或让用户选择复制与粘贴时是否包含 Ruby 注释。
如果纯文本渲染中同时包含 Ruby 基准和注释, 则需要将它们线性化。 在这种上下文中, 渲染原本隐藏的
rp元素是适当的。 HTML § 15.3.4 短语内容中表达的预期 也与此上下文相关: 对于不支持正确 Ruby 渲染的用户代理, 在不存在rp元素时, 应在rt元素的文本周围渲染括号。假设用户选择并复制以下任一文本片段, 然后将其粘贴到textarea中:我的名字是< ruby >< rb > 網< rb > 本< rt > あみ< rt > もと</ ruby > 我的名字是< ruby >< rb > 網< rb > 本< rp > (< rt > あみ< rt > もと< rp > )</ ruby > 可以预期得到
我的名字是 網本
或我的名字是 網本(あみもと)
。 不过,我的名字是 網本あみもと
虽然保留了注释, 却在没有任何标识表明其为注释的情况下 将其与基准文本合并, 这可能会使读者困惑。 - 用户通常希望能够复制他们可以选择的内容。 如果用户专门选择了基准文本或注释文本, 通常会希望复制操作后 能在剪贴板中找到该内容。 换言之,在所有纯文本复制与粘贴操作中 无条件丢弃全部注释, 不太可能符合用户预期。
附录 A: 对 HTML 的编辑性调整
本节为非规范性内容
除了本规范正文中的规范性陈述外, 本节详细说明了其他适宜的编辑性变更, 这些变更应应用于 HTML 标准, 以使其与此处涵盖的内容完全一致。
-
删除 HTML
§ 15.3.4 短语内容中以下段落里
关于为 Ruby 基准生成 CSS 匿名盒的
过时资料性说明:
就 CSS Ruby 模型而言,
ruby元素中不属于rt或rp元素的连续子节点, 应被包装在匿名盒中, 其 display 属性的值为 ruby-base。 [CSS-RUBY-1]CSS Ruby 注释布局 1 § 2.2 匿名 Ruby 盒生成已经对此进行了详尽说明。
-
替换 HTML
§ 15.3.4 短语内容中的以下注释:
注: 当可以做到这一点时, 前述要求将更新为使用 CSS Ruby 表述。 (目前,CSS Ruby 无法处理嵌套的
ruby元素 或多个连续的rt元素, 而这正是表达此语义的方式。)注: 在 CSS 中,默认情况下即可实现这一点: ruby-position 属性的初始值 为 alternate, 它会产生此效果。
-
将 HTML
§ 4.5.29 用法摘要表格中的
行 替换为以下内容:ruby、rt、rp元素 用途 示例 ruby、rb、rt、rtc、rpRuby 注释 < ruby > < rb > 旧< rb > 金< rb > 山< rp > (< rt > jiù< rt > jīn< rt > shān< rtc > < rp > :</ rp > San Francisco</ rtc > < rp > )</ ruby > -
更新 HTML §
元素中的表格,
为
rb和rtc添加行, 并将rp、rt和ruby的行替换为以下内容:元素 描述 类别 父元素† 子元素 属性 接口 rbRuby 基准 无 ruby短语 全局属性 HTMLElementrpRuby 注释文本的括号 无 ruby;rtc文本 全局属性 HTMLElementrtRuby 注释文本 无 ruby;rtc短语 全局属性 HTMLElementrtcRuby 注释容器 无 ruby短语; rt;rp全局属性 HTMLElementrubyRuby 注释 流式; 短语; 可感知 短语 短语; rb;rt;rtc;rp*全局属性 HTMLElement -
更新 HTML §
元素接口中的表格,
添加以下两行:
元素 接口 rbHTMLElementrtcHTMLElement
附录 B: 与 HTML 标准的比较
本节为非规范性内容
注: 此比较基于撰写本文档时 HTML 标准的状态。 如果 HTML 标准采纳了此处描述的部分或全部 变更, 或以其他方式改进了对 Ruby 的处理, 本节预计会相应更新, 但更新可能会有所延迟。
尽管本规范重新引入了此前已过时的
rb 和
rtc
元素,
但并未对 HTML § 13.2 解析 HTML
文档进行任何更改:
这些元素已在该处得到处理,
包括其可选的结束标签。
不过,各种 Ruby 相关元素的使用方式存在差异, 其中两个主要差异是:
-
除了可以在匿名 Ruby 基准之间穿插
rt元素外, 此前已过时的rb元素也被恢复, 从而支持所谓的 表格式标记模式, 在这种模式中,多个连续的基准之后 跟随各自对应的注释:< ruby > < rb > …< rb > …< rb > …< rt > …< rt > …< rt > …</ ruby > 如果没有
rb和表格式标记, 为了具备正确处理 复合词上各种可能的 Ruby 呈现方式 所需的各个基准与注释配对关系, 就必须在各段基准文本之间 穿插rt元素。 不过,这种标记无法实现正确的 Ruby 内联。此外,穿插式标记还会给 复制与粘贴、 文档搜索 或语音合成等操作带来问题, 因为基准文本会被注释打断。 对于搜索, 用户代理可以缓解这一问题, 但在较简单的用户代理中, 以及搜索以外的其他操作中, 这一问题仍然存在。
-
本文档定义了另一种处理多个注释层级的模型:
-
不再允许在不使用显式注释容器的情况下,
将多个连续的
rt元素 与前面的基准文本片段相关联。 这种模式没有按照 HTML 标准预期语义 实现互操作, 并且与表格式标记存在冲突。作为替代,此前已过时的
rtc元素被恢复, 从而可以在同一个或多个基准上标示多个注释范围, 并可使用穿插式或表格式标记模式。 -
尽管仍保留嵌套 Ruby 的能力,
但删除了嵌套 Ruby 的专门语义。
与使用
rtc表示额外注释层级相比, 这种标记模式的表达能力严格更弱, 因为它无法将外层 Ruby 中的单个注释 与内层 Ruby 中的单个基准配对。 因此,关于“上手”的示例 可以使用rtc实现, 但无法使用嵌套 Ruby 实现。HTML 标准中定义的嵌套 Ruby 除普通嵌套语义外, 也没有实现互操作, 并且与 CSS Ruby 注释布局模块第 1 级的布局模型相冲突。
-
不再允许在不使用显式注释容器的情况下,
将多个连续的
fantasai 的一篇2011 年博客文章 更详细地解释了 这些要求以及由此产生的设计选择。
附录 C: 安全考虑
本节为非规范性内容
本规范没有已知的安全影响。
附录 D: 隐私考虑
本节为非规范性内容
本规范没有已知的隐私影响。
附录 E: 无障碍考虑
本节为非规范性内容
由于 Ruby 主要用作发音指南, 它本身就是一种面向无障碍的功能, 使具有不同读写能力水平的读者 能够阅读原本可能难以理解或无法阅读的内容。 在这种用法中,Ruby 可帮助 正在学习阅读的儿童或非母语人士、 具有各种学习障碍或其他认知障碍的人, 以及来自弱势背景、受教育程度有限的人……
制定本扩展规范的一个关键动机 是认识到 Ruby 用法的多样性, 以及用户和相应预期的多样性, 并确保可用的标记模式 能够提供必要的结构信息, 以适应不同情况。
阅读障碍人士可能会发现,同一内容的不同视觉呈现 具有不同程度的可读性。 在众多变体中, 有些人可能更喜欢让 Ruby 注释使用不同颜色, 与其所注释的字符之间保留一定间距, 或显示为内联括号内容, 以便更容易将它们与所注释的文本区分开来。 同样,教育场景中的使用也可能需要多种呈现变体。 尽管本规范不直接涵盖视觉布局, 但此处定义的标记模式 特意设计为使作者能够 表达与 Ruby 注释相关的结构信息, 从而可由 CSS 等样式语言利用这些信息, 提供符合用户需求和偏好的各种呈现方式, 而无需为此更改或损害标记。 请参阅 [CSS-RUBY-1]。
视力有限或完全失明的人 通常依赖屏幕阅读器等工具, 为文档提供替代或补充的音频呈现。 HTML Ruby 标记以及相应的文本转语音问题 早于本规范出现, 本规范既未引入也未解决这些问题。 本扩展规范承认, Ruby 的不同用法 可受益于不同的音频渲染方式, 但由于本规范专注于推进问题的其他方面, 因此未引入任何满足这一需求的新机制。 这一重要考虑预计将由后续工作解决。 与此同时,建议 HTML 用户代理和屏幕阅读器考虑使用启发式方法, 以确定最有帮助的文本转语音渲染方式。 (有关日语中的常见模式 和文本转语音预期的讨论, 请参阅 [RUBY-TTS-REQ]。)
附录 F: 致谢
本节为非规范性内容
本文档源自多个来源(这些来源在某种程度上也相互借鉴)。 我们谨向所有这些来源的贡献者表示感谢,尤其包括:
-
上一版 W3C HTML Ruby 标记 扩展的编辑 Robin Berjon
此外, 如果没有 国际化工作组参与者 提供的专家意见、 多年研究 以及大量文档, 这一切都不可能实现, 尤其包括:
-
日文排版需求 日本語組版処理の要件(日本語版)的众多贡献者
-
中文排版需求的众多贡献者
-
Richard Ishida
-
Elika J. Etemad(又名 fantasai)
附录 F: 变更
本节为非规范性内容
自 2024年5月7日工作草案以来的变更
自 2024年5月7日 工作草案以来的重大变更:
-
新增非规范性的附录 E: 无障碍考虑一节。
-
新增非规范性的§ 6 交互一节。
-
进行了各种编辑性调整,以阐明示例、注释和介绍性正文。
自 2014年2月4日《W3C HTML Ruby 标记扩展》工作组说明以来的变更
此处描述的标记模型 与 2014 年工作组说明建立的模型 基本相同, 但描述该模型的文本 以及示例 已经过大幅重写。
2014 年工作组说明中提出的解析 变更 不再于此讨论, 因为这些变更此后已被 HTML 标准采纳。
附录 G: 候选推荐标准退出标准
要使本规范晋升为提议推荐标准, 每项功能必须至少有两个 独立且 可互操作的 实现。 每项功能可以由 不同的一组产品实现, 并不要求 所有功能都由单个产品实现。 就此标准而言, 我们定义以下术语:
- 独立
- 每个实现必须由不同的组织开发, 并且不得共享、复用或派生自 另一个符合条件的实现所使用的代码。 与本规范的实现无关的代码部分 不受此要求约束。
- 可互操作
- 通过官方测试套件中相应的测试用例。
- 实现
-
满足以下条件的用户代理:
- 实现本规范。
- 可供公众使用。 该实现可以是正式发布的产品, 也可以是其他公开可用的版本 (即 Beta 版本、预览版本或“每日构建版”)。 非正式发布的产品版本必须已经实现相关功能 至少一个月,以证明其稳定性。
- 不是实验性的 (即不是专门为通过测试套件而设计, 且不打算在今后用于正常用途的版本)。
本规范将保持候选推荐标准状态 至少 28 天。