epub电子书--目录结构介绍
epub电子书简介
epub全称为Electronic Publication的缩写,意为:电子出版, epub于2007年9月成为国际数位出版论坛(IDPF)的正式标准,以取代旧的开放Open eBook电子书标准,epub这种格式kindel目前不支持, 必须用相应的软件打开,比如PC端用calibre,(calibre可是kindle的好伙伴, 可以用来整理或者同步kindle的书架), 如下图:
或者用 Adobe Digital Edition(这个软件很小,解析纯文本的epub就好, js和css没有良好的支持)。
或者安装firefox浏览器的插件EPUBReader, 如下图:
chrome浏览器的插件Readium也可以用来打开epub文件(但是要翻墙到google的应用中心去下载, 听新闻说谷歌2016年要回归了);
等各种方式打开...
修改epub文件的作者书名等相关信息
epub文件用压缩软件打开以后直接可以看到源代码, 所以这种格式的电子书开放性非常好, 我们可以更改它的源代码, 比如你下载了了一本为“Rabbit, Run”epub书, 原来这本书的介绍是这样的,
通过更改epub的配置文件opf,我改了作者和书名, 再重新打包成epub文件, 变成这样了, 感觉自己萌萌哒是不是:
epub电子书的内部结构
epub格式电子书遵循IDPF推出的OCF规范,OCF规范遵循ZIP压缩技术,即epub电子书本身就是一个ZIP文件,我们将epub格式电子书的后缀.epub修改为.zip后,可以通过解压缩软件(例如winrar、winzip)进行浏览或解压处理。一个未经加密处理的epub电子书以三个部分组成,其文件结构如下图所示:
1、文件:mimetype
每一本epub电子书均包含一个名为mimetype的文件,且内容不变,用以说明epub的文件格式。文件内容如下:
application/epub+zip
(注释,表示可以用epub工具和ZIP工具打开)
2、目录:META-INF
依据OCF规范,META-INF用于存放容器信息,默认情况下(即加密处理),该目录包含一个文件,即container.xml,文件内容如下:
<?xml version="1.0"?>
<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
<rootfiles>
<rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
</rootfiles>
</container>
container.xml的主要功能用于告诉阅读器,电子书的根文件(rootfile)的路径和打开放式,一般来讲,该container.xml文件也不需要作任何修改,除非你改变了根文件的路径和文件名称。
除container.xml文件之外,OCF还规定了以下几个文件:
(1)[manifest.xml],文件列表
(2)[metadata.xml],元数据
(3)[signatures.xml],数字签名
(4)[encryption.xml],加密
(5)[rights.xml],权限管理对于epub电子书而言,这些文件都是可选的。
3、目录:OEBPS
OEBPS目录用于存放OPS文档、OPF文档、CSS文档、NCX文档, OEBPS这个名字是可变的,可以根据containter.xml进行配置。
OPF文档是epub电子书的核心文件,且是一个标准的XML文件,依据OPF规范,主要由五个部分组成:
实例XML代码:
<?xml version="1.0" encoding="UTF-8" ?>
<package version="2.0" unique-identifier="PrimaryID" 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:title>
nono书名
</dc:title>
<dc:identifier opf:scheme="ISBN">
</dc:identifier>
<dc:language>
zh-CN
</dc:language>
<dc:creator>
nono
</dc:creator>
<dc:publisher>
epub掌上书苑
</dc:publisher>
<dc:description>
</dc:description>
<dc:coverage>
</dc:coverage>
<dc:source>
http://www.cnepub.com
</dc:source>
<dc:date>
--
</dc:date>
<dc:rights>
本电子书由epubBuilder制作生成,欢迎访问http://www.cnepub.com分享交流海量电子书。 epubBuilder仅供交流使用,未经授权,不得用于商业用途。
</dc:rights>
<dc:subject>
专业书籍
</dc:subject>
<dc:contributor>
</dc:contributor>
<dc:type>
[type]
</dc:type>
<dc:format>
</dc:format>
<dc:relation>
</dc:relation>
<dc:builder>
epubBuilder
</dc:builder>
<dc:builder_version>
3.1.08.28
</dc:builder_version>
<meta name="cover" content="cover-image" />
</metadata>
<manifest>
<!-- Content Documents -->
<item id="main-css" href="css/main.css" media-type="text/css" />
<item id="coverpage" href="coverpage.html" media-type="application/xhtml+xml"/>
<item id="chapter1" href="chapter1.html" media-type="application/xhtml+xml"/>
<item id="ncx" href="fb.ncx" media-type="application/x-dtbncx+xml" />
<item id="css" href="css/main.css" media-type="text/css" />
<item id="cover-image" href="images/cover.jpg" media-type="image/jpeg"/>
</manifest>
<spine toc="ncx">
<itemref idref="coverpage" linear="yes" />
<itemref idref="chapter1" linear="yes" />
</spine>
<guide>
<reference type="cover" title="封面" href="coverpage.html" />
</guide>
</package>
1、<metadata>,元数据信息的组成有两种 (1)dc-metadata和 (2)x-metadata:
<dc-metadata>,其元素构成采用dubline core(DC)的15项核心元素,包括: <title>:题名
<creator>:责任者
<subject>:主题词或关键词
<description>:内容描述
<contributor>:贡献者或其它次要责任者
<date>:日期
<type>:类型
<format>:格式
<identifier>:标识符
<source>:来源
<language>:语种
<relation>:相关信息
<coverage>:履盖范围
<rights>:权限描述
<x-metadata>,即扩展元素。如果有些信息在上述元素中无法描述,则在此元素中进行扩展。
2、<menifest>,文件列表,由于列出OEBPS文档及相关的文档,有一个子元素构成,
<item id="" href="" media-type="">,该元素由三个属性构成:
id:表示文件的ID号
href:文件的相对路径
media-type:文件的媒体类型
例如:
<manifest>
<item id="main-css" href="css/main.css" media-type="text/css" />
<item id="coverpage" href="coverpage.html" media-type="application/xhtml+xml"/>
<item id="chapter1" href="chapter1.html" media-type="application/xhtml+xml"/>
<item id="ncx" href="fb.ncx" media-type="application/x-dtbncx+xml" />
<item id="css" href="css/main.css" media-type="text/css" />
<item id="cover-image" href="images/cover.jpg" media-type="image/jpeg"/>
</manifest>
3、<spine toc="ncx">,脊骨,其主要功能是提供书籍的线性阅读次序。由一个子元素构成:
<itemref idref="">,由一个属性构成:idref:即参照menifest列出的ID
实例代码:
<spine toc="ncx">
<itemref idref="coverpage" linear="yes"/>
<itemref idref="chapter1" linear="yes"/>
</spine>
4、<guide>,指南,依次列出电子书的特定页面, 例如封面、目录、序言等, 属性值指向文件保存地址。一般情况下,epub电子书可以不用该元素。
实例代码:
<guide>
<reference type="cover" title="封面" href="coverpage.html"/>
</guide>
5、<tour>,导读。可以根据不同的读者水平或者阅读目的, 按一定次序, 选择电子书中的部分页面组成导读。一般情况下,epub电子书可以不用该元素。
ncx文件是epub电子书的又一个核心文件,用于制作电子书的目录,其文件的命名通常为toc.ncx。
ncx文件是一个XML文件,该标准由DAISY Consortium发布(参见http://www.daisy.org)。
<?xml version='1.0' encoding='utf-8' ?>
<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1"> <head>
<meta content="coay_307750" name="dtb:uid" />
<meta content="" name="dtb:depth" />
<meta content="COAY.COM [http://www.coay.com]" name="dtb:generator" />
<meta content="" name="dtb:totalPageCount" />
<meta content="" name="dtb:maxPageNumber" />
</head>
<docTitle>
<text>
《再穷也要去旅行》
</text>
</docTitle>
<docAuthor>
<text>
黄爱琳
</text>
</docAuthor>
<navMap>
<navPoint class="chapter" id="article_307750_1" playOrder="">
<navLabel>
<text>
Chapter_1
</text>
</navLabel>
<content src="article_307750_1.html" />
</navPoint>
<navPoint class="chapter" id="article_307750_2" playOrder="">
<navLabel>
<text>
Chapter_2
</text>
</navLabel>
<content src="article_307750_2.html" />
</navPoint>
<navPoint class="chapter" id="article_307750_3" playOrder="">
<navLabel>
<text>
Chapter_3
</text>
</navLabel>
<content src="article_307750_3.html" />
</navPoint>
<navPoint class="chapter" id="article_307750_4" playOrder="">
<navLabel>
<text>
Chapter_4
</text>
</navLabel>
<content src="article_307750_4.html" />
</navPoint>
<navPoint class="chapter" id="article_307750_5" playOrder="">
<navLabel>
<text>
Chapter_5
</text>
</navLabel>
<content src="article_307750_5.html" />
</navPoint>
</navMap>
</ncx>
NCX 和 OPF spine 有什么不同?
两者很容易混淆,两者的区别:
opf文件用来描述电子书章节的顺序, 比如:第一章后是第二章,第二章后是第三章.... ncx文件用来描述电子书的目录结构, 就是纸质书的目录;
一条法则是 ncx包含的 navPoint 元素通常比 OPF spine 中的 itemref 元素多。实际上,spine 中的所有项都会出现在 ncx中,但 ncx可能更详细。
epub文档结构描述的有关博客和知识:
DC(Dublin Core)数字图书馆中使用的一组简单的包括15个“核心元素”的元数据元素集合
OCF( Open Container Format )规范
OPF(Open Packaging Format)开放包装格式( 开放包装格式(OPF)2.0 v1.0 )
后记:
打包epub书籍时候一定要把文件夹打包成zip格式, 然后把文件后缀zip改为epub就可以打开( zip格式和rar格式并不是一样的,虽然他们都是压缩格式);
感想:
今天去上了韩国popper -- hozin大师的课, 技术上没有什么长进, 但是也知道hozin为poppin付出了那么多, 8岁开始学舞,12岁开始学习poppin, 到现在已经跳了18年了, 他研究乐器, 他研究如何用身体表达各种音乐, 一个鼓点在他脑袋里面有5,6种表达方式, 他也说韩国赚钱不好赚, 中国比较好赚钱,有学生问他中国和韩国poppin的区别, 他期间也说道:韩国popper很认真, 经常白天上课或者白天上班, 晚上有人跳舞, 跳到4,5点, 他以前一天都是练习12小时的,现在少了, 他很谦虚, 很认真, 我想人和人的区别就在这儿: 多坚持一点。
很多牛逼的人又那么低调 one day -- -- matisyahu。
作者: NONO
出处:http://www.cnblogs.com/diligenceday/
QQ:287101329
epub电子书--目录结构介绍的更多相关文章
- Magento学习第一课——目录结构介绍
Magento学习第一课--目录结构介绍 一.Magento为何强大 Magento是在Zend框架基础上建立起来的,这点保证了代码的安全性及稳定性.选择Zend的原因有很多,但是最基本的是因为zen ...
- vue学习笔记(三)——目录结构介绍
1.初始目录结构如下: 2.目录结构介绍 目录/文件 说明 build 最终发布的代码存放位置. config 配置目录,包括端口号等.我们初学可以使用默认的. node_modules npm 加载 ...
- Vue 入门之目录结构介绍
Vue 是一套用于构建用户界面的渐进式框架,与其它大型的页面框架不同的是,Vue 被设计为可以自底向上逐层应用.Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合.另一方面,当 ...
- create-react-app脚手架的安装和目录结构介绍
1.对脚手架的初步了解 编程领域中的“脚手架”指的是能够快速搭建项目“骨架”的一类工具,例如大多数的React项目都有src,public,webpack配置文件等等,而src目录中又包含compon ...
- (3.1)mysql基础深入——mysql二进制与源码目录结构介绍
(3.1)mysql基础深入——mysql二进制与源码目录结构介绍 关键字:二进制目录结构,源码目录结构(编译安装目录结构) 1.二进制安装程序目录结构 [1] BIN -- mysql的可执行文件( ...
- vue 目录结构介绍
1 初始目录如下: 2 目录结构介绍 bulid:最终帆布的代码存放位置 config:配置目录,包括端口号等 node_modules:npm加载的项目依赖模块 src:z这里是我们要开发的目录,基 ...
- Flutter 目录结构介绍、入口、自定义 Widget、MaterialApp 组件、Scaffold 组件
Flutter 目录结构介绍 文件夹 作用 android android 平台相关代码 ios ios 平台相关代码 lib flutter 相关代码,我们主要编写的代 码就在这个文件夹 test ...
- hadoop的目录结构介绍
hadoop的目录结构介绍 解压缩hadoop 利用tar –zxvf把hadoop的jar包放到指定的目录下. tar -zxvf /home/software/aa.tar.gz -C /home ...
- Django 创建 APP和目录结构介绍
一.通过pip安装Django 以windows 系统中使用pip命令安装为例 win+r,调出cmd,运行命令:pip install django自动安装PyPi 提供的最新版本.指定版本,可使用 ...
随机推荐
- nginx 访问目录403
centos7.2默认安装好nginx后,会在/usr/share/nginx/html下作为主目录 但是如果想访问下面的目录会发现没有权限,返回403错误 这时候要注意在/etc/nginx/ngi ...
- Linq专题之提高编码效率—— 第二篇 神一样的匿名类型
说起匿名类型,我们都知道这玩意都是为linq而生,而且匿名类型给我们带来的便利性大家在实战中应该都体会到了,特别适合于一次性使用,临时 使用这些场景,虽然说是匿名类型,也就是说是有类型的,只是匿名了而 ...
- db2start启动失败
db2start启动失败 [db2inst1@localhost ~]$ db2start db2start: error while loading shared libraries: libaio ...
- 问题解决——MFC error RC2170: bitmap file res\XXXXXXX.png is not in 3.00 format
=================================版权声明================================= 版权声明:原创文章 谢绝转载 请通过右侧公告中的“联系邮 ...
- 【转】理解Java Integer的缓存策略
本文将介绍 Java 中 Integer 缓存的相关知识.这是 Java 5 中引入的一个有助于节省内存.提高性能的特性.首先看一个使用 Integer 的示例代码,展示了 Integer 的缓存行为 ...
- js 输出二维数组的最大值
function num(arr){ max=a[0][0]; for (var i = 0; i < a.length; i++) { for (var j = 0; j< a[i].l ...
- Google的Java常用类库 Guava资料
java的人应该都知道Apache commons的java常用类库吧,这个Guava和commons一样,封装出一套比jdk本身提供的常用类库强大.既然有了这个这么强大的类库,我们就没必要重复造轮子 ...
- linux中tar之解压和压缩常用
我们知道在windows中解压和压缩有两个非常强大的工具winRar和国产的好压工具,在linux中也有一款强大的解压和压缩工具.那就是大名鼎鼎的tar.我们首先看看tar命令的使用格式 语法:tar ...
- java list排序
1.简介 这个和数组的排序又不一样了. 其实Java针对数组和List的排序都有实现,对数组而言,你可以直接使用Arrays.sort,对于List和Vector而言,你可以使用Collections ...
- ELF Format 笔记(十三)—— 段权限
ilocker:关注 Android 安全(新手) QQ: 2597294287 一个可被系统加载的程序至少拥有一个可加载段.当系统创建可加载段的内存映像时,会根据 p_flags 赋予一定的访问权限 ...