EPUB 阅读系统 3.4

W3C 工作草案

关于本文档的更多详细信息
此版本:
https://www.w3.org/TR/2026/WD-epub-rs-34-20260626/
最新发布版本:
https://www.w3.org/TR/epub-rs-34/
最新编辑草案:
https://w3c.github.io/epub-specs/epub34/rs/
历史:
https://www.w3.org/standards/history/epub-rs-34/
提交历史
测试套件:
https://w3c.github.io/epub-tests/index.html
实现报告:
https://w3c.github.io/epub-specs/epub34/reports/
编辑:
Matt Garrish (DAISY 联盟)
Ivan Herman (W3C)
前任编辑:
Dave Cramer (W3C 受邀专家)
反馈:
GitHub w3c/epub-specs (拉取请求新建议题开放议题)
public-pm-wg@w3.org 主题行使用 [epub-rs-34] … 消息主题 …归档

摘要

EPUB® 3 定义了一种用于数字出版物和文档的分发与交换格式。EPUB 格式提供了一种表示、打包和编码结构化且语义增强的 Web 内容(包括 HTML、CSS、SVG 和其他资源)的方式,以便在单文件 容器中分发。

本规范定义了 EPUB 3 阅读系统(即渲染 EPUB 出版物的用户代理)的一致性要求。

本文档状态

本节描述本文档在发布时的状态。当前 W3C 出版物列表以及本技术报告的最新修订版本可在 W3C 标准与草案 索引中找到。

本文档由出版维护工作组作为 工作草案发布,并使用 推荐标准 轨道

作为 工作草案发布并不意味着得到 W3C 及其成员的认可。

这是一份草案文档,可能随时被其他 文档更新、取代或废弃。除作为正在进行的工作外, 不应以其他方式引用本文档。 此即将成为推荐标准的文档的未来更新可能纳入 新特性

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

本文档受 2025 年 8 月 18 日 W3C 流程文档约束。

1. 引言

1.1 概述

本节为非规范性内容。

EPUB 3 标准分为两个不同的关注点:EPUB 出版物的创作 在核心规范 [epub-34] 中定义,而本 规范详细说明了它们在 EPUB 阅读系统中的渲染要求。

EPUB 阅读系统可以有多种形式。例如,它可能具有用于向用户渲染内容的视觉显示区域, 也可能仅提供内容的音频播放。因此, 不存在一组适用于所有阅读系统的单一规则。相反,本规范 根据阅读系统的能力及其支持的特性来划分渲染要求。

此外,本规范为开发者创建独特的用户界面提供了很大的灵活性, 并且诸如元数据处理之类事项的要求有意保持最低限度, 以允许这种灵活性。

因此,虽然本规范确定了阅读系统的正式要求,但不能 孤立地理解本文档。开发者还需要熟悉 EPUB 出版物的完整内容结构,以了解可用信息的完整范围。

一致的阅读系统不一定是单一的专用程序或设备,也可能 作为分布式系统存在。

1.2 术语

本规范使用 EPUB 3.4 中定义的术语 [epub-34]。

它还定义了以下术语:

内容显示区域

视口内专用于显示 EPUB 内容文档的区域。 内容显示区域不包括 EPUB 阅读系统可能注入到 视口中的任何边框、外边距、页眉、页脚或其他 装饰。

对于合成跨页,视口包含两个 内容显示区域。

一个术语在某一节中的第一次出现才会链接到其定义。

1.3 一致性

除标记为非规范性的章节外,本规范中的所有创作指南、图示、示例和注释均为 非规范性内容。本规范中的其他所有内容均为规范性内容。

本文档中的关键词 MAYMUSTMUST NOTOPTIONALRECOMMENDEDSHOULDSHOULD NOT 应按 BCP 14 [RFC2119] [RFC8174] 中所述解释,当且仅当它们全部以大写形式出现时, 如此处所示。

所有警告框、括号中的解释性说明以及算法说明也都是 非规范性内容

1.4 与其他 规范的关系

本节为非规范性内容。

1.4.1 与 HTML 的关系

[html] 标准在持续演进——它不再有 带版本号的发布。 该标准又引用了各种仍在继续演进的技术,例如 MathML、SVG、CSS 和 JavaScript。

阅读系统开发者需要跟踪 HTML 及其引用的技术的变化, 以确保其系统保持最新。

本规范不要求 EPUB 阅读系统支持脚本表单提交 或 HTML DOM [dom]。符合本规范的阅读系统 只被期望能够处理一致的 EPUB 内容文档。由于 脚本和表单提交支持不是强制性的,符合要求的阅读系统可能不是完全一致的 HTML 用户代理。

1.4.2 与 SVG 的关系

本规范不引用 [svg] 的特定版本,而是使用 不带日期的 引用。只要该引用存在任何歧义,最新的推荐 规范即为权威引用。

这种做法确保 EPUB 始终与 SVG 标准的变化保持同步。阅读系统开发者需要跟踪 SVG 标准的变化,以确保其 系统保持最新。

2. 阅读系统一致性

2.1 要求

一个阅读系统是否必须支持某项特性, 会在该特性所在章节的开头说明。 为了符合本规范,阅读系统 MUST 支持所有 必需特性以及所有适用的有条件必需特性(例如,如果阅读 系统具有视口,则支持图像渲染),如各自章节中所定义。

由于阅读系统不一定是单一应用程序,而可以作为 分布式系统存在,因此阅读系统要求并不总是在向用户渲染 EPUB 出版物的应用程序中得到满足。例如,一个阅读系统只 与受控内容仓库(如书店或图书馆系统)交互。在这种情况下, 如果阅读系统开发者能够证明这些要求不适用于该 应用程序(例如,带有重复 itemref 条目 [epub-34] 的 EPUB 出版物无法进入该 系统),则整个阅读系统仍被视为符合要求。

在支持建议特性和可选特性时,阅读系统 MUST 满足各自 章节中定义的所有规范性 要求。

当阅读系统开发者选择不支持某项建议或可选特性时, 并不总是意味着该章节的任何规范性要求都不适用。在某些情况下, 不实现某项特性时可能存在替代要求(例如,在不支持脚本时处理后备)。阅读 系统在不支持某项特性时 MUST 满足这些替代要求。

EPUB 出版物经常包含 [epub-34] 中未指定的附加信息(例如 包文档元数据)。阅读系统 可以将这些附加信息用于任何 目的,例如改进用户界面。

2.2 错误处理

EPUB 出版物或其中的资源 违反内容创作或处理要求时,阅读系统不必加载它们。

2.3 错误报告

本节为非规范性内容。

虽然阅读系统不必报告在处理和渲染 EPUB 出版物时遇到的错误(例如,如果某个固定布局文档的尺寸是推断得出的), 但强烈鼓励它们提供访问这些信息的方式。一个可比较的例子 是 Web 浏览器提供的用于调试 HTML 页面和应用的开发者工具。

访问此类处理信息可以更高效地调试 EPUB 出版物。为了在调试中发挥最大作用,建议阅读系统不仅报告 它们直接遇到的问题,还报告其所使用的任何应用程序报告的问题(例如,用于渲染内容的浏览器核心报告的 HTML、 CSS 和 JavaScript 错误,或由 EPUBCheck 报告的验证 问题)。

错误报告不应成为影响用户一般 阅读体验的侵扰性体验。相反,报告信息可以例如从设置菜单中选择性地 启用,以免不必要地打扰用户。

3. 出版物资源处理

阅读系统 MUST 处理 出版物资源 [epub-34]。

3.1 核心媒体类型

如果阅读系统具有视口,则它 MUST 支持图像核心媒体类型资源 [epub-34]。

如果它具有 渲染预录音频的能力,则它 MUST 支持音频核心媒体类型资源 [epub-34]。

建议阅读系统至少支持 H.264 [h264] 和 VP8 [rfc6386] 视频编解码器中的一种,但这不是 一致性要求—— 阅读系统可以支持任何视频编解码器,也可以完全不支持。阅读系统开发者在决定支持哪些视频格式时, 必须考虑采用广度、播放质量和技术许可费等因素。

3.2 外来资源

阅读系统 MAY 支持任意一组外来资源类型。

3.3 清单后备

对于外来内容文档,如果阅读 系统不支持该资源的 MIME 媒体 类型,则它 MUST 遍历该资源的清单 后备链 [epub-34],直到识别出可支持的出版物资源,用来 替代不支持的资源。

当为 EPUB 内容文档提供 清单后备 [epub-34] 时,阅读系统 MAY 从可用选项中选择,以找到 最佳版本来渲染(例如,通过检查每一项的 properties 属性)。

如果阅读系统支持后备链中的多个出版物 资源,则它 MAY 根据资源的 properties 属性 [epub-34] 值来选择要使用的资源;否则它 SHOULD 遵循首选 后备顺序 [epub-34]。

如果阅读系统不支持后备链中的任何资源, 则它 MUST 提醒用户无法显示该内容。

阅读系统 MUST 在 第一次引用到它已经遇到过的清单项时终止 后备链。

3.4 资源位置

阅读系统 SHOULD 支持远程资源,如 资源位置 [epub-34] 中所定义。

为了限制网络攻击风险,阅读系统 SHOULD 只加载 通过 https URI 方案 [rfc9110] 引用的远程资源。

3.5 数据 URL

阅读系统 MUST 阻止数据 URL [rfc2397] 在顶级浏览上下文 [html] 中打开, 除非是 通过阅读系统功能(例如上下文菜单)发起。如果阅读系统不 对顶级内容文档使用顶级浏览上下文,例如 当顶级 内容文档是 SVG 时,它也 MUST 阻止数据 URL 像 顶级内容文档那样 打开。

3.6 文件 URL

阅读系统 MUST 阻止访问 通过文件 URL [rfc8089] 引用的资源。

3.7 XML 处理

一个 阅读系统 MUST 使用非验证 XML 处理器 [xml],该处理器:

3.8 国际化

作为处理出版物资源的一部分,阅读系统必须 处理用于在 XHTML 内容文档SVG 内容文档中设置语言和基准方向的属性,以及 所有 XML 文档(例如包文档媒体覆盖文档)的 xml:lang 属性

此外,阅读系统 MUST 还要处理dir 属性 [epub-34],用于包文档,其中由 dir 指定的基准 方向适用于指定该属性的元素,以及其内容中的所有 元素,除非被另一个 dir 实例覆盖。(更多详细信息另见 5.1 基准方向。)

出版物资源中缺少此信息时,阅读系统 MUST NOT 从包 文档中表达的信息推断该资源的语言或基准方向(即来自 xml:langdir 属性、link 元素上的 hreflang 属性,或来自 dc:language 元素 [epub-34])。 关于如何处理缺少显式语言或方向信息的情况,请参阅该资源的正式规范以获取更多信息。

3.9 网络访问

阅读系统 MAY 支持网络访问,以获取远程 资源,并允许脚本化内容文档与 Web 托管 API 通信并获取 资源

然而,提供网络访问会增加阅读系统的安全风险以及 用户的安全和隐私风险。这些风险通常是阅读系统及其 运行平台所特有的——大多数阅读系统构建所基于的浏览器核心并不提供 与 Web 浏览器本身相同的安全和隐私控制。因此,开发者在允许网络访问时 需要格外谨慎,并更彻底地测试其阅读系统 是否不易受到攻击。关于这些风险的更多信息见 15. 安全与隐私

如果阅读系统开发者允许网络访问,则RECOMMENDED 他们同时:

4. 开放容器格式 (OCF) 处理

阅读系统 MUST 处理 EPUB 容器 [epub-34]。

处理 EPUB 容器的应用程序不必是完整的阅读系统 (例如,应用程序可能只提取容器内容或检查 打包内容的有效性)。在这些情况下,此类应用程序的开发者可以忽略本节中为阅读系统定义的渲染 要求。

4.1 OCF 抽象容器

4.1.1 根目录的 URL

阅读系统 MUSTOCF 抽象容器根目录分配一个 URL [url]。此 URL 称为容器根 URL。它是实现 特定的,但实现 MUST 具有以下属性:

阅读系统中每个 EPUB 出版物的用户特定实例都有唯一的 [html],这意味着如果两个不同 用户获得同一 EPUB 出版物的副本,即使使用同一阅读系统, 这两个用户的副本上的源也将不同。

容器根 URL的属性使得一致的阅读系统会 将任何相对 URL 字符串解析为内容 URL。换句话说,相对链接不会 “泄漏”到容器内容之外,这是一个重要的安全特性。

在实践中,容器根 URL 的行为类似于如下定义的 URL:

URL 组件
方案 httphttps
主机 localhost
端口 唯一分配给 EPUB 实例的动态端口

例如:

容器 文件 文件 路径 URL
根目录 空字符串 http://localhost:49152/
包文档 EPUB/package.opf http://localhost:49152/EPUB/package.opf
EPUB 内容文档 HTML/file name.xhtml http://localhost:49152/HTML/file%20name.xhtml
URL 字符串
(例如在包文档中 找到)
内容 URL
../HTML/file%20name.xhtml http://localhost:49152/HTML/file%20name.xhtml
/Media/img.png http://localhost:49152/Media/img.png
../../../Media/img.png http://localhost:49152/Media/img.png

请注意,最后两个链接在 EPUB 出版物中是不允许的,以确保与 不一致或旧版阅读系统和工具链之间具有更好的互操作性。

某些语言规范引用了早于 [url] 的征求意见稿,在这种情况下,较早的 RFC 适用于 该特定语言中的内容。

与大多数语言规范不同,阅读系统必须将容器根 URL 用作 META-INF 目录中所有 文件的基 URL [url]。 另见 [epub-34] 中关于解析 META-INF 目录中的 URL的章节。

4.1.2 文件名

虽然 [epub-34] 为最大互操作性定义了文件名和文件 路径限制,但阅读系统 SHOULD 尝试 处理不遵守这些要求的文件名和路径。无效的文件名和 路径可能只在某些操作系统上造成问题。

本规范不规定无法表示 OCF 文件 名和路径的阅读系统将如何处理这种不兼容性。

4.1.3 META-INF 目录

