另请参见 译文。
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 出版物的创作要求,并代表该标准的第三次 主要修订。
本节描述了本文档在其 发布时的状态。当前 W3C 出版物的列表以及本技术报告的最新修订版本可在 W3C 标准与草案 索引中找到。
本文档由出版物维护工作 组作为 使用 推荐标准轨道的推荐标准发布。
W3C 建议将本规范作为 Web 标准广泛部署。
W3C 推荐标准是一种规范,它在经过广泛 共识构建后,由 W3C 及其会员认可,并且 已获得工作组成员对实现的 免版税许可 承诺。 此推荐标准的未来更新可能会纳入 新特性。
本文档由一个 按照 W3C 专利 政策运作的组织制定。 W3C 维护了一个 公开的专利披露列表, 列出与该组交付成果相关的任何专利披露; 该页面还包括 披露专利的说明。实际 知晓某项专利并认为该专利包含 必要权利要求的个人, 必须依照 W3C 专利政策第 6 节披露相关信息。
本文档受 2025年8月18日 W3C 流程文档管辖。
本节是非规范性的。
EPUB 3 已被广泛采用为数字图书(电子书)的格式,并且本次修订继续 增强该格式的能力,以便更好地支持更广泛的出版需求, 包括复杂布局、富媒体和交互性,以及全球排版特性。预期 出版商会将 EPUB 3 格式用于范围广泛的内容, 包括图书、杂志,以及教育、专业和科学出版物。
本规范代表 EPUB 3 的核心,并包含EPUB 出版物的一致性要求——即该标准的产物。组成 EPUB 3 的其他 规范如下:
EPUB 3 阅读系统 [epub-rs-33] ——定义 EPUB 阅读系统的处理要求——即 使用 EPUB 出版物 并向用户呈现其内容的应用程序。
EPUB 可访问性 [epub-a11y-11] ——定义 EPUB 出版物的可访问性 一致性和发现要求。
这些规范代表被正式认可为属于 EPUB 3 的列表,并包含 作为该标准一部分进行规范性引用的功能。扩展 规范的开发会定期向 EPUB 出版物添加新功能。虽然在本 规范中未被正式认可,但在标准核心修订之外定义的特性和功能 仍可供 EPUB 创建者和 阅读系统开发者使用。
非规范性的 EPUB 3 概述 [epub-overview-33] 提供了 对 EPUB 3 的一般介绍。相对于上一版本的技术变更列表也可在 变更日志中找到。
本节是非规范性的。
本节通过本规范所定义的核心产品来审视本规范的组织结构: EPUB 出版物。
从最基本的意义上说,EPUB 出版物是一组资源的包,并带有关于如何 渲染这些资源以按逻辑顺序呈现内容的说明。EPUB 出版物中 允许的资源类型以及对其使用的限制,定义在 3. 出版物 资源中。
带有 .epub 文件扩展名的基于 ZIP 的归档文件会将 EPUB 出版物的
资源打包以供分发。作为符合要求的 ZIP 归档,EPUB 出版物可被许多
软件程序解压,从而简化其制作和使用。
该容器格式不仅提供一种确定压缩内容代表
EPUB 出版物的方式(mimetype 文件),还提供一个具有通用名称的
非规范资源目录(/META-INF)。这些资源中的关键文件是
container.xml 文件,它会指示阅读系统定位可用的
包文档。有关容器格式的更多信息,
请参阅 4. 开放容器格式 (OCF)。
EPUB 出版物通常由一个包文档表示。该文档包含 阅读系统用于向用户呈现内容的元数据,例如用于 在书架中显示的标题和 作者,以及渲染元数据(例如,内容是 可重排的还是固定布局的)。它还提供资源的清单,并包含一个 spine,列出用户浏览 内容时渲染文档的默认顺序。有关包 文档的要求,请参阅 5. 包文档。
EPUB 出版物的实际内容——用户开始阅读时所看到的内容—— 构建在开放 Web 平台之上,并有两种形式:XHTML 和 SVG。称为 EPUB 内容文档的这些文档,通常会 引用许多为正确渲染所需的附加资源, 例如图像、音频和视频剪辑、脚本以及样式表。
有关生成 EPUB 内容文档的规则和要求的详细信息,请参阅 6. EPUB 内容 文档,并参阅 [epub-a11y-11] 了解 可访问性要求。
EPUB 出版物还包括另一个称为 EPUB 导航文档的关键文件。该 文档提供关键的导航能力,例如目录,使用户能够 快速、轻松地浏览内容。导航文档是一种专门类型的 XHTML 内容文档,它还允许 EPUB 创建者 将其用于内容中(即,避免为机器处理准备一个 目录、又为用户使用准备另一个目录)。有关此文档的更多信息,请参阅 7. EPUB 导航文档。
默认情况下,EPUB 出版物旨在重排以适应可用的屏幕空间。也 可以使用图像和/或 CSS 定位来创建具有像素精确固定布局的出版物。 控制布局的元数据定义在 8. 布局渲染控制中。
媒体叠加文档补充 EPUB 内容 文档。它们提供声明式标记,用于 将 EPUB 内容文档中的文本与预录音频同步。其结果是能够 创建一种朗读体验,其中 阅读 系统会在叙述时高亮文本。 有关媒体叠加文档的定义,请参阅 9. 媒体叠加。
尽管从概念上看很简单,但 EPUB 出版物并不仅仅是这里所呈现的 ZIP 包中一组 HTML 页面和依赖资产的集合。关于 EPUB 出版物为增强 阅读体验而提供的主要特性和功能的更多信息, 可从所引用的规范中获得,而关于 EPUB 3 特性的更一般介绍 则见非规范性的 [epub-overview-33]。
有关阅读系统的处理要求,请参阅 [epub-rs-33]。虽然 EPUB 创建者不一定需要阅读该文档即可创建 EPUB 出版物,但 了解阅读系统如何呈现内容有助于制作出能为用户提供最佳呈现效果的 出版物。
本节是非规范性的。
EPUB 3 所建立在其上的技术一直在不断演进。有些技术通常被称为 “现行”或“常青”标准,可能每天都会发生变化,而这些变化对 EPUB 出版物有效性的影响是即时的。其他技术更新频率较低,其变化可能在 EPUB 3 进行新一轮修订之前不会影响 EPUB 出版物。
在所有情况下,以前有效的特性都有可能变得过时(例如,由于 缺乏支持或因为安全问题)。因此,EPUB 创建者 应谨慎使用任何没有广泛支持的特性,并保持其 EPUB 一致性检查器为最新状态。
[html] 标准在持续演进——它不再有 带版本号的发布。 该标准本身又引用了各种仍在继续演进的技术,例如 MathML、 SVG、CSS 和 JavaScript。
这种做法对 EPUB 的好处是,EPUB 出版物始终能够跟上 Web 的变化,而无需新的修订。然而,EPUB 创建者 必须跟踪 HTML 及其所引用技术的各种变化,以确保他们的 流程保持最新。
除非另有规定,本规范定义的 XHTML 配置文件继承 HTML 中关于 语义、结构和处理行为的所有定义。
此外,本规范还定义了一组扩展, 用于 [html] 文档模型,EPUB 创建者可在 XHTML 内容文档中包含这些扩展。
本规范不引用 [svg] 的特定版本,而是使用 不带日期的 引用。每当此引用存在任何歧义时,最新的推荐 规范即为权威引用。
这种做法确保 EPUB 始终能够跟上 SVG 标准的变化。EPUB 创建者仍必须跟踪 SVG 标准的变化,以确保他们的 流程保持最新。
EPUB 3 支持 CSS 工作组快照 [csssnapshot] 所定义的 CSS。EPUB 3 还 保留了一些带前缀的 CSS 属性,以确保对全球语言的一致支持。
本规范依赖 [smil3] 的一个子集, 9.2.2 媒体叠加文档定义中定义的媒体叠加元素和 属性均源自该子集。
本规范引用 [url] 标准,用于与 EPUB 出版物中表示的 URL 相关的术语和处理。预计新的和 修订后的 Web 格式将采用该标准,但在此之前,这可能会使本规范与 某些格式的内部要求(例如,有效的相对路径)发生冲突,特别是在 国际化 URL 的使用方面。如果某个格式不允许国际化 URL(即 URL 必须符合 [rfc3986] 或更早版本), 则在这些资源内该要求优先。
本规范定义了以下 EPUB 3 特有术语。
一个术语在某一节中只有第一次出现会链接到其定义。
编解码器指具有内在二进制格式特性的内容,例如 为最佳压缩而设计的,或提供优化流式传输 能力的视频和音频媒体类型。
一种位于 EPUB 容器内的 出版物资源,与 不在其中的远程资源相对。
有关资源位置的媒体类型特定规则,请参阅 3.6 资源 位置。
表示 OCF 抽象容器的 根目录的 URL [url]。它是实现 特定的,但 EPUB 创建者必须假定它具有 4.2.5 OCF 抽象容器中的 URL 中定义的属性。
URL,指 OCF 抽象容器中文件或目录的 URL,定义在 4.2.5 OCF 抽象容器中的 URL中。
一种出版物资源,它符合 3.2 核心媒体 类型中列出的 MIME 媒体类型 [rfc2046] 之一,因此不需要提供 回退(参见 外来 资源)。
“核心媒体类型资源”这一称谓仅适用于在 EPUB 内容文档和 外来内容文档的渲染中使用的资源。例如, 核心媒体类型资源不能在 spine中使用而不提供回退, 除非它也具有 EPUB 内容文档的媒体类型。
一种应用程序,用于根据本规范的要求验证 EPUB 出版物并报告其一致性。
为 EPUB 出版物定义的基于 ZIP 的打包与分发格式,定义在 4.3 OCF ZIP 容器中。
EPUB 容器和 OCF ZIP 容器是同义词。
一种出版物资源,它从 spine或 manifest 回退链引用,并符合 XHTML 或 SVG 内容文档定义。
EPUB 内容文档包含 EPUB 出版物的全部或部分内容(即 文本、视觉和/或音频内容)。
生产 EPUB 出版物的个人、组织或流程。
EPUB 出版物的创建通常涉及许多个人的工作,并且可能 被拆分到多个组织中(例如,当出版商外包全部或部分 工作时)。根据用于生产 EPUB 出版物的流程, 责任可能落在组织(例如,出版商)、准备出版物的个人 (例如,技术编辑)或自动化程序(例如,作为 出版流程的一部分)身上。因此,并非每个参与方或流程都可能 负责确保满足每一项要求,但始终存在一个 EPUB 创建者 对最终 EPUB 出版物的一致性负责。
本规范以前的版本将 EPUB 创建者称为 。
有关更多信息,请参阅 5.6.1
manifest 元素。
XHTML 内容文档的一种专门形式, 其中包含可供人和机器读取的 全局导航信息。EPUB 导航文档符合 7. EPUB 导航 文档中表达的约束。
一种逻辑文档实体,由一组相互关联的资源组成,并被打包在 EPUB 容器中。
EPUB 出版物通常代表一项单一的智力或艺术作品,但本 规范并不限制内容的性质。
一种系统,它以符合本规范的方式处理 EPUB 出版物, 以便向用户呈现。
包文档中定义 EPUB 内容文档和 外来内容文档的有序列表的节。该列表 表示 EPUB 出版物的默认阅读 顺序。
有关更多信息,请参阅 5.7.1
spine 元素。
豁免资源是一类特殊的出版物资源,阅读系统并不被要求 支持其渲染,但 EPUB 创建者不必为其提供回退。
有关更多信息,请参阅 3.4 豁免 资源。
OCF 抽象容器内任何类型文件的名称,无论是目录还是 目录中的 文件。
文件或目录的文件路径是其相对于 根目录的完整路径,如 4.2.4 派生文件路径中指定的算法所 定义。
一种具有固定尺寸的
EPUB 内容文档,由
spine直接引用。
固定布局文档在 包文档中被标记为 pre-paginated,如
8.2 固定布局中所定义。
任何从
spine
元素引用,或从
manifest 回退链引用,且不是
EPUB 内容文档的
出版物资源。
itemref
当外来内容文档从 spine itemref 元素引用时,它
需要一个至少包含一个 EPUB 内容文档的 manifest 回退链。
除 XHTML 和 SVG 外,所有核心媒体类型资源在从 spine 直接引用时都是 外来 内容文档。
一种出版物资源,其 MIME 媒体类型 [rfc2046] 不匹配 3.2 核心媒体类型中列出的任何类型。外来资源受 3.3 外来资源中定义的 回退要求约束。
“外来资源”这一称谓仅适用于在 EPUB 内容文档和 外来内容文档的渲染中使用的资源。
外来资源和外来内容文档不是可互换的术语。在 spine 中使用时被视为外来的 资源类型,比在 EPUB 内容 文档中使用时被视为外来的资源类型更多。
一种 XML 文档,它将 XHTML 内容文档与预录音频 旁白关联起来,以提供同步播放体验,如 9. 媒体叠加中所定义。
非编解码器指由于其内部数据结构的性质而受益于压缩的内容类型, 例如基于字符串的文件格式(例如 HTML、 CSS 等)。
OCF 抽象容器为 OCF ZIP 容器的内容定义了一个文件系统模型,如 4.2 OCF 抽象 容器中所定义。
一种出版物资源,描述 EPUB 出版物的 渲染,如 5. 包 文档中所定义。包文档承载 EPUB 出版物的元信息,提供资源的 manifest,并定义默认阅读 顺序。
一种包含内容或指令的资源,这些内容或指令有助于 EPUB 出版物的逻辑和渲染。如果缺少该资源, 阅读系统可能无法 按 EPUB 创建者的意图渲染 EPUB 出版物。出版物 资源的示例包括 包文档、EPUB 内容文档、CSS 样式表、 音频、视频、图像、嵌入字体和脚本。
EPUB 创建者必须在包文档的 manifest中列出出版物资源,并且通常将它们 全部打包在 EPUB 容器中(例外是他们 可以将 3.6 资源位置中列出的资源放置在 EPUB 容器之外)。
一种位于 EPUB 容器之外的 出版物资源,通常位于 Web 上。
EPUB 容器内的出版物资源称为 容器资源。
有关资源位置的媒体类型特定规则,请参阅 3.6 资源 位置。
一种包含脚本的
EPUB 内容文档,或一种
包含 [html]
form
元素的XHTML 内容文档。
有关更多信息,请参阅 6.3.2 脚本。
一种EPUB 内容文档,它符合 6.2 SVG 内容文档中表达的约束。
在设备屏幕上同时渲染两个相邻页面。
EPUB 出版物的主要标识符。唯一
标识符是
值,即在
包文档中由
unique-identifier 属性指定的
元素的值。
dc:identifier
内容发生重大修订、删节等时,需要新的唯一标识符。
一种EPUB 内容文档,它符合 6.1 XHTML 内容文档中定义的 [html] 配置文件。
除了标记为非规范性的节之外,本规范中的所有创作指南、图表、示例和注释 均为非规范性内容。本规范中的其他所有内容均为规范性内容。
本文档中的关键词 MAY、MUST、MUST NOT、OPTIONAL、RECOMMENDED、REQUIRED、SHOULD 和 SHOULD NOT 应按 BCP 14 [RFC2119] [RFC8174] 中所描述的方式解释,但仅当它们以 此处所示的全大写形式出现时才如此。
所有算法说明都是非规范性的。
本节是非规范性的。
对 Dublin Core 元素 [dcterms] 的引用使用 dc: 前缀。该前缀
必须在包文档中声明,才能有效使用
(xmlns:dc="http://purl.org/dc/elements/1.1/")
epub 命名空间前缀 [xml-names] 也
会在元素和属性上使用,而并不总是显式声明
(xmlns:epub="http://www.idpf.org/2007/ops")。
MUST 至少定义其内容的一种渲染方式,如下所示:
SHOULD 符合 [epub-a11y-11] 中定义的可访问性要求。
MUST 打包在 EPUB 容器中,如 4. 开放 容器格式 (OCF) 所定义。
此外,所有出版物资源 MUST 遵守 3. 出版物 资源中的要求。
本规范的其余部分涵盖具体的一致性细节。
本节是非规范性的。
由于本规范的复杂性以及 EPUB 出版物中所使用技术的数量, 建议 EPUB 创建者使用 EPUB 一致性检查器来验证其内容的 一致性。
EPUBCheck 是出版行业使用的事实上的 EPUB 一致性 检查器,并且已随 EPUB 的每个新版本更新。它 集成在许多创作工具中,也提供替代接口和其他 语言版本(更多信息,请参阅其 应用和工具 页面)。
在验证其 EPUB 出版物时,EPUB 创建者应确保它们不违反 本规范的要求(由关键词 “MUST”、“MUST NOT” 和 “REQUIRED” 标识的实践)。这类问题通常会导致 EPUB 出版物无法 渲染或以不一致的方式渲染。这些问题通常会被报告为错误或严重错误。
EPUB 创建者还应确保其 EPUB 出版物不违反 本规范的建议(由关键词 “SHOULD”、“SHOULD NOT” 和 “RECOMMENDED” 标识的实践)。 不遵循这些实践不会导致 EPUB 出版物无效,但可能会导致 互操作性问题以及其他影响用户阅读体验的问题。这些问题 通常会被报告为警告。
EPUB 出版物的供应商、发行商和其他零售商,在根据 EPUB 一致性检查器的零问题结果来决定接受或拒绝之前,应考虑 推荐实践的重要性。EPUB 创建者在所有情况下无法遵循 推荐实践,会有正当理由。
本节是非规范性的。
EPUB 出版物由许多不同类别的 资源组成,并非所有类别都 相互排斥。有些资源是出版物资源,有些不是。有些出版物 资源默认允许出现在 spine 中,而 其他所有资源都需要回退。 有些资源可用于渲染 EPUB 内容文档,而其他资源只能与回退一起使用。
通过阅读每类资源的技术定义来理解这些差异可能很复杂。 为了使分类更易于理解,本介绍使用 不同平面的概念来说明资源如何分组和引用。
这三个平面是:
同一资源可能存在于多个平面上,并且在本 规范中会根据所讨论的平面而被不同地称呼。例如, 用于渲染 EPUB 内容文档的核心媒体类型资源 (在内容平面上),如果也列在 spine 中(spine 平面),则也可能是外来 内容文档。
以下小节更详细地描述这些平面。
有关展示资源如何归入不同平面的详细示例,请参阅 H.1 资源。
manifest 平面定义 EPUB 出版物的所有资源。它类似于 包文档的 manifest, 但包括该列表中不存在的资源。
该组中的主要资源被指定为出版物资源,它们是用于向用户渲染 EPUB 出版物的所有
资源。EPUB 创建者
始终必须在
元素中列出这些资源。
manifest
出版物资源还会按照其在 spine 平面和 内容 平面中的用途进一步分类。
manifest 平面还包含一组链接 资源。这些资源与 直接渲染相关性较弱。例如,它们包括元数据记录以及指向外部内容的链接 (例如购买 EPUB 出版物的位置)。
与出版物资源不同,它们不会列在包文档 manifest 中(即,因为
它们对于渲染 EPUB 出版物不是必需的)。相反,它们在包文档元数据中的
元素中定义。这些元素定义其性质和目的,
类似于 manifest
link
元素定义出版物资源的方式。(从这个意义上说,它们
就像 manifest 的扩展。)
item
有关链接资源的更多信息,请参阅 5.5.6
link 元素。
manifest 平面中的资源有时也会按其所在位置进一步划分。 虽然大多数出版物资源必须位于 EPUB 容器中(称为 容器资源),但 EPUB 3 允许 音频、视频、字体和脚本数据 资源托管在容器之外。作出这些例外是为了加快 EPUB 出版物的 下载和加载,因为这些资源通常相当大,并且在 字体的情况下,对呈现并非必不可少。当远程托管时,这些出版物 资源称为远程资源。
由于链接资源对于 EPUB 出版物的渲染并非必需,因此对其 所在位置没有要求,也因此不会根据其 位置进行特殊命名。它们可以位于 EPUB 容器内,也可以位于其外。
EPUB 容器外的超链接内容(例如网页)不是出版物 资源,因此不会列在 manifest 中。阅读系统通常会 在单独的浏览器实例中打开这些链接,而不是作为 EPUB 出版物的一部分打开。
spine 平面定义 由 spine 建立的 默认阅读顺序中使用的资源,其中 包括线性和非线性内容。spine 指示 阅读系统在用户浏览 EPUB 出版物时如何加载这些资源。虽然许多 资源可能被打包在 EPUB 容器中,但并非全部 默认允许出现在 spine 中。
EPUB 3 定义了一类称为 EPUB 内容文档的特殊资源,EPUB 创建者可在 spine 中无任何 限制地使用它们。EPUB 内容文档包括 XHTML 内容文档和 SVG 内容文档。
要在 spine 中使用任何其他类型的资源,即所谓的 外来内容文档,需要 包含一个指向 EPUB 内容文档的回退。这种可扩展性模型允许 EPUB 创建者 尝试各种格式,同时确保阅读系统始终能够为用户渲染 可阅读的内容,因为外来内容 文档的支持并无保证。
一种称为manifest 回退的机制允许 EPUB 创建者
为外来内容文档提供回退。在此模型中,外来内容
文档的 manifest 条目必须包含一个
指向阅读系统在不支持其格式时可尝试的下一个
可能资源的 fallback 属性。虽然并不
常见,但一个回退资源可以指定另一个回退,从而形成许多资源
深度的链。唯一要求是
manifest 回退链中必须至少有一个 EPUB 内容文档。
虽然它们没有直接列在 spine 中,但回退链中的所有资源 都被视为 spine 的一部分,并进一步视为 spine 平面的一部分,因为其中任何资源都可能被 阅读系统使用。
有关更多信息,请参阅 3.5.1 Manifest 回退。
虽然 manifest 回退满足 EPUB 的技术要求, 但阅读系统对其实际支持很少。强烈 不建议使用它们,因为这可能导致出版物无法阅读。
可以为 EPUB 内容文档提供 manifest 回退,但这不是 必需的,也不常见。例如,脚本化内容文档可以为不支持脚本的阅读系统 回退到一个 非脚本替代方案。
内容平面对用于渲染 EPUB 内容文档和 外来内容文档的资源进行分类。这些类型的 资源包括嵌入媒体、CSS 样式表、脚本和字体。这些资源根据阅读系统支持情况 分为三类:核心媒体类型资源、 外来资源和 豁免资源。
核心媒体类型资源是阅读系统必须支持的资源,因此可在 EPUB 或外来内容文档中不受限制地使用。有关核心媒体 类型资源的更多信息,请参阅 3.2 核心媒体类型。
作为核心媒体类型资源并不意味着阅读系统总会渲染该 资源,因为并非所有阅读系统都支持 EPUB 3 的所有特性。例如,没有 视口的阅读系统不会渲染图像等视觉内容。
核心媒体类型资源的相反类型是外来资源。这些资源 不保证会被阅读系统支持渲染。因此,类似于在 spine 中使用 外来内容文档需要回退以确保其渲染,在内容文档中使用 外来资源也需要回退。这些回退以两种方式之一提供: 使用宿主格式的能力,或通过 manifest 回退。
首选方法是使用宿主格式的回退能力。例如,许多 HTML 元素
具有内在回退能力。一个例子是
picture
元素 [html],它允许
EPUB 创建者
指定多个替代图像
格式。
如果没有可用的内在回退方法,也可以使用 manifest 回退, 但如上一节警告所述, 不建议使用这种方法。有关外来资源的更多信息,请参阅 3.3 外来 资源。
介于核心媒体类型资源和外来资源之间的是豁免资源。这些资源 与外来资源最为接近,因为无法保证阅读系统 会渲染它们。但像核心媒体类型一样,它们不需要回退。
豁免资源往往用于处理一些特定情况,在这些情况下没有定义核心媒体类型,
但提供回退会显得繁琐或没有必要。这些情况包括
嵌入视频、添加可访问性轨道,以及从 [html] link 元素链接到资源。
有关这些例外的更多信息,请参阅 3.4 豁免 资源。
核心媒体类型资源常见的一个混淆点,是 XHTML 和 SVG 被列为核心媒体类型资源,并要求其标记符合各自的 EPUB 内容文档定义。这允许 EPUB 创建者在 EPUB 内容文档中嵌入 XHTML 和 SVG 文档,同时保持创作和阅读系统支持的一致要求。
在实践中,这意味着 EPUB 创建者可以将 XHTML 和 SVG 核心媒体类型资源放入 spine 中,而无需任何修改或回退(它们也是符合要求的 XHTML 和 SVG 内容文档),但这是一个特殊情况。所有其他核心媒体类型资源在 spine 中使用时都会变成外来内容文档(即,外来内容文档包括 除 XHTML 和 SVG 之外的所有外来资源和所有核心媒体类型资源)。
EPUB 创建者 MAY 包含符合下表中定义的 MIME 媒体 类型 [rfc2046] 规范的出版物资源,当它们用于 EPUB 内容文档和 外来内容文档时无需回退。这些资源被 分类为 核心媒体类型资源。
除 XHTML 内容文档和 SVG 内容文档外,EPUB 创建者 MUST 为从 spine 直接引用的核心媒体类型资源 提供 manifest 回退。在这种情况下, 它们是外来内容文档。
表中的列表示以下信息:
媒体类型—用于在 manifest 中表示给定 出版物资源的 MIME 媒体类型 [rfc2046]。
如果表中列出多个媒体类型,则第一个是首选媒体类型。EPUB 创建者应对所有新的 EPUB 出版物使用首选媒体类型。
| 媒体类型 | 内容类型定义 | 适用于 |
|---|---|---|
| 图像 | ||
image/gif
|
[gif] | GIF 图像 |
image/jpeg
|
[jpeg] | JPEG 图像 |
image/png
|
[png] | PNG 图像 |
image/svg+xml
|
SVG 内容文档 | SVG 文档 |
image/webp
|
[rfc9649] | WebP 图像 |
| 音频 | ||
audio/mpeg
|
[mp3] | MP3 音频 |
audio/mp4
|
[mpeg4-audio], [mp4] | 使用 MP4 容器的 AAC LC 音频 |
audio/ogg; codecs=opus
|
[rfc7845] | 使用 OGG 容器的 OPUS 音频 |
| 样式 | ||
text/css
|
CSS 样式表 | CSS 样式表。 |
| 字体 | ||
|
[truetype] | TrueType 字体 |
|
[opentype] | OpenType 字体 |
|
[woff] | WOFF 字体 |
font/woff2
|
[woff2] | WOFF2 字体 |
| 其他 | ||
application/xhtml+xml
|
XHTML 内容文档 | 使用 XML 语法 的 HTML 文档 [html]。 |
|
[rfc4329] | 脚本。 |
application/x-dtbncx+xml
|
[opf-201] | 旧式 NCX。 |
application/smil+xml
|
媒体叠加 | EPUB 媒体叠加文档 |
作为核心媒体类型资源纳入,并不意味着所有阅读系统都会支持 资源的渲染。阅读系统支持还取决于 应用程序的能力(例如,带有视口的阅读系统必须 支持图像核心媒体类型 资源,但没有视口的阅读系统则不支持)。有关哪些阅读系统渲染能力需要支持哪些核心 媒体类型资源的更多信息,请参阅 核心媒体类型 [epub-rs-33]。
工作组通常只在格式已获得 Web 浏览器核心——也就是 EPUB 3 阅读系统构建所依赖的 渲染引擎——广泛支持时,才将其纳入为核心媒体类型资源。 它们是阅读系统开发者和 EPUB 创建者之间的一项约定,用以确保 EPUB 出版物渲染的可预测性。
与核心媒体类型资源不同,外来资源是在 EPUB 内容文档或 外来内容文档中使用时,不保证会获得 阅读系统支持的资源。
EPUB 创建者 MUST 为外来资源提供回退, 其中回退采用以下形式之一:
宿主格式提供的内在回退机制(例如,[html] 元素 通常 提供引用多种媒体类型的能力,或在媒体类型无法渲染时显示替代的 嵌入消息);或
在包文档中的
元素上定义的manifest 回退链。
item
有关其元素所提供的内在回退能力,请参阅 [html] 和 [svg] 规范。
3.5.2 内在 回退还提供了关于如何为特定元素解释回退的 补充信息。
豁免资源同时具有外来资源和核心媒体类型资源的属性。它最类似于 外来资源,因为它不保证获得 阅读系统支持;但与核心媒体类型 资源一样,它不需要回退。
豁免资源只有少数特殊情况。例如,视频被豁免 回退,因为目前对于核心媒体类型视频格式还没有共识(即 没有可回退的格式)。类似地,音频和视频轨道也被豁免,以允许 EPUB 创建者使用阅读系统最佳支持的任何 格式来满足可访问性要求。
以下列表详细说明内容特定的豁免资源情况,包括对 EPUB 创建者可在何处使用它们的任何限制。
所有尚未作为字体核心媒体类型涵盖的字体资源 都是豁免资源。
此豁免允许 EPUB 创建者使用任何字体格式而无需回退, 无论阅读系统支持预期如何,因为 CSS 规则会确保在不 支持的情况下使用回退字体。
有关更多信息,请参阅 字体的阅读系统 支持 要求 [epub-rs-33]。
从 [html] track
元素引用的所有音频和视频轨道(例如 [webvtt]
字幕、字幕说明和描述)
都是豁免资源。
除内容特定的豁免外,如果满足以下条件, 资源也会被分类为豁免资源:
它未直接嵌入 EPUB 内容文档中(例如通过 [html] 嵌入内容以及 [svg] image 和 foreignObject
元素)。
此豁免允许 EPUB 创建者在 EPUB 容器 中包含并非供 EPUB 阅读系统使用的 资源。此豁免的主要情况是允许数据文件随 EPUB 出版物一起传递,无论是供脚本在其组成的 EPUB 内容文档中使用, 还是供外部应用程序使用(例如,科学期刊可能会包含一个数据集,并附带 如何从 EPUB 容器中提取它的说明)。
它还允许 EPUB 创建者在外来内容文档中使用外来资源,而不需要阅读 系统或 EPUB 一致性检查器理解这些 资源的回退能力(即,对外来内容文档的回退要求会覆盖其中的任何 渲染问题)。由于该资源未从 EPUB 内容文档引用,它 自动免于回退要求。
Manifest 回退是包 文档的一项特性,它为 出版物资源创建 manifest 回退链,允许 阅读系统 选择一种它们能够渲染的替代格式。
回退链通过 fallback
属性在 manifest
元素上创建。该属性引用另一个
manifest itemitem 的
ID [xml],该
item 是当前 item 的
回退。从给定 item 的 fallback
属性开始,阅读系统能够到达的所有引用的有序列表
表示该 item 的完整回退链。该链也
表示 EPUB 创建者首选的回退
顺序。
Manifest 回退有两种情况:
EPUB 创建者 MUST 为 外来内容 文档指定回退链,以确保 阅读系统始终能够渲染该 spine 项。在这种情况下, 该链 MUST 至少包含一个 EPUB 内容文档。
EPUB 创建者 MAY 为 EPUB 内容文档提供回退 (例如,为脚本化内容提供回退)。
当回退链包含多个 EPUB 内容文档时,EPUB 创建者可以使用
properties 属性来区分
每个文档的用途。
当引用外来资源的元素 没有内在回退能力时,EPUB 创建者 MUST 为其提供内容回退。在这种情况下, 回退链 MUST 至少包含一个 核心媒体类型 资源。
EPUB 创建者 MAY 也为核心媒体 类型资源提供 manifest 回退(例如,允许阅读系统从多种图像格式中选择)。
无论指定哪种类型的 manifest 回退,回退链都 MUST
NOT 包含
对链中 item 元素的自引用或循环引用。
由于无法对在 data URL 中表示的资源使用 manifest 回退,EPUB 创建者只能在存在内在回退机制时, 将外来资源表示为 data URL。
以下小节提供关于特定元素的内在回退 要求的补充说明。
EPUB
创建者 MUST NOT 使用
媒体元素
(即 audio 或 video)内嵌入的
[html] 流内容作为音频
外来资源的内在回退。只有子
source
元素 [html] 提供内在
回退能力。
只有不识别 audio 或
video 元素的较旧
阅读系统
(例如 EPUB 2 阅读系统)会渲染嵌入的
内容。当阅读系统支持这些元素但不支持可用的媒体格式时,
它们不会为用户渲染嵌入内容。
回退要求仅适用于从
audio 和 video 元素引用的音频外来资源。视频资源
不需要回退;它们是豁免资源。
虽然数据块具有不同于其包含
XHTML 内容文档的单独 MIME 媒体类型
[rfc2046],
但无法提供内在回退,因为 [html]
script
元素没有指定这样的
机制。也无法提供 manifest 回退,因为数据块不能在
EPUB 容器中定义为独立文件,而始终作为内联 script 元素嵌入。
但是,由于 script 元素不表示用户内容——
数据块除非被脚本操纵,否则不会被渲染,并且由脚本渲染的内容已经具有
核心
媒体类型要求——要求原始数据提供回退并没有
实际用途。
因此,为确保 EPUB 创建者能够出于脚本 目的包含数据块,它们被免除回退要求。
此豁免使数据块与数据文件豁免保持一致。
截至发布时,[svg] 尚未定义数据块,但如果未来更新加入该概念, 同样的排除也会适用。
EPUB 创建者 MAY 在 EPUB 容器之外托管以下类型的 出版物资源:
EPUB 创建者 MUST 将所有其他资源存储在 EPUB 容器内。
只要可能,强烈鼓励将所有资源存储在 EPUB 容器内部,因为这样 用户无论连接状态如何都能访问完整呈现。
当资源必须位于 EPUB 容器之外时,RECOMMENDED EPUB 创建者
通过安全的 https URI 方案 [rfc9110] 引用它们,以限制
使其出版物和用户暴露于网络攻击的威胁。阅读
系统可能不会加载
使用 http 等不安全方案引用的
远程资源。
这些出版物资源定位规则适用,无论给定资源是 核心媒体类型资源还是 外来资源。
有关如何指示
manifest
引用
远程资源的更多信息,请参阅
itemremote-resources 属性。
data: URL 方案 [rfc2397] 用于将资源
直接编码到 URL 字符串中。该方案的优点是它允许
EPUB 创建者
将资源嵌入另一个资源中,从而避免需要外部文件。
EPUB 创建者 MUST NOT 在以下可能导致 顶级内容文档或 顶级浏览上下文 [html] 的场景中使用 data URL:
[html] area 元素的
href 属性中,除非位于
iframe 元素内;
对 [ecmascript]
window.open 或 document.open 的调用中。
嵌入带来的一个结果是,data URL 中的数据在 manifest 报告目的上不被视为其自身唯一的 出版物资源 (即,只有其包含的出版物 资源会被列出)。然而,由于这些数据具有自己的媒体类型,因此仍受 外来资源限制约束。因此,EPUB 创建者 MUST 将 data URL 编码为核心媒体类型资源,或 使用宿主格式的内在回退 机制提供回退。
file: URL 方案在 [rfc8089] 中被定义为
“标识存储在主机上的结构化对象命名和访问环境
(‘文件系统’)中的对象(‘文件’)。” 它通常用于从本地操作
系统检索文件。
在可在不同主机之间传输的 EPUB 出版物中使用 file URL, 表示存在安全风险,也不可互操作。因此, EPUB 创建者 MUST NOT 在 EPUB 出版物中使用 file URL。
本节是非规范性的。
OCF 是 EPUB 出版物所必需的容器技术。OCF 可在 以下工作流中发挥作用:
本节定义了抽象层面上组织文件集合的规则:“抽象 容器”。它还定义了在 ZIP 归档中表示该抽象容器的规则: “物理容器”。ZIP 物理容器的规则建立在 [odf] 所使用的 ZIP 技术之上。
OCF 还为那些需要此功能的 EPUB 出版物定义了一种标准方法,用于 混淆嵌入字体。
本节是非规范性的。
OCF 抽象容器文件系统模型使用一个 单一公共根目录。所有 容器资源都位于以根目录为首的目录 树内,但本规范并未强制要求它们采用任何特定的文件系统结构。
该文件系统模型还包括一个名为 META-INF 的强制目录,它是
根目录的直接子目录,并存储以下特殊文件:
container.xml
[必需]
signatures.xml
[可选]
包含各种资产的数字签名。
encryption.xml
[可选]
metadata.xml
[可选]
用于存储有关 OCF ZIP 容器的元数据。
rights.xml
[可选]
用于存储有关数字权利的信息。
manifest.xml
[可选]
Open Document Format [odf] 允许的容器内容清单。
有关 META-INF 目录中各文件的一致性要求,请参阅
4.2.6
META-INF 目录。
OCF 抽象容器的虚拟文件系统 MUST 为容器的所有内容具有一个单一公共根 目录。
OCF 抽象容器 MUST 包括一个名为
META-INF 的配置文件目录,它是容器根目录的直接子目录。有关该
目录内容的要求,请参阅 4.2.6
META-INF 目录。
根目录中的文件名 mimetype 保留供 OCF ZIP 容器使用,如
4.3 OCF ZIP 容器中所说明。
META-INF 目录中的文件和 mimetype 文件不是
出版物资源,因此 MUST
NOT 列在 manifest 中。
EPUB 创建者 MAY 将 OCF 抽象容器内的所有其他
文件放置在根目录的任何后代位置,
但不得位于 META-INF 目录中。EPUB 创建者 MUST NOT 从
EPUB 出版物中引用
META-INF 目录中的文件。
一些阅读系统不提供对 存储包文档的目录之外资源的访问。因此,EPUB 创建者 应将所有资源放置在包含包文档的目录处或 其下,以避免互操作性问题。
在为出版物创建多个呈现版本 [epub-multi-rend-11] 时, 更常遇到此问题。
在 OCF 抽象容器的上下文中,文件路径和文件名是标量值字符串 [infra](即 其值区分大小写)。
此外,以下限制旨在允许文件路径和文件名在大多数操作系统上 无需修改即可使用:
文件名 MUST NOT 超过 255 字节。
OCF 抽象容器内任何目录或文件的文件路径 MUST NOT 超过 65535 字节。
文件名 MUST NOT 使用以下 [unicode] 字符,因为 常用操作系统可能无法一致支持这些字符:
斜线:/ (U+002F)
引号:" (U+0022)
星号:* (U+002A)
作为最后一个字符的句点:. (U+002E)
冒号:: (U+003A)
小于号:< (U+003C)
大于号:> (U+003E)
问号:? (U+003F)
反斜线:\ (U+005C)
竖线:| (U+007C)
DEL (U+007F)
C0 范围 (U+0000 … U+001F)
C1 范围 (U+0080 … U+009F)
私用区 (U+E000 … U+F8FF)
所有 Unicode 非字符,具体包括:
基本多文种平面中的 32 个连续字符
(U+FDD0 … U+FDEF)
基本多文种平面的最后两个码点
(U+FFFE 和 U+FFFF)
辅助平面末尾的最后两个码点
(U+1FFFE, U+1FFFF … U+EFFFE, U+EFFFF)
特殊字符 (U+FFF0 … U+FFFF)
辅助私用区-A (U+F0000 … U+FFFFF)
辅助私用区-B (U+100000 … U+10FFFF)
Unicode 字符数据库 [uax44] 还 包括一个已弃用字符列表。 也建议 EPUB 创建者避免使用这些字符, 因为预计 EPUB 一致性检查器会标记其 使用。
为了兼容较旧的阅读系统,文件名 SHOULD NOT 包含 SPACE (U+0020) 字符。
同一目录内的所有文件名 MUST 在经过 Unicode 规范等价归一化 [uax15] 然后进行完整大小写折叠 [unicode] 后保持唯一。(更多信息请参阅 Unicode 规范等价大小写折叠 归一化步骤 [charmod-norm]。)
如果 EPUB 创建者动态集成资源 (即命名超出其控制范围),他们应意识到,为使文件名保持在 255 字节限制内而自动截断文件名可能导致损坏。这是由于 UTF-8 等多字节编码中 字节和字符之间存在差异;因此,避免在字符中间截断非常重要。 更多信息请参阅 [international-specs] 中关于“截断或限制 字符串长度”的小节。
要派生文件路径,给定 OCF 抽象容器中的一个文件或目录 file,应用以下步骤 (使用 [infra] 的术语表示):
容器根 URL是URL [url],对应于 根目录。它是实现特定的,但 EPUB 创建者 MUST 假定它具有 以下属性:
OCF 抽象容器中文件或目录的 内容 URL,是以容器根 URL 作为 base解析该文件的文件路径所得的结果。
容器根 URL 是阅读系统分配给 EPUB 容器根的 URL。它通常取决于阅读系统内部如何实现 容器文件系统。
但是,阅读系统不能任意使用任何 URL,而必须使用符合上述约束的 URL。 这些约束确保 EPUB 中出现的任何相对 URL 字符串始终会被解析为 容器内某个资源的 URL(该资源可能存在,也可能不存在)。 这些约束的主要原因,是为了避免解析后的 URL “泄漏”到容器文件之外 而导致潜在的运行时安全问题。
例如,https://localhost:12345/ 或
https://www.example.org:12345/ 这样的 URL 符合这些属性。但
https://localhost:12345/path/to.epub/、
file:///path/to.epub#path=/ 或 jar:file:/path/to.epub!/EPUB/
这样的 URL 不符合(以这三个示例作为基准解析 URL 字符串“..”将分别
返回 https://localhost:12345/path/、file:///path/ 和一个解析
错误)。为根目录分配符合上述属性定义的 URL,是阅读系统的责任。
解析可能会将文件路径中的某些字符替换为其百分号编码替代形式。例如,
A/B/C/file name.xhtml 会变为 A/B/C/file%20name.xhtml。
字符串 url 是一个valid-relative-ocf-URL-with-fragment string,如果
它是一个
path-relative-scheme-less-url
string,可选地后跟 U+0023 (#)
和一个 url-fragment string,并且如果以下
步骤返回 true:
将容器根 URL设置为
https://a.example.org/A/。
令 base 为必须用于解析 url 的 基准 URL,该基准由使用 url 的上下文(文档或环境)定义,并根据 包文档的内容 URL 确定 (参见 5.2 解析 包文档中的 URL)。
如果 URL 位于包文档中,则 base 变量设置为
包文档的内容 URL。如果文档位于
META-INF 目录中,则 base 变量设置为
容器根 URL(参见 4.2.6.2 解析 META-INF
目录中的 URL)。如果 URL 位于
XHTML 内容
文档中,用于解析的基准 URL 由
HTML 标准定义。通常,它会是内容文档的
内容 URL(除非使用了不建议使用的
base 元素)。
将容器根 URL设置为
https://b.example.org/B/。
之所以使用不同且人工构造的容器根 URL 设置重复相同步骤两次,
是为了避免在 url 字符串也包含
/A/ 时可能发生的冲突。例如,考虑
url 为 ../../A/doc.xhtml 的情况。
如果 testURLStringA 不是以 https://a.example.org/ 开头,或
testURLStringB 不是以 https://b.example.org/ 开头,
则返回 true。
如果任何结果都不共享测试 URL 主机,则意味着 url
或其基准 URL(例如在 HTML 中,如果用
base 元素显式设置)是绝对的,并指向
容器之外。这是可接受的。
如果 testURLStringA 以 https://a.example.org/A/ 开头,且
testURLStringB 以 https://b.example.org/B/ 开头,则返回
true。
第一个测试路径段(分别为 A 和
B)的存在表明 URL 没有泄漏到容器之外。
在 OCF 抽象容器中,任何 URL 字符串 MUST 是一个 absolute-url-with-fragment string 或一个 valid-relative-ocf-URL-with-fragment string。
此外,所有 relative-URL-with-fragment strings [url] 在解析后,MUST 等于 OCF 抽象容器中某个现有文件的内容 URL。
这些对 URL 字符串的约束意味着:
/ (U+002F) 开头的相对 URL 字符串(例如
/EPUB/content.xhtml)是不允许的;
EPUB/../../../../config.xml)是不允许的;
注意,在任何情况下,即使是上述不允许的 URL 字符串,在解析后也不会 “泄漏”到容器之外(如本节第一个注释中所解释)。然而,为了更好地 与不符合规范或旧式阅读系统和工具链实现互操作,它们仍然是不允许的。
所有 OCF 抽象容器 MUST 在其根目录中包含一个名为 META-INF 的目录。
该目录保留用于配置文件,特别是 4.2.6.3 保留文件中定义的那些文件。
要解析位于
META-INF 目录中的文件所使用的 URL 字符串
url,MUST 将
URL parser 应用于 url,并以
容器根 URL作为
base。
META-INF 目录中的 REQUIRED
container.xml 文件
标识 OCF 抽象
容器中可用的包文档。
除非另有规定,本节定义的所有 [xml]
元素都位于
urn:oasis:names:tc:opendocument:xmlns:container 命名空间 [xml-names]
中。
在移除所有来自其他命名空间的元素和属性(包括这些元素的所有属性和内容)后, 此文件的内容 MUST 对本节中的定义有效。
XML Schema 也非正式地定义了 此文件的内容。
container 元素封装 container.xml 文件中的所有信息。
每个 rootfile 元素标识 EPUB 容器中一个
包文档的位置。
rootfile
作为
元素的子元素。可重复。
rootfiles
full-path
[必需]
标识包文档的位置。
该属性的值 MUST 是一个 path-relative-scheme-less-URL string [url]。该路径 相对于根目录。
media-type
[必需]
标识包文档的媒体类型。
该属性的值 MUST 是
“application/oebps-package+xml”。
空
如果 EPUB 创建者定义了多个
rootfile 元素,则每个元素 MUST
引用一个符合相同 EPUB 版本的包文档。每个包
文档表示 EPUB 出版物的一种呈现。
虽然 EPUB 容器提供了引用多个包文档的能力, 但本规范并未定义如何解释可用选项或如何从中选择。有关如何打包内容的多个呈现版本的 更多信息,请参阅 [epub-multi-rend-11]。
links 元素标识处理
OCF ZIP 容器所需的资源。
本规范目前未定义 links
元素的用途。有关其使用示例,请参阅 [epub-multi-rend-11]。
link
作为
元素的子元素。可重复。
links
href
[必需]
标识资源的位置。
link 元素 href
属性的值 MUST 是一个 path-relative-scheme-less-URL
string
[url]。该路径相对于
根
目录。
media-type
[可选]
标识所引用资源的类型和格式。
该属性的值 MUST 是一个媒体类型 [rfc2046]。
rel
[必需]
标识资源的关系。
该属性的值 MUST 是一个以空格分隔的 令牌列表。
空
本节是非规范性的。
META-INF 目录中的 OPTIONAL
encryption.xml 文件保存
容器内容的所有加密信息。如果 EPUB 创建者加密容器内的任何资源,则他们
MUST 包含一个
encryption.xml 文件,以提供有关所用加密的信息。
encryption
urn:oasis:names:tc:opendocument:xmlns:container
无
任意顺序:
EncryptedKey [一个或多个]EncryptedData [一个或多个]encryption 元素包含由
[xmlenc-core1]
定义的 EncryptedKey 和 EncryptedData 类型的子元素。
EncryptedKey 元素描述容器中使用的每个
加密密钥,而 EncryptedData 元素描述每个
加密文件。每个 EncryptedData 元素都会引用一个
EncryptedKey 元素,如 XML Encryption 中所述。
XML Schema 也非正式地
定义了 encryption.xml 文件的内容。
OCF 独立加密各个文件,以牺牲一部分安全性换取更好的 性能,使容器内容能够逐步解密。以这种方式加密会暴露整个 包的目录结构和文件命名。
OCF 使用 XML Encryption [xmlenc-core1]
来提供加密框架,
允许使用多种算法。XML Encryption 指定了加密任意数据并用 XML 表示
结果的过程。即使 OCF 抽象
容器可能包含非 XML 数据,EPUB
创建者也可以使用 XML
Encryption 加密 OCF
抽象容器中的所有数据。OCF
加密
仅支持加密容器内的整个文件,不支持加密文件的部分内容。当
encryption.xml 文件存在时,EPUB 创建者 MUST NOT 对其加密。
加密数据会替换 OCF 抽象容器中的未加密数据。例如,
如果 EPUB 创建者加密名为 photo.jpeg 的图像,他们应
用加密后的内容替换 photo.jpeg 资源的内容。在 ZIP 目录中,
EPUB 创建者 SHOULD 存储加密文件,
而不是对其进行 Deflate 压缩。
注意,在某些情况下,需要混淆
EPUB 出版物所引用的嵌入字体的存储,
使其更难被提取并无限制使用。虽然混淆不是加密,但阅读
系统会将 encryption.xml 文件与字体混淆算法结合使用,以识别要
去混淆的字体。
EPUB 创建者 MUST NOT 加密 以下文件:
mimetype
META-INF/container.xml
META-INF/encryption.xml
META-INF/manifest.xml
META-INF/metadata.xml
META-INF/rights.xml
META-INF/signatures.xml
package document =] EPUB 创建者 MAY 随后使用 Decryption Transform for XML Signature [xmlenc-decrypt] 加密已签名的资源。此 特性使 阅读系统能够区分签名前加密的数据和 签名后加密的数据。
当存储在 OCF ZIP 容器中时, EPUB 创建者 SHOULD 在加密之前压缩具有非编解码器内容类型的数据流。 EPUB 创建者 MUST 使用 Deflate 压缩。此做法确保 ZIP 容器中存储的文件条目具有较小的大小。
EPUB 创建者 SHOULD NOT 在加密之前压缩具有 编解码器内容类型的数据流。在这种情况下,额外压缩会在制作时引入不必要的 处理开销(尤其是对于大型资源文件),并在使用时影响音频/视频播放性能。在某些情况下, 压缩与某些加密方案的组合甚至可能破坏 阅读系统处理部分内容请求(例如 HTTP 字节 范围)的能力,这是由于在媒体播放之前无法确定完整资源长度(例如 HTTP Content-Length 标头)的技术不可能性。
当 EPUB 创建者在加密之前压缩数据流时,他们 SHOULD 提供
额外的 EncryptionProperties 元数据,以指定初始资源的大小
(即压缩和加密之前的大小),如下面定义的
Compression XML 元素所示。当 EPUB 创建者在加密之前不
压缩数据流时,他们 MAY 提供额外的
EncryptionProperties 元数据,以指定初始
资源的大小(即加密之前的大小)。
Compression
http://www.idpf.org/2016/encryption#compression
EncryptionProperty 的 OPTIONAL 子元素。
[必需]标识所使用的压缩方法。
值为“0”(无压缩)或“8”
(Deflate 算法)。
[必需]表示初始资源的大小(字节数)。
值为正整数。
空
META-INF 目录中的 OPTIONAL
manifest.xml 文件
提供容器中文件的 manifest。
OCF 规范并不强制要求 manifest 的格式。
注意,包文档指定了用于处理 EPUB 出版物的唯一 manifest。阅读系统不使用 此文件。
META-INF 目录中的 OPTIONAL
metadata.xml 文件
仅用于容器级元数据。
如果 EPUB 创建者包含 metadata.xml
文件,他们 SHOULD 仅在其中使用
命名空间限定的元素 [xml-names]。该文件
SHOULD 包含命名空间
http://www.idpf.org/2013/metadata 中的
根元素
[xml]
metadata,但为了向后兼容,本规范允许使用其他根元素。
本规范的此版本并未定义用于
metadata.xml 文件的元数据。本规范的未来版本 MAY 定义
容器级元数据。
本规范将 META-INF 目录中的 OPTIONAL
rights.xml
文件保留用于权利持有人、中介和用户之间
对 EPUB 出版物进行可信交换。
当 EPUB 创建者未包含
rights.xml 文件时,
OCF 抽象容器中没有任何部分在容器级受到权利
管理。权利表达式可能存在于 EPUB 出版物内部。
META-INF 目录中的 OPTIONAL
signatures.xml 文件
保存容器及其内容的数字签名。
signatures
urn:oasis:names:tc:opendocument:xmlns:container
无
Signature [一个或多个]signature 元素包含
Signature 类型的子元素,如 [xmldsig-core1]
所定义。
EPUB 创建者可以
对整个 EPUB 出版物或其部分应用签名,并且可以指定对任何类型的数据进行签名
(即不限于 XML)。
XML Schema 也非正式地
定义了 signatures.xml 文件的内容。
当 EPUB 创建者未包含 signatures.xml 文件时,他们并未
在容器级对 OCF
抽象容器的任何部分进行签名。
EPUB 出版物内部可能存在数字签名。
当 EPUB 创建者为 OCF 抽象容器创建数据签名时,
他们 SHOULD 将该签名作为
signatures 元素的最后一个子
Signature 元素添加。
signatures.xml 文件中的每个 Signature 都使用
[xmldsig-core1]
Manifest 元素及其 Reference 子元素,通过
URL [url] 标识该签名所适用的数据。
EPUB 创建者可以分别或一起签名单个容器文件。
单独签名每个文件会为资源创建一个摘要值,
阅读系统可以独立验证。此方法可能会使 Signature
元素变得更大。如果 EPUB 创建者一起签名文件,他们可以在单个 XML Signature
Manifest 元素中列出已签名文件的集合,并由一个或多个
Signature 元素引用它们。
EPUB 创建者可以对 OCF 抽象容器中任何或所有文件的整体进行签名,
但 signatures.xml 文件除外,因为
该文件将包含计算出的签名信息。EPUB 创建者是否以及如何
签名 signatures.xml 文件,取决于其目标。
如果 EPUB 创建者希望允许向 OCF
抽象容器添加或移除签名而不使其签名失效,他们 SHOULD
NOT 签名
signatures.xml 文件。
如果 EPUB 创建者希望任何签名的添加或移除都会使其
签名失效,他们可以使用
[xmldsig-core1]
第 6.6.4 节中定义的 Enveloped Signature
变换,签名整个预先存在的签名文件,但排除正在创建的
Signature。此变换会签名所有先前
签名,并且如果随后向该包添加签名,它将变为无效。
如果 EPUB 创建者希望移除现有签名会使其签名失效, 但同时希望允许添加签名,他们可以 使用 XPath 变换仅签名现有签名。不过,这种 变换的细节超出本规范的范围。
[xmldsig-core1]
规范未将任何语义与
签名关联;代理可以包含语义信息,例如通过向
Signature 元素添加描述签名的信息。
[xmldsig-core1]
规范描述了如何向
签名添加附加信息,例如通过使用 SignatureProperties 元素。
本节是非规范性的。
OCF ZIP 容器是 OCF 抽象容器的物理单文件表现形式。该 容器允许:
OCF ZIP 容器使用 [zip] 指定的 ZIP 格式,但具有以下 约束和说明:
OCF ZIP 容器的内容 MUST 是一个符合要求的 OCF 抽象容器。
OCF ZIP 容器 MUST NOT 使用 ZIP 应用 注记 [zip] 中允许 ZIP 文件跨多个存储介质展开或 分拆为多个文件的特性。
OCF ZIP 容器 MUST 在 ZIP 归档内仅包含存储 (未压缩)和 Deflate 压缩的 ZIP 条目。
OCF ZIP 容器 MAY 使用应用注记 [zip] 第 V 节 G 小节中定义为 “Version 1”的 ZIP64 扩展,并且 SHOULD 仅在内容需要时使用这些 扩展。
OCF ZIP 容器 MUST NOT 使用
ZIP 格式定义的加密
特性;相反,加密 MUST 使用
4.2.6.3.2
加密文件 (encryption.xml)中描述的特性完成。
OCF ZIP 容器 MUST 使用 UTF-8 [unicode] 编码文件系统 名称。
以下约束适用于 OCF ZIP 容器归档中的特定字段:
在本地文件头表中,EPUB
创建者 MUST 将
version needed to extract 字段设置为值 10、
20 或 45,以匹配给定文件所需的最大版本级别
(例如,Deflate 为 20,ZIP64 为 45)。
在本地文件头表中,EPUB 创建者 MUST 将
compression 方法字段设置为值 0 或
8。
EPUB 创建者 MUST 将
mimetype 文件作为 OCF ZIP
容器中的第一个文件包含进去。此外:
mimetype 文件的内容 MUST 是使用 US-ASCII
[us-ascii]
编码的 MIME 媒体类型 [rfc2046]
字符串 application/epub+zip。
mimetype 文件 MUST NOT 包含任何前导或尾随的
填充或空白。mimetype 文件 MUST NOT 以 Unicode 字节
顺序标记 U+FEFF 开始。mimetype
文件。有关 application/epub+zip 媒体类型的更多信息,请参阅
I.2
application/epub+zip 媒体类型。
存在更好的字体保护方法。例如,[woff] 和 [woff2] 字体都允许 嵌入许可信息,并通过字体表压缩提供一定保护。使用远程托管字体也允许 字体子集化。建议 EPUB 创建者 仅在没有其他可用选项时使用本节定义的字体混淆。另请参阅 混淆的限制。
本节是非规范性的。
由于 OCF ZIP 容器本质上是 ZIP 文件,常见可用的 ZIP 工具可 用于从包中提取任何未加密的内容流。此外,ZIP 文件的性质意味着,在某些系统上,其内容可能看起来像任何其他原生容器 (例如文件夹)。
虽然 ZIP 文件的这种简单性非常有用,但当不加密字体所带来的易提取性 并非期望的副作用时,它也会造成问题。例如,希望 包含第三方字体的 EPUB 创建者 通常不希望该字体被他人提取并重复使用。更关键的是,许多商业字体允许嵌入, 但嵌入字体意味着使其成为 EPUB 出版物的组成部分,而不仅仅是将 原始字体文件随内容一起提供。
由于现代操作系统中集成的 ZIP 支持非常普遍,单纯将字体放在 OCF ZIP 容器中不足以表示该字体不能在其他 上下文中重复使用。这种不确定性可能削弱 EPUB 出版物原本有用的字体嵌入能力。
为了阻止字体被重复使用,一些字体供应商可能仅在字体以某种方式绑定到 EPUB 出版物时才允许在 EPUB 出版物中使用它们。也就是说,如果字体 文件不能使用该计算设备的内置工具直接安装在操作系统上使用, 并且不能被其他 EPUB 出版物直接使用。
为字体提供数字权利管理或 执行系统超出了本规范的范围。本节转而定义一种混淆方法, 该方法会要求最终 OCF 接收者付出额外工作,才能获得对任何 已混淆字体的一般访问。
本节是非规范性的。
本规范并不声称混淆构成加密,也不保证 该资源能免受版权侵权。所希望的只是此 算法能够满足那些需要某种保证的供应商的要求,即其字体 不能仅通过解压 OCF ZIP 容器并复制资源就被提取。
与任何保护方案一样,混淆无法完全保护字体免于以其 去混淆状态被访问。该机制仅为不了解许可细节的人提供一道障碍。 它无法阻止有决心的用户通过以下替代方式获得对字体的完全访问:
因此,这种混淆方法是否满足各个字体 许可证的要求,仍是许可方和被许可方需要回答的问题。EPUB 创建者 负责确保其对混淆的使用满足字体许可要求。
EPUB 创建者还应注意,混淆可能导致阅读系统中的互操作性问题, 因为阅读系统并不被要求对字体去混淆。因此, 其出版物的视觉呈现可能因阅读系统而异。
还要注意,该算法仅限于混淆字体。它并非作为 混淆 EPUB 容器中任何资源的通用机制。
EPUB 创建者 MUST 从 唯一 标识符派生混淆算法中使用的密钥。
如 XML
1.0 规范第 2.3 节 [xml] 所定义,
所有空白字符都 MUST 从此标识符中移除——具体而言,是
Unicode 码点 U+0020、U+0009、U+000D 和
U+000A。
EPUB 创建者 MUST 按 Secure Hash Standard [fips-180-4] 的规定, 生成所得字符串 UTF-8 表示的 SHA-1 摘要。他们随后可以将 此摘要用作算法的密钥。
用于混淆字体的算法包括修改字体文件的前 1040 字节(约 1KB)。 (如果字体文件小于 1040 字节——这种情况不太可能——此过程 将修改整个文件。)
要混淆原始数据,将对原始字体文件的第一个字节和 混淆密钥的第一个字节执行逻辑异或 (XOR) 的结果, 存储为嵌入字体的第一个字节。
对源和密钥的下一个字节重复此过程,并继续处理密钥中的所有字节。 此时,该过程从密钥的第一个字节和源的第 21 个字节开始继续。 一旦以这种方式编码了 1040 字节(或到达源末尾), 即将源中的任何剩余数据直接复制到目标。
EPUB 创建者 MUST 在压缩并添加到
OCF ZIP
容器之前混淆字体。注意,由于混淆不是加密,此要求并不违反
4.2.6.3.2
加密文件 (encryption.xml)中要求在
加密字体之前压缩字体的要求。
以下伪代码展示了混淆算法。
虽然从技术上说不是加密数据,但所有混淆字体 MUST 在
随 EPUB 出版物一起提供的
encryption.xml 文件中有一个条目(参见
4.2.6.3.2
加密文件 (encryption.xml))。
EPUB 创建者 MUST 为每个混淆字体指定一个
EncryptedData 元素。
每个 EncryptedData 元素 MUST 包含一个子
EncryptionMethod
元素,其 Algorithm 属性的值为
http://www.idpf.org/2008/embedding。此属性的存在表示使用
本规范中描述的算法。
EPUB 创建者 MUST 在
CipherData 元素的子
CipherReference 中列出混淆字体的路径。由于混淆算法仅限于字体,
CipherReference 元素的 URI 属性 MUST
引用一个字体核心媒体类型资源。
为防止将嵌入字体轻易复制到其他 EPUB 出版物中,EPUB 创建者 MUST NOT 在
encryption.xml
文件中提供混淆密钥。
本节中定义的所有 [xml] 元素都位于
http://www.idpf.org/2007/opf
命名空间 [xml-names] 中,除非另有说明。
本节为非规范性内容。
包文档是一个 XML 文档,由一组元素组成, 每个元素封装有关 EPUB 出版物某个特定方面的信息。这些元素用于集中 元数据,详述各个资源,并提供阅读顺序以及渲染所需的其他信息。
以下列表概述了包文档中包含的信息:
元数据 — 用于包含和/或引用有关 EPUB 出版物的信息的机制。
一个 manifest — 通过 URL [url] 标识, 并通过 MIME 媒体类型 [rfc4839] 描述出版物资源集合。
一个 spine — 对 manifest 中顶层 资源的 ID 引用的有序序列,阅读系统可从中到达或利用集合中的所有其他 资源。spine 定义默认阅读顺序。
集合 — 一种封装并标识 EPUB 出版物内子组件的方法。
Manifest 回退链 — 一种将顶层 资源的有序列表定义为内容等价项的机制。然后阅读系统可以根据其能够渲染的 资源在这些资源之间进行选择。
一个 EPUB 出版物可以引用多个包文档,从而允许内容的替代
表示。更多信息请参阅 4.2.6.3.1
容器文件(container.xml)
有关包文档的文件
属性的信息,请参阅 I.1
application/oebps-package+xml 媒体类型。
要解析 包文档中使用的 URL 字符串 url,MUST 将 URL parser [url] 应用于 url, 并以包 文档的内容 URL作为 base。
package 元素封装包文档中表达的所有信息。
package
按以下顺序:
version 属性指定给定
EPUB 出版物所符合的 EPUB 规范
版本。该属性 MUST 具有值
“3.0”,以表示符合 EPUB 3。
本规范的更新并不代表 EPUB 3 的新版本(即每个新的 3.X
规范都是 EPUB 3 格式的延续)。工作组致力于
尽量减少会使现有内容失效的任何变更,从而允许 version
属性值保持不变。
unique-identifier 属性取一个 IDREF
[xml],用于标识提供首选或主要
标识符的
元素。
dc:identifier
prefix 属性为未被本规范保留的
前缀提供一种声明机制。更多信息请参阅
D.1.4 prefix
属性。
metadata 元素封装元信息。
metadata
的 REQUIRED 第一个子元素。
package
无
任意顺序:
dc:identifier[一个或多个]
dc:title[一个或多个]
dc:language[一个或多个]
Dublin Core 可选元素
[0 个或多个]
meta[一个或多个]
link[0 个或多个]
包文档的 metadata 元素有两个
主要功能:
包文档不提供复杂的元数据编码能力。如果 EPUB 创建者需要提供更详细的信息,
他们可以使用
元素关联元数据记录(例如,
符合 [onix] 等国际标准的记录,
或为自定义目的创建的记录)。
这种方法允许阅读系统以元数据的原生形式处理它,
从而避免转换为最小包文档结构所可能带来的问题和信息丢失。
link
秉持这一理念,包文档只有以下
最小元数据要求:它 MUST 包含 [dcterms]
、
dc:title
和
dc:identifier
元素,以及 [dcterms]
dc:language
属性。所有其他元数据均为 OPTIONAL。
dcterms:modified
元素提供了一种通用机制,用于包含来自任何词汇表的元数据属性。
虽然 EPUB 创建者 MAY 将此机制用于任何元数据目的,
但他们通常会用它来包含 EPUB 规范中定义的渲染元数据。
meta
有关无障碍元数据建议,请参阅 [epub-a11y-11]。
Dublin Core 元素 [dcterms] 和
元素具有强制的子文本内容
[dom]。在这些元素的描述中,本
规范将此内容称为
该元素的值。
meta
这些元素在前导和尾随 ASCII 空白 [infra] 被去除后,MUST 具有非空值(即它们必须至少包含一个 非空白字符)。
dc:identifier 元素 [dcterms] 包含一个
标识符,例如 UUID、DOI 或 ISBN。
dc:identifier
http://purl.org/dc/elements/1.1/
的 REQUIRED 子元素。
可重复。
metadata
id
[有条件地必需]
文本
EPUB 创建者 MUST 在
dc:identifier 元素中提供一个只唯一对应一个
EPUB 出版物的标识符——其唯一标识符。
此 dc:identifier 元素 MUST 指定一个
id 属性,其
值由
元素的 packageunique-identifier
属性引用。
虽然唯一标识符并非静态不变,但 EPUB 创建者应尽可能少地更改 EPUB 出版物的唯一标识符。唯一标识符在引用和分发目的上都应具有最大的 持久性。EPUB 创建者在进行更新元数据、修正 勘误或类似轻微变更等小修订时,不应 发布新的标识符。
EPUB 创建者 MAY 指定附加标识符。
建议 EPUB 创建者尽可能使用absolute-URL strings [url] 作为标识符。例如,包含 EPUB 创建者拥有的域名可以提高标识符的唯一性,而使用带有 命名空间 标识符的 URN [rfc8141] 可改善阅读 系统的处理。
EPUB 创建者 MAY 使用 identifier-type
属性来表明 dc:identifier 元素的值
符合某个既有系统,或由某个签发机构授予。
dc:title 元素 [dcterms] 表示
EPUB 出版物名称的一个
实例。
dc:title
http://purl.org/dc/elements/1.1/
的 REQUIRED 子元素。
可重复。
metadata
文本
文档顺序中的第一个 dc:title 元素是 EPUB 出版物的主
标题(即阅读系统呈现给用户的主要标题)。
EPUB 创建者应仅使用一个
dc:title 元素,以确保
标题在阅读系统中一致渲染。
虽然可以为多部分标题包含多个 dc:title 元素,
但阅读系统对附加 dc:title
元素的支持并不一致。阅读系统可能会忽略附加段落,或
以意外方式组合它们。
例如,以下示例展示了一个基本的多部分标题:
<metadata …>
<dc:title>
THE LORD OF THE RINGS
</dc:title>
<dc:title>
Part One: The Fellowship of the Ring
</dc:title>
…
</metadata>
同一标题也可以改用单个 dc:title
元素表示,如下所示:
<metadata …>
<dc:title>
THE LORD OF THE RINGS, Part One:
The Fellowship of the Ring
</dc:title>
…
</metadata>
本规范的先前版本建议使用 title-type 和 display-seq 属性来标识并
格式化多部分标题的各段(参见 Great
Cookbooks 示例)。仍然可以添加这些语义,但它们
也未得到良好支持。
dc:language 元素 [dcterms] 指定
EPUB 出版物内容的
语言。
dc:language
http://purl.org/dc/elements/1.1/
的 REQUIRED 子元素。
可重复。
metadata
id
[可选]
文本
每个 dc:language 元素的值 MUST 是一个格式良好的语言标签
[bcp47]。
虽然 EPUB 创建者 MAY 为
多语言出版物指定附加的 dc:language 元素,但
阅读系统会将文档顺序中的第一个
dc:language 元素视为
EPUB 出版物的主要语言。
出版物
资源不会从
dc:language 元素继承其语言。EPUB 创建者必须使用该格式的内在方法设置
资源的语言。
除
、
dc:identifier
和
dc:language
之外的所有 [dcterms] 元素均被指定为
OPTIONAL。这些元素符合以下
通用定义:
dc:title
dc:contributor | dc:coverage | dc:creator
| dc:date | dc:description | dc:format |
dc:publisher | dc:relation |
dc:rights | dc:source | dc:subject |
dc:type
http://purl.org/dc/elements/1.1/
的 OPTIONAL 子元素。
可重复。
metadata
文本
除以下小节中说明的情况外,本规范不修改 [dcterms] 元素 定义。
dc:contributor 元素 [dcterms] 用于表示在内容创建中发挥次要作用的
个人、组织等的名称。
dc:contributor 元素的要求在所有其他方面均与
元素的要求相同。
dc:creator
dc:creator
元素 [dcterms] 表示负责创建内容的
个人、组织等的名称。EPUB 创建者 MAY
将 role 属性关联到该元素,以表明创建者所发挥的
作用。
dc:creator 元素应包含 EPUB
创建者希望阅读系统向用户
显示的创建者名称。
EPUB 创建者 MAY 使用 file-as
属性
关联创建者名称的规范化形式,并使用
alternate-script 属性表示
另一种语言或文字中的创建者名称。
如果一个 EPUB 出版物有多个创建者,
EPUB 创建者应在单独的 dc:creator 元素中指定每一个。
metadata 节中 dc:creator 元素的文档顺序
决定显示优先级,其中遇到的第一个 dc:creator 元素
是主要创建者。
EPUB 创建者应使用
元素表示次要贡献者。
dc:contributor
dc:date 元素
[dcterms] 定义
EPUB 出版物的出版日期。出版日期与
最后修改日期不同(后者是
EPUB 创建者最后一次更改 EPUB 出版物的时间)。
RECOMMENDED 日期字符串符合 [iso8601-1], 尤其是 W3C Date and Time Formats [datetime] 中表示的子集,因为此类字符串既便于人类阅读, 也便于机器读取。
EPUB 创建者应使用 [dcterms] 词汇表中可用的专用日期属性, 或类似属性来表示附加日期。
EPUB 出版物 MUST NOT 包含超过一个
dc:date 元素。
dc:subject
元素 [dcterms] 标识
EPUB 出版物的主题。EPUB
创建者应将该元素的值设置为
人类可读的标题或标签,但如果主题分类法没有
提供单独的描述性标签,则可以使用代码值。
EPUB 创建者 MAY 使用 authority 属性
标识其从中取得该元素值的系统或方案。
当标识了方案时,EPUB 创建者 MUST 使用
term 属性关联主题代码。
term 属性 MUST NOT 关联到未指定方案的
dc:subject 元素。
dc:subject 元素和
term 属性的值仅在指定方案要求时
区分大小写。
dc:type 元素
[dcterms] 用于指示 EPUB 出版物属于某种专门类型
(例如,以 EPUB 格式打包的注释或词典)。
前 IDPF EPUB 3 工作组曾维护一个用于此元素的 专门 EPUB 出版物类型非规范性注册表。 本工作组不再维护该注册表,也不预期开发新的专门出版物类型。
meta 元素提供了一种通用方式,用于包含包元数据。
meta
作为
元素的子元素。可重复。
metadata
文本
每个 meta 元素定义一个元数据表达式。
property 属性取一个定义该表达式所作陈述的
property
数据类型值,而元素的文本内容
表示断言。(更多
信息请参阅 D.1 词汇表关联机制。)
本规范定义了两种元数据表达式类型,EPUB 创建者可以使用 meta
元素定义它们:
meta 元素中定义的表达式确立了 EPUB 出版物某个方面的表达式。省略
refines 属性的 meta 元素定义一个主要
表达式。
meta 元素中定义的表达式使用
refines 属性与另一个表达式或资源关联,以增强其含义。子表达式可以细化一个
媒体片段,例如,通过表示其持续时间;或细化一个创建者或贡献者
表达式,通过定义该人的角色。
EPUB 创建者 MAY 使用子表达式来细化其他 子表达式的含义,从而 创建信息链。
所有 [dcterms] 元素都表示主要表达式, 并允许通过 meta 元素子表达式进行细化。
Meta Properties Vocabulary 是与 property
属性一起使用的默认词汇表。
EPUB 创建者 MAY 按 D.1 词汇表关联 机制中的定义,添加来自其他词汇表的术语。
scheme 属性标识 EPUB
创建者从中取得元素值的系统或方案。该属性的值
MUST 是一个 property 数据类型
值,并解析为定义该方案的
资源。scheme 属性没有默认词汇表(即所有值都需要一个
前缀)。
metadata 节 MUST 恰好包含一个
dcterms:modified
属性 [dcterms],
其中包含最后修改日期。此属性的值 MUST 是 [iso8601-1]
中日期和一天中时间的完整表示,并匹配扩展格式:
YYYY-MM-DDThh:mm:ssZ
EPUB 创建者 MUST 以协调世界时 (UTC) 表示
最后修改日期,并且
MUST 以“Z”(Zulu)时区指示符结束。
EPUB 创建者每当对 EPUB 出版物进行更改时,都应更新最后修改日期。
EPUB 创建者 MAY 在包文档元数据中指定附加的 modified 属性,
但它们 MUST 具有不同的主语(即它们需要一个
refines 属性,用于
引用某个元素或资源)。
对最后修改日期的要求是为了确保与 EPUB 3 早期版本兼容, 这些早期版本为 EPUB 出版物定义了一个发布 标识符 [epubpackages-32]。
link 元素将资源(例如元数据
记录)与 EPUB
出版物关联起来。
link
作为
的子元素。
可重复。
metadata
href
[必需]
hreflang
[可选]
id
[可选]
media-type
[有条件地必需]
properties
[可选]
refines
[可选]
rel
[必需]
空
元素 MAY 包含零个或多个 metadatalink 元素,每个元素
都在其 REQUIRED
href 属性中标识一个出版物资源或一个链接资源的位置。
从 link 元素引用的资源,仅在以下情况下才是
出版物资源:
从 spine 引用;或
包含或嵌入在 EPUB 内容文档中(例如,序列化为
RDFa [rdfa-core] 或 JSON-LD [json-ld11] 并嵌入
[html] script
元素中的元数据记录)。
在所有其他情况下(例如,链接到独立的 [onix] 记录时),所引用的 资源不是出版物资源(即不受核心 媒体类型要求约束),并且 EPUB 创建者 MUST NOT 将它们列入 manifest。
EPUB 创建者 MAY 将链接资源放置在 EPUB 容器 内部或外部,但应考虑到 阅读系统不被要求检索 EPUB 容器之外的资源。
当链接资源位于
EPUB 容器之外时,media-type
属性是 OPTIONAL,因为
同一 URL [url] 可以提供多种媒体类型。EPUB 创建者
MUST 为 EPUB 容器内的所有链接资源指定
该属性。
OPTIONAL hreflang 属性
标识链接资源的语言。该值 MUST 是一个格式良好的语言
标签 [bcp47]。
REQUIRED rel 属性取一个
以空格分隔的属性值列表,用于确立链接
资源与 EPUB 出版物之间的关系。
media-type 属性的值并不总是足以标识链接资源的类型
(例如,许多基于 XML 的记录格式使用媒体类型
“application/xml”)。为帮助阅读系统标识此类
通用资源,EPUB 创建者 MAY 在
properties 属性中指定一个语义标识符。
Metadata Link Vocabulary 是用于 rel 和
properties 属性的默认词汇表。
EPUB 创建者 MAY 按 D.1 词汇表 关联机制中的定义,添加来自其他词汇表的关系和属性。
EPUB 创建者 MAY 提供一个或多个链接元数据记录。
由于 EPUB 创建者可以链接到 EPUB 出版物的元数据记录格式和序列化种类繁多, 并且在它们之间比较元数据属性非常复杂, 本规范不要求阅读系统处理链接记录。
除完整记录外,EPUB 创建者 MAY 还可以使用
link 元素来标识
以替代格式提供的单个元数据属性。
manifest 元素提供用于渲染内容的出版物资源的完整列表。
除包
文档外,
manifest MUST 列出所有出版物资源,无论它们是
容器资源还是远程资源。
由于包文档已经由 container.xml 文件标识,
manifest MUST NOT 为其指定 item 元素
(即,自引用没有任何作用)。
manifest 仅用于列出出版物资源。链接资源和用于处理 OCF
容器的特殊文件(即 META-INF 目录中的文件,以及
mimetype 文件)被禁止包含其中。
未能提供完整的出版物资源 manifest 可能会导致渲染问题。 阅读系统可能不会解压此类 资源,或可能出于 安全原因阻止访问它们。
item 元素表示一个出版物资源。
item
作为
的子元素。
可重复。
manifest
fallback
[有条件地必需]
href
[必需]
id
[必需]
media-overlay
[可选]
media-type
[必需]
properties
[可选]
空
每个 item 元素通过其
href
属性中的 URL [url] 标识一个出版物资源。该值 MUST 是
absolute- 或 path-relative-scheme-less-URL
string [url]。EPUB 创建者
MUST 确保每个 URL 在解析后在
manifest 作用域内唯一。
item 元素所标识的出版物资源
MUST 符合由 media-type 属性中提供的
MIME
媒体类型 [rfc2046]
推断出的适用规范。对于核心媒体类型资源,EPUB 创建者 MUST 使用 3.2 核心媒体类型中指定的媒体类型。
fallback 属性指定被引用出版物资源的回退。
fallback 属性的 IDREF [xml]
值
MUST 解析为
manifest 中的另一个 item。
一个 item 的回退 MAY 指定回退到另一个
item,依此类推,从而创建一条回退选项链。有关使用回退链的
附加要求,请参阅 3.5.1 Manifest
回退。
media-overlay 属性取一个 IDREF [xml],
用于标识此
item 所描述资源的媒体叠加文档。
更多信息请参阅 9.3.5
媒体叠加打包。
manifest 中 item 元素的顺序没有意义。
元素提供内容文档的呈现序列。
spine
properties 属性向阅读系统提供有关资源内容的信息。
此信息支持发现
关键资源,例如封面图像和 EPUB 导航文档。它还允许
阅读系统通过指示资源是否包含嵌入脚本、MathML 或 SVG 等,来优化渲染。
Manifest Properties
Vocabulary 是
properties 属性的默认词汇表。
每当 item 元素引用的资源符合相应定义时,EPUB 创建者 MUST 设置以下属性:
这些属性不会递归地应用于包含进某个资源的内容(例如,通过
[html]
iframe
元素)。例如,如果一个非脚本化的 XHTML 内容文档
嵌入了一个脚本化内容
文档,则只有被嵌入文档的 manifest
item
properties 属性会具有 scripted 值。
EPUB 创建者 MUST 使用 nav 属性
将且仅将一个 item 声明为 EPUB
导航文档。
如果 EPUB 出版物包含封面图像,建议设置
cover-image 属性,但设置此属性
是 OPTIONAL。
EPUB 创建者 MAY 按 D.1 词汇表关联 机制中的定义,添加来自其他词汇表的术语。
bindings 元素定义一组用于本规范不支持的媒体类型的自定义处理器。
使用该元素已弃用。
更多信息请参阅 [epubpublications-301] 中的
bindings
元素定义。
spine 元素定义一个有序的manifest
item 引用列表,用于表示默认阅读顺序。
spine MUST 指定至少一个
EPUB 内容文档或外来内容文档。
EPUB 创建者 MUST
在 spine 中列出从
spine 中的出版物资源超链接到的所有 EPUB 和
外来内容文档,其中超链接包括任何要求
用户离开当前资源进行导航的链接机制。常见的超链接机制包括
[html]
a
和
area
元素的
href
属性,以及脚本化链接(例如,使用
DOM 事件和/或表单元素)。列出被超链接资源的要求会
递归适用(即 EPUB 创建者必须列出从被超链接文档超链接到的
所有 EPUB 和外来内容文档,依此类推)。
EPUB 创建者还 MUST 在 spine 中列出从
EPUB 导航文档超链接到的所有 EPUB 和外来
内容文档,
无论 EPUB 创建者是否
将 EPUB 导航文档包含在 spine 中。
page-progression-direction
属性设置内容流动的全局方向。允许的值为
ltr(从左到右)、rtl(从右到左)和 default。
当 EPUB 创建者指定 default 值时,表示他们没有偏好,
阅读系统可以选择渲染方向。
虽然 page-progression-direction 属性设置全局流动方向,
但单个 EPUB 内容文档以及 EPUB 内容文档的部分内容 MAY
覆盖此设置
(例如,通过 writing-mode CSS 属性)。阅读系统也可以提供
覆盖默认方向的机制(例如,允许应用
备用样式表的按钮或设置)。
itemref 元素在默认阅读顺序中标识一个EPUB 内容文档或外来内容文档。
itemref
作为
的子元素。
可重复。
spine
id
[可选]
idref
[必需]
linear
[可选]
properties
[可选]
空
每个 itemref 元素 MUST 通过其
idref 属性中的
IDREF [xml],
引用 manifest 中某个
的 ID [xml]。
itemitem 元素 ID MUST NOT 被引用超过一次。
每个被引用的 manifest item MUST
是以下二者之一:a) 一个
EPUB 内容文档,或 b) 一个在其
manifest 回退链中包含 EPUB
内容
文档的外来内容文档。
虽然 EPUB 出版物需要 EPUB 导航 文档,但不强制要求将其包含在 spine 中。
linear 属性表示所引用的
item 是否包含有助于主要阅读顺序并且
阅读系统必须按顺序读取的内容
(“yes”),或辅助内容,
这些内容增强或补充主要内容,阅读系统可在顺序之外访问
(“no”)。辅助内容的示例包括注释、描述和
答案
键。
linear 属性允许阅读系统区分用户
应作为默认阅读顺序的一部分访问的内容与补充内容,阅读
系统可以例如在弹出窗口中呈现这些补充内容,或在听觉渲染中省略它们。
指定内容为非线性并不要求阅读系统以 特定方式呈现它;不过,它只是对目的的提示。阅读系统可以在 非线性内容出现在 spine 中的位置呈现它,例如,也可以跳过它,直到用户到达 spine 末尾。
EPUB 创建者应将非线性内容列在 spine 末尾,除非让用户在两个线性 spine 项之间遇到它 是有意义的。
线性 itemref 元素是指其 linear
属性值显式设置为“yes”,或省略该
属性的元素 — 阅读系统会为没有该属性的
itemref 元素假定值“yes”。spine MUST 包含
至少一个
线性 itemref 元素。
EPUB 创建者 MUST 提供一种 访问所有非线性内容的方式(例如,内容中的超链接,或来自 EPUB 导航文档的超链接)。
Spine Properties
Vocabulary 是
properties 属性的默认词汇表。
EPUB 创建者 MAY 按 D.1 词汇表关联 机制中的定义,添加来自其他词汇表的术语。
collection 元素定义一组相关资源。
collection
package 的 OPTIONAL 第六个元素。可重复。
按以下顺序:metadata
[0 或 1],(
collection[一个或多个] 或 (
collection[0 个或多个],link
[一个或多个] ))
collection 元素允许 EPUB 创建者
将资源组装成逻辑
组,以用于各种潜在用途:将拆分在多个 EPUB 内容文档中的内容
重新组装为有意义的内容单元(例如,
分布在多个文档中的索引)、标识用于专门目的的资源(例如,预览内容),或
收集呈现有关 EPUB 出版物的附加信息的资源。
EPUB 创建者 MUST 在每个
collection
元素的 role 属性中标识其角色,该属性的值 MUST 是一个或多个
NMTOKEN
[xmlschema-2] 和/或
absolute-URL-with-fragment
strings [url]。
编写专门集合的要求由其各自的规范定义。
创建新的 collection 元素角色现已弃用。
有关创建专门集合的更多
信息(包括其使用要求和
限制),请参阅 [epubpackages-32] 中的
collection
元素定义。
包文档的 legacy 特性仅从 EPUB 2 保留下来,以允许 EPUB 创建者创作能够在一定 程度上在阅读系统中运行的内容, 这些阅读系统仅支持 EPUB 2 出版物。
这些特性主要是为了解决 EPUB 3 阅读系统开发期间的重叠时期而添加的, 因为当时用户仍有很高概率会在 EPUB 2 阅读系统上打开 EPUB 3 出版物。
由于现在仅处理 EPUB 2 出版物的阅读系统已经很少见,EPUB 创建者在投入精力 添加这些旧版特性之前,应考虑其出版物仍会在这类较旧设备上 打开的可能性。
EPUB 创建者 MAY 为与 EPUB 2 阅读系统兼容 而包含本节中定义的旧版特性。
EPUB 3 阅读系统在向用户呈现出版物时不会使用这些特性。
EPUB 一致性检查器不应 因 EPUB 出版物中存在旧版 特性而提醒 EPUB 创建者,因为包含这些特性对于向后 兼容是有效的。如果旧版特性不 符合其定义或以其他方式违反使用要求,EPUB 一致性检查器必须提醒 EPUB 创建者。
meta
元素 [opf-201] 提供一种为 EPUB 2
阅读系统包含
通用元数据的方式。
更多
信息请参阅 [opf-201] 中的
meta
元素定义。
EPUB 3
元素使用不同的属性并要求文本内容,
它为 EPUB 3 阅读系统提供元数据能力。
meta
[opf-201] meta 元素
还允许 EPUB 创建者为 EPUB 2 阅读系统标识封面
图像。在 EPUB 3 中,必须使用图像的 manifest
上的 itemcover-image 属性来标识封面图像。
guide
元素 [opf-201] 为
EPUB 2 阅读系统中的关键结构提供机器可处理的
导航。
更多信息请参阅 [opf-201] 中的
guide 元素
定义。
landmarks nav 在 EPUB 导航文档中 为 EPUB 3 阅读系统提供此功能。
NCX [opf-201] 为 EPUB 2 阅读系统提供目录。
EPUB 导航文档取代 EPUB 3 阅读 系统中的 NCX。
本节是非规范性的。
本节定义了用于创建XHTML 内容文档的 [html] 配置文件。符合此配置文件的 XML 文档实例是一个核心媒体类型资源,并在本规范中称为 XHTML 内容文档。
一个XHTML 内容文档:
MUST 符合 [html] 为所有 文档构造定义的一致性 标准,除非在 6.1.4 HTML 偏离和约束中被明确覆盖。
MAY 包含按 6.1.3 HTML 扩展中定义的 [html] 语法扩展,并且 MUST 符合其中定义的所有内容一致性约束。
除非另有规定,XHTML 内容文档继承 [html] 规范中关于语义、 结构和处理行为的所有定义。
建议 EPUB 出版物遵循 [epub-a11y-11] 中的无障碍要求,这同样适用于 XHTML 内容 文档。参见无障碍。
本节定义 EPUB 3 XHTML 内容文档对底层 [html] 文档模型的扩展。
EPUB 创建者 MAY 在
XHTML 内容文档中使用
属性来
表达结构语义。
epub:type
[html-rdfa] 规范定义了一组 属性,EPUB 创建者 MAY 在 XHTML 内容文档中使用这些属性以在语义上 丰富内容。这些属性的使用 MUST 符合 [html-rdfa] 中定义的要求。
[html-rdfa] 规范定义了作者 使用 RDFa 属性时对 [html] 内容模型的更改。此修改后的内容模型在 XHTML 内容文档中有效。
列出 RDFa 并不表示工作组的偏好,只是表明这些属性表示 HTML 语法的扩展。EPUB 创建者也可以 在 XHTML 内容文档中指定microdata 属性 [html] 和链接数据 [json-ld11], 因为二者都受原生支持。
switch 元素提供一种简单机制,EPUB 创建者
可通过该机制定制显示给用户的内容,并且它不依赖于
EPUB 阅读系统的脚本
能力。
使用该元素已弃用。
更多信息请参阅 [epubcontentdocs-301] 中的switch
元素定义。
trigger 元素能够创建由标记定义的用户界面,用于在脚本化和
非脚本化上下文中控制多媒体对象,例如音频和视频播放。
使用该元素已弃用。
更多信息请参阅 [epubcontentdocs-301] 中的epub:trigger
元素定义。
XHTML 内容文档 MAY 包含自定义属性,这些属性是带前缀的 [xml-names] 属性,其命名空间 URL 在其域 [url] 中不包含以下任一字符串:
w3.orgidpf.org使用自定义属性时,无论内容在哪个阅读系统上渲染,内容 MUST 仍可被用户消费,且不得有任何 信息丢失或其他显著劣化。
自定义属性通常以阅读系统特定的方式定义,并不 旨在供其他阅读系统使用。本规范应被扩展,以 提供多个独立阅读系统都可以使用的扩展。
本节定义适用于 EPUB 3 XHTML 内容文档的底层 [html] 文档 模型的偏离和约束。
XHTML 内容文档支持嵌入式 [mathml3]。 MathML 标记的出现 MUST 符合 MathML 规范 [mathml3] 中表达的约束,并带有 以下附加限制:
math 元素 MUST
仅包含 Presentation MathML,但
annotation-xml 元素内除外。
EPUB
创建者 MAY 在 XHTML 内容文档中的 MathML 标记内包含
Content MathML,并且在存在时
MUST 将其包含在 semantics
元素的
annotation-xml 子元素内。
当 EPUB 创建者按
前一条件包含 Content MathML 时,他们 MUST 将给定
annotation-xml
元素的 encoding 属性设置为两个功能等价
值 MathML-Content 或 application/mathml-content+xml 之一,
并将 name 属性设置为 contentequiv。
XHTML 内容文档支持嵌入 SVG:
img
或
object
元素。通过引用嵌入的 SVG 是 SVG
核心媒体类型,因此其要求已在 6.2 SVG
内容文档中定义。
本节是非规范性的。
[html] base
元素可用于指定文档基 URL,以用于
解析 URL。在 EPUB 出版物中使用它时,
对 base 元素的解释可能会无意中导致对远程资源的引用。它也可能导致阅读系统误解
超链接的位置(例如,如果 base 元素指定绝对 URL,
指向出版物中其他文档的相对链接可能会显示为
指向某个网站的链接)。为避免
严重的互操作性问题,EPUB
创建者不应使用
base 元素。
[html]
rp
元素旨在为不识别 ruby 标记的较旧阅读系统提供回退
(即,在 ruby 标记周围显示括号)。由于 EPUB 3 阅读系统了解 ruby,
并且可以提供回退,EPUB 创建者不应使用
rp 元素。
由于 [html] embed
element 元素不包含用于为不支持脚本的阅读系统提供回退
内容的内在设施,当被引用资源包含脚本时,不鼓励 EPUB 创建者使用该元素。
[html]
object
元素是更好的替代方案,因为它包含内在的回退
能力。
本节是非规范性的。
Scalable Vector Graphics (SVG) 规范 [svg] 定义了一种用于表示 最终形式矢量图形和文本的格式。
虽然 EPUB 创建者通常使用 XHTML 内容文档作为 顶层文档类型,但也允许使用 SVG 内容文档。EPUB 创建者通常只会在某些特殊情况下需要 SVG,例如当最终形式页面图像是内容的唯一合适表示时(例如, 封面图或漫画、连环漫画情境)。
本节定义 [svg] 文档的配置文件。符合此配置文件的 XML 文档实例是一个 核心媒体类型资源,并在本 规范中称为SVG 内容文档。
本节定义 SVG 内容文档的一致性要求。有关嵌入在 XHTML 内容文档中的 SVG 的一致性要求,请参阅 6.1.4.2 嵌入式 SVG。
SVG 内容文档 MUST 是一个符合要求的 SVG 独立文件 [svg],并符合 6.2.3 SVG 限制中表达的所有内容一致性约束。
建议 EPUB 出版物遵循 [epub-a11y-11] 中的无障碍要求,这同样适用于 SVG 内容 文档。参见无障碍。
本规范按如下方式限制SVG 内容文档和通过包含嵌入在 XHTML 内容文档中的 SVG的内容模型:
[svg] foreignObject
元素:
MUST 包含
[html] 流式内容,或恰好一个 [html] body 元素。
对于通过包含嵌入的 SVG,
根据 [html] 中定义的
SVG 限制,
不允许使用 body 元素。
MUST 包含一个 有效的文档片段, 该片段符合 6.1.2 XHTML 要求中定义的 XHTML 内容文档模型。
如果 [svg]
title
元素包含
带标记的文本,则该标记 MUST 仅包含在
HTML 命名空间 [infra]
中声明的元素。
指定时,
属性 MUST
只能包含在可渲染元素 [svg]
上。
epub:type
SVG 内容模型允许作者包含
带命名空间的属性,因此本规范无需允许
属性或词汇表关联
机制。
epub:type
不过,通过引用嵌入和通过包含嵌入的 SVG 之间的一个关键区别是:
通过包含嵌入的 SVG 不能在其根
svg
元素上具有 epub:prefix 属性
[svg]。更多信息请参阅 D.1.4
prefix 属性。
本节定义可同时用于 XHTML 和 SVG 内容文档的技术要求。
本节是非规范性的。
CSS 是开放 Web 平台不可或缺的一部分。读者、出版商和文档作者都 期望 CSS“即开即用”,正如他们期望 HTML 即开即用一样。
过去,EPUB 定义了一个 CSS 配置文件,强制支持某些属性,并 为许多其他属性提供带前缀的版本。虽然 CSS 工作组不再 建议使用带前缀的属性,但本规范保留了一些带前缀的 属性,以避免破坏现有内容。但除本 节中定义的少数例外外,EPUB 将 CSS 的定义交由 W3C。
请记住,一些阅读系统不会支持 CSS 的所有 所需特性。 以下问题已知尤其突出:
阅读系统引起的分页可能与样式表产生不良交互,因为 阅读系统有时会使用列进行分页。这可能导致视口大小的 值不正确。固定定位和绝对定位尤其 成问题。
某些类型的屏幕会较差地渲染动画和过渡(例如, 高延迟屏幕)。
CSS 样式表:
MAY 包含任何 CSS 属性,但有以下 例外:
它 MUST NOT 包含
direction
属性 [css-writing-modes-3]。
它 MUST NOT
包含 unicode-bidi
属性 [css-writing-modes-3]。
MAY 包含 6.3.1.3 带前缀的属性中定义的带前缀属性。
MUST 以 UTF-8 或 UTF-16 [unicode] 编码,其中 UTF-8 是 RECOMMENDED 编码。
早期版本的 EPUB 包含带前缀的 CSS 属性,因为许多与 世界语言相关的 CSS 特性当时尚未成熟。为确保使用这些前缀创作的内容 具备向后兼容性,它们已保留在本规范中。除非另有说明, 带前缀的属性和值的行为与相应 CSS 规范中描述的 无前缀等价项完全相同。带前缀的属性记录在 E. 带前缀的 CSS 属性中。
EPUB 创建者应使用无前缀属性,且 阅读系统应支持 当前 CSS 规范。本规范保留了 [epubcontentdocs-301] 中广泛使用的带前缀 属性,但移除了 对使用较少属性的支持。只要有可用方案,EPUB 创建者就应对被移除的属性使用 CSS 原生解决方案。
工作组建议当前使用这些带前缀属性的 EPUB 创建者 在支持条件允许时尽快迁移到无前缀版本,因为工作组不 预期在 EPUB 的下一个主要版本中支持它们。
EPUB 内容文档 MAY
使用相应底层规范([html] 和 [svg])为此定义的设施包含脚本。
当 EPUB 内容文档
包含脚本时,本规范将其称为脚本化内容文档。此
标签也适用于包含 [html]
form
元素的XHTML 内容文档。
scripted 属性用于
manifest item 元素,
以指示 EPUB 内容文档是一个
脚本化内容文档。
当 [html] script 元素包含数据
块 [html] 时,它不表示脚本化内容。
截至发布时,[svg] 尚未定义数据块,但如果未来更新加入该概念, 同样的排除也将适用。
EPUB 创建者应注意,阅读系统被要求表现为仿佛 每个 EPUB 出版物都已被分配一个唯一的 源 [html]。在实践中,这意味着 脚本不可能在 EPUB 出版物之间共享数据。
脚本在哪个上下文中使用,也决定了 阅读系统对其施加的权利和限制(更多 信息请参阅 脚本 [epub-rs-33])。
阅读系统可能以禁用其他 EPUB 能力和/或提供不同渲染与用户体验的方式 渲染脚本化内容文档(例如,通过 禁用分页)。
EPUB 3 定义了两种脚本执行上下文:
脚本可以在其他上下文中执行,但阅读系统对这些
上下文的支持
是可选的。例如,可以从 [html]
object
元素引用脚本化 SVG 文档。
更多信息请参阅 脚本处理 [epub-rs-33]。
EPUB 创建者是将代码直接嵌入
script 元素,还是
通过该元素的 src 属性引用代码,对其
执行上下文没有区别。
EPUB 创建者为其脚本使用哪种上下文,会影响脚本可以 执行哪些操作,以及阅读系统支持的可能性,如以下 小节所述。
有关这两种上下文之间差异的示例,请参阅 H.2 脚本上下文。
容器受限脚本是以下二者之一:
[html]
script
元素的一个实例,该元素包含在
XHTML
内容文档中,而该 XHTML 内容文档使用
[html]
iframe
元素嵌入在另一个 XHTML 内容文档中。
[svg] script
元素的一个实例,该元素包含在
SVG 内容文档中,而该
SVG 内容文档使用
[html]
iframe
元素嵌入在 XHTML 内容文档中。
容器受限脚本 MUST
NOT 包含
用于修改嵌入它的EPUB 内容文档的 DOM 的指令
(即,包含 iframe 元素的文档)。它还 MUST NOT 包含
用于操纵其包含矩形大小的指令。
EPUB 创建者应注意,阅读系统中对容器受限脚本的支持仅建议用于 可重排文档 [epub-rs-33]。此外,阅读系统对 固定布局文档中的支持是可选的。
EPUB 创建者应确保容器受限脚本在不支持脚本的阅读 系统中优雅降级(参见 6.3.2.5 脚本回退)。
选择将脚本使用限制为容器受限模型的 EPUB 创建者,将确保 脚本化和非脚本化内容之间获得更一致的用户体验 (例如,一致的分页行为)。
spine 级别脚本是包含在顶层内容文档中的
[html]
script
或 [svg] script
元素的实例。
EPUB 创建者应注意,阅读系统对 spine 级别脚本的支持仅建议用于固定布局文档 和设置为滚动的可重排文档 [epub-rs-33]。此外,阅读系统 在所有其他上下文中的支持 是可选的。
包含 spine 级别 脚本的顶层内容文档 SHOULD 在脚本被禁用或不可用时,仍能被用户消费,且没有任何 信息丢失或其他 显著劣化(例如,通过 采用渐进增强技术或回退)。在顶层 内容文档中未考虑非脚本化 环境可能导致 EPUB 出版物不可读。
本节是非规范性的。
EPUB 创建者在为其 EPUB 出版物添加脚本功能时,应考虑各种各样可能的阅读系统 实现(例如, 并非所有设备都有物理键盘,而且在许多情况下软键盘只会 为文本输入元素激活)。因此,EPUB 创建者不应仅依赖键盘事件; 他们应始终提供触发所需操作的替代方式。
包含脚本的EPUB 内容文档 SHOULD 采用 相关的 [wai-aria] 无障碍技术,以确保内容仍可被 所有用户消费。
包含脚本的EPUB 内容文档
MAY
为此类内容提供回退,可以使用内在回退机制(例如
[html]
object
和
canvas
元素可用的回退机制),或在内在
回退不适用时,使用manifest 级别
回退。
本节是非规范性的。
并非所有渲染信息都能通过 EPUB 所基于的底层技术来表达。例如,虽然带 CSS 的 HTML 提供了强大的布局能力,但这些能力仅限于正在渲染的文档范围。
本节定义了一些属性,使 EPUB 创建者能够表达包级别的 渲染 意图(即只能由 EPUB 阅读系统实现的功能)。如果 阅读系统支持所需的渲染,这些属性就能让用户看到 EPUB 创建者最优设计的内容。
本节是非规范性的。
EPUB 出版物与印刷书籍或 PDF 文件不同,其设计目标是 可以变化。内容 会流动,或重排,以适应屏幕并适应用户的需要。正如 渲染和 CSS中所述,“内容呈现 会适应用户,而不是让用户不得不适应某种特定的 内容呈现。” [epub-overview-33]
但这一原则并不适用于所有类型的文档。有时内容和设计交织得如此 紧密,以至于无法将二者分离。任何外观变化都有改变 含义或丧失全部含义的风险。固定布局文档在可重排 EPUB 不适合内容时,给予 EPUB 创建者对呈现更大的控制权。
EPUB 创建者使用一组包文档 属性来定义固定布局,以控制阅读系统中的渲染。此外,他们还会在各自的 EPUB 内容文档中设置每个固定布局文档的尺寸。
EPUB 3 提供了多种表示固定布局内容的机制。当固定布局 内容是必要的时,EPUB 创建者选择哪种机制将取决于许多因素, 包括所需的精确程度、文件大小、无障碍性等。本节并不 试图规定 EPUB 创建者应选择哪种机制。
rendition:layout 属性指定内容是可重排的,还是
预分页的。
当在 meta 元素上指定
rendition:layout
属性时,它表示分页或可重排布局样式全局适用(即适用于所有 spine 项)。
EPUB 创建者 MUST 对
rendition:layout
属性使用以下值之一:
内容不是预分页的(即,阅读系统在渲染时应用动态分页)。 默认值。
阅读系统通常会限制或拒绝将用户或用户代理样式 表应用到预分页文档,因为动态样式更改很可能对这类文档的 内在属性产生意外后果。EPUB 创建者在选择使用预分页内容 而不是可重排内容时,应考虑这些 限制对可用性和无障碍性的负面影响。 相关信息请参阅 指南 1.4 - 提供文本 配置 [uaag20]。
当某个 spine 项的属性被设置为
pre-paginated 时,其内容尺寸 MUST 按
8.2.2.6
内容文档尺寸中定义的方式设置。
EPUB 创建者 MUST NOT 声明
rendition:layout 属性超过一次。
他们还 MUST NOT 使用 refines
属性声明该属性。有关
为单个EPUB 内容文档设置该属性的信息,请参阅
8.2.2.1.1 布局
覆盖。
EPUB 创建者 MAY 在 spine
元素上局部指定以下属性,以覆盖给定
spine 项的全局值:
itemref
EPUB 创建者 MUST NOT 在任何 给定 spine 项上使用这些覆盖项中的多个。
rendition:orientation 属性指定 EPUB
创建者希望内容以哪种方向渲染。
当在
元素上指定
metarendition:orientation 属性时,
它表示预期方向全局适用(即,适用于所有 spine 项)。
EPUB 创建者 MUST 对
rendition:orientation 属性使用以下
值之一:
阅读系统应以横向方向渲染 内容。
阅读系统应以纵向方向渲染内容。
内容不受方向约束。默认值。
EPUB 创建者 MUST NOT 声明
rendition:orientation 属性超过一次。
他们还 MUST NOT 使用 refines
属性声明该属性。有关为单个
EPUB 内容文档设置该属性的信息,请参阅
8.2.2.2.1 方向
覆盖。
EPUB 创建者 MAY 在 spine
元素上局部指定以下属性,以覆盖给定 spine 项的
全局值:
itemref
EPUB 创建者 MUST NOT 在任何 给定 spine 项上使用这些覆盖项中的多个。
rendition:spread 属性指定预期的阅读系统
合成跨页行为。
当在
meta 元素上指定 rendition:spread 属性时,它表示预期的合成跨页行为
全局适用(即,适用于所有 spine 项)。
EPUB 创建者 MUST 对
rendition:spread
属性使用以下值之一:
不要将 spine 项并入合成跨页。阅读系统应在屏幕中央位置的单个 视口中显示 这些项目。
仅当设备处于横向方向时,为 spine 项渲染合成跨页。
仅在纵向方向使用跨页已弃用。
EPUB 创建者应改用值“both”,因为在
纵向方向可读的跨页在横向方向也可读。
无论设备方向如何,都渲染合成跨页。
EPUB 创建者未定义明确的合成跨页行为。默认 值。
EPUB 创建者 MUST NOT 声明 rendition:spread
属性超过一次。
他们还 MUST NOT 使用 refines
属性声明该属性。有关
为单个EPUB 内容文档设置该属性的信息,请参阅
8.2.2.3.1 合成跨页
覆盖。
当在 XHTML 和
SVG 内容文档上下文中使用合成跨页时,
分别通过 viewport meta 元素和 viewBox 属性给定的尺寸表示
跨页中一页的大小。
有关使用 page-progression-direction 属性声明全局流动
方向以及内容文档中局部 page-progression-direction 的信息,请参阅
元素。
spine
EPUB 创建者 MAY 在 spine
元素上局部指定以下属性,以覆盖给定
spine 项的全局值:
itemref
rendition:spread-portrait 属性已弃用。
spread-portrait
属性定义。
EPUB 创建者 MUST NOT 在任何 给定 spine 项上使用这些覆盖项中的多个。
当阅读系统渲染合成跨页时,默认行为是
通过在下一个可用的未填充
视口中渲染下一个EPUB 内容文档来填充
跨页,其中下一个可用视口由给定的页面推进方向确定,或
由EPUB 内容文档中的
局部声明确定。EPUB 创建者 MAY 覆盖
此
自动填充行为,并通过在其 spine itemref
元素上指定以下属性之一,强制阅读系统将文档放置在特定
视口中:
rendition:page-spread-center
rendition:page-spread-center 属性是
spread-none 属性的别名,用于使 spine
项居中。
rendition:page-spread-left
rendition:page-spread-left 属性是
page-spread-left 属性的别名,用于将
spine 项放置在两页跨页的左侧槽位中。
rendition:page-spread-right
rendition:page-spread-right 属性是
page-spread-right 属性的别名,用于将
spine 项放置在两页跨页的右侧槽位中。
rendition:page-spread-center、rendition:page-spread-left 和
rendition:page-spread-right 属性适用于预分页和
可重排内容。它们只在阅读系统创建合成
跨页时适用。
虽然 EPUB 创建者常常指示在某些设备方向中使用跨页,
但内容本身并不表示真正的跨页(即阅读
系统必须并排渲染以保证可读性的两个连续页面,例如双页地图)。
为了指示两个连续页面表示真正的跨页,EPUB 创建者 SHOULD 在两个相邻 EPUB 内容文档的
spine 项上使用
rendition:page-spread-left 和 rendition:page-spread-right
属性,并在单页或双页呈现同样
可接受的 spine 项上省略这些属性。
EPUB 创建者 MUST NOT 在任何给定 spine 项上声明多个
rendition:page-spread-* 属性
和/或其无前缀等价项(例如,在阅读系统仅
支持其中一组属性的情况下,同时指定
“rendition:page-spread-left page-spread-left”是有效的)。
rendition:page-spread-left 和 rendition:page-spread-right
属性是为允许所有固定布局
属性使用单一词汇表而创建的。EPUB 创建者可以使用任一属性集,但较旧的阅读系统可能
只识别无前缀版本。
rendition:page-spread-center 的创建,是为了让 EPUB
创建者更容易理解在两页跨页和单个
居中页面之间切换的过程。EPUB 创建者可以使用
rendition:page-spread-center 或 spread-none 来禁用阅读系统中的跨页行为。
rendition:viewport 属性允许 EPUB
创建者表达
CSS 初始包含块(ICB)[css2],
用于其 rendition:layout 属性已设置为
pre-paginated 的 XHTML 和 SVG 内容文档。
使用该属性已弃用。
更多信息请参阅 [epubpublications-301] 中的
rendition:viewport
属性定义。
本节定义固定布局文档的 尺寸属性的表达和解释规则。
固定布局文档以适用于其格式的方式指定其初始 包含块 [css2]:
对于 XHTML 固定布局
文档,初始
包含块 [css2]
从 viewport
meta 标签中的 REQUIRED height
和 width 定义获得,其中:
height
属性 MUST 以
正数值 [css2]
或关键字
device-height 作为其值;并且
width 属性 MUST 以正
数值 [css2]
或关键字
device-width 作为其值。
device-width 和 device-height 值分别指
阅读系统视口宽度和高度的 100%。
height 和 width 定义 MUST
在 [html]
head 元素中文档顺序中的第一个
viewport meta 标签内指定。阅读系统
将忽略后续 viewport meta 标签。
EPUB 创建者 MUST NOT 在一个 viewport meta 标签中指定超过一个
height 或
width 定义。
对于 SVG 固定布局
文档,初始包含块 [css2]
尺寸 MUST 使用 viewBox
属性 [svg] 表达。
初始包含块定义只影响定义它所在的文档。同一出版物内其他内容文档中的 包含块尺寸可能不同。
虽然控制 EPUB 内容文档的渲染以创建固定布局,是其他 技术无法处理的明显需求,但可重排内容也有一些 EPUB 出版物特有的考虑事项(例如,如何处理 视口中的内容流)。本节定义一些 属性,使 EPUB 创建者能够控制可重排 内容的呈现方面。
rendition:flow 属性指定 EPUB 创建者
对阅读系统应如何处理内容溢出的偏好。
当在 meta 元素上指定
rendition:flow 属性时,它表示 EPUB 创建者对
溢出内容处理的全局偏好(即,适用于所有 spine 项)。EPUB
创建者 MAY
表明对动态分页或滚动的偏好。对于滚动内容,还可以
指定连续的EPUB 内容文档是要渲染为一个
连续滚动视图,还是每个都单独渲染(即,每个之间有一个动态
分页符)。
EPUB 创建者 MUST 对
rendition:flow
属性使用以下值之一:
动态分页所有溢出内容。
渲染所有 EPUB 内容文档,使溢出内容可滚动,并且 EPUB 出版物从一个 spine 项到另一个 spine 项呈现为一个连续 滚动(除非被局部覆盖)。
注意,EPUB 创建者 SHOULD NOT 创建其中不同资源具有 不同块流方向的出版物,因为 EPUB 阅读 系统中的连续滚动呈现会出现问题。
渲染所有 EPUB 内容文档,使溢出内容可滚动,并且每个 spine 项呈现为单独的可滚动文档。
使用阅读系统默认方法或用户偏好渲染溢出内容, 以适用者为准。默认值。
注意,当两个可重排 EPUB 内容文档在
spine 中连续出现时,其 [html] body 元素的默认渲染与
page-break-before
属性 [csssnapshot] 被设置为
always 一致。除了使用 rendition:flow 属性外,如果
阅读系统支持此类覆盖,EPUB
创建者 MAY 通过适当的样式表
声明覆盖此行为。
EPUB 创建者 MUST NOT 声明 rendition:flow 属性超过
一次。
他们还 MUST NOT 使用 refines
属性声明该属性。有关为
单个 EPUB 内容文档设置该属性的信息,请参阅 8.3.1.1
Spine 覆盖。
rendition:flow 设置为 paginated 的 EPUB 出版物渲染。
三个列状矩形由左至中、由中至右分别用 箭头连接,文本从一个矩形流向下一个矩形。文本分为 标题为“Chapter 1”、“2”和“3”的章节。最左侧的矩形被包围在 平板电脑示意图中。
rendition:flow 设置为 paginated 的 EPUB 出版物渲染。三个列状矩形由左至中、由中至右分别用 箭头连接,文本从一个矩形流向下一个矩形。文本分为 标题为“Chapter 1”、“2”的章节。带有“Chapter 2”的章节从 最右侧矩形顶部开始,使中间矩形底部留有空白。 最左侧的矩形被包围在平板电脑示意图中。
rendition:flow 设置为 scrolled-continuous 的 EPUB 出版物渲染。
一个单独的列状条带(即没有底边的矩形),文本沿 该条带向下流动。文本分为标题为“Chapter 1”、“2”的章节。条带的顶部部分 被包围在平板电脑示意图中。
rendition:flow 设置为 scrolled-doc 的 EPUB 出版物渲染。
三个列状条带(即没有底边的矩形)由左至中、 由中至右分别用箭头连接,每个条带都包含沿条带向下流动的文本。 文本分为标题为“Chapter 1”、“2”和“3”的章节。每个条带都以 章节标题开始,并沿条带向下流动。最左侧条带的顶部部分被包围在 平板电脑示意图中。
EPUB 创建者 MAY 在 spine
元素上局部指定以下属性,以覆盖给定 spine
项的全局值:
itemref
EPUB 创建者 MUST NOT 在任何给定 spine 项上使用这些覆盖项中的多个。
rendition:align-x-center 属性指定给定的
spine 项应在视口或跨页中水平居中。
该属性 MUST NOT 被全局设置为适用于所有
EPUB 内容文档(即,在没有
refines 属性的
元素中)。它只能通过
meta
元素的 itemrefproperties 属性,作为单个 EPUB 内容文档的 spine 覆盖使用。
该属性主要是为在内容渲染中缺乏可靠居中控制的情况下处理 “Naka-Tobira (中扉)”(章节标题页)而开发的。不过,随着 CSS 中分页媒体支持的 发展,此属性预计会被弃用。鼓励 EPUB 创建者在有效时使用 CSS 解决方案。
本节是非规范性的。
主流电子书、教育工具以及为有印刷品阅读障碍的人士格式化的电子书,是一些 包含同步音频旁白的作品示例。在 EPUB 3 中,EPUB 创建者可以 使用媒体叠加文档创建这些类型的书籍,用以描述预录音频旁白的时间安排, 以及它与 EPUB 内容文档标记之间的关系。本 规范将媒体叠加的文件格式定义为 [smil3] 的一个子集, 后者是一项用于在 XML 中表示同步多媒体信息的 W3C 推荐标准。
媒体叠加所支持的文本与音频同步,为任何难以跟随传统书籍文本的 用户提供了增强的无障碍性。媒体叠加还为因任何原因无法阅读文本的读者 提供连续聆听体验, 这是传统音频嵌入技术无法提供的。它们甚至可用于 传统上不被视为无障碍问题的用途(例如语言学习)。
对于不支持此特性的 EPUB 阅读系统而言,媒体叠加特性是透明的。 在 EPUB 出版物中包含媒体叠加,不会影响 不识别媒体叠加的阅读系统像媒体叠加不存在一样渲染 EPUB 出版物的能力。
EPUB 中的媒体叠加并不等同于有声书,因为有声书主要基于音频, 文本只是偶尔作为替代格式提供。W3C [audiobooks] 推荐标准用于 构建音频出版物。
虽然本规范的未来版本可能会纳入对视频媒体的支持(例如, 同步文本/手语书籍),但此版本仅支持将音频媒体与 EPUB 内容文档同步。
一个媒体叠加文档:
MUST 对 G.3 媒体叠加 模式中定义的媒体叠加 模式有效,并符合 9.2.2 媒体叠加文档定义中表达的所有内容一致性 约束。
MAY 引用多个 EPUB 内容文档, 但多个媒体叠加文档 MUST NOT 引用同一个 EPUB 内容 文档。
除非另有规定,本节定义的所有元素 [xml] 都位于
https://www.w3.org/ns/SMIL
命名空间 [xml-names] 中。
smil 元素封装媒体叠加文档中的所有信息。
head 元素是媒体叠加文档中元数据的容器。
由于本规范未定义任何必须出现在媒体叠加文档中的元数据属性,
因此 head 元素是 OPTIONAL。
metadata 元素表示媒体叠加文档的元数据。
metadata 元素是一个扩展点,允许包含来自任何元信息结构化语言的
元数据。
metadata
作为
元素的子元素。
head
无
来自任何命名空间的元素 [0 个或多个]
本规范不要求媒体叠加文档中包含任何元数据属性;
metadata 元素供自定义元数据要求使用。
body 元素是
媒体叠加文档中包含的呈现的起点。它包含
和
par
元素的主序列。
seq
body
epub:type
[可选]
对应 EPUB 内容 文档中相应元素结构语义的表达。
该值是以空白分隔的属性类型列表。更多 信息请参阅 9.3.3 叠加中的结构语义。
id
[可选]
epub:textref
[可选]
引用关联的 EPUB 内容文档,并可选择性地标识其中的 特定部分。
该值 MUST 是一个 path-relative-scheme-less-URL
string,可选地
后跟 U+0023 (#) 和一个 URL-fragment string。
任意顺序:
MUST 至少包含一个 par 或 seq。
seq 元素是媒体对象和/或子时间容器的顺序时间容器。
seq
epub:type
[可选]
对应 EPUB 内容 文档中相应元素结构语义的表达。
该值是以空白分隔的属性类型列表。更多 信息请参阅 9.3.3 叠加中的结构语义。
id
[可选]
epub:textref
[必需]
引用关联的 EPUB 内容文档,并且 可选择性地标识其中的特定部分。
该值 MUST 是一个 path-relative-scheme-less-URL
string,可选地
后跟 U+0023 (#) 和一个 URL-fragment string。
更多信息请参阅 9.3.2.1 叠加结构。
任意顺序:
MUST 至少包含一个 par 或 seq。
par 元素是媒体对象的并行时间容器。
par
epub:type
[可选]
对应 EPUB 内容 文档中相应元素结构语义的表达。
该值是以空白分隔的属性类型列表。更多 信息请参阅 9.3.3 叠加中的结构语义。
id
[可选]
任意顺序:
text 元素引用 EPUB 内容文档中的一个元素。
text 元素通常引用文本元素,但也可以引用其他
EPUB 内容文档媒体元素。在没有同级
元素的情况下,此元素引用的文本内容可通过
文本转语音渲染。
audio
text
作为
元素的 REQUIRED 子元素。
par
src
[必需]
引用关联的 EPUB 内容文档,并可选择性地标识其中的 特定部分。
该值 MUST 是一个 path-relative-scheme-less-URL
string,可选地
后跟 U+0023 (#) 和一个 URL-fragment string。
id
[可选]
空
本规范不对 text 元素的 src 属性施加限制。
不过,EPUB 创建者应引用能够用
CSS 设置样式的内容,以使与样式
信息的关联有效(即 XHTML 的可感知内容,或 SVG 中的
路径、基本形状或文本元素)。
[epub-rs-33] 不再为阅读系统提供有关定时媒体播放
(即自动开始引用的媒体)的指导。虽然
text 元素的 src 属性可以引用嵌入的定时
媒体(例如,通过 [html] video
元素),但引用此类媒体可能会产生
不可预测的结果。
audio 元素表示一段音频媒体片段。
audio
元素的 OPTIONAL 子元素。
par
空
本节是非规范性的。
EPUB 创建者可以将出版物的预录旁白表示为一系列音频 片段,每个片段对应于一个 EPUB 内容文档的一部分。例如,单个音频片段 通常表示单个短语或段落,但它不推断其相对于 其他片段或文档文本的顺序。媒体叠加通过使用 [smil3] 标记, 将结构化音频旁白与 EPUB 内容文档中对应的文本(或其他媒体)绑定,从而解决这种同步问题。 实际上,媒体叠加是 SMIL 3.0 的一个简化子集,用于定义这些片段的播放序列。
用于构造媒体叠加的主要 SMIL 元素包括
(用于主
序列)、
body
(序列)和
seq
(并行)。(有关这些及其他 SMIL 元素的更多信息,请参阅
9.2.2
媒体叠加文档定义。)
par
par 元素是媒体叠加的基本构建块,并对应于
EPUB 内容文档中的一个短语。该元素为同步内容提供两项关键信息:
1)包含该短语旁白的音频片段;以及 2)指向关联 EPUB 内容文档片段的
指针。par 元素使用两个
媒体元素子元素来表示这些信息:一个
元素和一个
audio
元素。由于 textpar 元素的媒体对象子元素按并行方式计时,阅读
系统会同时渲染音频片段和 EPUB 内容文档片段,从而得到
同步呈现。
text 元素的 src 属性通过其 URL [url] 引用来引用
EPUB 内容文档中关联的短语、
句子或其他片段。audio 元素的 src 属性同样引用
对应音频片段的位置,并添加 OPTIONAL 的 clipBegin 和 clipEnd
属性,以指示片段内的特定偏移量。
EPUB 创建者将 par 元素按顺序放在一起,以形成一系列短语
或句子。并非 EPUB 内容文档中的每个元素都会在媒体叠加文档中有对应的
par 元素,只有与音频
旁白相关的元素才会有。
EPUB 创建者还可以将 par 元素添加到 seq 元素中,
以定义更复杂的结构,例如部和章节(参见 9.3.2.1 叠加结构)。
在本节中,EPUB 内容文档 假定为XHTML 内容 文档。虽然 EPUB 创建者可以将媒体 叠加用于 SVG 内容文档, 但播放行为可能不一致,因此不保证互操作性。
EPUB 创建者还应注意,阅读系统对可重排和固定布局 EPUB 内容文档播放的支持并无保证。阅读 系统分页策略的差异意味着,某些阅读系统可能只支持 其中一种布局格式中的媒体叠加。
媒体叠加文档的
由两个元素组成:
body
元素
和
par
元素。这些元素的顺序表示阅读系统
在播放期间如何渲染相应 EPUB 内容文档中的内容。
seq
par 元素表示内容的一个片段,例如标记中的一个词、短语、
句子、表格单元格、列表项、图像或其他可标识的内容部分。
每个元素在播放期间同时标识要显示的内容(在
元素中)和要同步的
音频(在
text
元素中)。
audio
seq 元素表示序列——共同表示内容逻辑组件的一组
seq 和/或
par 元素。
EPUB 创建者可以使用它来表示嵌套
容器,例如章节、旁注、
标题、表格、列表和脚注。它允许 EPUB 创建者在媒体叠加文档中保留
这些容器固有的结构。
seq 元素 MUST 包含
epub:textref 属性。由于 seq
元素不
提供同步指令,此属性允许阅读系统将
该片段匹配到文本中的位置。
将章节、图、表格和脚注等结构分组到
seq 元素中的原因,是为了让阅读系统能够在播放期间标识它们的开始和结束
位置。然后,阅读系统可以提供适合内容布局的播放选项,
例如跳过较长的图、关闭
分页符公告的渲染(参见 9.4
可跳过性和可退出性),或自定义
阅读模式以适应表格等结构。
epub:textref 属性和
元素的 textsrc
属性都可以包含一个 URL-fragment string,用于引用关联
EPUB 内容文档的
特定部分(例如,通过元素的 ID 引用该元素)。
对于 XHTML 和 SVG 内容文档,URL-fragment string SHOULD 分别是通过元素 ID 对特定元素的引用,或一个 SVG Fragment Identifier [svg]。
EPUB 创建者 MAY 使用其他片段标识符方案,但阅读系统可能 不支持这类标识符。
本节是非规范性的。
媒体叠加的粒度级别取决于 EPUB
创建者如何标记
EPUB 内容文档,以及他们在
元素的 textsrc 属性和
元素的 seqepub:textref
属性中使用的片段标识符类型。例如,当引用 [html] 元素时,如果最细的标记级别
是段落级,那么这就是媒体叠加同步可能达到的最细级别。
同样,如果有段落以下级别的标记,例如 [html]
span
元素表示短语或句子,则媒体叠加可以实现更细粒度。
更细的粒度在用户按词或短语导航以及搜索文本时,会为同步播放提供更精确的结果,
但会增加
媒体叠加文档的文件大小。不依赖
元素存在的片段标识符方案,在受支持时可以提供更细的粒度。
本规范允许使用文本转语音(TTS)——将 EPUB 出版物的文本 内容使用合成语音渲染成人工人声——来 补充预录音频片段。
当媒体叠加
元素省略其
par
元素时,其
audio
元素可以在
阅读系统中通过 TTS 渲染。如果该文本片段不适合 TTS
渲染(例如,不是文本元素和/或没有文本回退),这可能产生
意外结果。
text
有关在 EPUB 出版物中使用 TTS 技术的更多信息,请参阅 EPUB 3 Text-to-Speech Support [epub-tts-10]。
为了在媒体叠加文档中表达结构语义,EPUB 创建者 MAY 在
属性上指定
epub:type、
par
和
seq
元素。
body
epub:type 属性有助于阅读系统执行适合所指示语义类型的行为。
这些行为的示例包括可跳过性和可退出性以及表格阅读模式 [epub-rs-33]。
EPUB 创建者 MAY 使用作者定义的类, 在 CSS 样式表中表达当前正在播放的 EPUB 内容文档元素的视觉 渲染信息。
使用时,EPUB 创建者 MUST 使用 包文档中的
active-class 和 playback-active-class 属性声明类名。
EPUB 创建者 MUST 在其定义的每个属性中恰好定义一个 CSS 类名。 每个属性 MUST 定义一个有效的 CSS 类 名,且不包括任何选择器 [css2]。 本规范不保留用于这些 属性的名称。
EPUB 创建者 MAY 为指定的 CSS 类定义任何 CSS 属性, 但必须确保 每个具有关联媒体叠加文档的 EPUB 内容文档都包含一个 CSS 样式表(嵌入或链接),其中包含这些类定义。在缺少此类 定义时,阅读系统可能提供自己的样式,或 完全不提供样式。
EPUB 创建者 MUST NOT 将 active-class 和
playback-active-class
属性与 refines 属性结合使用,
因为它们始终适用于整个 EPUB 出版物。
如果某个 EPUB 内容文档被媒体叠加文档全部或部分
引用,则其 manifest
元素 MUST 指定
itemmedia-overlay 属性。该属性 MUST 引用
对应媒体叠加文档的 manifest item 的
ID [xml]。
EPUB 创建者 MUST 仅
在引用 EPUB 内容文档的 manifest
item 元素上指定 media-overlay 属性。
媒体叠加文档的 manifest item MUST 具有媒体类型
application/smil+xml。
EPUB 创建者 MUST 在 包文档中,使用带有
duration 属性的
元素,指定整个 EPUB 出版物的持续时间。
meta
此外,EPUB 创建者 MUST 提供每个 媒体叠加文档的持续时间。EPUB
创建者 MUST 使用 refines
属性将
每个持续时间声明关联到对应的 manifest
。
item
每个媒体叠加文档持续时间之和 SHOULD 等于 总持续时间,误差不超过一秒。
虽然由于将时间四舍五入到最接近的一秒小数部分, 单个持续时间之和可能无法与总持续时间完全匹配,但大于一秒的差异 表明存在由其他问题引起的不匹配。
EPUB 创建者 MAY 还在
包文档中指定 narrator 信息,
以及要应用于当前播放的 EPUB 内容文档元素的作者定义 CSS 类
名。
media: 前缀被保留,
用于在包元数据中包含这些属性。
阅读时,用户可能希望打开或关闭内容的某些特性,例如
脚注、页码或其他类型的次要内容。此特性称为
可跳过性。阅读系统使用媒体叠加
元素的 epub:type 属性提供的语义
信息来决定何时向用户提供可跳过特性的选项。
EPUB 创建者 MAY 使用以下 语义来启用可跳过性:
不过,此列表并非穷尽。它表示来自结构语义 词汇表 [epub-ssv-11] 的术语,阅读 系统最有可能为这些术语提供 可跳过性选项。
可退出项目是嵌套结构,例如表格和列表,用户可能希望跳过 它们,并从紧接该嵌套结构之后的位置继续阅读。可退出性 特性不同于可跳过性特性,因为它并不启用或禁用整类 项目,而是提供从其中退出的方式(例如,用户可以先听一部分内容,然后 选择退出)。
EPUB 创建者 MAY 使用以下 语义来启用可退出性:
不过,此列表并非穷尽。它表示来自结构语义 词汇表 [epub-ssv-11] 的术语,阅读系统最有可能为这些术语提供 可退出性选项。
有时可退出结构可能包含可退出结构。例如,表格由许多行和单元格组成, 用户可能希望分别从这些结构中退出。阅读 系统对从此类结构中退出的支持很复杂,目前支持并不好。 EPUB 创建者应避免标识嵌套的可退出结构,直到有更好的 支持可用。
本节是非规范性的。
EPUB 3 明确构建于开放 Web 平台之上,以便能够利用其底层技术内置的结构、语义以及 由此带来的无障碍性。
创建无障碍 Web 内容的要求和实践,已经记录在 W3C 的 Web 内容 无障碍指南(WCAG) [wcag2] 中。 这些指南也构成了定义 EPUB 出版物无障碍性的基础。
由于当前的 WCAG 指南(版本 2)高度侧重于 Web 页面,因此单独的规范 EPUB 无障碍 [epub-a11y-11] 定义了如何将该标准 应用于 EPUB 出版物。它还为元数据、分页和媒体叠加添加了 EPUB 专用的要求和建议。
本规范建议 EPUB 出版物符合 无障碍要求,这些要求定义于 [epub-a11y-11]。遵循 此建议的一个好处是, 它有助于确保 EPUB 出版物满足世界各司法管辖区立法规定的无障碍要求。
不过,EPUB 创建者应超越法律要求,将无障碍性视为 其所有内容的一项要求。EPUB 出版物越无障碍,其潜在 受众就越大。
本规范不整合无障碍要求,以便这些要求能够独立于 EPUB 规范而适应和 演进——无障碍实践通常需要更频繁地更新。无障碍规范还旨在与 EPUB 的过去、 当前和未来版本一起使用。采用单独规范的方法确保 EPUB 的演进不会 将无障碍性锁定在某个时间点(即,它允许旧版本 EPUB 的生产者引用 最新的无障碍要求)。
本节是非规范性的。
EPUB 出版物的特殊性在于其结构。EPUB 格式提供了一种方式,用于表示、打包和编码结构化且语义增强的 Web 内容 — 包括 HTML、CSS、SVG、JavaScript 和其他资源 — 以便 在单文件容器中分发。
这意味着 EPUB 3 的安全和隐私问题主要与这些 格式的特性相关,并且与 Web 内容带来的威胁非常相似。
虽然内容风险常常被等同于故意恶意的创作意图,但 EPUB 创建者需要意识到,许多出于善意遵循的实践也可能使 用户暴露于隐私和安全问题之中。本节其余部分探讨 EPUB 3 的风险模型, 旨在帮助 EPUB 创建者识别并缓解这些风险。
关于与 阅读系统相关的风险,请参阅 [epub-rs-33] 的 安全和隐私章节。
本节是非规范性的。
EPUB 出版物会给毫无戒备的用户带来各种隐私和安全 威胁。许多此类威胁与 Web 内容相交,但 EPUB 也引入了自身独特的攻击 方法,可用于诱骗用户访问恶意内容,或诱导用户提供敏感 信息。EPUB 创建者和 用户需要 了解的一些较重要攻击向量包括:
EPUB 3 允许一些 出版物资源被 远程 托管,具体是指其大小可能会对 EPUB 出版物的下载和 打开产生负面影响的资源(例如音频、视频和字体)。虽然按预期使用时 对用户有帮助,但这些豁免也可被用来向出版物中注入恶意内容。
此威胁并不限于访问由恶意行为者创建的内容。如果 EPUB 创建者 嵌入来自不可信来源的内容(例如第三方音频和视频),用户就始终 有可能收到已被攻陷的资源。
在分发时检查恶意软件和漏洞利用也并不总是可靠,因为恶意内容可能在发布后的 任何时候被替换,这与嵌入在 EPUB 容器中的资源不同。
EPUB 的源对 EPUB 创建者来说是未知的,
并且特定于每个阅读系统实现。因此,如果 EPUB 创建者将
远程资源托管在其控制的 Web 服务器上,该
服务器实际上无法使用
需要指定允许源的安全特性,例如 CORS、Content-Security-Policy
或 X-Frame-Options 头。
无论是否有意,指向外部网站和资源的链接都会使用户暴露于 可能危及其阅读系统或操作系统的潜在漏洞利用之中。虽然 外部链接通常会在 Web 浏览器中打开,并受浏览器安全 模型约束,但这并不能保护用户免受所有漏洞利用的影响。
即使 EPUB 创建者的意图并非恶意,向外部链接添加跟踪信息也会 给用户隐私带来问题,因为它可能允许在未经用户同意的情况下跟踪用户的活动。
断链劫持——当域名过期并被另一方购买以利用指向它的 链接时——也可能导致用户被带到 EPUB 创建者并未 打算指向的资源。
嵌入在 EPUB 容器中的资源并不能免受恶意行为者影响,尤其是当 EPUB 出版物来自不可信来源时。资源可能包含漏洞利用程序,或包含会将敏感信息提交给非预期方的 表单。此类行为者还可能尝试使用文件 间接技术(例如符号链接或文件别名)访问 远程资源。
使用第三方内容(例如游戏和测验)时,如果 EPUB 创建者无法完全审查这些内容, 也可能导致安全和隐私问题。
当脚本可以访问设备网络时,它会提供多种可利用用户的渠道:
即使这并非 EPUB 创建者的意图,网络访问也可能允许第三方内容利用用户。
使用数字版权管理方案对 EPUB 出版物进行加密和解密,可能允许关于用户、 用户使用的供应商以及其阅读选择的个人身份信息被传递给第三方。
这些攻击的有效性通常还取决于诱骗用户相信他们正在交互的 出版物来自可信来源。这些欺骗可以采取以下形式:
EPUB 出版物可能包含关于其自身的虚假信息,以诱骗用户相信 它来自合法来源。例如,恶意 EPUB 创建者可能伪造 作品的标题、作者、标识符和出版者。
虽然这种错误信息本身不会造成直接危害,但它可能导致用户 信任 EPUB 出版物中的恶意表单、链接和其他内容,因为他们以为这些内容 来自可靠来源。
恶意 EPUB 创建者还可能设计其内容以模仿或复制某个平台的 体验,从而诱骗用户信任其内容。
EPUB 3 试图避免扩展其所构建于其上的底层技术,但它确实引入了 一些新特性。不过,这些特性的受限范围限制了它们可能带来的威胁:
内容切换和多媒体控制元素只允许在 HTML 中隐藏 内容和无脚本地控制播放。此外,这些特性在 EPUB 3.0 的首个版本中 引入,现已弃用, 且不再建议使用。
HTML 和 SVG 中结构语义的表达 仅允许对元素进行注释。
一个潜在的例外是 epubReadingSystem 对象
[epub-rs-33],它允许 EPUB 创建者
查询关于当前 阅读系统的信息。EPUB 创建者需要注意,
他们只能使用该对象公开的信息来改善其内容的渲染
(即,避免使用这些信息来分析用户及其环境)。
虽然 EPUB 创建者无法阻止每一种利用用户的方法, 但他们最终要对其内容的安全构造负责。这意味着他们需要采取 预防措施,限制其 EPUB 出版物暴露于上一节所述各类恶意漏洞利用的风险中。
一些实际步骤包括:
EPUB 创建者还需要考虑用户的隐私权,避免出现他们有意收集数据的情况。 理想情况下,EPUB 创建者 SHOULD NOT 跟踪其 用户,但这并不 适用于所有类型的出版。
当 EPUB 创建者必须跟踪用户时,他们 SHOULD 在打开 EPUB 出版物之前 获得用户批准以收集 信息(例如,在教育课程作业中)。如果无法做到这一点,他们 SHOULD 在用户首次访问 EPUB 出版物时获得许可。 EPUB 创建者 SHOULD 还允许用户选择退出跟踪,并向用户提供 管理和删除任何关于他们所收集数据的能力。
EPUB 创建者还需要考虑无意中收集关于用户的信息。链接到 出版商网站上的内容,或在其服务器上远程托管资源,可能导致 对用户进行画像,尤其是在 URL 中添加唯一跟踪标识符时。
当在 EPUB 出版物内收集和存储用户信息时(例如通过使用 cookies 和 web storage [html]),EPUB 创建者需要考虑其他 EPUB 出版物在阅读系统上盗取数据的潜在可能性。虽然 [epub-rs-33] 为 EPUB 出版物引入了唯一源要求, 从而限制了潜在攻击,但仍然存在阅读系统允许 EPUB 出版物访问共享持久化存储的风险 (例如,尚未更新的旧阅读系统和不符合规范的新阅读系统)。因此,EPUB 创建者 SHOULD NOT 将 敏感用户数据存储在持久化存储中。如果 EPUB 创建者必须存储敏感数据,他们 SHOULD 对数据进行加密,以防在发生漏洞利用时可被轻易访问。
当出版商和供应商必须使用数字版权管理方案时,他们应优先选择 不利用或不向外部方传输关于用户或其内容的信息来 执行加密或解密的方案。
为最大限度降低安全和隐私风险,EPUB 创建者 SHOULD 以长期保存为目标制作其 EPUB 出版物。以这种方式创建的 EPUB 出版物通常是 自包含的,不依赖网络访问,也不使用数字版权管理进行加密, 从而消除了许多可能的攻击向量。[iso22424] 就是此类 EPUB 出版物保存 格式的一个示例。虽然可以理解并非所有 EPUB 创建者都能达到这些 自包含水平,但尽可能遵循这些实践仍会有益于 整体用户隐私和安全。
本规范包含某些尚未在阅读系统中得到完全支持的特性、 工作组不再建议使用的特性,或仅为与 EPUB 2 阅读系统互操作而保留的特性。本节定义附加到这些特性的标识含义 及其支持预期。
实现不足特性是指在 EPUB 3.3 之前引入, 但工作组尚未能够建立足够实现 经验的特性。
尽管存在此限制,这些特性仍被认为很重要而应予以保留,因为已知 EPUB 创建者会实现它们(即,弃用它们会使 现有内容失效), 和/或它们是 EPUB 所构建的内容模型不可或缺的一部分。
如果本规范将某个特性标识为实现不足,EPUB 创建者 MAY 按所述方式使用这些特性。
EPUB 一致性检查器在 EPUB 出版物中遇到实现不足的特性时,应提醒 EPUB 创建者注意其存在,但不得将其包含视为违反 标准(即,不发出错误或警告)。
目前无法确定未来版本的标准中会移除实现不足标签, 还是用弃用取代它们。EPUB 创建者在使用这些 特性时,应认真考虑现在和未来可能出现的 互操作性问题。
将特性标记为实现不足,是为说明 EPUB 被纳入 W3C 之前在不同流程下开发而进行的一次性 事件。此标签不会用于在 W3C 流程下开发的新特性。
已弃用特性是指工作组在本版本规范中不再建议使用的 特性。已弃用特性通常在阅读系统中支持有限或没有支持, 和/或在 EPUB 出版物中的使用有限或不存在。
如果本规范将某个特性标识为已弃用,EPUB 创建者 SHOULD NOT 在其 EPUB 出版物中使用该 特性。
EPUB 一致性检查器在 EPUB 出版物中遇到已弃用特性时,应提醒 EPUB 创建者注意其存在。
下表列出公共和 系统 标识符 [xml],这些标识符允许出现在文档类型声明中。[xml]
EPUB 创建者 MAY 仅在具有所列 媒体类型 [rfc2046] 的出版物资源中使用这些外部 标识符,并且这些媒体类型已在其 manifest 声明中指定。(更多 信息请参阅 3.9 XML 一致性。)
| 媒体类型 | 公共标识符 | 系统标识符 |
|---|---|---|
|
-//W3C//DTD MathML 3.0//EN
|
http://www.w3.org/Math/DTD/mathml3/mathml3.dtd
|
application/x-dtbncx+xml
|
-//NISO//DTD ncx 2005-1//EN
|
http://www.daisy.org/z3986/2005/ncx-2005-1.dtd
|
image/svg+xml
|
-//W3C//DTD SVG 1.1//EN
|
http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd
|
本节是非规范性的。
结构语义会添加关于元素所起具体结构作用的附加含义。
属性用于在 EPUB
内容文档和 媒体叠加文档中表达特定领域语义,
它所携带的结构信息会
补充底层词汇表。
epub:type
所应用的语义会细化其所在元素的含义,而不会改变
辅助技术对该元素本质的理解,这与使用类似的
role
属性 [html] 时的情况不同。换句话说,该
属性不会增强内容的无障碍性;它只提供关于用途的提示。
语义元数据会丰富内容,以用于出版工作流和作者定义的用途。 它还允许阅读系统更多地了解文档的结构和 内容(例如,在媒体叠加中启用可跳过性和可退出性)。
本规范定义了一种使用属性轴添加结构语义的方法:EPUB 创建者无需添加新元素,
而是可以将 epub:type
属性附加到现有元素上,以添加所需语义。
epub:type
http://www.idpf.org/2007/ops
以空白分隔的属性值列表,并受 D.1 词汇表关联机制中定义的限制约束。
空白字符是 [xml] 中定义的字符集合。
虽然 epub:type 属性在性质上类似于
role
属性 [html],但这些属性服务于不同目的。
epub:type 属性的值不会像 ARIA role 那样增强通过
屏幕阅读器等辅助技术进行的访问,因为它们不会映射到这些技术所使用的无障碍
API。这
意味着向 [html]
div
和
span
这类语义中性的元素添加 epub:type 值,并不会使它们对辅助技术更
无障碍。只有 ARIA
roles 会影响辅助技术如何理解这些元素。
因此,epub:type 属性仅用于出版语义和
阅读系统增强。阅读系统可以使用
epub:type 值来提供内置朗读或媒体叠加功能等
无障碍增强,在这些情况下与辅助技术的交互并非必要。
有关无障碍出版角色的更多信息,请参阅 Digital Publishing WAI-ARIA Module [dpub-aria]。
epub:type 属性会对其所在元素赋予语义。它的值
是一个或多个以空白分隔的术语,这些术语源自与
文档实例关联的外部词汇表。
epub:type 属性的默认词汇表是
EPUB 3 结构语义词汇表 [epub-ssv-11]。EPUB 创建者 MAY 包含
不属于该词汇表的无前缀术语,但添加自定义
语义的首选方法是为它们使用前缀。更多信息请参阅 D.1 词汇表关联
机制。
本附录定义了一组通用机制,通过这些机制,本规范中的属性可以引用 词汇表中的术语。它还定义了与这些属性一起使用的 EPUB 专用词汇表。
本节是非规范性的。
EPUB 定义了一种正式方法,用于使用 property
数据类型引用元数据和语义词汇表中定义的术语和属性。例如,
epub:type 属性在 EPUB 内容文档和
媒体叠加文档中使用此数据类型来添加结构语义,
而 property 和 rel 属性使用该数据类型
在包
文档中定义属性和关系。
property 值类似于 CURIE [rdfa-core]——它 以紧凑形式表示 URL [url]。该表达由前缀和引用组成,其中前缀——无论是 字面给出还是隐含给出——都是 URL 的简写映射,通常解析到一个术语 词汇表。当阅读系统将该 前缀转换为其 URL 表示并与 引用组合时,得到的 URL 通常解析到该词汇表中的一个片段, 其中包含关于该术语的人类可读和/或机器可读信息。
为降低创作复杂度,每个采用 property 数据类型的属性 还会定义一个默认词汇表。从默认词汇表引用的术语和属性 不包含前缀,因为阅读系统用于映射到 URL 的映射是预定义的。
property 数据类型的强大之处在于其易于扩展。要纳入新的 术语和属性,EPUB 创建者只需要声明一个 前缀。作为另一种创作便利,本规范还会为许多常用的 出版词汇表保留前缀(即,它们的声明是可选的)。
以下各节提供有关 property 数据类型和 词汇表关联机制的更多详细信息。
property 数据类型是表达 URL [url] 的紧凑方式, 它由一个 OPTIONAL 前缀组成,该前缀通过冒号与引用分隔。
| property |
=
|
[ prefix , ":" ] , reference; | |
| prefix |
=
|
? xsd:NCName ? ; | |
| reference |
=
|
? path-relative-scheme-less-URL string [url] ? ; | /* 按 [url] 中定义 */ |
本规范从 [rdfa-core] 中定义的 CURIE 数据类型派生出 property 数据类型。property 表示 CURIE 的一个子集。
不过,它与 CURIE 有两个关键差异:
空的 reference 并不表示有效的 property 值, 即使它对上面的定义是有效的(即,仅由前缀和冒号组成的 property 值无效)。
空字符串并不表示有效的 property,即使它对 上面的定义是有效的。
默认词汇表是这样一种词汇表:当预期使用 property 值时,EPUB 创建者无需为其声明 前缀即可使用其中的术语和属性。EPUB 创建者 MUST NOT 为默认词汇表中的术语和属性添加前缀。
EPUB 创建者 MUST NOT 使用
prefix 属性为与这些
词汇表关联的 URL 分配前缀。
有关其默认 词汇表的更多信息,请参阅每个采用 property 数据类型的属性的定义。
prefix 属性定义用于 property 值的前缀映射。
prefix 属性的值是一个或多个
前缀到 URL 映射的空白分隔列表,形式如下:
| prefixes |
=
|
mapping , { whitespace, { whitespace } , mapping } ; | |
| mapping |
=
|
prefix , ":" , space , { space } , ? xsd:anyURI ? ; | |
| prefix |
=
|
? xsd:NCName ? ; | |
| space |
=
|
#x20 ; | |
| whitespace |
=
|
(#x20 | #x9 | #xD | #xA) ; |
除保留前缀外,EPUB 创建者
MUST 声明文档中使用的所有前缀。EPUB 创建者 MUST 仅在相应格式的
根元素
[xml] 上指定
prefix 属性。
当在包 文档中使用时,该属性没有命名空间。
EPUB 创建者 MUST 在命名空间
http://www.idpf.org/2007/ops 中声明该属性,用于 EPUB 内容文档和 媒体叠加文档。
虽然 prefix 属性以 [rdfa-core]
中同名的
prefix 属性为模型,
但 EPUB 创建者不能互换使用这些属性。EPUB 内容
文档中没有命名空间的 prefix 属性是 RDFa 属性。
在同时指定 RDFa 表达式的 EPUB 内容文档中,这两个属性同时出现很常见。
<html … prefix="…"
xmlns:epub="http://www.idpf.org/2007/ops"
epub:prefix="…"> …
</html>
注意,对于通过包含嵌入的 SVG,前缀 MUST
声明在 [html] 根
html
元素上。
为避免冲突,EPUB 创建者 MUST NOT 使用 prefix
属性声明一个
映射到默认词汇表的前缀。
EPUB 创建者 MUST NOT 声明前缀“_”,因为本规范保留 此前缀以便 将来与 RDFa [rdfa-core] 处理兼容。
为将来与包文档的替代序列化兼容,EPUB 创建者 MUST NOT 为 Dublin Core /elements/1.1/ 命名空间 [dcterms] 声明前缀。 EPUB 创建者 MUST 仅使用 [dcterms] 中包 文档元数据允许的元素。
虽然保留前缀是一种创作便利,EPUB 创建者仍应避免 依赖它们,因为它们可能导致互操作性问题。例如,EPUB 一致性检查器 往往会拒绝新的前缀,直到其开发者将工具更新到规范的最新版本。 EPUB 创建者应声明其使用的所有前缀,以避免此类问题。
EPUB 创建者 MAY 在期望 property 值的属性中使用保留
前缀,而无需在 prefix 属性中声明它们。
EPUB 创建者 SHOULD NOT 在 prefix
属性中覆盖保留前缀。
EPUB 创建者可以使用的保留前缀取决于上下文:
EPUB 创建者 MAY 在包文档属性中使用以下前缀, 而无需声明它们。
| 前缀 | URL |
|---|---|
| a11y | http://www.idpf.org/epub/vocab/package/a11y/# |
| dcterms | http://purl.org/dc/terms/ |
| marc | http://id.loc.gov/vocabulary/ |
| media | http://www.idpf.org/epub/vocab/overlays/# |
| onix | http://www.editeur.org/ONIX/book/codelists/current.html# |
| rendition | http://www.idpf.org/vocab/rendition/# |
| schema | http://schema.org/ |
| xsd | http://www.w3.org/2001/XMLSchema# |
EPUB 创建者 MAY 在epub:type 属性中使用以下保留前缀,
而无需声明它们。
| 前缀 | URL |
|---|---|
| msv | http://www.idpf.org/epub/vocab/structure/magazine/# |
| prism | http://www.prismstandard.org/specifications/3.0/PRISM_CV_Spec_3.0.htm# |
词汇表定义表中的字段具有以下隐含要求:
使用 [xmlschema-2] 数据类型 指定 REQUIRED 的值类型。
指定 EPUB 创建者 MAY 在哪些出版物资源类型上指定该属性。
此字段出现在用于 properties 属性的属性上。
指定 EPUB 创建者 MAY 指定该属性的次数, 无论是全局指定,还是 附加到另一个元素或属性上。
最小基数为一的属性 MUST 被指定。
描述该属性的目的,并指定 EPUB 创建者必须遵循的任何附加使用要求。
提供非规范性的用法示例。
标识 EPUB 创建者 MAY 将该属性与什么关联。
此字段出现在定义主表达式 和子表达式以及关系的属性上。
指定该属性在元数据中 MUST 出现时的名称。
此词汇表中的属性可用于
元素的 metaproperty 属性。
除非其“Extends”字段另有说明,本节定义的属性用于
定义子表达式:换句话说,一个携带本节定义属性的
元素
MUST 具有
metarefines 属性,用于引用被增强的资源或表达式。
用于引用这些属性的前缀 URL 是
http://idpf.org/epub/vocab/package/meta/#。
| 名称: |
alternate-script
|
|---|---|
| 描述: |
此属性通常附加到 |
| 允许值: |
xsd:string
|
| 基数: |
zero or more
|
| 扩展: | 所有属性。 |
| 名称: |
belongs-to-collection
|
|---|---|
| 描述: |
还可以使用 为允许阅读系统
组织集合并避免命名冲突(例如,
无关的集合可能共享相似名称,或某个集合的不同版本可能被发布),
EPUB 创建者 SHOULD
提供一个能够唯一
标识该集合实例的标识符。 该集合 MAY 通过附加 EPUB 出版物在该集合中的位置 MAY 通过附加 |
| 允许值: |
xsd:string
|
| 基数: |
zero or more
|
| 扩展: | 适用于 EPUB 出版物,并可细化自身的其他实例。 |
| 名称: |
collection-type
|
|---|---|
| 描述: |
当 当未指定 scheme 时,本规范还定义以下集合类型:
|
| 允许值: |
xsd:string
|
| 基数: |
zero or one
|
| 扩展: |
belongs-to-collection
|
| 名称: |
display-seq
|
|---|---|
| 描述: |
此属性仅适用于尚未定义优先级规则的情况 (例如,会根据创建者在 文档顺序中的出现顺序赋予优先级)。 |
| 允许值: |
xsd:unsignedInt
|
| 基数: |
zero or one
|
| 扩展: | 所有属性。 |
| 名称: |
file-as
|
|---|---|
| 描述: | file-as 属性提供关联属性用于排序的规范化形式。 |
| 允许值: |
xsd:string
|
| 基数: |
zero or one
|
| 扩展: | 所有属性。 |
| 名称: |
group-position
|
|---|---|
| 描述: |
EPUB 创建者可以将
EPUB 出版物可以属于多个组。 |
| 允许值: | 单个 xsd:unsignedInt 或一系列以小数点分隔的数字(例如,
1 或 2.2.1)。
|
| 基数: |
zero or one
|
| 扩展: | 所有属性。 |
| 名称: |
identifier-type
|
|---|---|
| 描述: |
当 |
| 允许值: |
xsd:string
|
| 基数: |
zero or one
|
| 扩展: |
,
dc:source
|
使用此属性已弃用。
更多信息请参阅 [epubpublications-30] 中的 meta-auth
属性定义。
| 名称: |
role
|
|---|---|
| 描述: |
当 当为个人或组织附加多个角色时,角色的重要性应与其所包含的
|
| 允许值: |
xsd:string
|
| 基数: |
zero or more
|
| 扩展: |
,
,
dc:publisher
|
| 名称: |
source-of
|
|---|---|
| 描述: |
本规范定义 |
| 允许值: |
pagination
|
| 基数: |
zero or one
|
| 扩展: |
dc:source
|
有关如何提供无障碍页面 导航的信息,请参阅 [epub-a11y-tech-11]。
| 名称: |
term
|
|---|---|
| 描述: |
|
| 允许值: |
xsd:string
|
| 基数: |
zero or one
|
| 扩展: |
|
| 名称: |
title-type
|
|---|---|
| 描述: |
当 |
| 允许值: |
xsd:string
|
| 基数: |
zero or one
|
| 扩展: |
|
此词汇表中的属性可用于元数据
元素的 linkrel 和 properties 属性。
用于引用这些属性的前缀 URL 是
http://idpf.org/epub/vocab/package/link/#。
以下值可用于 link 元素的 rel 属性,以建立
href 属性中所引用资源的关系。
| 名称: |
alternate
|
|---|---|
| 描述: |
|
| 基数: |
Zero or more
|
| 扩展: | 仅适用于 EPUB 出版物或集合。当存在 refines
属性时 MUST
NOT 使用。 |
| 示例: |
<link rel="alternate" href="package.json"
media-type="application/json-ld"/>
|
使用 marc21xml-record 关键字已弃用。
它由 record 关键字替代,并使用 media-type 属性值
“application/marcxml+xml”。
更多信息请参阅 [epubpublications-30] 中的 marc21xml-record
属性定义。
使用 mods-record 关键字已弃用。它
由 record 关键字替代,并使用 media-type 属性值
“application/mods+xml”。
更多信息请参阅 [epubpublications-30] 中的 mods-record
属性定义。
使用 onix-record 关键字已弃用。它
由 record 关键字替代,并使用 properties
属性值 onix。
更多信息请参阅 [epubpublications-30] 中的 onix-record
属性定义。
| 名称: |
record
|
|---|---|
| 描述: |
表示所引用的资源是元数据记录。 指定此关键字时,记录的媒体类型 MUST 在
有关常用链接元数据记录类型的列表,请参阅 EPUB 链接元数据 指南 如果无法从媒体类型识别记录类型,则可以在
|
| 基数: |
Zero or more
|
| 扩展: | 仅适用于EPUB 出版物或
集合。当存在 refines 属性时 MUST NOT
使用。 |
| 示例: |
<link rel="record" href="book/52.atom"
media-type="application/atom+xml;type=entry;profile=opds-catalog"/>
|
| 名称: |
voicing
|
|---|---|
| 描述: |
表示所引用的音频文件为 refines 属性指定的表达式或资源 (通常是标题或创建者)提供听觉表示。 指定此关键字时,音频文件的媒体类型 MUST 在
|
| 基数: |
Zero or more
|
| 扩展: | 所有属性。使用此值时,refines 属性
MUST 存在。
|
| 示例: |
<link refines="#title" rel="voicing" media-type="audio/mpeg"
href="title.mp3" />
|
使用 xml-signature 关键字已弃用。
它没有被其他链接方法替代。
更多信息请参阅 [epubpublications-30] 中的 xml-signature
属性定义。
使用 xmp-record 关键字已弃用。
更多信息请参阅 [epubpublications-30] 中的 xmp-record
属性定义。
以下值可用于
元素的
linkproperties 属性,以建立被引用资源所表示的记录类型。
这些值用于无法通过其媒体类型唯一标识的记录格式。
| 名称: |
onix
|
|---|---|
| 描述: | onix 属性表示所引用的资源是 ONIX 记录
[onix]。 |
| 示例: |
<link rel="record" href="pub/meta/nor-wood-onix.xml"
media-type="application/xml" properties="onix"/>
|
用于引用这些属性的前缀 URL 是
http://www.idpf.org/vocab/rendition/#。
“rendition:”前缀被保留供
使用于包渲染属性,并且无需在
包文档中声明。
| 属性 | 覆盖项 | 定义于 |
|---|---|---|
rendition:layout |
|
8.2.2.1 布局 |
rendition:orientation |
|
8.2.2.2 方向 |
rendition:spread |
|
8.2.2.3 合成跨页 |
| — |
|
8.2.2.4 跨页放置 |
rendition:viewport(已弃用) |
— | 8.2.2.5 视口尺寸 (已弃用) |
rendition:flow |
|
8.3.1
rendition:flow 属性 |
| — |
|
8.3.2
rendition:align-x-center 属性 |
阅读系统开发者可以引入 本规范未定义的功能,以解决 EPUB 内容文档渲染中的阅读系统特定问题。
为促进这种实验,EPUB 创建者 MAY 在包文档中包含自定义属性和供
spine
使用的覆盖项,前提是它们不使用 rendition:
前缀。
自定义属性应仅处理特定阅读 系统专有的渲染问题。本 规范应被扩展,以提供多个独立阅读 系统都能使用的扩展。
此词汇表中的属性可用于 manifest
元素的 itemproperties 属性。
用于引用这些属性的前缀 URL 是
http://idpf.org/epub/vocab/package/item/#。
| 名称: |
cover-image
|
|---|---|
| 描述: | cover-image 属性将所描述的出版物
资源标识为
EPUB 出版物的封面图像。
|
| 适用于: | 所有光栅和矢量图像类型 |
| 基数: |
Zero or one
|
| 名称: |
mathml
|
|---|---|
| 描述: | mathml 属性表示所描述的出版物
资源
包含一个或多个 MathML 标记实例。 |
| 适用于: | EPUB 内容 文档 |
| 基数: |
Zero or more
|
| 名称: |
remote-resources
|
|---|---|
| 描述: |
更多信息请参阅 3.6 资源位置。 |
| 适用于: | 所有具有内部引用能力的出版物资源 (例如,XHTML 内容 文档、SVG 内容 文档、 CSS 样式表和 媒体叠加文档)。 |
| 基数: |
Zero or more
|
| 名称: |
scripted
|
|---|---|
| 描述: | scripted 属性表示所描述的出版物
资源是一个
脚本化内容
文档(即,包含脚本和/或 [html]
form
元素)。
|
| 适用于: | EPUB 内容 文档 |
| 基数: |
Zero or more
|
| 名称: |
svg
|
|---|---|
| 描述: |
当 SVG 标记直接包含在资源中时,此属性 MUST
被设置;当 SVG 从资源中被引用时(例如,从 [html]
|
| 适用于: | XHTML 内容 文档;对于 SVG 内容文档,该值是隐含的。 |
| 基数: |
Zero or more
|
| 名称: |
switch
|
|---|---|
| 描述: |
|
| 适用于: | XHTML 内容 文档。 |
| 基数: |
Zero or more
|
此词汇表中的属性可用于 spine
元素的
itemrefproperties 属性。
用于引用这些属性的前缀 URL 是
http://idpf.org/epub/vocab/package/itemref/#。
| 名称: |
page-spread-left
|
|---|---|
| 描述: |
|
| 名称: |
page-spread-right
|
|---|---|
| 描述: |
|
此词汇表中的属性可用于
元素的
metaproperty 属性。
用于引用这些属性的前缀 URL 是
http://www.idpf.org/epub/vocab/overlays/#。
前缀“media:”被保留供使用于
此词汇表中的属性,并且无需在包文档中声明。
| 名称: |
active-class
|
|---|---|
| 描述: | EPUB 创建者定义的 CSS 类名,用于应用 到当前正在播放的 EPUB 内容文档 元素。 |
| 允许值: |
xsd:string
|
| 基数: |
Zero or one
|
| 示例: |
<meta
property="media:active-class">-epub-media-overlay-active</meta>
|
| 名称: |
duration
|
|---|---|
| 描述: | 整个呈现或某个特定媒体叠加 文档的时长。 所指定的时长会计入创作时已知的音频片段,因此 不包括来自外部资源的实时流和语音合成。 |
| 允许值: | |
| 基数: | 对于 EPUB 出版物以及 每个媒体叠加 文档均为 exactly one。 |
| 示例: |
<meta property="media:duration">1:36:20</meta>
|
| 名称: |
narrator
|
|---|---|
| 描述: | 叙述者的姓名。 |
| 允许值: |
xsd:string
|
| 基数: |
Zero or more
|
| 示例: |
<meta property="media:narrator">Joe Speaker</meta>
|
| 名称: |
playback-active-class
|
|---|---|
| 描述: | 作者定义的 CSS 类名,用于当播放处于活动状态时应用到 EPUB 内容 文档的 文档元素。 |
| 允许值: |
xsd:string
|
| 基数: |
Zero or one
|
| 示例: |
<meta
property="media:playback-active-class">-epub-media-overlay-playing</meta>
|
本附录描述 EPUB 支持的带前缀 CSS 属性。
本节描述用于 [css-writing-modes-3] 的 -epub-
前缀属性。
此属性是 text-orientation
属性 [css-writing-modes-3] 的带前缀版本。
| 名称: | -epub-text-orientation |
|---|---|
| 值: | mixed | upright | sideways | sideways-right |
为与现有内容兼容,-epub-text-orientation 属性还
支持已弃用的 vertical-right、rotate-right 和
rotate-normal 关键字。下表指定这些值在
被指定时产生的效果。
| 已弃用值 | 要使用的值 |
|---|---|
vertical-right |
mixed |
rotate-right |
sideways |
rotate-normal |
sideways |
此属性是 writing-mode 属性
[css-writing-modes-3] 的带前缀版本,具有相同的语法和
行为。
| 名称: | -epub-writing-mode |
|---|---|
| 值: | horizontal-tb | vertical-rl | vertical-lr |
这些属性是 text-combine-upright
属性 [css-writing-modes-3] 的带前缀版本,不过
-epub-text-combine
已弃用。
| 名称: | -epub-text-combine-horizontal |
|---|---|
| 值: | none | all |
| 名称: | -epub-text-combine(已弃用) |
|---|---|
| 值: | none | horizontal | horizontal <number> |
为与现有内容兼容,-epub-text-combine-horizontal 和
-epub-text-combine 属性还支持若干已弃用关键字。下
表指定这些关键字在被指定时产生的效果。
| 带前缀版本 | CSS 等价项 |
|---|---|
-epub-text-combine-horizontal: none |
text-combine-upright: none |
-epub-text-combine-horizontal: all |
text-combine-upright: all |
-epub-text-combine: none |
text-combine-upright: none |
-epub-text-combine: horizontal |
text-combine-upright: all |
-epub-text-combine: horizontal <number> |
无等价项 |
本节描述用于
[css-text-3] 的 -epub- 前缀属性
(以及一个带前缀值)。
此属性是 hyphens 属性 [css-text-3] 的带前缀版本。
| 名称: | -epub-hyphens |
|---|---|
| 值: | none | manual | auto | all |
为与现有内容兼容,-epub-hyphens 属性还支持
已弃用的 all 关键字。该值在 CSS 中不再受支持,也没有可替代使用的
等价项。
此属性是 line-break 属性 [css-text-3] 的带前缀版本。
| 名称: | -epub-line-break |
|---|---|
| 值: | auto | loose | normal | strict |
此属性是 text-align-last 属性
[css-text-3] 的带前缀版本。
| 名称: | -epub-text-align-last |
|---|---|
| 值: | auto | start | end | left | right | center | justify |
此属性是 word-break 属性 [css-text-3] 的带前缀版本。
| 名称: | -epub-word-break |
|---|---|
| 值: | normal | keep-all | break-all |
此属性是 text-transform 属性
[css-text-3] 的带前缀值。
| 名称: | text-transform |
|---|---|
| 值: | -epub-fullwidth |
为与现有内容兼容,text-transform 属性还支持
已弃用的 -epub-fullwidth 关键字。指定时,它具有与
text-transform: full-width 相同的效果。
本节描述用于 [css-text-decor-3] 的 -epub-
前缀属性。
此属性是 text-emphasis-color
属性 [css-text-decor-3] 的带前缀版本。
| 名称: | -epub-text-emphasis-color |
|---|---|
| 值: | <color> |
此属性是 text-emphasis-position
属性 [css-text-decor-3] 的带前缀版本。
| 名称: | -epub-text-emphasis-position |
|---|---|
| 值: | [ over | under ] && [ right | left ] |
此属性是 text-emphasis-style
属性 [css-text-decor-3] 的带前缀版本。
| 名称: | -epub-text-emphasis-style |
|---|---|
| 值: | none | [ [ filled | open ] || [ dot | circle | double-circle | triangle | sesame ] ] | <string> |
此属性是 text-underline-position
属性 [css-text-decor-3] 的带前缀版本。
| 名称: | -epub-text-underline-position |
|---|---|
| 值: | auto | [ under || [ left | right ] ] | alphabetic |
为与现有内容兼容,-epub-text-underline-position
属性的值还支持已弃用的 alphabetic 关键字。指定时,它具有
与 text-underline-position: auto 相同的效果。
本节是非规范性的。
由于早期 EPUB 3 版本中使用的 viewport meta 标签的 Safari
HTML 定义并非官方认可的标准,本规范定义了一种
基本语法,以允许 EPUB 创建者表达用于渲染宽度和
高度尺寸的固定布局文档。
此语法也受到 [css-viewport-1] 中定义的 viewport
meta 标签解析算法的影响。
该语法有意尽可能保持通用,因为定义所有可能的属性和值并不属于本规范的范围。 它只定义用于定义属性和值对的基本要求,以及表达式之间可能的分隔符。
对于固定布局文档,viewport
meta 标签 [html] MUST 具有符合以下定义的 name
和 content 属性:
name
属性 [html] 的值,在空白规范化 [xml] 后 MUST 为 viewport。
content
属性 [html] 的值,在空白
规范化 [xml] 后 MUST 采用以下形式:
| viewport | = | property, { sep, property } ; |
| property | = | name, [ assign, value ] ; |
| name | = | ? character data ? ; |
| value | = | ? character data ? ; |
| sep | = | sep-char, { sep-char } ; |
| sep-char | = | ( ";" | "," | space ) ; |
| assign | = | [ space ], "=", [ space ] ; |
| space | = | #x20 ; |
对属性名称和值的唯一限制是,它们 MUST NOT 包含分隔符字符或赋值字符。
本节中的创作要求适用于空白规范化 [xml] 之后 (即,在阅读系统去除前导和尾随空白,并将属性内所有多个空白实例压缩为单个空格之后)。 EPUB 创建者 MAY 在所创作的标签中包含任何空白 字符 [xml],只要结果对此 定义有效。
对 [html] 语法允许在
meta 元素上的任何其他属性没有限制。
有关如何指定必需的 height 和 width
属性及其必需值的更多信息,请参阅 8.2.2.6 内容文档尺寸。
虽然 viewport meta 标签允许 EPUB 创建者使用
height 和 width 以外的属性,并且不为这些属性包含值,
但强烈不建议这样使用。设置其他属性可能会对固定布局文档的渲染造成意外后果。
本节是非规范性的。
包文档的模式可在 https://github.com/w3c/epubcheck/tree/master/src/main/resources/com/adobe/epubcheck/schema/30/package-30.nvdl 获取。
使用此模式进行验证需要支持 [nvdl]、 [relaxng-schema]、 [isoschematron] 和 [xmlschema-2] 的处理器。
NVDL 模式层可以由仅使用嵌入的 RELAX NG 和 ISO Schematron 模式的多遍验证替代。
这些模式可能会在本规范的正式修订之外更新和修正。因此, 它们可能随时发生变化。
container.xml 文件的模式
可在
https://github.com/w3c/epubcheck/tree/master/src/main/resources/com/adobe/epubcheck/schema/30/ocf-container-30.nvdl
获取。
使用此模式进行验证需要支持 [relaxng-schema] 和 [xmlschema-2] 的处理器。
encryption.xml
文件的模式包含在 [xmlsec-rngschema-20130411] 中。
signatures.xml
文件的模式包含在 [xmlsec-rngschema-20130411] 中。
媒体叠加文档的模式可在 https://github.com/w3c/epubcheck/tree/main/src/master/resources/com/adobe/epubcheck/schema/30/media-overlay-30.nvdl 获取。
使用此模式进行验证需要支持 [nvdl]、 [relaxng-schema]、 [isoschematron] 和 [xmlschema-2] 的处理器。
NVDL 模式层可以由仅使用嵌入的 RELAX NG 和 ISO Schematron 模式的多遍验证替代。
本节是非规范性的。
请考虑以下一个包文档和一个 XHTML 内容文档的摘录:
<package …>
<metadata …>
…
<link rel="record"
href="meta/data.xml"
media-type="application/marc"/>
<link rel="record"
href="https://www.example.org/meta/data2.xml"
media-type="application/marc"/>
…
</metadata>
<manifest>
…
<item id="page"
href="page.xhtml"
media-type="application/xhtml+xml"/>
<item id="nav"
href="nav.xhtml"
media-type="application/xhtml+xml"
properties="nav"/>
<item id="style"
href="style.css"
media-type="text/css"/>
<item id="font_otf"
href="fonts/font-file.otf"
media-type="font/otf"/>
<item id="font_otf_remote"
href="https://www.example.org/fonts/font-file2.otf"
media-type="font/otf"/>
<item id="font_cff"
href="fonts/font-file.cff"
media-type="font/sfnt"/>
<item id="pls"
href="speech/cmn.pls"
media-type="application/pls+xml"/>
<item id="image_1"
href="media/image_1.png"
media-type="image/png"/>
<item id="image_2"
href="media/image_2.png"
media-type="image/png"
fallback="image_desc"/>
<item id="image_desc"
href="image_desc.xhtml"
media-type="application/xhtml+xml"/>
<item id="image_3_heic"
href="media/image_3.heic"
media-type="image/heic"/>
<item id="image_3_png"
href="media/image_3.png"
media-type="image/png"/>
<item id="widget"
href="widget.xhtml"
media-type="application/xhtml+xml"/>
…
</manifest>
<spine>
…
<itemref idref="page_001"/>
<itemref idref="image_2"/>
…
</spine>
</package>
<html …>
<head …>
…
<link rel="stylesheet" type="text/css" href="style.css"/>
<link rel="pronunciation" type="application/pls+xml" href="speech/cmn.pls"/>
…
</head>
<body>
<img src="media/image1_png"/>
…
<a href="media/image_2.png">…</a>
…
<picture>
<source srcset="media/image_3.heic" type="image/heic"/>
<img src="media/image_3.png"/>
</picture>
…
<iframe src="widget.xhtml"></iframe>
…
<a href="https://www.example.org/some_content">…</a>
</body>
</html>
EPUB 出版物中的各种资源可按如下方式分类。 (有关这些类别的更多信息,请参阅 3. 出版物资源。)
meta/data.xml该资源是元数据记录,存储在 EPUB
容器中。它通过包文档元数据中的
元素链接。因此,它是manifest 平面上的链接
资源(即,未列在 manifest
中)。它不属于
任何其他平面。
link
https://www.example.org/meta/data2.xml该资源是远程存储的元数据记录。它通过
包文档元数据中的
元素链接。因此,它是 manifest 平面上的链接资源
(即,未列在 manifest 中)。它不属于任何其他平面。
link
page.xhtml该资源是 XHTML 文档。它列在 [[EPUB spine | spine=] 中。它是 manifest 平面上的 出版物资源,是 容器资源,是 spine 平面上的 EPUB 内容文档,并且不存在于 内容平面上。不需要 fallback。
nav.xhtml该资源是 EPUB 导航 文档。它未列在 spine 中。它是 manifest 平面上的 出版物资源,是容器资源,并且不存在于 spine 平面或内容平面上。不需要 fallback。
style.css该资源是 CSS 文件。它未列在 spine 中,但从 [html]
link 元素引用。它是 manifest 平面上的出版物
资源,是容器资源,不存在于 spine 平面上,并且是内容平面上的核心媒体类型
资源。不需要 fallback。
font/font-file.otf该资源是 TrueType 字体文件。它未列在 spine 中,但从 CSS 文件引用。它是 manifest 平面上的出版物资源,是容器资源, 不存在于 spine 平面上,并且是内容平面上的核心媒体类型资源。不需要 fallback。
https://www.example.org/fonts/font-file2.otf该资源是 TrueType 字体文件。它未列在 spine 中,但从 CSS 文件引用。它是 manifest 平面上的出版物资源,是远程资源,不 存在于 spine 平面上,并且是内容平面上的核心媒体类型资源。不需要 fallback。
font/font-file.cff该资源是 Compact Font Format 字体文件。它未列在 spine 中,但从 CSS 文件引用。其媒体类型未列为核心媒体类型。它是 manifest 平面上的出版物资源,是容器资源,不存在于 spine 平面上,并且是内容平面上的豁免资源。不需要 fallback。
speech/cmn.pls该资源是发音词典文件。它未列在 spine 中,但从
[html] link 元素引用。它是
manifest 平面上的出版物资源,是容器资源,不存在于 spine
平面上,并且是内容平面上的豁免资源。不需要 fallback。
image/image_1.png该资源是 PNG 图像文件。它未列在 spine 中,但从
[html]
img
元素引用。它是 manifest 平面上的出版物资源,是容器
资源,不存在于 spine 平面上,并且是内容平面上的核心媒体类型资源。不需要
fallback。
image/image_2.png该资源是 PNG 图像文件。它通过 [html]
a
元素引用。因为它
是从超链接引用的,所以它必须列在 spine 中。它是
manifest 平面上的出版物资源,是容器资源,是
spine 平面上的外来内容文档,并且是内容平面上的核心媒体类型资源。作为外来内容
文档,它需要 fallback,该 fallback 通过manifest fallback 提供。
image_desc.xhtml该资源是 XHTML 文档。它是 manifest fallback 的“目标”,因此未 显式列在 spine 中(但会在需要时“替换”现有的 spine 项)。它 是 manifest 平面上的出版物资源,是容器资源,是 spine 平面上的 EPUB 内容 文档,并且由于它在渲染另一个 EPUB 内容 文档时未被“使用”,所以不存在于内容平面上。不需要 fallback。
image/image_3.heic该资源是高效(HEIC)图像文件。它未列在 spine 中,但从
[html]
source
元素引用。其媒体类型未列为核心媒体类型。
它是 manifest 平面上的出版物资源,是容器资源,不存在于 spine 平面上,并且是内容平面上的外来
资源。作为外来资源,它需要 fallback,该 fallback 由 [html]
img
元素作为同级元素提供,该元素位于 [html]
picture
元素中。
image/image_3.png该资源是 PNG 图像文件。它未列在 spine 中,但从
[html]
img
元素引用,该元素被用作 [html]
picture
元素的内在 fallback。它是 manifest 平面上的出版物资源,是容器资源,不
存在于 spine 平面上,并且是内容平面上的核心媒体类型资源。不需要
fallback。
widget.xhtml该资源是 XHTML 文档。它未列在 spine 中,但从
[html]
iframe
元素引用。它是 manifest 平面上的出版物资源,是容器
资源,不存在于 spine 平面上,并且由于它在渲染另一个
EPUB 内容文档时被“使用”,所以是内容平面上的核心媒体类型资源。不需要 fallback。
https://www.example.org/some_content该资源通过 [html]
a
元素引用,并且未存储在 EPUB
容器中。阅读系统通常会通过单独的浏览器实例打开此链接。它
不位于本规范定义的任何平面上。
有关不同类型资源用法的更多示例,请参见 5.6.2.2 示例。
请考虑以下示例包文档:
<package …>
…
<manifest>
…
<item id="chap01"
href="scripted01.xhtml"
media-type="application/xhtml+xml"
properties="scripted"/>
<item id="inset01"
href="scripted02.xhtml"
media-type="application/xhtml+xml"
properties="scripted"/>
<item id="slideshowjs"
href="slideshow.js"
media-type="text/javascript"/>
</manifest>
<spine …>
<itemref idref="chap01"/>
…
</spine>
…
</package>
以及以下文件 scripted01.xhtml:
<html …>
<head>
…
<script type="text/javascript">
const te = navigator.epubReadingSystem.hasFeature("touch-events");
const te_message = te ? "passes" : "does not pass";
alert(`The reading system ${te_message} touch events to the content.`);
</script>
</head>
<body>
…
<iframe src="scripted02.xhtml" … />
…
</body>
</html>
以及以下文件 scripted02.xhtml:
<html …>
<head>
…
<script type="text/javascript" href="slideshow.js"></script>
</head>
<body>
…
</body>
</html>
从这些示例可以看出:
此示例演示使用 OCF 格式将经过签名和加密的 EPUB 出版物包含在 OCF ZIP 容器中。
OCF ZIP 容器中的文件有序列表:
mimetype
META-INF/container.xml
META-INF/signatures.xml
META-INF/encryption.xml
EPUB/As_You_Like_It.opf
EPUB/book.html
EPUB/nav.html
EPUB/images/cover.png
mimetype 文件的内容
application/epub+zip
META-INF/container.xml 文件的内容
<?xml version="1.0"?>
<container
version="1.0"
xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
<rootfiles>
<rootfile
full-path="EPUB/As_You_Like_It.opf"
media-type="application/oebps-package+xml"/>
</rootfiles>
</container>
META-INF/signatures.xml 文件的内容
<signatures
xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
<Signature
Id="AsYouLikeItSignature"
xmlns="http://www.w3.org/2000/09/xmldsig#">
<!--
SignedInfo is the information that is actually signed.
In this case, the SHA-1 algorithm is used to sign the
canonical form of the XML documents enumerated in the
Object element below.
-->
<SignedInfo>
<CanonicalizationMethod
Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
<SignatureMethod
Algorithm="http://www.w3.org/2000/09/xmldsig#dsa-sha1"/>
<Reference
URI="#AsYouLikeIt">
<DigestMethod
Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<DigestValue>
…
</DigestValue>
</Reference>
</SignedInfo>
<!--
The signed value of the digest above, using the DSA
algorithm
-->
<SignatureValue>
…
</SignatureValue>
<!--
The key used to validate the signature
-->
<KeyInfo>
<KeyValue>
<DSAKeyValue>
<P>…</P>
<Q>…</Q>
<G>…</G>
<Y>…</Y>
</DSAKeyValue>
</KeyValue>
</KeyInfo>
<!--
The list of resources to sign (note that the canonical
form of XML documents is signed, while the binary form
of all other resources is used)
-->
<Object>
<Manifest
Id="AsYouLikeIt">
<Reference
URI="EPUB/As_You_Like_It.opf">
<Transforms>
<Transform
Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
</Transforms>
<DigestMethod
Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<DigestValue>
</DigestValue>
</Reference>
<Reference URI="EPUB/book.html">
<Transforms>
<Transform
Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
</Transforms>
<DigestMethod
Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<DigestValue>
</DigestValue>
</Reference>
<Reference
URI="EPUB/images/cover.png">
<DigestMethod
Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<DigestValue>
</DigestValue>
</Reference>
</Manifest>
</Object>
</Signature>
</signatures>
META-INF/encryption.xml 文件的内容
<?xml version="1.0"?>
<encryption
xmlns="urn:oasis:names:tc:opendocument:xmlns:container"
xmlns:enc="http://www.w3.org/2001/04/xmlenc#"
xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<!--
The RSA-encrypted AES-128 symmetric key used to encrypt
data enumerated in EncryptedData blocks below
-->
<enc:EncryptedKey
Id="EK">
<enc:EncryptionMethod
Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5"/>
<ds:KeyInfo>
<ds:KeyName>
John Smith
</ds:KeyName>
</ds:KeyInfo>
<enc:CipherData>
<enc:CipherValue>
xyzabc…
</enc:CipherValue>
</enc:CipherData>
</enc:EncryptedKey>
<!--
Each EncryptedData block identifies a single resource
that has been encrypted using the AES-128 algorithm.
The data remains stored, in its encrypted form, in the
original file within the container.
-->
<enc:EncryptedData Id="ED1">
<enc:EncryptionMethod
Algorithm="http://www.w3.org/2001/04/xmlenc#kw-aes128"/>
<ds:KeyInfo>
<ds:RetrievalMethod
URI="#EK"
Type="http://www.w3.org/2001/04/xmlenc#EncryptedKey"/>
</ds:KeyInfo>
<enc:CipherData>
<enc:CipherReference
URI="EPUB/book.html"/>
</enc:CipherData>
</enc:EncryptedData>
<enc:EncryptedData Id="ED2">
<enc:EncryptionMethod
Algorithm="http://www.w3.org/2001/04/xmlenc#kw-aes128"/>
<ds:KeyInfo>
<ds:RetrievalMethod
URI="#EK" Type="http://www.w3.org/2001/04/xmlenc#EncryptedKey"/>
</ds:KeyInfo>
<enc:CipherData>
<enc:CipherReference
URI="EPUB/images/cover.png"/>
</enc:CipherData>
</enc:EncryptedData>
</encryption>
EPUB/As_You_Like_It.opf 文件的内容
<?xml version="1.0"?>
<package
version="3.0"
xml:lang="en"
xmlns="http://www.idpf.org/2007/opf"
unique-identifier="pub-id">
<metadata
xmlns:dc="http://purl.org/dc/elements/1.1/">
<dc:identifier
id="pub-id">
urn:uuid:B9B412F2-CAAD-4A44-B91F-A375068478A0
</dc:identifier>
<dc:language>
en
</dc:language>
<dc:title>
As You Like It
</dc:title>
<dc:creator
id="creator">
William Shakespeare
</dc:creator>
<meta
property="dcterms:modified">
2000-03-24T00:00:00Z
</meta>
<dc:publisher>
Project Gutenberg
</dc:publisher>
<dc:date>
2000-03-24
</dc:date>
<meta
property="dcterms:dateCopyrighted">
9999-01-01
</meta>
<dc:identifier
id="isbn13">
urn:isbn:9780741014559
</dc:identifier>
<dc:identifier
id="isbn10">
0-7410-1455-6
</dc:identifier>
<link
rel="xml-signature"
href="../META-INF/signatures.xml#AsYouLikeItSignature"/>
</metadata>
<manifest>
<item id="r4915"
href="book.html"
media-type="application/xhtml+xml"/>
<item id="r7184"
href="images/cover.png"
media-type="image/png"/>
<item id="nav"
href="nav.html"
media-type="application/xhtml+xml"
properties="nav"/>
</manifest>
<spine>
<itemref
idref="r4915"/>
</spine>
</package>
以下是允许的时钟值示例:
5:34:31.396 = 5 小时、34 分钟、31 秒和 396 毫秒
124:59:36 = 124 小时、59 分钟和 36 秒
0:05:01.2 = 5 分钟、1 秒和 200 毫秒
0:00:04 = 4 秒
09:58 = 9 分钟和 58 秒
00:56.78 = 56 秒和 780 毫秒
76.2s = 76.2 秒 = 76 秒和 200 毫秒
7.75h = 7.75 小时 = 7 小时和 45 分钟
13min = 13 分钟
2345ms = 2345 毫秒
12.345 = 12 秒和 345 毫秒
本附录为 EPUB 包文档注册媒体类型 application/oebps-package+xml。
此注册取代 RFC4839(见 https://www.rfc-editor.org/rfc/rfc4839)。
包文档是描述 EPUB 出版物的 XML 文件。它标识 EPUB 出版物中的资源 并提供元数据信息。包文档及其相关规范由 World Wide Web Consortium(W3C)维护和定义。
application
oebps-package+xml
无。
无。
若为 UTF-8,则为 8bit;若为 UTF-16,则为 binary。
包文档为 XML,以 UTF-8 或 UTF-16 表示。当包 文档以 UTF-8 编写时,该文件与 8bit 兼容。当以 UTF-16 编写时, 必须使用 binary content-transfer-encoding。更多详情请参阅 [rfc7303]。
包文档包含符合 XML 1.0 规范的格式良好的 XML。
显然,可以创作恶意文件,例如包含格式错误数据的文件。 大多数 XML 解析器会通过严格执行一致性来保护自身免受此类攻击。
所有读取包文档的处理器都应严格检查所检索数据的大小和有效性。
EPUB 3 规范目前没有在包文档格式内进行加密、签名或 身份验证的规定。
无。
此媒体类型注册适用于 EPUB 包文档,如位于 https://www.w3.org/TR/epub-33/ 的 EPUB 3 规范所述。
EPUB 3 规范取代 Open Packaging Format 2.0.1 规范,该规范位于 https://idpf.org/epub/20/spec/OPF_2.0.1_draft.htm,
且也使用 application/oepbs-package+xml 媒体
类型。
此媒体类型广泛用于 EPUB 格式电子书的分发。
无
.opf
TEXT
EPUB 规范片段标识符是为 EPUB 出版物定义的自定义片段标识符。它们可用于 引用为该出版物定义的任何 出版物资源中的任意内容。这些标识符定义 于 https://idpf.org/epub/linking/cfi/。
EPUB 3 Working Group (public-epub-wg@w3.org)
COMMON
World Wide Web Consortium(W3C)
本附录为 EPUB Open Container
Format (OCF) 注册媒体类型 application/epub+zip。
OCF ZIP 容器,或 EPUB 容器文件,是一种基于 zip 归档 格式的容器技术(见 https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT)。 它用于封装 EPUB 出版物。OCF 及其相关标准由 World Wide Web Consortium(W3C)维护和定义。
application
epub+zip
无。
无。
OCF ZIP 容器文件是以
application/zip 媒体类型编码的二进制文件。
所有读取 OCF ZIP 容器文件的处理器都应严格检查所检索数据的大小和 有效性。
此外,由于 OCF ZIP 容器文件中可嵌入各种内容类型,
application/epub+zip 可能描述具有此处未指出的额外安全
影响的内容。不过,只有在处理器识别并处理
附加内容,或将该内容的进一步处理分派给其他处理器的情况下,
才可能出现安全问题。在这种情况下,
安全事项将超出本注册文档的范围。
适用于 application/zip 的安全注意事项也适用于 OCF ZIP
容器文件。
无。
此媒体类型注册适用于 EPUB Open Container Format (OCF),如位于 https://www.w3.org/TR/epub-33/
的 EPUB 3 规范所述。
EPUB 3 规范取代 RFC 4839 和 Open Container
Format 2.0.1 规范,后者位于 https://idpf.org/epub/20/spec/OCF_2.0.1_draft.doc,
并且也
使用 application/epub+zip 媒体类型。
此媒体类型广泛用于 EPUB 格式电子书的分发。
0: PK 0x03 0x04, 30: mimetype, 38:
application/epub+zip
OCF ZIP 容器文件最常以扩展名
.epub 标识。
ZIP
EPUB 规范片段标识符是为 EPUB 出版物定义的自定义片段标识符。它们可用于 引用为该出版物定义的任何 出版物资源中的任意内容。这些标识符定义 于 https://idpf.org/epub/linking/cfi/。
EPUB 3 Working Group (public-epub-wg@w3.org)
COMMON
World Wide Web Consortium(W3C)
audio
§9.2.2.8
body
§9.2.2.4
collection
§5.8.1
Compression
§4.2.6.3.2.2
container
§4.2.6.3.1.1
dc:contributor
§5.5.3.2.2
dc:creator
§5.5.3.2.3
dc:date
§5.5.3.2.4
dc:identifier
§5.5.3.1.1
dc:language
§5.5.3.1.3
dc:subject
§5.5.3.2.5
dc:title
§5.5.3.1.2
dc:type
§5.5.3.2.6
EncryptedData
§4.2.6.3.2.1
EncryptedKey
§4.2.6.3.2.1
encryption
§4.2.6.3.2.1
epub:type
§C.2
head
§9.2.2.2
item
§5.6.2
itemref
§5.7.2
link
§5.5.6
links
§4.2.6.3.1.4
manifest
§5.6.1
meta
§5.5.4
metadata
§5.5.1
package
§5.4
par
§9.2.2.6
rootfile
§4.2.6.3.1.3
rootfiles
§4.2.6.3.1.2
seq
§9.2.2.5
signatures
§4.2.6.3.6.1
smil
§9.2.2.1
spine
§5.7.1
text
§9.2.2.7
a
元素
area
元素
base
元素
bdo
元素
canvas
元素
content 属性(用于 meta
元素)
dir 属性(用于 html-global
元素)
div
元素
embed
元素
form
元素
href 属性(用于 a 元素)
html
元素
iframe
元素
img
元素
li
元素
name 属性(用于 meta
元素)
object
类型
ol
元素
picture
元素
role
属性
rp
元素
script
元素
source
元素
span
元素
src 属性(用于 source
元素)
src 属性(用于 img 元素)
srcset 属性(用于 source
元素)
srcset 属性(用于 img
元素)
track
元素
type 属性(用于 source
元素)
video
元素
list)
svg
元素
title
元素
本节是非规范性的。
注意,此变更日志仅标识自 EPUB 3.2 以来的实质性变更——即可能影响 EPUB 出版物一致性的变更。
有关已解决的所有议题列表,请参阅工作 组的议题跟踪器。
name 替换为
hasFeature。参见议题 2543。
dir 属性标记为实现不足。
参见拉取请求
2515。viewport meta 标签中。参见拉取
请求 2503。
acquire 和 xmp 属性后,将其移除。参见议题 2489。
head 元素和元数据内容上使用 epub:type 属性。参见议题 2486。
viewport meta 标签定义中存在没有值的属性。参见
拉取请求 2457。
viewport meta 的 height 和 width 不得
被多次声明。参见议题
2442。epub:type 属性用法
定义中的轻微矛盾。参见议题 2434。href 属性不得
用于引用其他包文档元素(即,不得通过其 manifest 或 spine 条目间接引用资源)。参见议题
2420。text 元素定义中添加了关于使用
嵌入式定时媒体的说明。参见议题
2397。epub:type 的元素限制。
参见议题 2377。meta 元素现已正式定义。参见议题 2292。
title 元素中的标记限于
HTML 元素。参见议题 2355。authority 属性值的限制,并
添加了引用旧 IDPF
登记表的说明。参见议题 2200。collection-type 值的建议,并替换为关于能够改进相关
内容处理的说明。参见议题 2071。
epub:type 的过时要求,
这些要求暗示其与 ARIA roles 等价。参见议题
2070。refines 属性不得与全局固定布局
属性声明一起使用。参见议题
2036。audio
元素设为可选,澄清了其定义,并调整了
规范中其他位置的文本,以处理该元素确实不存在的情况。
参见议题 1986。
page-spread-center 属性现在是
spread-none 的别名。参见议题
1929。
page-spread-center 的使用。它现在是
spread-none 的别名。参见议题
1929。
base 元素添加到不推荐的 XHTML 构造列表中。
参见议题 1699。file 方案的绝对 URL。
参见议题 1688。link 元素可用于链接替代格式中的单个
元数据属性。参见议题 1666。application/ecmascript 添加为脚本的核心媒体类型。
参见议题 1353。link 元素引用的资源必须
具有核心媒体类型 fallback 的要求。参见议题
1312。direction 属性的引用。参见议题
1614。
requiredExtensions 属性的要求。参见议题 1087。dc:creator 和 dc:contributor 元素具有
多个角色,并允许 publisher 使用角色。参见议题
1129 和 议题 1583container.xml、encryption.xml 和
signatures.xml 文件添加了元素和属性定义。所有模式均被视为非规范性。
参见议题 1566。
META-INF 目录中。参见议题
1205。
refines 属性使用片段标识符
来引用出版物资源。参见议题 1361。par 和
seq 顺序必须匹配默认阅读顺序的要求改为指南。参见议题
1458
epub:type
属性的 nav 元素不受 EPUB 导航文档内容模型限制的约束。参见议题 976。dc:language 元素的值必须是格式良好的
语言标签。参见议题 1325。dir 属性添加了 auto 值,并澄清了该
属性的优先级。参见议题
1491 和 议题 1494。link 元素添加了 hreflang 属性,用于标识
链接资源的语言。参见议题
1488。epub:type 属性不会提升出版物的
无障碍性。添加了指向 role 属性和
DPUB-ARIA 词汇表的无障碍指引。toc nav 的顺序必须匹配
spine 中 EPUB 内容文档以及每个文件内元素顺序的要求降级为
建议。参见议题 1283。script 元素不是脚本实例。
参见议题 1352。本节是非规范性的。
规范与艺术一样,都是人类的创造。没有人比 Garth Conboy 为 EPUB 做得更多,他从 1999 年最早的 OEB 1.0 一直到今天的 EPUB 3.3,每一步都参与其中。没有 Garth 的远见、知识和超乎寻常的善良,这一切 都不会发生。我们将 EPUB 3.3 献给他的记忆。 Garth,我们永远感激你。
EPUB 3 工作组的以下成员为本规范的开发作出了贡献:
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:
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:
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:
Referenced in:
Referenced in:
Referenced in: