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