内容简介:META-INF 用于存放电子书信息,默认情况包含一个该文件告诉电子书阅读器,文件的根文件路径和格式。除去 container.xml 文件外,标准还规定了其他可选文件:这些文件是可选的。
META-INF 用于存放电子书信息,默认情况包含一个 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>
该文件告诉电子书阅读器,文件的根文件路径和格式。除去 container.xml 文件外,标准还规定了其他可选文件:
- manifest.xml 文件列表
- metadata.xml 元数据
- sigatures.xml 数字签名
- encryption.xml 加密
- rights.xml 权限管理
这些文件是可选的。
OEBPS 文件夹
OEBPS 文件夹用于存放真正的图书内容,包括 content.opf
文件, toc.ncx
目录文件,正文内容,css 样式文件,字体文件,封面,图片等等资源。
OPF 文件
opf 文件是 epub 最为重要的文件,是标准的 xml 文件,文件的根元素是 <package>
<package version="2.0" unique-identifier="BookId" xmlns="http://www.idpf.org/2007/opf">
此文件的主要内容由下面组成:
第一部分, <metadata>
元数据,包含书籍的出版信息,主要由两个子元素组成
-
dc:metadata元素,使用 Dublin Core , 包含 15 项核心元素:dc:title dc:creator dc:subject dc:description dc:publisher dc:contributor dc:date dc:type dc:format dc:identifier dc:source dc:language dc:relation dc:coverage dc:rights
-
meta标签,扩展元素,如果有信息在上面标签中无法描述,则扩展到该 meta 中
举例
<metadata xmlns:opf="http://www.idpf.org/2007/opf" xmlns:dc="http://purl.org/dc/elements/1.1/"> <dc:language>zh-CN</dc:language> <dc:title>圣殿春秋</dc:title> <dc:creator opf:role="aut" opf:file-as="雨浪飘零">『英』肯·福莱特</dc:creator> <dc:publisher>上海译文出版社</dc:publisher> <meta content="0.9.6" name="Sigil version" /> <dc:date xmlns:opf="http://www.idpf.org/2007/opf" opf:event="modification">2016-07-16</dc:date> <dc:identifier opf:scheme="UUID" id="BookId">urn:uuid:97cabb7a-2ab9-4fe2-a56b-c075114f2187</dc:identifier> <meta name="cover" content="cover.jpg" /> </metadata>
第二部分为 <manifest>
文件列表,该列表中包含出版物的所有文件,每一行由一个 item 构成
<item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml"/>
其中:
- id 为文件 id
- href 为文件相对路径
- media-type 为文件的媒体类型
举例,文件内容有删减
<manifest> <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml"/> <item id="Preface03.xhtml" href="Text/Preface03.xhtml" media-type="application/xhtml+xml"/> <item id="Part00.xhtml" href="Text/Part00.xhtml" media-type="application/xhtml+xml"/> <item id="Part01.xhtml" href="Text/Part01.xhtml" media-type="application/xhtml+xml"/> <item id="Part02.xhtml" href="Text/Part02.xhtml" media-type="application/xhtml+xml"/> <item id="appendix.xhtml" href="Text/appendix.xhtml" media-type="application/xhtml+xml"/> <item id="main.css" href="Styles/main.css" media-type="text/css"/> <item id="Title.xhtml" href="Text/Title.xhtml" media-type="application/xhtml+xml"/> <item id="Intro1.xhtml" href="Text/Intro1.xhtml" media-type="application/xhtml+xml"/> <item id="Author.html" href="Text/Author.html" media-type="application/xhtml+xml"/> <item id="Preface01.xhtml" href="Text/Preface01.xhtml" media-type="application/xhtml+xml"/> <item id="cover.xhtml" href="Text/cover.xhtml" media-type="application/xhtml+xml"/> <item id="part01.jpg" href="Images/part01.jpg" media-type="image/jpeg"/> <item id="Part06_17.xhtml" href="Text/Part06_17.xhtml" media-type="application/xhtml+xml"/> <item id="chapter.png" href="Images/chapter.png" media-type="image/png"/> <item id="logo.png" href="Images/logo.png" media-type="image/png"/> <item id="cover.jpg" href="Images/cover.jpg" media-type="image/jpeg"/> <item id="cover_slim.jpg" href="Images/cover~slim.jpg" media-type="image/jpeg"/> <item id="Monarch.ttf" href="Fonts/Monarch.ttf" media-type="application/x-font-ttf"/> <item id="backcover.xhtml" href="Text/backcover.xhtml" media-type="application/xhtml+xml"/> <item id="backcover.jpg" href="Images/backcover.jpg" media-type="image/jpeg"/> <item id="backcover_slim.jpg" href="Images/backcover~slim.jpg" media-type="image/jpeg"/> <item id="Info.xhtml" href="Text/Info.xhtml" media-type="application/xhtml+xml"/> </manifest>
第三部分为 <spine toc="ncx">
提供图书线性阅读的次序,由子元素 itemref 组成
<itemref idref="cover.xhtml">
其中 idref 为 manifest 中列出的 id
<spine toc="ncx">
<itemref idref="cover" />
<itemref idref="copyright" />
</spine>
第四部分为 <guide>
,列出了电子书的特定页面,比如封面,目录,序言等等,属性值指向文件地址。该部分可选。
<guide> <reference type="cover" title="封面" href="Text/cover.xhtml"/> </guide>
第五部分, <tour>
导读,根据读者的不同水平,按照一定次序选择电子书部分页面组成导读,可选。
NCX 文件
ncx 文件也是 epub 中非常重要的文件,该文件用于电子书的目录,文件命名通常为 toc.ncx
,ncx 文件也是一个 xml 文件。ncx 全称为 Navigation Center eXtended。
ncx 文件中最主要的节点是 navMap,navMap 节点又由很多 navPoint 节点组成,navPoint 节点由 navLabel 和 content 节点组成。
<navMap>
<navPoint id="navPoint-1" playOrder="1">
<navLabel>
<text>圣殿春秋</text>
</navLabel>
<content src="Text/cover.xhtml"/>
<navPoint id="navPoint-2" playOrder="2">
<navLabel>
<text>作品简介</text>
</navLabel>
<content src="Text/Intro1.xhtml"/>
</navPoint>
...
<navPoint id="navPoint-7" playOrder="7">
<navLabel>
<text>前言</text>
</navLabel>
<content src="Text/Preface03.xhtml"/>
</navPoint>
</navPoint>
</navMap>
- navPoint 节点中,playOrder 属性定义当前项在目录中的次序,text 子节点则定义了目录的名字
- content 子节点 src 属性定义了章节文件的具体位置
navPoint 节点可以嵌套,形成了整本书的层级结构。
opf 文件定义了读者在顺序阅读时用到的章节和顺序,而 ncx 文件则定义了目录中用到的章节和顺序。如果存在附录形式的内容,希望在目录中出现,而不希望在正文中出现时,而已通过设置两个不同来达到目的。
在了解了这些标准内容之后,解析 epub 格式就比较简单了,python 可以使用 ebooklib 这个库。他的使用相对比较简单,也就一个 epub 类,具体使用可以参考 GitHub,不过需要注意的是很多 epub 格式的书并没有完全按照标准生成,所以有些地方还得自己 hack。
reference
以上所述就是小编给大家介绍的《epub 格式解析》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- Android逆向笔记 —— DEX 文件格式解析
- 使用Go语言解析动态JSON格式的方法
- 使用pymongo解析文本格式日志后放入mongo
- 使用并解析 OPML 格式的订阅列表来转移自己的 RSS 订阅(解析篇)
- 顶象App加固技术解析:DEX文件格式的详解
- AS3解析FLV格式和视频相关问题总结
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
The Seasoned Schemer
Daniel P. Friedman、Matthias Felleisen / The MIT Press / 1995-12-21 / USD 38.00
drawings by Duane Bibbyforeword and afterword by Guy L. Steele Jr.The notion that "thinking about computing is one of the most exciting things the human mind can do" sets both The Little Schemer (form......一起来看看 《The Seasoned Schemer》 这本书的介绍吧!