图1:Epub文件组成
下面来分别讲一讲这三个组成部分:
① mimetype
任何一本epub电子书都有一个mimetype文件,且内容是不变的(下面会讲到它是什么内容),这个文件是用来声明epub电子书的文件格式,是告诉阅读系统,压缩的内容是EPub电子出版物。如果你是用文本编辑器(Windows自带的记事本)制作电子书,那么该文件需要去手动创建,请注意该文件是没有扩展名的,如果是用制书软件(Sigil、ePUBee智多星、Wand豌豆等)制作电子书,在创建电子书的时候软件会自动生成而无需自己手动创建。
mimetype文件用记事本程序打开,内容为:
application/epub+zip
要注意,mimetype 文件不能包含新行或者回车。
此外,mimetype 文件必须作为 ZIP 档案中的第一个文件,而且自身不能压缩。
② META-INF文件夹
META-INF用于说明特定文件的存放信息,默认情况下就是用来说核心文件OPF的存放地址,当然根据epub电子书的制作不同,还可能包含数字签名和加密信息等文件(就像掌阅的书籍),不过这些不是必须的,只有container.xml文件是一定有的,因为任何epub阅读系统首先需要寻找这个文件,它等于是电子书阅读器的指路牌。
该文件作用是将阅读系统引导至出版物的包文件——content.opf。每个EPub电子出版物都有一个单一的包文件,它指定构成出版物的所有内容文件及其所需的资源、为用户定义阅读顺序,并且关联元数据以及导航信息。
同mimetype一样,可以用文本编辑器手动创建,或由制书软件自动生成。
container.xml
<?xml version="1.0" encoding="UTF-8"?>
<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
<rootfiles>
<rootfile full-path="OEBPS/content.opf" media-type="application/oebps-package+xml"/>
</rootfiles>
</container>
文字OEBPS/content.opf部分,就是电子书阅读器的“指路牌”了。
③ OEBPS 文件夹
OEBPS文件夹下有包文件、导航文件以及图书资源(网页、图像、字体、样式表、多媒体文件)等。其中content.opf文件和toc.ncx文件为必需,其它文件可根据电子书的具体情况而定。
OEBPS 文件夹中包含的文件可能会较多,这里重点介绍核心.opf文件
content.opf实例(部分)
<?xml version="1.0" encoding="utf-8"?>
<package version="2.0" unique-identifier="BookId" xmlns="http://www.idpf.org/2007/opf">
<metadata xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:opf="http://www.idpf.org/2007/opf">
<dc:identifier>978-7-5470-0865-2</dc:identifier>
<dc:title>刘备不是传说</dc:title>
<dc:creator>剑眉枉凝</dc:creator>
<dc:language>zh</dc:language>
<meta name="Sigil version" content="0.9.9" />
<dc:date opf:event="modification" xmlns:opf="http://www.idpf.org/2007/opf">2018-02-25</dc:date>
<dc:identifier opf:scheme="UUID" id="BookId">urn:uuid:8206bd5c-7d4c-4317-8f0a-2b8cbac49791</dc:identifier>
</metadata>
<manifest>
<item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml"/>
<item id="cover.xhtml" href="Text/cover.xhtml" media-type="application/xhtml+xml"/>
<item id="cover.jpg" href="Images/cover.jpg" media-type="image/jpeg"/>
<item id="Section0001.xhtml" href="Text/Section0001.xhtml" media-type="application/xhtml+xml"/>
<item id="Section0114.xhtml" href="Text/Section0114.xhtml" media-type="application/xhtml+xml"/>
<item id="Style0001.css" href="Styles/Style0001.css" media-type="text/css"/>
<item id="biaoti.png" href="Images/biaoti.png" media-type="image/png"/>
<item id="xiaoyu.png" href="Images/xiaoyu.png" media-type="image/png"/>
<item id="copyright.xhtml" href="Text/copyright.xhtml" media-type="application/xhtml+xml"/>
<item id="tno6.png" href="Images/tno6.png" media-type="image/png"/>
<item id="tno7.png" href="Images/tno7.png" media-type="image/png"/>
<item id="note.png" href="Images/note.png" media-type="image/png"/>
</manifest>
<spine toc="ncx">
<itemref idref="cover.xhtml"/>
<itemref idref="copyright.xhtml"/>
<itemref idref="Section0001.xhtml"/>
<itemref idref="Section0002.xhtml"/>
</spine>
<guide>
</guide>
</package>
别看这些代码很复杂,只要知道这四组标签,就算摸着门路了:
<metadata></metadata>之间为本书的元数据,包含书名、语言、版权、作者、出版者、出版物唯一标识码等等信息;
<manifest></manifest>之间为该epub电子书的所有元素,意思是这本epub电子书中包含哪些文字章节、图片、样式表,这些元素都是以HTML文件或者CSS文件存在的;
<spine></spine>之间为epub电子书的读取顺序,就是书籍的页码的呈现顺序。
<guide></guide>之间列出电子书的特定页面, 例如封面、目录、序言等,属性值指向文件保存地址。一般情况下,epub电子书中的该元素对你阅读无影响。epub电子书可以不用该元素。
如果你学过HTML,搞过前端开发,上面的代码是不是很熟悉?不错,其实,epub格式的电子书就是几个html文件的压缩包,里面的内容从封面、目录到正文内容都是由html文件来承载的,制作精良的电子书还有CSS控制样式的,所以对于有前端知识基础的人来说,制作epub电子书和制作静态网页没有什么区别。
<metadata>元素的几种属性:
●language:语种,可以根据图书的语言自己修改;
●title:电子书的标题,一般指书名
●author:电子书的作者;
●date:事件日期,可以设置三个内容。creation(制作日期,制作该电子书的日期)、modification(软件会自己记录最新的修改日期)、publication(出版日期,纸质出版物的出版日期);
●identifier:识别符,在Sigil中创建一个EPub文件时,会自动生成一个识别符——UUID;也可以再增加一个ISBN属性用来记录纸质书的国际标准书号,如果有的话。
●subject:主题词或关键词;
●description:电子书的内容介绍;
●contributor:贡献者或其它次要责任者;
●source:图书资源或素材的来源;
●rights:版权描述;
以上信息可以直接在Sigil的“元数据编辑器”中直接添加。