EPUB
一种开放的电子书标准格式,本质上是包含XHTML内容文件的ZIP压缩包,由Open Packaging Format(OPF)定义元数据、资源清单和阅读顺序,广泛用于电子书发行与阅读
核心事实
时间轴 (近 90 天)
即便用户能导入自己的 EPUB 文件,排版渲染、字体、分页、脚注跳转等阅读体验细节仍需大量工程投入。
亚马逊 Kindle 使用 AZW/KFX 专有格式,Kobo 使用 Kepub 格式,而开放标准 EPUB 被广泛支持。
字母顺序、manifest顺序或ID命名不保证与人类实际阅读顺序一致。
文件列表不是阅读顺序,目录也不是结构;应找到表达意图的清单并遵循它。
线性文本提取会破坏非线性书籍,脚注、侧边栏和引文框是独立的XHTML文件,在正文中被内联引用,简单按spine顺序提取文本会遗漏它们或错误插入。
解析spine是确定EPUB阅读顺序的正确方法:对每个itemref,将其ID解析到manifest中的条目,然后读取对应文件;如果spine条目指向非XHTML资源,应优雅地跳过。
EPUB的spine条目中linear="no"属性表示该文档属于辅助内容,线性阅读时可跳过。
EPUB的目录文件(NCX或nav.xhtml)只描述导航结构,可能与spine顺序不一致,不能作为阅读顺序的真相来源。
固定版式EPUB(每页是图片的固定布局书籍)无法用文本方案处理,需要检测并回退到OCR或类PDF流程,目前仍是开放问题。
lxml可能把<p></p>变成<p/>,部分阅读器会因此出错,团队最终改用更宽容的HTML解析器来处理许多并非严格合法XML的EPUB。
还有 14 条时间轴事件
全部知识事实 (20)
EPUB本质上是一个装满XHTML文件的ZIP压缩包
65%待验证即便用户能导入自己的 EPUB 文件,排版渲染、字体、分页、脚注跳转等阅读体验细节仍需大量工程投入。
50%待验证亚马逊 Kindle 使用 AZW/KFX 专有格式,Kobo 使用 Kepub 格式,而开放标准 EPUB 被广泛支持。
50%待验证字母顺序、manifest顺序或ID命名不保证与人类实际阅读顺序一致。
50%待验证文件列表不是阅读顺序,目录也不是结构;应找到表达意图的清单并遵循它。
50%待验证线性文本提取会破坏非线性书籍,脚注、侧边栏和引文框是独立的XHTML文件,在正文中被内联引用,简单按spine顺序提取文本会遗漏它们或错误插入。
50%待验证解析spine是确定EPUB阅读顺序的正确方法:对每个itemref,将其ID解析到manifest中的条目,然后读取对应文件;如果spine条目指向非XHTML资源,应优雅地跳过。
50%待验证EPUB的spine条目中linear="no"属性表示该文档属于辅助内容,线性阅读时可跳过。
50%待验证EPUB的目录文件(NCX或nav.xhtml)只描述导航结构,可能与spine顺序不一致,不能作为阅读顺序的真相来源。
50%待验证固定版式EPUB(每页是图片的固定布局书籍)无法用文本方案处理,需要检测并回退到OCR或类PDF流程,目前仍是开放问题。
50%待验证lxml可能把<p></p>变成<p/>,部分阅读器会因此出错,团队最终改用更宽容的HTML解析器来处理许多并非严格合法XML的EPUB。
50%待验证野外大量EPUB格式不合法,团队实现回退策略:先尝试严格XML解析,失败则用lxml.html解析器。
50%待验证团队用50本以上不同来源的书做回归测试。
50%待验证尽可能保留原始DOM,哪怕删除空span都可能破坏布局;尽早规划内联标签的处理,剥离标签只是临时方案。
50%待验证处理Markdown或EPUB格式的电子书时,需要先做结构化解析并去除Markdown标题符号、脚注标记、图片链接等非朗读内容,否则会出现朗读标题符号、脚注混入正文等问题。
50%待验证作者处理损坏章节的务实方式是跳过并继续,而非让整本书转换失败,以在真实数据面前更健壮
50%待验证EPUB的内容文件是严格的XML而非宽容的HTML,一个游离的 实体或未闭合标签都可能让严格XML解析器崩溃
50%待验证正确解析流程为:读container.xml定位opf,解析manifest建立id到href的映射,按spine的itemref声明顺序遍历转换
50%待验证OPF(Open Packaging Format)是EPUB规范的核心组成部分,本质上是一个XML文件,通常命名为content.opf但不强制如此
50%待验证EPUB文件名的字典序与书本的阅读顺序没有关系
50%