Copyright © 1999-2026 International Digital Publishing Forum and World Wide Web Consortium. W3C® liability, trademark and permissive document license rules apply.
EPUB® 3 定义了一种用于数字出版物和文档的分发与交换格式。EPUB 格式提供了一种表示、打包和编码结构化且语义增强的 Web 内容(包括 HTML、CSS、SVG 和其他资源)的方式,以便在单文件 容器中分发。
本规范定义了 EPUB 3 阅读系统(即渲染 EPUB 出版物的用户代理)的一致性要求。
本节描述本文档在发布时的状态。当前 W3C 出版物列表以及本技术报告的最新修订版本可在 W3C 标准与草案 索引中找到。
本文档由出版维护工作组作为 工作草案发布,并使用 推荐标准 轨道。
作为 工作草案发布并不意味着得到 W3C 及其成员的认可。
这是一份草案文档,可能随时被其他 文档更新、取代或废弃。除作为正在进行的工作外, 不应以其他方式引用本文档。 此即将成为推荐标准的文档的未来更新可能纳入 新特性。
本文档由一个按照 W3C 专利 政策运作的小组制作。 W3C 维护一个 公开的专利披露列表, 其中列出了与该小组交付成果相关的任何专利披露;该页面还包含 披露专利的说明。任何实际知晓某项专利, 且该个人认为该专利包含 必要权利要求的人, 必须按照 W3C 专利政策第 6 节披露相关信息。
本文档受 2025 年 8 月 18 日 W3C 流程文档约束。
本节为非规范性内容。
EPUB 3 标准分为两个不同的关注点:EPUB 出版物的创作 在核心规范 [epub-34] 中定义,而本 规范详细说明了它们在 EPUB 阅读系统中的渲染要求。
EPUB 阅读系统可以有多种形式。例如,它可能具有用于向用户渲染内容的视觉显示区域, 也可能仅提供内容的音频播放。因此, 不存在一组适用于所有阅读系统的单一规则。相反,本规范 根据阅读系统的能力及其支持的特性来划分渲染要求。
此外,本规范为开发者创建独特的用户界面提供了很大的灵活性, 并且诸如元数据处理之类事项的要求有意保持最低限度, 以允许这种灵活性。
因此,虽然本规范确定了阅读系统的正式要求,但不能 孤立地理解本文档。开发者还需要熟悉 EPUB 出版物的完整内容结构,以了解可用信息的完整范围。
一致的阅读系统不一定是单一的专用程序或设备,也可能 作为分布式系统存在。
本规范使用 EPUB 3.4 中定义的术语 [epub-34]。
它还定义了以下术语:
视口内专用于显示 EPUB 内容文档的区域。 内容显示区域不包括 EPUB 阅读系统可能注入到 视口中的任何边框、外边距、页眉、页脚或其他 装饰。
对于合成跨页,视口包含两个 内容显示区域。
一个术语在某一节中的第一次出现才会链接到其定义。
除标记为非规范性的章节外,本规范中的所有创作指南、图示、示例和注释均为 非规范性内容。本规范中的其他所有内容均为规范性内容。
本文档中的关键词 MAY、MUST、MUST NOT、OPTIONAL、RECOMMENDED、SHOULD 和 SHOULD NOT 应按 BCP 14 [RFC2119] [RFC8174] 中所述解释,当且仅当它们全部以大写形式出现时, 如此处所示。
所有警告框、括号中的解释性说明以及算法说明也都是 非规范性内容。
本节为非规范性内容。
[html] 标准在持续演进——它不再有 带版本号的发布。 该标准又引用了各种仍在继续演进的技术,例如 MathML、SVG、CSS 和 JavaScript。
阅读系统开发者需要跟踪 HTML 及其引用的技术的变化, 以确保其系统保持最新。
本规范不要求 EPUB 阅读系统支持脚本、表单提交 或 HTML DOM [dom]。符合本规范的阅读系统 只被期望能够处理一致的 EPUB 内容文档。由于 脚本和表单提交支持不是强制性的,符合要求的阅读系统可能不是完全一致的 HTML 用户代理。
本规范不引用 [svg] 的特定版本,而是使用 不带日期的 引用。只要该引用存在任何歧义,最新的推荐 规范即为权威引用。
这种做法确保 EPUB 始终与 SVG 标准的变化保持同步。阅读系统开发者需要跟踪 SVG 标准的变化,以确保其 系统保持最新。
一个阅读系统是否必须支持某项特性, 会在该特性所在章节的开头说明。 为了符合本规范,阅读系统 MUST 支持所有 必需特性以及所有适用的有条件必需特性(例如,如果阅读 系统具有视口,则支持图像渲染),如各自章节中所定义。
由于阅读系统不一定是单一应用程序,而可以作为
分布式系统存在,因此阅读系统要求并不总是在向用户渲染
EPUB 出版物的应用程序中得到满足。例如,一个阅读系统只
与受控内容仓库(如书店或图书馆系统)交互。在这种情况下,
如果阅读系统开发者能够证明这些要求不适用于该
应用程序(例如,带有重复
itemref
条目 [epub-34] 的 EPUB 出版物无法进入该
系统),则整个阅读系统仍被视为符合要求。
在支持建议特性和可选特性时,阅读系统 MUST 满足各自 章节中定义的所有规范性 要求。
当阅读系统开发者选择不支持某项建议或可选特性时, 并不总是意味着该章节的任何规范性要求都不适用。在某些情况下, 不实现某项特性时可能存在替代要求(例如,在不支持脚本时处理后备)。阅读 系统在不支持某项特性时 MUST 满足这些替代要求。
当 EPUB 出版物或其中的资源 违反内容创作或处理要求时,阅读系统不必加载它们。
本节为非规范性内容。
虽然阅读系统不必报告在处理和渲染 EPUB 出版物时遇到的错误(例如,如果某个固定布局文档的尺寸是推断得出的), 但强烈鼓励它们提供访问这些信息的方式。一个可比较的例子 是 Web 浏览器提供的用于调试 HTML 页面和应用的开发者工具。
访问此类处理信息可以更高效地调试 EPUB 出版物。为了在调试中发挥最大作用,建议阅读系统不仅报告 它们直接遇到的问题,还报告其所使用的任何应用程序报告的问题(例如,用于渲染内容的浏览器核心报告的 HTML、 CSS 和 JavaScript 错误,或由 EPUBCheck 报告的验证 问题)。
错误报告不应成为影响用户一般 阅读体验的侵扰性体验。相反,报告信息可以例如从设置菜单中选择性地 启用,以免不必要地打扰用户。
如果阅读系统具有视口,则它 MUST 支持图像核心媒体类型资源 [epub-34]。
如果它具有 渲染预录音频的能力,则它 MUST 支持音频核心媒体类型资源 [epub-34]。
阅读系统 MAY 支持任意一组外来资源类型。
对于外来内容文档,如果阅读 系统不支持该资源的 MIME 媒体 类型,则它 MUST 遍历该资源的清单 后备链 [epub-34],直到识别出可支持的出版物资源,用来 替代不支持的资源。
当为 EPUB 内容文档提供 清单后备 [epub-34] 时,阅读系统 MAY 从可用选项中选择,以找到 最佳版本来渲染(例如,通过检查每一项的 properties 属性)。
如果阅读系统支持后备链中的多个出版物
资源,则它 MAY 根据资源的 properties 属性 [epub-34]
值来选择要使用的资源;否则它 SHOULD 遵循首选
后备顺序 [epub-34]。
如果阅读系统不支持后备链中的任何资源, 则它 MUST 提醒用户无法显示该内容。
阅读系统 MUST 在 第一次引用到它已经遇到过的清单项时终止 后备链。
阅读系统 SHOULD 支持远程资源,如 资源位置 [epub-34] 中所定义。
为了限制网络攻击风险,阅读系统 SHOULD 只加载
通过 https URI 方案 [rfc9110] 引用的远程资源。
阅读系统 MUST 阻止数据 URL [rfc2397] 在顶级浏览上下文 [html] 中打开, 除非是 通过阅读系统功能(例如上下文菜单)发起。如果阅读系统不 对顶级内容文档使用顶级浏览上下文,例如 当顶级 内容文档是 SVG 时,它也 MUST 阻止数据 URL 像 顶级内容文档那样 打开。
阅读系统 MUST 阻止访问 通过文件 URL [rfc8089] 引用的资源。
作为处理出版物资源的一部分,阅读系统必须
处理用于在 XHTML 内容文档或 SVG 内容文档中设置语言和基准方向的属性,以及
所有 XML 文档(例如包文档和媒体覆盖文档)的 xml:lang 属性。
此外,阅读系统 MUST 还要处理dir
属性 [epub-34],用于包文档,其中由 dir 指定的基准
方向适用于指定该属性的元素,以及其内容中的所有
元素,除非被另一个 dir 实例覆盖。(更多详细信息另见 5.1 基准方向。)
在
出版物资源中缺少此信息时,阅读系统 MUST
NOT 从包
文档中表达的信息推断该资源的语言或基准方向(即来自
xml:lang 和 dir
属性、link
元素上的 hreflang 属性,或来自
dc:language
元素 [epub-34])。
关于如何处理缺少显式语言或方向信息的情况,请参阅该资源的正式规范以获取更多信息。
阅读系统 MAY 支持网络访问,以获取远程 资源,并允许脚本化内容文档与 Web 托管 API 通信并获取 资源。
然而,提供网络访问会增加阅读系统的安全风险以及 用户的安全和隐私风险。这些风险通常是阅读系统及其 运行平台所特有的——大多数阅读系统构建所基于的浏览器核心并不提供 与 Web 浏览器本身相同的安全和隐私控制。因此,开发者在允许网络访问时 需要格外谨慎,并更彻底地测试其阅读系统 是否不易受到攻击。关于这些风险的更多信息见 15. 安全与隐私。
如果阅读系统开发者允许网络访问,则RECOMMENDED 他们同时:
当链接具有 http 或 https
方案
[url] 时,
阅读系统:
对于具有 需要辅助应用程序加载的方案的链接,阅读系统 SHOULD 取得 用户同意,并 遵循平台关于打开辅助应用程序的指南。
有关外部链接的安全和隐私问题的更多信息,请参见 15.2 威胁模型。
阅读系统 MUST 处理 EPUB 容器 [epub-34]。
处理 EPUB 容器的应用程序不必是完整的阅读系统 (例如,应用程序可能只提取容器内容或检查 打包内容的有效性)。在这些情况下,此类应用程序的开发者可以忽略本节中为阅读系统定义的渲染 要求。
阅读系统 MUST 为 OCF 抽象容器的根目录分配一个 URL [url]。此 URL 称为容器根 URL。它是实现 特定的,但实现 MUST 具有以下属性:
/" 的结果是该容器
根 URL。.." 的结果是该容器
根 URL。容器根 URL的属性使得一致的阅读系统会 将任何相对 URL 字符串解析为内容 URL。换句话说,相对链接不会 “泄漏”到容器内容之外,这是一个重要的安全特性。
在实践中,容器根 URL 的行为类似于如下定义的 URL:
| URL 组件 | 值 |
| 方案 | http 或 https |
| 主机 |
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
用作 META-INF 目录中所有
文件的基
URL [url]。
另见 [epub-34] 中关于解析
META-INF
目录中的 URL的章节。
虽然 [epub-34] 为最大互操作性定义了文件名和文件 路径限制,但阅读系统 SHOULD 尝试 处理不遵守这些要求的文件名和路径。无效的文件名和 路径可能只在某些操作系统上造成问题。
本规范不规定无法表示 OCF 文件 名和路径的阅读系统将如何处理这种不兼容性。
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]。
阅读系统:
MUST 将任何 将内容拆分为分段 [zip] 的 OCF ZIP 容器视为 错误。
MUST 将任何使用 Deflate [rfc1951] 以外 压缩技术的 OCF ZIP 容器视为 错误。
MUST 支持定义为 "Version 1" [zip] 的 ZIP64 扩展。
MUST 将使用 [zip] 加密特性的 OCF ZIP 容器视为 错误。
在 OCF 抽象容器上下文之外进行加载和保存操作时, 不必保留来自 OCF ZIP 容器的信息。特别是,阅读系统不必保留 CRC 值、注释字段或 保存与特定操作系统对应的文件系统信息的字段(例如 外部文件属性和 额外 字段)。
关于 OCF ZIP 容器归档中的特定字段,阅读系统:
NIST 建议到 2030 年底逐步停止使用 SHA-1 算法 [fips-180-4]。 由于字体混淆依赖 SHA-1,出版维护工作组不打算在该日期之后继续支持 EPUB 出版物中的字体混淆——该特性现在被标记为 过时,以免使现有 EPUB 出版物无效。阅读系统开发者将不得不 考虑继续支持去混淆,以完整支持所有已经 使用该特性的 EPUB 出版物。不过,由于 CSS 提供字体后备,终止支持只会影响部分 文本内容的外观。
阅读系统 SHOULD 支持按 字体 混淆 [epub-33] 中定义的方式对字体去混淆。
为恢复原始数据,阅读系统可以简单地反向执行该过程:源文件变为 混淆数据,目标文件包含原始数据。
EPUB 3 在 EPUB 3.0.1 之前允许字体混淆,但没有指定混淆 和压缩的顺序。因此,阅读系统在解压和去混淆之后可能遇到无效字体。 在这种情况下,在解压之前对数据进行去混淆可能会得到 有效字体。阅读系统不必支持这种取回方法,但开发者需要 考虑到,如果他们通常支持 EPUB 3 内容,则很可能会遇到这种情况。
如果 dir
属性 [epub-34] 被设置并
指示 ltr 或 rtl 的基准方向,则阅读系统 MUST 按照 [bidi] 中定义的高级协议覆盖
双向算法;如果基准方向是
ltr,则将段落嵌入级别设为 0;如果基准方向是 rtl,则设为 1。
否则,
基准方向为 auto,在这种情况下,阅读系统 MUST
通过应用 Unicode 双向算法来确定文本的
方向,从 [bidi] 的规则
P2
开始。
面向国际受众或声称支持国际化内容的阅读系统, 在向用户公开这些元数据时,强烈建议实现此特性。忽略 文本方向性可能导致可读性问题。
阅读系统 SHOULD NOT 依赖唯一标识符只对一个且仅一个 EPUB 出版物唯一。判断两个 具有相同唯一标识符的 EPUB 出版物是表示同一 出版物的不同版本,还是不同出版物,可能需要检查其他元数据,例如它们的最后 修改日期、标题和作者。
阅读系统 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 出版物语言是
信息性的。此信息的一些用途包括:
dc:creator 元素在确定显示
优先级时,阅读系统 MUST 使用
metadata 节中
dc:creator
元素 [epub-34]
的文档顺序,其中遇到的第一个 creator 元素
是主要创作者。如果阅读系统向
用户公开创作者元数据,则它 SHOULD 尽可能包含
metadata 节中列出的所有创作者
(例如,不受显示方面限制时)。
meta 元素阅读系统 SHOULD 忽略所有
meta
元素,如果其 property 属性
[epub-34] 定义了它们无法识别的表达式。阅读系统在遇到未知
表达式时 MUST NOT 失败。
link 元素检索和支持链接资源是 OPTIONAL。
在 hreflang [EPUB-34] 属性中标识的语言
纯粹是建议性的。资源中表达的语言信息决定其用于
处理和渲染目的的语言,如国际化要求中所定义。
阅读系统 MUST 忽略它们无法识别的
properties
属性 [epub-34] 的值。
阅读系统 SHOULD NOT 在渲染 EPUB 出版物时使用链接资源,这是由于其固有 限制和相关风险(例如,缺少关于资源以及如何处理它的信息、 来自远程托管来源的安全风险、缺少后备等)。
阅读系统 MUST
提供一种方式,按
spine
元素 [epub-34] 中定义的顺序
渲染 EPUB 出版物,其中
包括:
itemref [epub-34] 识别为默认阅读顺序的起点;
并且,spine 中给出的顺序渲染后续主要项目。有关处理清单后备的更多信息,请参阅 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 导航到该文档在线性阅读 顺序中的第一次出现。
当 spine
itemref
元素的 properties 属性覆盖
全局渲染属性 [epub-34] 时,阅读
系统 MUST 遵循该覆盖的全局值对应的要求来显示该 spine
项。
例如,包含 layout-pre-paginated
覆盖 [epub-34] 的 spine 项,会按照全局 pre-paginated
值的要求进行渲染。
如果
在 properties
属性中为同一属性指定了多个覆盖,阅读系统 MUST 只使用第一个值。
在本规范的上下文中,阅读
系统对集合 [epub-34] 的支持是 OPTIONAL。阅读系统
MUST 忽略定义了无法识别角色的 collection 元素。
阅读系统 MUST 支持可重排布局。
如果
包文档
元数据 [epub-34] 中没有出现携带 rendition:layout
属性的
meta
元素,则 EPUB 阅读系统 MUST 假定默认值
reflowable 为全局值。
阅读系统在渲染可重排的 EPUB 内容文档时 MAY 应用动态分页。
阅读系统 MUST 支持预分页布局。
阅读系统在渲染时 MUST
为每个 spine
itemref
[epub-34] 精确生成一页。
渲染预分页布局的默认预期是,内容显示区域 SHOULD 尽可能占用可用视口区域。阅读系统 SHOULD NOT 向 视口注入诸如边框、外边距、页眉或页脚之类的附加内容。
在渲染 合成跨页时,阅读系统 MUST NOT 在相邻内容 槽之间包含空隙。
阅读系统控制小组件向用户公开的方式是实现特定的, 不包含在上述行为预期中。
跨页放置 spine 覆盖按如下方式解释:
当指定
rendition:page-spread-left
属性或 page-spread-left
属性 [epub-34] 中任一项时,
它表示给定的 spine
项 SHOULD 渲染在跨页的左侧槽位中。
当指定
rendition:page-spread-right
属性或 page-spread-right
属性 [epub-34] 中任一项时,
它表示给定的 spine
项 SHOULD 渲染在跨页的右侧槽位中。
当指定 rendition:page-spread-center
属性 [epub-34]
时,它表示合成跨页 SHOULD 被禁用,并且该
spine 项 SHOULD 在
视口中居中渲染。
rendition:page-spread-left、rendition:page-spread-right、
rendition:page-spread-center 属性(及其无前缀
等价项)仅适用于预分页内容,并且仅在阅读系统正在创建
合成跨页时适用。
rendition:page-spread-* 属性及其无前缀等价项
MUST 优先于
为 XHTML 内容文档设置的 page-break-before
属性 [css2]
的任何值。
当阅读
系统遇到表示真正跨页的两个 spine 项(即两个相邻 spine
项分别带有 rendition:page-spread-left 和
rendition:page-spread-right 属性)时,它 SHOULD
创建相邻页面之间没有空隙的跨页。
如果 spine 中的第一个 itemref 元素
[epub-34] 未指定跨页
放置位置,则它 SHOULD 要么
单独呈现(即如同设置了 rendition:page-spread-center
属性),要么单独放置在两个可用跨页槽位之一中(即
另一个槽位为空)。应使用哪个槽位 SHOULD 从 page-progression-direction
属性 [epub-34] 的值获得。例如,在从左到右翻页方向的 EPUB 出版物中,
左侧槽位将为空。
阅读系统 SHOULD 支持卷动布局的渲染。
对于卷动
布局 [epub-34],阅读系统 MUST 使每个 spine
itemref
的宽度适配视口,并在没有可见间隙的
连续卷动中显示它们。
当 EPUB 出版物指定使用卷动 布局时,阅读系统 MUST 忽略任何布局覆盖 [epub-34]。
在引入卷动布局之前,一些日本出版商将预分页布局与设为
"scrolled-continuous" 值的 rendition:flow
属性 [epub-33] 组合起来创建卷动。如果阅读系统
开发者打算支持此内容,则需要将这种组合视为
等同于声明了卷动布局。
阅读系统 MAY 支持自定义属性,前提是它们不引入 与包渲染词汇表 [epub-34] 中定义的属性在行为上冲突的表达式。
EPUB 内容文档 [epub-34] 的定义包括 各种创作限制,以优化内容的跨兼容性(例如,禁止使用 CSS 设置 语言和方向 [epub-34])。 除非本规范中另有说明,阅读系统 MAY 支持这些 受限特性。
阅读系统 MUST 处理 XHTML 内容文档 [epub-34]。
除非在本节中明确将其定义为被覆盖,否则阅读 系统 MUST 使用 [html] 规范定义的语义处理 XHTML 内容文档, 并遵守其中表达的任何适用用户代理一致性约束。
阅读系统 MAY 支持自定义属性,前提是这些属性不 修改本规范的 要求。
为了支持嵌入在 XHTML 内容文档中的 MathML [mathml3], 阅读系统:
MUST 是 [mathml3] 规范中定义的 Presentation MathML 的输入一致处理器。
如果它具有 视口,则 MUST 支持 Presentation MathML 的视觉渲染。
MAY 支持渲染在 annotation-xml
元素 [mathml3]
中找到的 Content MathML。
阅读系统可以选择使用第三方库(如 MathJax)来提供 MathML 渲染。
阅读系统 MUST 按照 7.2 SVG 内容文档 中的定义处理嵌入在 XHTML 内容文档中的 SVG。
为了 对通过引用嵌入在 XHTML 内容文档中的 SVG 进行 样式化,阅读系统 MUST NOT 将包含文档的 CSS 样式规则 应用于被引用的 SVG 文档。
为了 对通过包含嵌入在 XHTML 内容文档中的 SVG 进行样式化,阅读系统 MUST 将包含文档的适用 CSS 规则应用于 被包含的 SVG 元素。
阅读系统对提交 [html]
form
元素的支持是 OPTIONAL。
例如,阅读系统可能通过限制网络访问来阻止表单提交。
阅读系统 MUST 处理 SVG 内容文档 [epub-34]。
为了处理 SVG 内容文档和嵌入在 XHTML 内容 文档中的 SVG,阅读系统:
阅读系统 MUST
支持渲染布局被指定为 pre-paginated 或 roll 的
spine 项中的 EPUB 内容文档。它们
MAY 支持渲染布局被指定为
pre-paginated 或 roll 的 spine 项中的图像 外来资源。
此要求并不要求阅读系统支持卷动布局。只有在支持该布局时, 阅读系统才必须支持固定布局 EPUB 内容 文档的渲染。
阅读系统 MUST 使用
XHTML 内容文档的
viewport meta 标签中声明的宽度和高度表达式创建初始
包含块(ICB),如 在 HTML 中表达 [epub-34] 中所定义。
它们 MUST
裁剪
定位在 ICB 之外的内容。
如果
viewport meta 标签中的宽度或
高度值包含非数字字符但以数字开头(例如,该值包含
"500px" 这样的长度单位声明),则数字前缀 SHOULD 被用作像素值,
否则该值 MUST
被视为无效。
阅读系统 SHOULD 尝试从 viewport meta 标签中提取
width 和
height
值,即使其语法无效。
阅读系统 MUST 使用
viewport
meta 标签中 width 和 height 属性的第一个
声明(即忽略重复声明)。
如果 viewport meta 不包含宽度或高度值,或者如果
这些值无效,则阅读系统 MAY 提供这些值。
例如,阅读
系统可能:
device-width 和
device-height;或
如果 XHTML 内容文档包含
多个 viewport meta 标签,则阅读系统 MUST
使用文档顺序中的第一个来获得高度和宽度尺寸。后续声明 MUST
被忽略。
当 ICB 宽高比与阅读系统内容显示区域的宽高比不匹配时,阅读系统 MAY 将 ICB 定位在该区域内以适应用户界面;换句话说,额外的 信箱式留白 MAY 出现在内容的任一侧(或两侧)。
阅读系统 MUST 使用 在 SVG 中表达 ICB [epub-34] 中定义的尺寸创建 初始包含块(ICB),以渲染 SVG 内容文档。
当 ICB 宽高比与阅读系统内容显示区域的宽高比不匹配时,建议
遵循
viewBox
和
preserveAspectRatio
属性的规则,如 [SVG] 中所定义。
如果阅读系统支持 spine 中的图像外来资源,则它将必须 使用图像宽度和高度元数据中定义的尺寸创建初始 包含块。有关如何获得此元数据的更多信息,请参阅每种受支持图像 格式的文档。
除为 XHTML 固定布局文档获取初始
包含块尺寸时以外,阅读系统 MUST 忽略
viewport meta
声明中的渲染指令。
此限制同时适用于固定布局和可重排的 XHTML 内容文档。
如果阅读系统具有视口, 则它 MUST 支持 通过 CSS 对 XHTML 内容文档进行视觉渲染 [epub-34]。
为了支持 CSS,阅读系统:
MUST 支持 [csssnapshot] 中描述的 CSS 官方定义。
SHOULD 支持 [csssnapshot] 中所有已经达到至少候选推荐标准状态 [w3cprocess](并且已被广泛实现)的适用模块。
MUST 支持从 @font-face 规则
[css-fonts-4] 引用的
[truetype]、[opentype]、[woff]、
和 [woff2] 字体资源。
SHOULD 支持 CSS 样式表——带前缀 属性 [epub-33] 中定义的所有带前缀属性。
SHOULD 按原样应用 EPUB 内容文档引用的样式表。
阅读系统开发者应公开记录其用户代理样式表, 以及这些样式表如何与 EPUB 出版物中设置的样式交互。
阅读系统 MAY 覆盖 EPUB 出版物样式的部分内容(例如,出于人体工学 或用户界面原因)。此外,它们 MAY 允许用户设置默认主题和样式偏好(例如,为了更无障碍的阅读), 这些设置会进一步改变出版物的原始设计。
阅读系统对脚本的支持取决于其使用上下文:
阅读系统 SHOULD 支持 XHTML 和 SVG 固定布局文档 [epub-34] 中的spine 级脚本 [epub-34]。
阅读系统 SHOULD 支持 在内容以可滚动溢出方式渲染的可重排 EPUB 中使用 spine 级脚本。类似地,如果 阅读系统支持可重排 EPUB 中的 spine 级脚本,则它 MUST 给予用户 滚动溢出内容的选项,并且 SHOULD 提供将 出版物从一个 spine 项到下一个 spine 项视为一个连续滚动来查看的选项。
阅读系统 MAY 支持 其他上下文中的脚本,但本规范不处理此类脚本。因此, 在这些上下文中使用脚本可能无法在各阅读系统之间保持一致。
如果阅读系统支持脚本:
它 MUST NOT 允许 容器受限脚本修改宿主 EPUB 内容 文档或 EPUB 出版物中其他内容的 [dom] ,并且 MUST NOT 允许它操纵其 包含矩形的尺寸。(注:即使脚本不是 容器受限的,阅读系统也可能对修改施加限制。参见 dom-manipulation 特性。)
它 MAY 对 执行期间提供给脚本的能力设置附加限制(例如限制网络访问)。
它 MUST 使用 B. epubReadingSystem 对象中定义的
epubReadingSystem 接口扩展
navigator 对象 [html]。
它还 MUST 在容器受限脚本
上下文中支持 B.3.1.2
特性中定义的
dom-manipulation 和 layout-change 特性。
如果阅读系统不支持 脚本,则它 MUST 按照 脚本化内容 文档的后备 [epub-34] 中的定义处理脚本化内容的后备。
阅读系统 SHOULD 按照 [html] 遵循 DOM 事件模型,并在执行与这些事件相关的任何默认操作之前, 将 UI 事件传递给 脚本环境。
阅读系统开发者必须确保脚本不能禁用关键功能(例如 导航),以限制潜在恶意脚本可能影响其 阅读系统的程度。因此,虽然 脚本环境应当能够取消任何事件的默认操作,但某些 事件可能不会被传递,或者可能不可取消。
本节为非规范性内容。
同时支持脚本的阅读系统开发者需要了解 阅读系统执行脚本化内容时产生的安全问题。由于阅读系统和浏览器采用的底层脚本模型 相同,开发者必须考虑与 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 脚本)。
请注意,遵守这些建议并不能保证防止上述可能的 攻击;开发者必须在其阅读系统的上下文中检查每个潜在漏洞。
阅读系统对文本转语音播放的支持是 OPTIONAL。
如果阅读系统具有音频播放能力,则强烈鼓励它提供 文本转语音播放功能以提升无障碍性。
在包含文本转语音播放时,阅读系统 SHOULD 支持 以下特性,以提供类似于为媒体 覆盖所定义的播放体验:
body 元素中的元素;
工作组预计将在未来的说明中提供关于文本转语音 播放内容级问题的指导。这将包括语言和文字体系特定的问题,例如 当前在 [ruby-tts-req] 中处理的问题。
用于增强文本转语音播放质量的可能创作技术详见 [epub-tts-10],但这些 技术目前尚未得到广泛支持(或根本不受支持)。如果这些技术或替代技术未来获得支持, 它们将被纳入 本规范。
具有 渲染预录音频能力的阅读系统 SHOULD 支持媒体覆盖 [epub-34]。
如果阅读系统不支持媒体覆盖,则它 MUST 同时忽略:
media-overlay
属性,当它出现在manifest
item
元素 [epub-34] 上时;以及
media-type 属性值等于
application/smil+xml 的 item 元素。
当阅读
系统加载包文档时,它 MUST 参照 manifest
item
元素的 [epub-34] media-overlay 属性,以发现
EPUB 内容文档对应的媒体
覆盖。
阅读 系统 MUST 支持 XHTML 内容文档的播放,并且 MAY 支持 SVG 内容文档。
播放 MUST 从与期望的 EPUB 内容文档起始点对应的 媒体覆盖元素开始。 请注意,EPUB 内容文档的起始处可能对应于媒体覆盖开头 或中间的某个元素。 当媒体 覆盖文档播放结束时,阅读系统 SHOULD 加载下一个 EPUB 内容 文档(如包文档 spine 中所指定),并且在给出对应媒体覆盖文档的情况下,也加载其 对应的媒体覆盖文档。
阅读系统 MUST 按顺序渲染
body
元素 [epub-34] 的直接子元素。
seq
元素的 [epub-34] 子元素 MUST 按顺序渲染,
并且当最后一个子元素播放完成时播放完成。阅读系统 MUST 并行渲染
par
元素的 [epub-34] 子元素(每个子元素同时开始),
并且当所有子元素播放完成时播放完成。阅读系统对
媒体覆盖文档的播放在 body 元素的最后一个子元素播放完成时结束。
当遇到媒体
覆盖
audio
元素 [EPUB-34] 时,阅读系统 MUST 播放
src 属性所引用的音频资源,从
clipBegin 属性给出的剪辑偏移时间开始,
到 clipEnd 属性给出的剪辑偏移时间结束
[epub-34]。
此外:
如果未设置 clipBegin 属性,阅读系统 MUST 假定其
值为 "0"。
如果未设置 clipEnd 属性,阅读系统 MUST 假定其值
为物理媒体的完整持续时间。
如果 clipEnd 的值超过物理媒体的完整持续时间,
阅读系统 MUST 假定其值为物理
媒体的完整持续时间。
用户可控制的音频播放选项 SHOULD 包括时间尺度 修改,用户可以在不扭曲音高的情况下 改变播放速率。建议范围为 半速到双倍速。
当没有
audio
[epub-34] 兄弟元素的媒体覆盖
text
元素引用目标 EPUB 内容文档中的文本时,具有文本转语音(TTS)
播放能力的阅读系统 SHOULD 使用 TTS 渲染被引用的文本。
阅读系统 SHOULD 使用目标 EPUB 内容 文档中提供的语音相关信息,作为媒体覆盖渲染的一部分来播放音频流。
有关在 EPUB 出版物中支持 TTS 技术的 更多信息,请参见 EPUB 3 文本转语音 支持 [epub-tts-10]。
媒体覆盖 text 元素的生命周期对应于
相关语音合成的渲染时间。因此,text 元素的隐式持续时间(以及
推断出的父 par 元素持续时间)由
文本转语音引擎的执行决定,并且无法在创作时得知(语速、
停顿和其他韵律参数等因素会影响音频输出)。这也
意味着阅读系统在使用包文档中设置的
duration 属性值时,需要将其视为
近似值。
当遇到媒体覆盖
text
元素 [epub-34],且其 src
属性包含引用 EPUB
内容文档特定部分的 URL 片段字符串时,阅读系统 SHOULD 确保被引用部分在
视口中可见。除了 [html] 元素
ID 引用和 SVG
片段
标识符 [svg] 外,阅读系统 MAY 支持其他
片段标识符
方案。
在媒体覆盖播放期间,具有视口的阅读系统 SHOULD
将元数据属性 active-class 和 playback-active-class
[epub-34] 给出的类名添加到 EPUB 内容文档中的适当元素上,
当这些属性被指定时。相反,如关联样式信息
[epub-34] 中所述,当播放状态发生变化时,
SHOULD 移除这些类名。
active-class 和 playback-active-class 元数据属性是
OPTIONAL,如果省略,则阅读系统行为是
实现特定的。
阅读系统 SHOULD 使用媒体覆盖元素的
epub:type
属性提供的语义信息,为用户提供跳过
内容的选项。
当启用内容跳过时,阅读系统 MUST
抑制播放任何其 epub:type 属性包含与可跳过
结构匹配语义的 par 和 seq 元素。
在播放媒体覆盖时,阅读系统 SHOULD 为
用户提供离开(“退出”)可退出
结构 [epub-34] 的选项,这些结构由带有
epub:type
属性 [epub-34] 且其值来自可退出结构
列表来确定。
如果用户选择从可退出结构中退出,则
阅读系统 MUST 继续播放该
结构之后的下一个顺序元素。
阅读系统 MAY 支持 结构语义 [epub-34],用于 EPUB 内容文档。
在处理
epub:type
属性时,阅读系统:
MAY 为每个值获取 展开 URL。
MUST 忽略
在 epub:type
定义 [epub-34] 中不允许使用该术语的元素上使用的
术语。
MAY 将行为与来自其他 词汇表的术语关联。
阅读系统 MAY 支持 词汇表关联机制,用于 处理紧凑 URL [epub-34]。
本节定义了一个从紧凑 URL 获取展开 URL 的算法。它仅适用于 支持 [epub-34] 词汇表关联机制的阅读系统。
不支持 [epub-34] 词汇表关联机制的阅读系统 MAY 将紧凑 URL 作为普通字符串值 [infra] 处理。它们不必支持将这些值 展开为 URL,也不必基于这些值的存在添加阅读系统行为。
该算法使用 [infra] 中定义的术语和数据类型描述过程,并且在 成功时返回带有展开 URL 的字符串值。对于无效属性,返回 null 值。
此算法接受以下参数:
要获取 展开 URL,应用以下步骤:
令 baseURL、expandedURL、prefix 和 reference 为 空字符串。
按如下方式获取 prefix 和 reference 的值:
如果 value 不包含冒号(U+003A),则将 reference 设为 value。
如果紧凑 URL 值没有冒号,则它没有前缀。在这种 情况下,该值来自默认词汇表,如算法下一步所述。
否则,如果 value 以冒号开头,则该值无效。返回 null。
值开头的冒号是无效的,因为它表示前缀未 设置。
否则,在第一个冒号处分割 value,并将 prefix 设为冒号前的 字符串,将 reference 设为冒号后的字符串。
如果 reference 不是有效的路径相对且无方案的 URL 字符串,而紧凑 URL 定义 [epub-34] 要求它如此,则该值无效。返回 null。
路径相对且无方案的 URL 字符串定义有若干限制, 无论引用是否有前缀,这些限制都适用于 该引用。
例如,引用不允许以URL 方案字符串开头且后跟
冒号。此限制意味着以下内容不是有效的 property 值,
因为第二个冒号可能表示方案:foo:bar:baz/qux。
对于哪些字符必须进行百分号编码,也存在限制。
按如下方式获取 baseURL 的值:
如果 prefix 是空字符串:
epub:type
[epub-34],则将 baseURL 设为
http://idpf.org/epub/vocab/structure/#
meta
元素 [epub-34]
且 attr 是 scheme,则属性值无效。返回 null。
meta
元素 [epub-34],
则将 baseURL 设为
http://idpf.org/epub/vocab/package/meta/#
link
元素 [epub-34],
则将 baseURL 设为
http://idpf.org/epub/vocab/package/link/#
item
元素 [epub-34],
则将 baseURL 设为
http://idpf.org/epub/vocab/package/item/#
itemref
元素
[epub-34],则将 baseURL 设为
http://idpf.org/epub/vocab/package/itemref/#
否则:
如果在 doc 的文档元素上声明了 prefix 属性,
并且该属性包含与
prefix 匹配的前缀,则将 baseURL 设为与该
前缀声明关联的 URL。
否则,如果 prefix 匹配 doc 的某个保留前缀 [epub-34], 则将 baseURL 设为与该 保留前缀关联的 URL。
当紧凑 URL 有前缀时,首先检查其基 URL 的位置是在文档元素上的
prefix 属性声明中。
如果作者没有为该前缀分配 URL,则下一步是检查该 前缀是否匹配某个保留前缀。
请注意,作者分配的前缀 URL 会覆盖保留前缀 URL。
如果 baseURL 是空字符串,则属性值无效。返回 null。
如果在此处理步骤结束时基 URL 为空,则说明前缀未 映射或保留,或者正在处理的元素或属性不接受紧凑 URL 数据类型,如 [epub-34] 中所定义。
没有基 URL,就无法生成展开 URL,因此该值 无效。
如果 expandedURL 不是有效 URL 字符串,则该值无效。返回 null。
否则,返回 expandedURL。
虽然可以得到展开值,但它不一定是 有效 URL。这只可能在为 前缀分配了无效基 URL 时发生。
阅读系统 MUST 尝试
处理其包文档 version 属性 [epub-34] 小于
"3.0" 的 EPUB 出版物。
具有较旧版本号的 EPUB 出版物,除非按照其各自规范处理, 否则并不总能完全按预期渲染。阅读系统 SHOULD 按这些规范定义的方式支持此类 EPUB 出版物。
阅读系统 SHOULD
尝试处理其
包文档 version 属性
[epub-34] 大于
"3.0" 的 EPUB 出版物。
本节为非规范性内容。
虽然本规范的主要重点是如何处理和渲染 EPUB 出版物, 但它并不强制所有阅读系统都必须提供特定用户界面。这并不 意味着不存在所有阅读系统开发者都需要了解 或在其应用中设法避免的常见无障碍问题。
W3C 的 User Agent Accessibility Guidelines [uaag20] 提供了许多有用 实践,开发者可以 应用这些实践来改进其阅读系统,因为许多浏览器无障碍问题在 EPUB 特定用户代理中也有对应情况。
以下列表概述了一些 EPUB 特定领域,在这些领域中缺乏无障碍性会影响 用户的阅读体验:
DAISY 联盟维护一个无障碍测试套件, 用于帮助评估这些问题以及更多问题。
本节为非规范性内容。
EPUB 出版物的特殊性在于其结构。EPUB 格式 提供了一种 表示、打包和编码结构化且语义增强的 Web 内容 — 包括 HTML、CSS、SVG 和其他资源 — 的方法,以便在单文件容器中分发。
对于阅读系统而言,这意味着安全和 隐私问题主要基于这些格式的 特性,并且与一般 Web 内容所呈现的威胁非常相似。
阅读系统开发者还负有双重责任:既要确保其应用的安全和隐私, 又要帮助限制渲染在其中的内容对用户造成的威胁。 本节其余部分探讨 EPUB 3 的风险模型,旨在帮助开发者 识别并缓解这些风险。
本节为非规范性内容。
对用户最大的威胁来自他们阅读的内容 [epub-34],而抵御这些攻击的第一道防线是他们使用的 阅读系统。用户期望阅读系统充当防范恶意内容的保护措施,并且 常常不知道 EPUB 出版物也容易受到与 Web 站点相同的安全风险影响。
但是,虽然阅读系统被依赖来提供安全和隐私,但它们也可能 根据处理信息的方式对用户构成意外威胁。例如,跟踪用户信息以 优化体验是一种常见需求,但如果未经用户许可而这样做,阅读 系统可能会违反法律隐私要求。
本节概述了阅读系统开发者需要考虑的一些关键威胁, 后续章节提供更多详细信息和建议。
恶意脚本会针对阅读系统呈现多种攻击向量。例如,如果本地存储 不安全,它们可能尝试破坏用户数据。在拥有 网络访问权限的情况下,它们可能尝试未经授权收集用户数据。
关于这些问题以及如何缓解它们的更详细讨论见 7.5.3 安全注意事项。
EPUB 出版物可能包含旨在利用阅读 系统或其运行所在操作系统中的安全缺陷的资源。攻击者还可能尝试使用文件间接 技术(例如符号链接或文件 别名)访问远程资源。
由于缺乏用于签署 EPUB 出版物的标准方法,阅读系统并不 总能验证内容在创作和加载到 设备之间是否被篡改。
远程资源呈现的风险与 从不受信任来源加载的任何 EPUB 出版物相同。即使 EPUB 出版物的发布者受信任,远程资源也可能被 攻陷。
对远程资源的调用也可用于跟踪用户信息(例如通过 服务器日志)。建议将通过 HTTP 请求暴露的信息限制为仅 获取资源所必需的信息。
EPUB 的源既特定于每个阅读
系统实现,也不为该实现之外所知。因此,即使
远程资源托管在受信任的 Web 服务器上,服务器实际上也不能使用
需要指定允许源的安全特性,例如 CORS 的标头、Content-Security-Policy
或 X-Frame-Options。
与远程资源一样,外部链接可被用来诱骗毫无戒心的用户打开 Web 上旨在利用阅读系统或操作 系统的恶意资源。
同样,也建议避免通过链接跳转暴露可能识别用户身份的信息 (例如,不使用跟踪标识符或暴露 关于用户环境的不必要信息)。
阅读体验中的用户生成内容,例如通过文本区域或其他 交互组件产生的内容,如果未得到妥善保护,可能会威胁阅读系统安全或用户隐私。 关于脚本安全的更多详情见 7.5.3 安全注意事项。
在未获得用户 许可的情况下收集有关用户及其阅读习惯的信息,可能侵犯其隐私,即使该信息仅用于内部 使用。
试图基于用户阅读习惯或其 出版物中的元数据(例如无障碍偏好)来画像用户,可能使用户遭受意外伤害。
此外,适用于 [xml] 和
[zip] 文件的安全注意事项也分别适用于
包文档和 开放
容器格式。更多详细信息请参见
application/oebps-package+xml
和 application/epub+zip 格式的媒体类型注册中的
“安全
注意事项”章节。
阅读系统开发者可以采取的最强隐私措施是明确说明他们 打算收集和使用的用户和/或其阅读行为相关数据,并征求用户同意 以获取这些数据。他们 SHOULD 还允许对此类 信息进行个性化设置和控制。
如果阅读系统允许用户存储持久数据,尤其是个人身份 信息,则它 SHOULD 将这些数据视为敏感数据,并且不允许第三方访问。
可以理解,为销售、交付和 运行 EPUB 出版物,收集某些用户数据往往是必要的,尤其是在 销售 EPUB 出版物和阅读方式相关联的平台上。在这些情况下,阅读系统 SHOULD 标识所收集的数据、其使用方式,并允许用户选择退出(零售商可以 选择通过其他方式告知用户,例如在用户在其网站创建账户时)。 对任何收集数据进行匿名化对于用户和 阅读系统的隐私与安全是 RECOMMENDED。
还可以理解,用户数据对于某些阅读系统 功能可能是必要或有帮助的。在这些情况下,匿名化同样是 RECOMMENDED。阅读系统 SHOULD 还告知 用户需要哪些数据、这些数据将用于何种目的,并提供选择退出的方法。
内容处理器——定义为处理 EPUB 内容摄取以便 分发、显示或销售的实体——也需要意识到摄取过程中的潜在风险。 建议内容处理器在摄取时检查内容是否包含恶意内容,除了 通常发生的验证步骤外。这可能包括运行病毒扫描、验证外部 链接和远程资源,以及其他预防措施。
阅读系统 SHOULD 将来自任何新来源的内容(包括来自集成书店的内容)视为不安全(例如,在首次访问该来源时提示 用户允许脚本和网络访问)。如果阅读 系统允许用户加载自己的内容(例如通过“侧载”过程),则每个 实例 SHOULD 被视为不安全。
在处理 XML 文档时,阅读系统 SHOULD NOT 解析 DOCTYPE、ENTITY 和 NOTATION 声明中的外部标识符 [xml]。阅读系统 SHOULD 还考虑与内部 或 外部 XML 实体相关的安全风险,例如 DoS 攻击, 也称为 “Billion laughs attacks” 或 “XML external entity attacks”。
有关外部链接、网络访问和脚本的其他安全建议分别可见于 3.10 外部链接、3.9 网络访问和 7.5.3 安全注意事项。
阅读系统 MAY 支持过时特性 [epub-34], 但遗留特性除外。
遗留特性仅为与 EPUB 2 阅读系统兼容而允许,并且 MUST 被 EPUB 3 阅读系统忽略。
此外,以下阅读系统特性现在已弃用:
epubReadingSystem 对象开发者在为弃用特性添加新支持之前,需要考虑遇到包含 弃用特性内容的可能性很低。
阅读系统充当 EPUB 出版物的核心渲染引擎,并提供一个 基于 [dom] 规范的脚本环境。因此,虽然此接口定义使用 [webidl] 表示法以供阅读系统实现,但 Web 浏览器通常不必 实现这些对象。
WebIDL[Exposed=(Window)]
interface EpubReadingSystem {
boolean hasFeature(DOMString feature, optional DOMString version);
};
本规范没有为
WorkerNavigator
对象 [html] 定义 epubReadingSystem 属性扩展。因此,阅读系统不必在
Worker 的脚本上下文中暴露
epubReadingSystem 对象,因此不能依赖其存在。
Navigator.epubReadingSystem
对象提供一个接口,
脚本化内容文档可通过该接口查询
有关用户阅读
系统的信息。
阅读系统 MUST 在所有已加载脚本化内容文档的
navigator
对象上暴露 epubReadingSystem 对象,包括任何嵌套的容器受限脚本
上下文 [epub-34]。阅读系统 MUST 确保
epubReadingSystem
对象最迟在 DOMContentLoaded
事件被触发 [html] 时可用。
出于技术可行性原因,阅读系统实现可以在脚本化内容文档中创建
epubReadingSystem 对象的克隆实例。在这种情况下,
阅读系统必须在所有复制实例之间一致地维护该对象的状态——如其属性和方法的值所反映的那样。
hasFeature
方法指示
阅读系统是否支持指定特性。如果未随命名特性提供版本,
结果表示是否支持该特性的任何版本。
当阅读系统支持通过 hasFeature 方法查询的特性时,它
MUST 返回一个表示其支持情况的布尔值。如果无法识别该特性,
阅读系统 MUST 返回 undefined。
hasFeature 调用中指定的 feature 参数 MUST
等同于 [infra]
受支持的特性,
阅读系统才会返回
true 值。
有关必须支持的特性列表,请参见 B.3.1.2 特性。
version 参数允许查询可能随时间以不兼容方式变化的自定义特性。
返回值仅表示对指定
特性版本的支持。当设置 version 参数时,其值 MUST
等同于 [infra]
阅读系统支持的版本号,
才会返回 true 值。
本规范中定义的特性没有版本。如果阅读系统支持本规范中定义的特性,则它 MUST
忽略任何提供的 version 参数并返回 true 值。
下
表列出了支持
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 添加附加特性,但本 规范未来版本可能以与任何此类自定义添加内容冲突或不兼容的方式 追加到此列表中。
EpubReadingSystem 接口
§B.1
hasFeature 方法,
用于 EpubReadingSystem
§B.3.1.1
Navigator.epubReadingSystem 属性,
用于 Navigator
§B.2
audio
元素
body
元素
dc:creator 元素
dc:identifier 元素
dc:language 元素
dc:title 元素
epub:type 属性
item
元素
itemref
元素
link
元素
meta
元素
par
元素
rootfile 元素
seq
元素
spine
元素
text
元素
form
元素
object
类型
string)
boolean
类型
DOMString 接口
[Exposed] 扩展属性
[LegacyUnforgeable] 扩展属性
[SameObject] 扩展属性
本节为非规范性内容。
请注意,此变更日志仅标识自 EPUB 3.3 以来的实质性变更——即可能影响 EPUB 阅读系统一致性的变更。
有关所有已处理议题的列表,请参见工作 组议题跟踪器。
hasFeature 的 feature 和 version 参数
在匹配时区分大小写。参见 issue 2966。
rendition:align-x-center 的处理,因为它现在被标记为
弃用特性。参见 issue
2847。rendition:align-x-center、
rendition:flow、rendition:orientation 和
rendition:spread 属性及其覆盖的处理,因为这些现在被标记为
过时特性。参见 issue
2841。
本节为非规范性内容。
出版维护工作组希望特别致谢那些我们一路上失去的杰出 贡献者和朋友。特别是,如果没有 Garth Conboy 的远见、知识以及非凡的善良天性,EPUB, 不仅仅是 EPUB 3,就不会成为今天的样子。同样,Ben Schroeter 将永远因其不懈努力而被铭记,他帮助 EPUB 实现其作为普遍无障碍 格式的潜力。我们永远感念他们。
出版维护工作组的以下成员为本 规范的开发做出了贡献:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in: