#epub #编程
EPUB 是一种 zip 格式上搭建的格式。它的第一个文件必须是无压缩的 mimetype 文件,标明它的 MIME 类型。其他文件都可以使用 zip 压缩算法压缩,以减小电子书体积。
除此之外,最重要的文件是 META-INF 文件夹中的 container.xml。它按照一某种格式指向电子书中的其他内容。被指向的内容中,最重要的是 content.opf 文件(简称 Content 文件)。
Content 文件列出了电子书的书籍内容。例如版权声明、致谢、所有的正文以及尾页等等,还有帮助这些文件渲染的样式表文件等。这些内容分成不同的文件保存。
Content 文件首先要列出所有文件的清单。这就是 manifest 节。
其次,Content 还包含 spine 节。Spine 的意思是书籍,它线性的列出所有内容文件。如果阅读者是从头开始打开电子书,线性的一页一页阅读,那么他的阅读顺序就是 spine 节指定的顺序。
Content 的 manifest 当中,一般还指向一个 nav 文件。这个文件是书籍的导航声明。它也指向书籍的正文文件,所以它跟 spine 有一定的相似之处。
但不同的是,nav 形成树形结构。阅读器会根据它展示出树形的文档树,帮助读者在页面之间非线性的跳转。而不是像 spine 那样面对线性阅读。
此外,nav 和 spine 指向的文档不一定完全相同。
首先,nav 可以指向文档文件当中的某一节。这样就实现了跳转到某一页的某一部分这样的功能。但 spine 没有必要这样做,它只是提供线性顺序。
其次,nav 文件可以不展示所有的文件,例如致谢和附录等内容。文档的作者可以自由决定是否要它加入导航树中。
但总之,最安全和精简的方法,既是将逻辑的文档树写到 nav 中,并且将它的深度优先遍历写到 spine 中。