Epub基礎知識介紹

jeekun發表於2013-09-07

轉載自:http://www.cnblogs.com/linlf03/archive/2011/12/13/2286218.html

 

一、什麼是epub

epub是一個完全開放和免費的電子書標準。它可以“自動重新編排”的內容。

Epub檔案字尾名:.epub

 

二、 epub組成

Epub內部使用XHTML(或者DTBook)來展現檔案的內容;用一系列css來定義格式和版面設計; 然後把所有的檔案壓縮成zip包。

Epub格式中包含了DRM相關功能(目前epub引擎暫時不考慮drm相關資訊)

 

EPub包括三項主要規格:  

開放出版結構(Open Publication Structure,OPS)2.0,以定義內容的版面;  

開放包裹格式(Open Packaging Format,OPF)2.0,定義以XML為基礎的.epub檔案結構;   OEBPS容納格式(OEBPS Container Format,OCF)1.0,將所有相關檔案收集至ZIP壓縮檔案之中。

1. OPS

用XHTML(或者DTBook)來構築書的內容。

用一系列css來定義書的格式和版面設計。

支援 png、jpeg、gif、svg的圖片格式。

2. OPF

OPF 檔案是 EPUB 規範中最複雜的後設資料。它用來定義ops一系列內容組合到一起的機制,併為ebook提供了一些額外的結構和內容。Opf包含四個子元素:metadata, manifest, spine, guide。在OEBPS中的opf包含兩個XML: .opf和.ncx

 

(一).opf

OPF包括以下內容:

1)metadata:epub的後設資料,如title、language、identifier、cover等。其中,title 和 identifier這兩個資料是必須的。

按照EPUB規範,identifier由數字圖書的建立者定義,必須唯一。對於圖書出版商來說,這個欄位一般包括ISBN或者Library of Congress編號;也可以使用URL或者隨機生成的唯一使用者ID。注意:unique-identifier 的值必須和 dc:identifier 元素的 ID 屬性匹配。

2)manifest:列出了package中所包含的所有檔案(xhtml、css、png、ncx等)。EPUB 鼓勵使用 CSS 設定圖書內容的樣式,因此 manifest 中也包含 CSS。注意:進入數字圖書的所有檔案都必須在 manifest 中列出。

3)spine:所有xhtml文件的線性閱讀順序。其中,spine的TOC屬性必須包含在manifest列出來的.ncx的id。可以將 OPF spine 理解為是書中 “頁面” 的順序,解析的時候按照文件順序從上到下依次讀取 spine。

在spine中的每個 itemref 元素都需要有一個 idref 屬性,這個屬性和 manifest 中的某個 ID 匹配。

spine 中的 linear 屬性表明該項是作為線性閱讀順序中的一項,還是和先後次序無關。有些閱讀器可以將spine中linear=no的項作為輔助選項處理,有些閱讀器則選擇忽略這個屬性。例如在下邊的例項中,支援輔助選項處理的閱讀器會依次列出titlepage、chapter01、chapter05,chapter02、chapter03、chapter04只在點選到(或者其他開啟動作)之後才會顯示。

但是對於支援列印的閱讀器,需要忽略linear=no的屬性,保證能夠最完全的展示ops中的內容。

好的閱讀器需要同時提供兩種選擇給使用者。

(二).ncx

NCX 定義了數字圖書的目錄表。複雜的圖書中,目錄表通常採用層次結構,包括巢狀的內容、章和節。包含了TOC(tablet of content,提供了分段的一些資訊)。

NCX的 <head> 標記中包含四個 meta 元素:

  • uid:      數字圖書的惟一 ID。該元素應該和 OPF 檔案中的 dc:identifier 對應。
  • depth:反映目錄表中層次的深度。
  • totalPageCount 和 maxPageNumber僅用於紙質圖書,保留 0 即可。

docTitle/text 的內容是圖書的標題,和 OPF 中的 dc:title 匹配。

navMap 是 NCX 檔案中最重要的部分,定義了圖書的目錄。navMap 包含一個或多個 navPoint 元素,每個 navPoint 都要包含下列元素:

  • playOrder:說明文件的閱讀順序。和 OPF spine 中 itemref 元素的順序相同。
  • navLabel/text :給出該章節的標題。通常是章的標題或者數字。
  • content :它的 src 屬性指向包含這些內容的物理資源。就是 OPF manifest 中宣告的檔案。
  • 還可以有一個或多個 navPoint 元素。NCX 使用巢狀的導航點表示層次結構的文件

(三)NCX 和 OPF spine 有什麼不同?

兩者很容易混淆,因為兩個檔案都描述了文件的順序和內容。要說明兩者的區別,最簡單的辦法就是拿印刷書來打比方:OPF spine 描述了書中的各個章節是如何實際連線起來的,比方說翻過第一章的最後一頁就看到第二章的第一頁。NCX 在圖書的一開始描述了目錄,目錄肯定會包含書中主要的章節,但是還可能包含沒有單獨分頁的小節。

一條法則是 NCX 包含的 navPoint 元素通常比 OPF spine 中的 itemref 元素多。實際上,spine 中的所有項都會出現在 NCX 中,但 NCX 可能更詳細。

3. OCF

OCF定義了檔案是如何被打包成ZIP的,並且有兩個額外的資訊:

1)ASCII格式的mimetype檔案。該檔案必須包含application/epub+zip字串,並且是ZIP壓縮包的第一個檔案。Mimetype要求是非壓縮格式。

2)一個命名為META-INF的資料夾。這個資料夾中需要包含container.xml檔案

4. Drm——需要在META-INF資料夾中包含rights.xml

 

 

總結起來,一個epub電子書的zip包含以下東西:

1、mimetype 檔案,必須是壓縮包的第一個檔案。注意,Mimetype必須是非壓縮格式。

2、meta-inf目錄,裡面至少包含一個container.xml 檔案。

3、OEBPS目錄(可以是別的名字,但建議用這個名字),包含了:

a) image子目錄(不一定總有)存放了所有的圖片檔案

b) content.opf 檔名可以是其它的,副檔名一定是opf,就是一個xml格式的包內的檔案列表

c)  toc.ncx 目錄檔案,一個“邏輯目錄”, 瀏覽控制檔案.

d) 一些xhtml或html檔案。就是書的內容。

簡單 EPUB 檔案的目錄和檔案結構:

mimetype
META-INF/
   container.xml
OEBPS/
  content.opf
  title.html
  content.html
  stylesheet.css
  toc.ncx
  images/

     cover.png

 

三、Epub電子圖書獲取網站

Feedbooks: http://www.feedbooks.com/books/top?range=month

掌上書苑:  http://www.cnepub.com/index

COAY: http://www.coay.com

博酷網: http://www.pockoo.com/books/?format=EPUB&orderby=lastedit

新浪ipad數碼資源 http://myphoto.tech.sina.com.cn/forumdisplay.php?fid=398

EpubBooks: http://www.epubbooks.com/books

相關文章