容器文件(container.xml

阅读 系统默认情况下 MUST 使用 第一个 rootfile 元素 [epub-34] 所引用的包文档来渲染 EPUB 出版物。如果阅读系统 识别出一种从其他可用选项中进行选择的方式,则它 MAY 选择更 合适的包 文档。

元数据文件(metadata.xml

阅读系统 SHOULD 忽略具有无法识别的根 元素的 metadata.xml 文件 [epub-34]。

清单文件 (manifest.xml

阅读系统 MUST NOT 使用 ZIP 归档中 或 manifest.xml 文件 [epub-34] 中包含的辅助清单信息来处理 EPUB 出版物

签名文件(signatures.xml

在计算用于验证 signatures.xml 文件 [epub-34] 中签名的摘要之前,阅读系统 MUST 解密签名后加密的任何数据 ——签名前加密的数据 MUST NOT 被解密。

关于识别签名后加密的数据的更多 信息,请参阅 XML 签名的解密转换 [xmlenc-decrypt]。

其他文件

阅读系统在遇到 META-INF 目录中未列在 保留文件 [epub-34] 中的配置文件时,MUST NOT 失败。

4.2 OCF ZIP 容器

阅读系统:

关于 OCF ZIP 容器归档中的特定字段,阅读系统:

4.3 字体混淆

注意

NIST 建议到 2030 年底逐步停止使用 SHA-1 算法 [fips-180-4]。 由于字体混淆依赖 SHA-1,出版维护工作组不打算在该日期之后继续支持 EPUB 出版物中的字体混淆——该特性现在被标记为 过时,以免使现有 EPUB 出版物无效。阅读系统开发者将不得不 考虑继续支持去混淆,以完整支持所有已经 使用该特性的 EPUB 出版物。不过,由于 CSS 提供字体后备,终止支持只会影响部分 文本内容的外观。

阅读系统 SHOULD 支持按 字体 混淆 [epub-33] 中定义的方式对字体去混淆。

为恢复原始数据,阅读系统可以简单地反向执行该过程:源文件变为 混淆数据,目标文件包含原始数据。

EPUB 3 在 EPUB 3.0.1 之前允许字体混淆,但没有指定混淆 和压缩的顺序。因此,阅读系统在解压和去混淆之后可能遇到无效字体。 在这种情况下,在解压之前对数据进行去混淆可能会得到 有效字体。阅读系统不必支持这种取回方法,但开发者需要 考虑到,如果他们通常支持 EPUB 3 内容,则很可能会遇到这种情况。

5. 包文档处理

阅读系统 MUST 处理 包文档 [epub-34]。

5.1 基准方向

如果 dir 属性 [epub-34] 被设置并 指示 ltrrtl 的基准方向,则阅读系统 MUST 按照 [bidi] 中定义的高级协议覆盖 双向算法;如果基准方向是 ltr,则将段落嵌入级别设为 0;如果基准方向是 rtl,则设为 1。

否则, 基准方向为 auto,在这种情况下,阅读系统 MUST 通过应用 Unicode 双向算法来确定文本的 方向,从 [bidi] 的规则 P2 开始。

面向国际受众或声称支持国际化内容的阅读系统, 在向用户公开这些元数据时,强烈建议实现此特性。忽略 文本方向性可能导致可读性问题。

5.2 唯一标识符

阅读系统 SHOULD NOT 依赖唯一标识符只对一个且仅一个 EPUB 出版物唯一。判断两个 具有相同唯一标识符的 EPUB 出版物是表示同一 出版物的不同版本,还是不同出版物,可能需要检查其他元数据,例如它们的最后 修改日期、标题和作者。

5.3 元数据

空白

阅读系统 MUST 在处理之前,从 Dublin Core [dcterms] 和 meta 元素 [epub-34] 中剥离并折叠 ASCII 空白 [infra]。

dc:identifier 元素

为确定 dc:identifier 元素 [epub-34] 的值是否符合某个 已建立的系统,或是否由发行机构授予,阅读系统 SHOULD 检查是否存在 identifier-type 属性 [epub-34]。

dc:title 元素

阅读系统 MUST 将文档顺序中的第一个 dc:title 元素 [epub-34] 识别为 EPUB 出版物的主标题,并在其他标题元素之前向用户 呈现它。

本规范不定义如何处理额外的 dc:title 元素。

dc:language 元素

dc:language 元素中指定的 EPUB 出版物语言是 信息性的。此信息的一些用途包括:

  • 通过阅读系统用户界面向用户公开它
  • 用它增强书架中的功能(例如按语言排序)
  • 用它优化阅读界面(例如预加载文本转语音 语言)

有关如何确定出版物资源语言的更多详情,请参见 3.8 国际化

dc:creator 元素

在确定显示 优先级时,阅读系统 MUST 使用 metadata 节中 dc:creator 元素 [epub-34] 的文档顺序,其中遇到的第一个 creator 元素 是主要创作者。如果阅读系统向 用户公开创作者元数据,则它 SHOULD 尽可能包含 metadata 节中列出的所有创作者 (例如,不受显示方面限制时)。

meta 元素

阅读系统 SHOULD 忽略所有 meta 元素,如果其 property 属性 [epub-34] 定义了它们无法识别的表达式。阅读系统在遇到未知 表达式时 MUST NOT 失败。

如果阅读系统无法识别 scheme 属性 [epub-34] 的值,则它 SHOULD 将该 元素的值视为字符串。

检索和支持链接资源OPTIONAL

hreflang [EPUB-34] 属性中标识的语言 纯粹是建议性的。资源中表达的语言信息决定其用于 处理和渲染目的的语言,如国际化要求中所定义。

5.4 清单

阅读系统 MUST 忽略它们无法识别的 properties 属性 [epub-34] 的值。

阅读系统 SHOULD NOT 在渲染 EPUB 出版物时使用链接资源,这是由于其固有 限制和相关风险(例如,缺少关于资源以及如何处理它的信息、 来自远程托管来源的安全风险、缺少后备等)。

5.5 书脊

阅读系统 MUST 提供一种方式,按 spine 元素 [epub-34] 中定义的顺序 渲染 EPUB 出版物,其中 包括:

有关处理清单后备的更多信息,请参阅 3.3 清单后备

当用户遍历 spine 元素中定义的默认阅读顺序时,阅读系统 MAY 自动跳过非线性 itemref 元素 [epub-34]。然而,当用户激活指向非线性 资源的超链接时,阅读系统 MUST 渲染所引用的资源或指定的 后备。 阅读系统 MAY 还为用户提供默认 跳过或不跳过非线性 内容的选项。

如果未设置 page-progression-direction 属性 [epub-34],则阅读 系统 MUST 假定其值为 default。当 page-progression-direction 值为 default 时,阅读系统可以选择渲染方向。

如果 page-progression-direction 属性具有 default 以外的值, 则阅读系统 MUST 忽略从 pre-paginated XHTML 内容文档计算出的任何方向性。

阅读系统 MUST 忽略所有在 spine itemref properties 属性 [EPUB-34] 中表达且它们无法识别的 值。

阅读系统在渲染线性阅读顺序时,MUST NOT 跳过指向重复清单项 [EPUB-34] 的 spine 引用。 阅读 系统 MUST 为用户界面(UI)目的将这些项视为不同项 (例如,每次 出现都可以被独立加书签或批注)。 当 阅读系统跟随指向在 spine 中被多次引用的资源的超链接时, 阅读系统 MUST 导航到该文档在线性阅读 顺序中的第一次出现。

5.5.1 书脊覆盖

spine itemref 元素的 properties 属性覆盖 全局渲染属性 [epub-34] 时,阅读 系统 MUST 遵循该覆盖的全局值对应的要求来显示该 spine 项。

例如,包含 layout-pre-paginated 覆盖 [epub-34] 的 spine 项,会按照全局 pre-paginated的要求进行渲染。

如果 在 properties 属性中为同一属性指定了多个覆盖,阅读系统 MUST 只使用第一个值。

5.6 集合

在本规范的上下文中,阅读 系统对集合 [epub-34] 的支持是 OPTIONAL阅读系统 MUST 忽略定义了无法识别角色的 collection 元素。

5.7 遗留特性

阅读系统 MUST NOT 在符合 此 版本 EPUB [epub-34] 的内容中支持遗留 特性

6. 布局处理

6.1 布局类型

6.1.1 可重排布局

阅读系统 MUST 支持可重排布局。

如果 包文档 元数据 [epub-34] 中没有出现携带 rendition:layout 属性meta 元素,则 EPUB 阅读系统 MUST 假定默认值 reflowable 为全局值。

阅读系统在渲染可重排的 EPUB 内容文档MAY 应用动态分页。

6.1.2 固定布局

6.1.2.1 预分页布局

阅读系统 MUST 支持预分页布局。

阅读系统在渲染时 MUST 为每个 spine itemref [epub-34] 精确生成一页。

渲染预分页布局的默认预期是,内容显示区域 SHOULD 尽可能占用可用视口区域。阅读系统 SHOULD NOT 向 视口注入诸如边框、外边距、页眉或页脚之类的附加内容。

在渲染 合成跨页时,阅读系统 MUST NOT 在相邻内容 槽之间包含空隙。

本规范不定义初始 包含块 [css2] 如何被放置在阅读系统的内容显示 区域内。

阅读系统控制小组件向用户公开的方式是实现特定的, 不包含在上述行为预期中。

6.1.2.1.1 合成 跨页放置

跨页放置 spine 覆盖按如下方式解释:

rendition:page-spread-leftrendition:page-spread-rightrendition:page-spread-center 属性(及其无前缀 等价项)仅适用于预分页内容,并且仅在阅读系统正在创建 合成跨页时适用。

rendition:page-spread-* 属性及其无前缀等价项 MUST 优先于 为 XHTML 内容文档设置的 page-break-before 属性 [css2] 的任何值。

当阅读 系统遇到表示真正跨页的两个 spine 项(即两个相邻 spine 项分别带有 rendition:page-spread-leftrendition:page-spread-right 属性)时,它 SHOULD 创建相邻页面之间没有空隙的跨页。

如果 spine 中的第一个 itemref 元素 [epub-34] 未指定跨页 放置位置,则它 SHOULD 要么 单独呈现(即如同设置了 rendition:page-spread-center 属性),要么单独放置在两个可用跨页槽位之一中(即 另一个槽位为空)。应使用哪个槽位 SHOULDpage-progression-direction 属性 [epub-34] 的值获得。例如,在从左到右翻页方向的 EPUB 出版物中, 左侧槽位将为空。

如果阅读系统默认不渲染非线性 [epub-34] 内容,则第一个要单独放置的 spine 项将成为 spine 中第一个线性项。

6.1.2.2 卷动布局

阅读系统 SHOULD 支持卷动布局的渲染。

对于卷动 布局 [epub-34],阅读系统 MUST 使每个 spine itemref 的宽度适配视口,并在没有可见间隙的 连续卷动中显示它们。

当 EPUB 出版物指定使用卷动 布局时,阅读系统 MUST 忽略任何布局覆盖 [epub-34]。

在引入卷动布局之前,一些日本出版商将预分页布局与设为 "scrolled-continuous" 值的 rendition:flow 属性 [epub-33] 组合起来创建卷动。如果阅读系统 开发者打算支持此内容,则需要将这种组合视为 等同于声明了卷动布局。

6.2 自定义属性

阅读系统 MAY 支持自定义属性,前提是它们不引入 与包渲染词汇表 [epub-34] 中定义的属性在行为上冲突的表达式。

7. EPUB 内容文档处理

EPUB 内容文档 [epub-34] 的定义包括 各种创作限制,以优化内容的跨兼容性(例如,禁止使用 CSS 设置 语言和方向 [epub-34])。 除非本规范中另有说明,阅读系统 MAY 支持这些 受限特性。

7.1 XHTML 内容文档

阅读系统 MUST 处理 XHTML 内容文档 [epub-34]。

除非在本节中明确将其定义为被覆盖,否则阅读 系统 MUST 使用 [html] 规范定义的语义处理 XHTML 内容文档, 并遵守其中表达的任何适用用户代理一致性约束。

7.1.1 HTML 扩展

7.1.1.1 RDFa

阅读系统对属性处理 模型 [rdfa-core] 的支持是 OPTIONAL

7.1.1.2 国际化标签集 (ITS)

阅读系统对处理 ITS 标记 [its20] 的支持是 OPTIONAL

7.1.1.3 自定义属性

阅读系统 MAY 支持自定义属性,前提是这些属性不 修改本规范的 要求。

7.1.2 HTML 偏差与 约束

7.1.2.1 微数据

阅读系统对属性处理 模型的支持是 OPTIONAL转换为 JSON [html] 也是如此。

7.1.2.2 MathML

为了支持嵌入在 XHTML 内容文档中的 MathML [mathml3], 阅读系统:

阅读系统可以选择使用第三方库(如 MathJax)来提供 MathML 渲染。

7.1.2.3 嵌入式 SVG

阅读系统 MUST 按照 7.2 SVG 内容文档 中的定义处理嵌入在 XHTML 内容文档中的 SVG。

7.1.2.3.1 嵌入式 SVG 和 CSS

为了 对通过引用嵌入在 XHTML 内容文档中的 SVG 进行 样式化,阅读系统 MUST NOT 将包含文档的 CSS 样式规则 应用于被引用的 SVG 文档。

为了 对通过包含嵌入在 XHTML 内容文档中的 SVG 进行样式化,阅读系统 MUST 将包含文档的适用 CSS 规则应用于 被包含的 SVG 元素。

通过引用包含的 SVG 会作为单独文档处理,并且可以 像 SVG 内容文档一样包含自身的 CSS 样式规则。 请注意, 这与 [html] object 元素引用 外部 [html] 元素的情况一致。

7.1.2.4 表单提交

阅读系统对提交 [html] form 元素的支持是 OPTIONAL。 例如,阅读系统可能通过限制网络访问来阻止表单提交。

7.2 SVG 内容文档

阅读系统 MUST 处理 SVG 内容文档 [epub-34]。

为了处理 SVG 内容文档和嵌入在 XHTML 内容 文档中的 SVG,阅读系统:

7.3 固定布局文档

阅读系统 MUST 支持渲染布局被指定为 pre-paginatedrollspine 项中的 EPUB 内容文档。它们 MAY 支持渲染布局被指定为 pre-paginatedroll 的 spine 项中的图像 外来资源

此要求并不要求阅读系统支持卷动布局。只有在支持该布局时, 阅读系统才必须支持固定布局 EPUB 内容 文档的渲染。

7.3.1 初始 包含块尺寸

XHTML

阅读系统 MUST 使用 XHTML 内容文档viewport meta 标签中声明的宽度和高度表达式创建初始 包含块(ICB),如 在 HTML 中表达 [epub-34] 中所定义。 它们 MUST 裁剪 定位在 ICB 之外的内容。

如果 viewport meta 标签中的宽度或 高度值包含非数字字符但以数字开头(例如,该值包含 "500px" 这样的长度单位声明),则数字前缀 SHOULD 被用作像素值, 否则该值 MUST 被视为无效。

阅读系统 SHOULD 尝试从 viewport meta 标签中提取 widthheight 值,即使其语法无效。

阅读系统 MUST 使用 viewport meta 标签中 widthheight 属性的第一个 声明(即忽略重复声明)。

如果 viewport meta 不包含宽度或高度值,或者如果 这些值无效,则阅读系统 MAY 提供这些值。 例如,阅读 系统可能:

  • 分别将这些值视为 device-widthdevice-height;或
  • 查找 spine 中的前一个内容文档(如果适用),并使用 其中定义的 ICB 值;或
  • 完全将该内容文档视为错误的 XHTML 内容。

如果 XHTML 内容文档包含 多个 viewport meta 标签,则阅读系统 MUST 使用文档顺序中的第一个来获得高度和宽度尺寸。后续声明 MUST 被忽略。

当 ICB 宽高比与阅读系统内容显示区域的宽高比不匹配时,阅读系统 MAY 将 ICB 定位在该区域内以适应用户界面;换句话说,额外的 信箱式留白 MAY 出现在内容的任一侧(或两侧)。

SVG

阅读系统 MUST 使用 在 SVG 中表达 ICB [epub-34] 中定义的尺寸创建 初始包含块(ICB),以渲染 SVG 内容文档

当 ICB 宽高比与阅读系统内容显示区域的宽高比不匹配时,建议 遵循 viewBoxpreserveAspectRatio 属性的规则,如 [SVG] 中所定义。

图像外来资源

如果阅读系统支持 spine 中的图像外来资源,则它将必须 使用图像宽度和高度元数据中定义的尺寸创建初始 包含块。有关如何获得此元数据的更多信息,请参阅每种受支持图像 格式的文档。

7.3.2 viewport meta 标签

除为 XHTML 固定布局文档获取初始 包含块尺寸时以外,阅读系统 MUST 忽略 viewport meta 声明中的渲染指令。

此限制同时适用于固定布局和可重排的 XHTML 内容文档

7.4 层叠样式表 (CSS)

如果阅读系统具有视口, 则它 MUST 支持 通过 CSS 对 XHTML 内容文档进行视觉渲染 [epub-34]。

为了支持 CSS,阅读系统:

阅读系统开发者应公开记录其用户代理样式表, 以及这些样式表如何与 EPUB 出版物中设置的样式交互。

7.4.1 作者样式覆盖

阅读系统 MAY 覆盖 EPUB 出版物样式的部分内容(例如,出于人体工学 或用户界面原因)。此外,它们 MAY 允许用户设置默认主题和样式偏好(例如,为了更无障碍的阅读), 这些设置会进一步改变出版物的原始设计。

7.5 脚本

阅读系统 SHOULD 支持脚本 [epub-34]。

阅读系统对脚本的支持取决于其使用上下文:

如果阅读系统支持脚本:

如果阅读系统不支持 脚本,则它 MUST 按照 脚本化内容 文档的后备 [epub-34] 中的定义处理脚本化内容的后备。

7.5.1 本地存储

阅读系统 MAY 阻止脚本 通过 cookieWeb 存储 [html] 保存持久 数据。

允许 本地存储 [html] 的阅读系统 SHOULD 提供 供用户检查或删除该数据的方法。

7.5.2 事件模型

阅读系统 SHOULD 按照 [html] 遵循 DOM 事件模型,并在执行与这些事件相关的任何默认操作之前, 将 UI 事件传递给 脚本环境。

阅读系统开发者必须确保脚本不能禁用关键功能(例如 导航),以限制潜在恶意脚本可能影响其 阅读系统的程度。因此,虽然 脚本环境应当能够取消任何事件的默认操作,但某些 事件可能不会被传递,或者可能不可取消。

7.5.3 安全注意事项

本节为非规范性内容。

同时支持脚本的阅读系统开发者需要了解 阅读系统执行脚本化内容时产生的安全问题。由于阅读系统和浏览器采用的底层脚本模型 相同,开发者必须考虑与 Web 上下文中遇到的 同类问题。

每个阅读系统都必须确定它是否可以信任特定文档中的脚本。建议 将所有脚本视为不受信任(且可能恶意),并检查和防护 所有攻击向量,特别是:

  • 针对运行时环境的攻击(例如,从用户硬 盘窃取文件);

  • 针对阅读系统本身的攻击(例如,窃取用户书籍列表或 导致意外行为);

  • 一个 EPUB 内容文档针对 另一个文档的攻击(例如,窃取源自不同文档的数据);

  • 未加密脚本针对文档加密部分的攻击(例如, 注入的恶意脚本提取受保护内容);

  • 针对本地网络的攻击(例如,从防火墙后的 服务器窃取数据)。

为了限制不受信任脚本可能造成的损害,本规范建议阅读 系统为每个 EPUB 出版物分配一个唯一的 [html](参见 4.1.1 根目录的 URL)。分配唯一源可以确保 spine 级脚本 [epub-34] 与其他 EPUB 出版物隔离,并限制对 cookie [html]、Web 存储 [html] 等的访问。

与“源”概念绑定的 Web API 示例包括 Web 存储 [html] 和 IndexedDB [indexeddb],EPUB 内容文档可以 通过脚本与它们交互。允许用户从托管库(其“书架”)中添加/移除出版物的阅读 系统,可能会在移除出版物并随后 重新导入内容库时保持该出版物的唯一源。相反,阅读系统可能会为每个新添加的出版物创建新的唯一 源。

本规范还建议,不允许容器受限脚本 [epub-34] 修改宿主 EPUB 内容文档的 DOM 和/或操纵包含矩形(参见 7.5 脚本)。

请注意,遵守这些建议并不能保证防止上述可能的 攻击;开发者必须在其阅读系统的上下文中检查每个潜在漏洞。

8. 导航文档处理

阅读系统 MUST 处理 EPUB 导航文档 [epub-34]。

为了处理 EPUB 导航文档,阅读系统:

无论 EPUB 导航文档是否也包含在 spine 中,阅读系统 MUST 都遵守上述要求。

9. 听觉渲染

9.1 文本转语音

阅读系统对文本转语音播放的支持是 OPTIONAL

如果阅读系统具有音频播放能力,则强烈鼓励它提供 文本转语音播放功能以提升无障碍性。

在包含文本转语音播放时,阅读系统 SHOULD 支持 以下特性,以提供类似于为媒体 覆盖所定义的播放体验:

工作组预计将在未来的说明中提供关于文本转语音 播放内容级问题的指导。这将包括语言和文字体系特定的问题,例如 当前在 [ruby-tts-req] 中处理的问题。

用于增强文本转语音播放质量的可能创作技术详见 [epub-tts-10],但这些 技术目前尚未得到广泛支持(或根本不受支持)。如果这些技术或替代技术未来获得支持, 它们将被纳入 本规范。

9.2 媒体覆盖处理

具有 渲染预录音频能力的阅读系统 SHOULD 支持媒体覆盖 [epub-34]。

如果阅读系统不支持媒体覆盖,则它 MUST 同时忽略:

9.2.1 加载媒体覆盖

当阅读 系统加载包文档时,它 MUST 参照 manifest item 元素的 [epub-34] media-overlay 属性,以发现 EPUB 内容文档对应的媒体 覆盖。

阅读 系统 MUST 支持 XHTML 内容文档的播放,并且 MAY 支持 SVG 内容文档

播放 MUST 从与期望的 EPUB 内容文档起始点对应的 媒体覆盖元素开始。 请注意,EPUB 内容文档的起始处可能对应于媒体覆盖开头 或中间的某个元素。 当媒体 覆盖文档播放结束时,阅读系统 SHOULD 加载下一个 EPUB 内容 文档(如包文档 spine 中所指定),并且在给出对应媒体覆盖文档的情况下,也加载其 对应的媒体覆盖文档。

9.2.2 基本播放

9.2.2.1 计时和 同步

阅读系统 MUST 按顺序渲染 body 元素 [epub-34] 的直接子元素。 seq 元素的 [epub-34] 子元素 MUST 按顺序渲染, 并且当最后一个子元素播放完成时播放完成。阅读系统 MUST 并行渲染 par 元素的 [epub-34] 子元素(每个子元素同时开始), 并且当所有子元素播放完成时播放完成。阅读系统对 媒体覆盖文档的播放在 body 元素的最后一个子元素播放完成时结束。

9.2.2.2 渲染音频

当遇到媒体 覆盖 audio 元素 [EPUB-34] 时,阅读系统 MUST 播放 src 属性所引用的音频资源,从 clipBegin 属性给出的剪辑偏移时间开始, 到 clipEnd 属性给出的剪辑偏移时间结束 [epub-34]。

此外:

  • 如果未设置 clipBegin 属性,阅读系统 MUST 假定其 值为 "0"。

  • 如果未设置 clipEnd 属性,阅读系统 MUST 假定其值 为物理媒体的完整持续时间。

  • 如果 clipEnd 的值超过物理媒体的完整持续时间, 阅读系统 MUST 假定其值为物理 媒体的完整持续时间。

用户可控制的音频播放选项 SHOULD 包括时间尺度 修改,用户可以在不扭曲音高的情况下 改变播放速率。建议范围为 半速到双倍速。

9.2.2.3 渲染 文本转语音

当没有 audio [epub-34] 兄弟元素的媒体覆盖 text 元素引用目标 EPUB 内容文档中的文本时,具有文本转语音(TTS) 播放能力的阅读系统 SHOULD 使用 TTS 渲染被引用的文本。

阅读系统 SHOULD 使用目标 EPUB 内容 文档中提供的语音相关信息,作为媒体覆盖渲染的一部分来播放音频流。

有关在 EPUB 出版物中支持 TTS 技术的 更多信息,请参见 EPUB 3 文本转语音 支持 [epub-tts-10]。

媒体覆盖 text 元素的生命周期对应于 相关语音合成的渲染时间。因此,text 元素的隐式持续时间(以及 推断出的父 par 元素持续时间)由 文本转语音引擎的执行决定,并且无法在创作时得知(语速、 停顿和其他韵律参数等因素会影响音频输出)。这也 意味着阅读系统在使用包文档中设置的 duration 属性值时,需要将其视为 近似值。

9.2.2.4 渲染 EPUB 内容文档元素

当遇到媒体覆盖 text 元素 [epub-34],且其 src 属性包含引用 EPUB 内容文档特定部分的 URL 片段字符串时,阅读系统 SHOULD 确保被引用部分在 视口中可见。除了 [html] 元素 ID 引用和 SVG 片段 标识符 [svg] 外,阅读系统 MAY 支持其他 片段标识符 方案。

在媒体覆盖播放期间,具有视口的阅读系统 SHOULD 将元数据属性 active-classplayback-active-class [epub-34] 给出的类名添加到 EPUB 内容文档中的适当元素上, 当这些属性被指定时。相反,如关联样式信息 [epub-34] 中所述,当播放状态发生变化时, SHOULD 移除这些类名。

active-classplayback-active-class 元数据属性是 OPTIONAL,如果省略,则阅读系统行为是 实现特定的。

片段 标识符 [epub-34] 未引用元素时,阅读系统行为也 是实现特定的。

9.2.3 在 EPUB 内容文档内导航

由于媒体覆盖与 EPUB 内容文档紧密关联,阅读系统很容易 根据媒体覆盖播放中的当前位置定位到 EPUB 内容文档中的某个位置。如果用户 暂停同步播放并导航到 EPUB 出版物的不同部分, 同步播放 MUST 从该点恢复。例如,如果 EPUB 内容文档中的特定页码是期望位置,则同一点会在媒体 覆盖中定位,并从那里开始播放。

同样的方法也允许将媒体覆盖播放与用户在 EPUB 导航文档中选择导航点进行同步。阅读 系统加载该文件的媒体覆盖,并根据 导航点目标的 ID 找到正确的播放起点。

媒体覆盖文档可以 直接与 EPUB 导航 文档关联,以便无论其所在的 XHTML 内容文档是否包含在 spine 中,都能提供其内容的同步播放。更多信息见 EPUB 导航文档 [epub-34]。

媒体覆盖文档元素可以与表格等 EPUB 内容文档结构 关联。阅读系统需要确保媒体覆盖播放与用户对表格行和单元格的导航 保持同步。阅读系统也可以在单元格内容之前播放 相应的表头。

9.2.4 可跳过性和 可退出性

9.2.4.1 可跳过性

阅读系统 SHOULD 使用媒体覆盖元素的 epub:type 属性提供的语义信息,为用户提供跳过 内容的选项。

当启用内容跳过时,阅读系统 MUST 抑制播放任何其 epub:type 属性包含与可跳过 结构匹配语义的 parseq 元素。

9.2.4.2 可退出性

在播放媒体覆盖时,阅读系统 SHOULD 为 用户提供离开(“退出”)可退出 结构 [epub-34] 的选项,这些结构由带有 epub:type 属性 [epub-34] 且其值来自可退出结构 列表来确定。 如果用户选择从可退出结构中退出,则 阅读系统 MUST 继续播放该 结构之后的下一个顺序元素。

10. 处理结构语义

阅读系统 MAY 支持 结构语义 [epub-34],用于 EPUB 内容文档

在处理 epub:type 属性时,阅读系统:

11. 处理紧凑 URL

阅读系统 MAY 支持 词汇表关联机制,用于 处理紧凑 URL [epub-34]。

本节定义了一个从紧凑 URL 获取展开 URL 的算法。它仅适用于 支持 [epub-34] 词汇表关联机制的阅读系统

不支持 [epub-34] 词汇表关联机制的阅读系统 MAY 将紧凑 URL 作为普通字符串值 [infra] 处理。它们不必支持将这些值 展开为 URL,也不必基于这些值的存在添加阅读系统行为。

该算法使用 [infra] 中定义的术语和数据类型描述过程,并且在 成功时返回带有展开 URL 的字符串值。对于无效属性,返回 null 值。

此算法接受以下参数:

获取 展开 URL,应用以下步骤:

  1. baseURLexpandedURLprefixreference 为 空字符串

    解释

    在此算法中:

    • baseURL 将保存与该值关联的基 URL,无论该 URL 是在 prefix 属性中分配、对应于默认词汇表,还是 来自保留前缀。
    • expandedURL 将保存基 URL 和引用串联后得到的 最终 URL。
    • prefix 将保存紧凑 URL 的前缀 [epub-34] (即冒号之前的值)。来自默认词汇表的属性不会有前缀,但所有 其他属性都会有。
    • reference 将保存紧凑 URL 的引用 [epub-34] (即 前缀之后的值)。所有有效属性都需要引用。
  2. 按如下方式获取 prefixreference 的值:

    1. 如果 value 不包含冒号(U+003A),则将 reference 设为 value

      解释

      如果紧凑 URL 值没有冒号,则它没有前缀。在这种 情况下,该值来自默认词汇表,如算法下一步所述。

    2. 否则,如果 value 以冒号开头,则该值无效。返回 null

      解释

      值开头的冒号是无效的,因为它表示前缀未 设置。

    3. 否则,在第一个冒号处分割 value,并将 prefix 设为冒号前的 字符串,将 reference 设为冒号后的字符串。

    如果 reference 不是有效的路径相对且无方案的 URL 字符串,而紧凑 URL 定义 [epub-34] 要求它如此,则该值无效。返回 null

    解释

    路径相对且无方案的 URL 字符串定义有若干限制, 无论引用是否有前缀,这些限制都适用于 该引用。

    例如,引用不允许以URL 方案字符串开头且后跟 冒号。此限制意味着以下内容不是有效的 property 值, 因为第二个冒号可能表示方案:foo:bar:baz/qux

    对于哪些字符必须进行百分号编码,也存在限制。

  3. 按如下方式获取 baseURL 的值:

    1. 如果 prefix 是空字符串:

      1. 如果 attrepub:type [epub-34],则将 baseURL 设为
        http://idpf.org/epub/vocab/structure/#
      2. 否则,如果 elem 是包文档 meta 元素 [epub-34] 且 attrscheme,则属性值无效。返回 null
      3. 否则,如果 elem 是包文档 meta 元素 [epub-34], 则将 baseURL 设为
        http://idpf.org/epub/vocab/package/meta/#
      4. 否则,如果 elem 是包文档 link 元素 [epub-34], 则将 baseURL 设为
        http://idpf.org/epub/vocab/package/link/#
      5. 否则,如果 elem 是包文档 item 元素 [epub-34], 则将 baseURL 设为
        http://idpf.org/epub/vocab/package/item/#
      6. 否则,如果 elem 是包文档 itemref 元素 [epub-34],则将 baseURL 设为
        http://idpf.org/epub/vocab/package/itemref/#
      解释

      如果紧凑 URL 没有前缀,则此步骤会根据其所属的属性或元素 分配要使用的默认 词汇表 URL。当包文档中的某个 元素具有多个采用紧凑 URL 数据类型的属性时,这些属性共享同一默认词汇表。因此, 不必同时检查元素和属性来确定要 分配的 URL。

      EPUB 3 中唯一没有默认词汇表的属性是 scheme 属性 [epub-34]。没有前缀的 scheme 值 无效。

    2. 否则:

      1. 如果在 doc 的文档元素上声明了 prefix 属性, 并且该属性包含与 prefix 匹配的前缀,则将 baseURL 设为与该 前缀声明关联的 URL。

      2. 否则,如果 prefix 匹配 doc 的某个保留前缀 [epub-34], 则将 baseURL 设为与该 保留前缀关联的 URL。

      解释

      当紧凑 URL 有前缀时,首先检查其基 URL 的位置是在文档元素上的 prefix 属性声明中。

      如果作者没有为该前缀分配 URL,则下一步是检查该 前缀是否匹配某个保留前缀。

      请注意,作者分配的前缀 URL 会覆盖保留前缀 URL。

    如果 baseURL 是空字符串,则属性值无效。返回 null

    解释

    如果在此处理步骤结束时基 URL 为空,则说明前缀未 映射或保留,或者正在处理的元素或属性不接受紧凑 URL 数据类型,如 [epub-34] 中所定义。

    没有基 URL,就无法生成展开 URL,因此该值 无效。

  4. expandedURL 设为 baseURLreference 的串联值。串联这些值时不要添加分隔符。
  5. 如果 expandedURL 不是有效 URL 字符串,则该值无效。返回 null

    否则,返回 expandedURL

    解释

    虽然可以得到展开值,但它不一定是 有效 URL。这只可能在为 前缀分配了无效基 URL 时发生。

阅读系统不必解析得到的 URL [url] 或尝试 解引用得到的展开 URL。将紧凑 URL 展开为完整 URL 只确保阅读 系统遇到了其预期的值(也就是说,因为不同 EPUB 出版物可能将 同一前缀分配给不同 URL,所以两个值在展开之前可能看起来相同)。

12. 向后兼容性

阅读系统 MUST 尝试 处理其包文档 version 属性 [epub-34] 小于 "3.0" 的 EPUB 出版物

具有较旧版本号的 EPUB 出版物,除非按照其各自规范处理, 否则并不总能完全按预期渲染。阅读系统 SHOULD 按这些规范定义的方式支持此类 EPUB 出版物。

13. 向前兼容性

阅读系统 SHOULD 尝试处理其 包文档 version 属性 [epub-34] 大于 "3.0" 的 EPUB 出版物

14. 无障碍

本节为非规范性内容。

虽然本规范的主要重点是如何处理和渲染 EPUB 出版物, 但它并不强制所有阅读系统都必须提供特定用户界面。这并不 意味着不存在所有阅读系统开发者都需要了解 或在其应用中设法避免的常见无障碍问题。

W3C 的 User Agent Accessibility Guidelines [uaag20] 提供了许多有用 实践,开发者可以 应用这些实践来改进其阅读系统,因为许多浏览器无障碍问题在 EPUB 特定用户代理中也有对应情况。

以下列表概述了一些 EPUB 特定领域,在这些领域中缺乏无障碍性会影响 用户的阅读体验:

DAISY 联盟维护一个无障碍测试套件, 用于帮助评估这些问题以及更多问题。

15. 安全与隐私

15.1 概述

本节为非规范性内容。

EPUB 出版物的特殊性在于其结构。EPUB 格式 提供了一种 表示、打包和编码结构化且语义增强的 Web 内容 — 包括 HTML、CSS、SVG 和其他资源 — 的方法,以便在单文件容器中分发。

对于阅读系统而言,这意味着安全和 隐私问题主要基于这些格式的 特性,并且与一般 Web 内容所呈现的威胁非常相似。

阅读系统开发者还负有双重责任:既要确保其应用的安全和隐私, 又要帮助限制渲染在其中的内容对用户造成的威胁。 本节其余部分探讨 EPUB 3 的风险模型,旨在帮助开发者 识别并缓解这些风险。

有关 EPUB 出版物创作相关风险,请参阅 [epub-34] 的安全与隐私章节

15.2 威胁模型

本节为非规范性内容。

对用户最大的威胁来自他们阅读的内容 [epub-34],而抵御这些攻击的第一道防线是他们使用的 阅读系统。用户期望阅读系统充当防范恶意内容的保护措施,并且 常常不知道 EPUB 出版物也容易受到与 Web 站点相同的安全风险影响。

但是,虽然阅读系统被依赖来提供安全和隐私,但它们也可能 根据处理信息的方式对用户构成意外威胁。例如,跟踪用户信息以 优化体验是一种常见需求,但如果未经用户许可而这样做,阅读 系统可能会违反法律隐私要求。

本节概述了阅读系统开发者需要考虑的一些关键威胁, 后续章节提供更多详细信息和建议。

脚本

恶意脚本会针对阅读系统呈现多种攻击向量。例如,如果本地存储 不安全,它们可能尝试破坏用户数据。在拥有 网络访问权限的情况下,它们可能尝试未经授权收集用户数据。

关于这些问题以及如何缓解它们的更详细讨论见 7.5.3 安全注意事项

恶意内容

EPUB 出版物可能包含旨在利用阅读 系统或其运行所在操作系统中的安全缺陷的资源。攻击者还可能尝试使用文件间接 技术(例如符号链接或文件 别名)访问远程资源

由于缺乏用于签署 EPUB 出版物的标准方法,阅读系统并不 总能验证内容在创作和加载到 设备之间是否被篡改。

远程资源

远程资源呈现的风险与 从不受信任来源加载的任何 EPUB 出版物相同。即使 EPUB 出版物的发布者受信任,远程资源也可能被 攻陷。

对远程资源的调用也可用于跟踪用户信息(例如通过 服务器日志)。建议将通过 HTTP 请求暴露的信息限制为仅 获取资源所必需的信息。

EPUB 的既特定于每个阅读 系统实现,也不为该实现之外所知。因此,即使 远程资源托管在受信任的 Web 服务器上,服务器实际上也不能使用 需要指定允许源的安全特性,例如 CORS 的标头、Content-Security-PolicyX-Frame-Options

外部链接

与远程资源一样,外部链接可被用来诱骗毫无戒心的用户打开 Web 上旨在利用阅读系统或操作 系统的恶意资源。

同样,也建议避免通过链接跳转暴露可能识别用户身份的信息 (例如,不使用跟踪标识符或暴露 关于用户环境的不必要信息)。

用户生成内容

阅读体验中的用户生成内容,例如通过文本区域或其他 交互组件产生的内容,如果未得到妥善保护,可能会威胁阅读系统安全或用户隐私。 关于脚本安全的更多详情见 7.5.3 安全注意事项

用户数据收集

在未获得用户 许可的情况下收集有关用户及其阅读习惯的信息,可能侵犯其隐私,即使该信息仅用于内部 使用。

试图基于用户阅读习惯或其 出版物中的元数据(例如无障碍偏好)来画像用户,可能使用户遭受意外伤害。

此外,适用于 [xml] 和 [zip] 文件的安全注意事项也分别适用于 包文档开放 容器格式。更多详细信息请参见 application/oebps-package+xmlapplication/epub+zip 格式的媒体类型注册中的 “安全 注意事项”章节。

15.3 建议

阅读系统开发者可以采取的最强隐私措施是明确说明他们 打算收集和使用的用户和/或其阅读行为相关数据,并征求用户同意 以获取这些数据。他们 SHOULD 还允许对此类 信息进行个性化设置和控制。

如果阅读系统允许用户存储持久数据,尤其是个人身份 信息,则它 SHOULD 将这些数据视为敏感数据,并且不允许第三方访问。

可以理解,为销售、交付和 运行 EPUB 出版物,收集某些用户数据往往是必要的,尤其是在 销售 EPUB 出版物和阅读方式相关联的平台上。在这些情况下,阅读系统 SHOULD 标识所收集的数据、其使用方式,并允许用户选择退出(零售商可以 选择通过其他方式告知用户,例如在用户在其网站创建账户时)。 对任何收集数据进行匿名化对于用户和 阅读系统的隐私与安全是 RECOMMENDED

还可以理解,用户数据对于某些阅读系统 功能可能是必要或有帮助的。在这些情况下,匿名化同样是 RECOMMENDED。阅读系统 SHOULD 还告知 用户需要哪些数据、这些数据将用于何种目的,并提供选择退出的方法。

内容处理器——定义为处理 EPUB 内容摄取以便 分发、显示或销售的实体——也需要意识到摄取过程中的潜在风险。 建议内容处理器在摄取时检查内容是否包含恶意内容,除了 通常发生的验证步骤外。这可能包括运行病毒扫描、验证外部 链接和远程资源,以及其他预防措施。

在处理 XML 文档时,阅读系统 SHOULD NOT 解析 DOCTYPE、ENTITY 和 NOTATION 声明中的外部标识符 [xml]。阅读系统 SHOULD 还考虑与内部外部 XML 实体相关的安全风险,例如 DoS 攻击, 也称为 “Billion laughs attacks”“XML external entity attacks”

有关外部链接、网络访问和脚本的其他安全建议分别可见于 3.10 外部链接3.9 网络访问7.5.3 安全注意事项

A. 废弃特性

A.1 过时特性

阅读系统 MAY 支持过时特性 [epub-34], 但遗留特性除外。

遗留特性仅为与 EPUB 2 阅读系统兼容而允许,并且 MUST 被 EPUB 3 阅读系统忽略。

A.2 弃用特性

阅读系统 MAY 支持弃用的创作特性 [epub-34]。

此外,以下阅读系统特性现在已弃用:

媒体覆盖处理
epubReadingSystem 对象

开发者在为弃用特性添加新支持之前,需要考虑遇到包含 弃用特性内容的可能性很低。

B. epubReadingSystem 对象

阅读系统充当 EPUB 出版物的核心渲染引擎,并提供一个 基于 [dom] 规范的脚本环境。因此,虽然此接口定义使用 [webidl] 表示法以供阅读系统实现,但 Web 浏览器通常不必 实现这些对象。

B.1 接口定义

本规范扩展 Navigator 对象 [html] 如下。

WebIDL[Exposed=(Window)]
interface EpubReadingSystem {
    boolean hasFeature(DOMString feature, optional DOMString version);
};

partial interface Navigator {
    [LegacyUnforgeable, SameObject] readonly attribute EpubReadingSystem epubReadingSystem;
};

本规范没有为 WorkerNavigator 对象 [html] 定义 epubReadingSystem 属性扩展。因此,阅读系统不必在 Worker 的脚本上下文中暴露 epubReadingSystem 对象,因此不能依赖其存在。

B.2 描述

Navigator.epubReadingSystem 对象提供一个接口, 脚本化内容文档可通过该接口查询 有关用户阅读 系统的信息。

阅读系统 MUST 在所有已加载脚本化内容文档的 navigator 对象上暴露 epubReadingSystem 对象,包括任何嵌套的容器受限脚本 上下文 [epub-34]。阅读系统 MUST 确保 epubReadingSystem 对象最迟在 DOMContentLoaded 事件被触发 [html] 时可用。

出于技术可行性原因,阅读系统实现可以在脚本化内容文档中创建 epubReadingSystem 对象的克隆实例。在这种情况下, 阅读系统必须在所有复制实例之间一致地维护该对象的状态——如其属性和方法的值所反映的那样。

B.3 方法

B.3.1 hasFeature

B.3.1.1 描述

hasFeature 方法指示 阅读系统是否支持指定特性。如果未随命名特性提供版本, 结果表示是否支持该特性的任何版本。

当阅读系统支持通过 hasFeature 方法查询的特性时,它 MUST 返回一个表示其支持情况的布尔值。如果无法识别该特性, 阅读系统 MUST 返回 undefined

hasFeature 调用中指定的 feature 参数 MUST 等同于 [infra] 受支持的特性, 阅读系统才会返回 true 值。

有关必须支持的特性列表,请参见 B.3.1.2 特性

version 参数允许查询可能随时间以不兼容方式变化的自定义特性。 返回值仅表示对指定 特性版本的支持。当设置 version 参数时,其值 MUST 等同于 [infra] 阅读系统支持的版本号, 才会返回 true 值。

本规范中定义的特性没有版本。如果阅读系统支持本规范中定义的特性,则它 MUST 忽略任何提供的 version 参数并返回 true 值。

B.3.1.2 特性

下 表列出了支持 epubReadingSystem 对象的阅读系统 MUST 识别的一组特性。

名称 描述
dom-manipulation 脚本可以对文档的 DOM 进行结构性更改(仅适用于spine 级脚本 [epub-34])。
layout-changes 脚本可以修改影响内容布局的属性和 CSS 样式(仅适用于 spine 级脚本 [epub-34])。
touch-events 设备支持触摸事件,并且阅读系统会将触摸事件传递给 内容。
mouse-events 设备支持鼠标事件,并且阅读系统会将鼠标事件传递给 内容。
keyboard-events 设备支持键盘事件,并且阅读系统会将键盘 事件传递给内容。
spine-scripting 指示阅读系统是否支持spine 级脚本 [epub-34] (例如,使容器受限 脚本 [epub-34] 能够在尝试之前判断依赖顶级内容 文档中脚本支持的任何 操作是否有成功机会)。

阅读系统开发者 MAY 添加附加特性,但本 规范未来版本可能以与任何此类自定义添加内容冲突或不兼容的方式 追加到此列表中。

C. 索引

C.1 本规范定义的术语

C.2 通过引用定义的术语

D. 变更日志

本节为非规范性内容。

请注意,此变更日志仅标识自 EPUB 3.3 以来的实质性变更——即可能影响 EPUB 阅读系统一致性的变更。

有关所有已处理议题的列表,请参见工作 组议题跟踪器

EPUB 阅读系统 3.3 以来的实质性变更

E. 致谢

本节为非规范性内容。

出版维护工作组希望特别致谢那些我们一路上失去的杰出 贡献者和朋友。特别是,如果没有 Garth Conboy 的远见、知识以及非凡的善良天性,EPUB, 不仅仅是 EPUB 3,就不会成为今天的样子。同样,Ben Schroeter 将永远因其不懈努力而被铭记,他帮助 EPUB 实现其作为普遍无障碍 格式的潜力。我们永远感念他们。

出版维护工作组的以下成员为本 规范的开发做出了贡献:

F. 参考文献

F.1 规范性引用

[bidi]
Unicode 双向 算法. Manish Goregaokar मनीष गोरेगांवकर; Robin Leroy. Unicode Consortium. 2025年8月13日. Unicode 标准附录 #9. URL: https://www.unicode.org/reports/tr9/tr9-51.html
[css-fonts-4]
CSS 字体模块第 4 级. Chris Lilley. W3C. 2026年4月22日. W3C 工作草案. URL: https://www.w3.org/TR/css-fonts-4/
[css2]
层叠样式表第 2 级修订版 1(CSS 2.1) 规范. Bert Bos; Tantek Çelik; Ian Hickson; Håkon Wium Lie. W3C. 2011年6月7日. W3C 推荐标准. URL: https://www.w3.org/TR/CSS2/
[csssnapshot]
CSS 快照. URL: https://www.w3.org/TR/CSS/
[dcterms]
DCMI 元数据 术语. DCMI Usage Board. DCMI. 2020年1月20日. DCMI 推荐标准. URL: https://www.dublincore.org/specifications/dublin-core/dcmi-terms/
[dom]
DOM 标准. Anne van Kesteren. WHATWG. 现行标准. URL: https://dom.spec.whatwg.org/
[epub-33]
EPUB 3.3. Ivan Herman; Matt Garrish; Dave Cramer. W3C. 2026年1月13日. W3C 推荐标准. URL: https://www.w3.org/TR/epub-33/
[epub-34]
EPUB 3.4. Matt Garrish; Ivan Herman. W3C. 2026年6月23日. W3C 工作草案. URL: https://www.w3.org/TR/epub-34/
[epubcontentdocs-301]
EPUB 内容文档 3.0.1. Markus Gylling; William McCoy; Elika J. Etimad; Matt Garrish. IDPF. 2014年6月26日. URL: https://idpf.org/epub/301/spec/epub-contentdocs-20140626.html
[epubcontentdocs-32]
EPUB 内容文档 3.2. Dave Cramer; Matt Garrish. W3C. 2019年5月8日. URL: https://www.w3.org/publishing/epub32/epub-contentdocs.html
[epubmediaoverlays-32]
EPUB 媒体覆盖 3.2. Marisa DeMeglio; Daniel Weck. EPUB 3 Community Group. 2019年5月8日. URL: https://www.w3.org/publishing/epub32/epub-mediaoverlays.html
[html]
HTML 标准. Anne van Kesteren; Domenic Denicola; Dominic Farolino; Ian Hickson; Philip Jägenstedt; Simon Pieters. WHATWG. 现行 标准. URL: https://html.spec.whatwg.org/multipage/
[infra]
Infra 标准. Anne van Kesteren; Domenic Denicola. WHATWG. 现行标准. URL: https://infra.spec.whatwg.org/
[its20]
国际化标签集(ITS)版本 2.0. David Filip; Shaun McCance; David Lewis; Christian Lieske; Arle Lommel; Jirka Kosek; Felix Sasaki; Yves Savourel. W3C. 2013年10月29日. W3C 推荐标准. URL: https://www.w3.org/TR/its20/
[mathml3]
数学标记语言(MathML)版本 3.0 第二 版. David Carlisle; Patrick D F Ion; Robert R Miner. W3C. 2014年4月10日. W3C 推荐标准. URL: https://www.w3.org/TR/MathML3/
[opentype]
OpenType 规范. Microsoft. URL: http://www.microsoft.com/typography/otspec/default.htm
[rdfa-core]
RDFa Core 1.1 - 第三版. Ben Adida; Mark Birbeck; Shane McCarron; Ivan Herman et al. W3C. 2015年3月17日. W3C 推荐标准. URL: https://www.w3.org/TR/rdfa-core/
[rfc1951]
DEFLATE 压缩数据格式 规范版本 1.3. P. Deutsch. IETF. 1996年5月. 资料性. URL: https://www.rfc-editor.org/info/rfc1951/
[RFC2119]
用于 RFC 中表示 要求级别的关键词. S. Bradner. IETF. 1997年3月. 当前最佳实践. URL: https://www.rfc-editor.org/info/rfc2119/
[rfc2397]
“data” URL 方案. L. Masinter. IETF. 1998年8月. 提议标准. URL: https://www.rfc-editor.org/info/rfc2397/
[rfc8089]
“file” URI 方案. M. Kerwin. IETF. 2017年2月. 提议标准. URL: https://www.rfc-editor.org/info/rfc8089/
[RFC8174]
RFC 2119 关键词中大写与小写的歧义. B. Leiba. IETF. 2017年5月. 当前最佳实践. URL: https://www.rfc-editor.org/info/rfc8174/
[rfc9110]
HTTP 语义. R. Fielding, Ed.; M. Nottingham, Ed.; J. Reschke, Ed. IETF. 2022年6月. 互联网标准. URL: https://httpwg.org/specs/rfc9110.html
[svg]
SVG. W3C. URL: https://www.w3.org/TR/SVG/
[truetype]
TrueType™ 参考 手册. Apple, Inc. URL: https://developer.apple.com/fonts/TrueType-Reference-Manual/
[url]
URL 标准. Anne van Kesteren. WHATWG. 现行标准. URL: https://url.spec.whatwg.org/
[w3cprocess]
W3C 流程文档. URL: https://www.w3.org/policies/process/
[webidl]
Web IDL 标准. Edgar Chen; Timothy Gu. WHATWG. 现行标准. URL: https://webidl.spec.whatwg.org/
[woff]
WOFF 文件格式 1.0. Jonathan Kew; Tal Leming; Erik van Blokland. W3C. 2012年12月13日. W3C 推荐标准. URL: https://www.w3.org/TR/WOFF/
[woff2]
WOFF 文件格式 2.0. Vladimir Levantovsky. W3C. 2024年8月8日. W3C 推荐标准. URL: https://www.w3.org/TR/WOFF2/
[xml]
可扩展标记语言(XML)1.0(第五 版). Tim Bray; Jean Paoli; Michael Sperberg-McQueen; Eve Maler; François Yergeau et al. W3C. 2008年11月26日. W3C 推荐标准. URL: https://www.w3.org/TR/xml/
[xml-names]
XML 1.0 中的命名空间(第三版). Tim Bray; Dave Hollander; Andrew Layman; Richard Tobin; Henry Thompson et al. W3C. 2009年12月8日. W3C 推荐标准. URL: https://www.w3.org/TR/xml-names/
[xmlenc-decrypt]
XML 签名的解密 转换. Merlin Hughes; Takeshi Imamura; Hiroshi Maruyama. W3C. 2002年12月10日. W3C 推荐标准. URL: https://www.w3.org/TR/xmlenc-decrypt/
[zip]
.ZIP 文件格式 规范. 2020年7月15日. 最终版. URL: https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT

F.2 资料性引用

[epub-tts-10]
EPUB 3 文本转语音增强 1.0. Matt Garrish. W3C. 2025年8月28日. W3C 工作组说明. URL: https://www.w3.org/TR/epub-tts-10/
[fips-180-4]
FIPS PUB 180-4:安全 哈希标准(SHS). U.S. Department of Commerce/National Institute of Standards and Technology. 2015年8月. 国家标准. URL: https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf
[h264]
H.264:通用视听服务的高级视频 编码. 2017-04-13. URL: https://www.itu.int/ITU-T/recommendations/rec.aspx?rec=13189
[indexeddb]
索引数据库 API. Nikunj Mehta; Jonas Sicking; Eliot Graff; Andrei Popescu; Jeremy Orlow; Joshua Bell. W3C. 2015年1月8日. W3C 推荐标准. URL: https://www.w3.org/TR/IndexedDB/
[rfc6386]
VP8 数据格式和解码 指南. J. Bankoski; J. Koleszar; L. Quillio; J. Salonen; P. Wilkins; Y. Xu. IETF. 2011年11月. 资料性. URL: https://www.rfc-editor.org/info/rfc6386/
[ruby-tts-req]
包含 Ruby 的电子文档的文本转语音渲染: 用户需求. Makoto Murata. W3C. 2026年4月25日. DNOTE. URL: https://www.w3.org/TR/ruby-tts-req/
[uaag20]
用户代理无障碍指南(UAAG) 2.0. James Allan; Greg Lowney; Kimberly Patch; Jeanne F Spellman. W3C. 2015年12月15日. W3C 工作组说明. URL: https://www.w3.org/TR/UAAG20/
[wai-aria-11]
无障碍富互联网应用(WAI-ARIA) 1.1. Joanmarie Diggs; Shane McCarron; Michael Cooper; Richard Schwerdtfeger; James Craig. W3C. 2017年12月14日. W3C 推荐标准. URL: https://www.w3.org/TR/wai-aria-1.1/